Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   QuantumGrid abgeleitete Views (https://www.delphipraxis.net/169276-quantumgrid-abgeleitete-views.html)

Gremlin 9. Jul 2012 09:01

QuantumGrid abgeleitete Views
 
Hallo,


ich habe hier einen abgeleiteten QuantumGrid 2011 Vol2.x mit eigenen abgeleiteten TableViews. Soweit ist alles im grünen Bereich, jedoch werden zur Designtime die Properties - die im Constructor der View gesetzt werden, zb. "OptionsView.GridLineColor := clGreen" - leider nicht gesetzt, dh. die View behält ihre alten Werte. Wird diese View zur Laufzeit erstellt, so werden diese Werte aus dem Constructor berücksichtigt, der zur DesignTime erstellte View ignoriert diese Werte :(

Die Ableitungen sind wirklich nicht der Rede wert, siehe Programmcode

Code:
constructor TMyView.Create(AOwner: TComponent);
begin
  inherited;
  OptionsView.GridLineColor := clGreen;
  OptionsView.HeaderHeight := 80;
end;

destructor TMyView.Destroy;
begin
  inherited;
end;

initialization
  RegisterClasses([TMyView]);
  cxGridRegisteredViews.Register(TMyView, 'DB Table MyView');

Leider verstehe ich den Grund nicht für dieses Verhalten nicht. Setzt ausser mir noch jemand diesen Grid ein?

Vielen Dank und

himitsu 9. Jul 2012 09:05

AW: QuantumGrid abgeleitete Views
 
Wie sieht es mit den Default-Werten dieser Property aus?
Dieses solltest du unbedingt an deine Werte anpassen.

Wurde der View erst normal erstell und dann durch deine Ableitung ersetzt? (Klasse in PAS/DFM umbenannt)
Eventuell/Vermutlich/Bestimmt gibt es nun in der DFM schon Werte für diese Property, welche natürlich deine Vorgaben "ordnungsgemäß" überschreiben. :stupid:

Gremlin 9. Jul 2012 09:25

AW: QuantumGrid abgeleitete Views
 
Diese werden doch im constructor gesetzt und mit meinen beiden Werten überschrieben (Farbe und Höhe des Headers). Der Grid hat die Möglichkeit, für den Level eine View zur Design-Time erstellen zu lassen (rechte Maustaste auf Level, "Create view" und in der Liste den eigenen View auswählen. Theoretisch müsste dieser View jetzt die beiden Optionen gesetzt haben, leider ist das nicht der Fall.

Vielleicht liegt es auch an der "alten" Delphi-Version? Der View wird nur über die eigenen Möglichkeiten des Grids erstellt.


Wie gesagt, wird alles (Grid, Level und View) zur Runtime erstellt, so sieht es richtig aus, nur werden meine Forms immer in der IDE erstellt.

[Runtime Erstellung]
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyGrid : TMyGrid;
  MyLevel : TcxGridLevel;
  MyView : TMyView;
begin
  MyGrid := TMyGrid.Create(self);
  MyGrid.Parent := self;
  MyGrid.SetBounds(24, 24, 500, 200);
  MyView := MyGrid.CreateView(TMyView) as TMyView;
  MyView.DataController.DataSource := DataSource1;
  MyView.DataController.CreateAllItems;

  MyLevel := MyGrid.Levels.Add;
  MyLevel.GridView := MyView;

  Table1.Open;
end;

himitsu 9. Jul 2012 09:42

AW: QuantumGrid abgeleitete Views
 
Zeig doch einfach mal die DFM.

Gremlin 9. Jul 2012 10:01

AW: QuantumGrid abgeleitete Views
 
Hier ist die PAS

Code:
type
  TForm2 = class(TForm)
    MyView: TMyView;
    MyGridLevel1: TcxGridLevel;
    MyGrid: TMyGrid;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.

und hier ist die DFM

Code:
object Form2: TForm2
  Left = 596
  Top = 278
  Width = 807
  Height = 529
  Caption = 'Form2'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object MyGrid: TMyGrid
    Left = 192
    Top = 56
    Width = 250
    Height = 200
    TabOrder = 0
    object MyView: TMyView
      Navigator.Buttons.First.Visible = True
      Navigator.Buttons.PriorPage.Visible = True
      Navigator.Buttons.Prior.Visible = True
      Navigator.Buttons.Next.Visible = True
      Navigator.Buttons.NextPage.Visible = True
      Navigator.Buttons.Last.Visible = True
      Navigator.Buttons.Insert.Visible = True
      Navigator.Buttons.Append.Visible = False
      Navigator.Buttons.Delete.Visible = True
      Navigator.Buttons.Edit.Visible = True
      Navigator.Buttons.Post.Visible = True
      Navigator.Buttons.Cancel.Visible = True
      Navigator.Buttons.Refresh.Visible = True
      Navigator.Buttons.SaveBookmark.Visible = True
      Navigator.Buttons.GotoBookmark.Visible = True
      Navigator.Buttons.Filter.Visible = True
      DataController.Summary.DefaultGroupSummaryItems = <>
      DataController.Summary.FooterSummaryItems = <>
      DataController.Summary.SummaryGroups = <>
      OptionsBehavior.FocusCellOnTab = True
      OptionsBehavior.FocusFirstCellOnNewRecord = True
      OptionsBehavior.ImmediateEditor = False
      OptionsView.GridLineColor = clSilver
      OptionsView.HeaderHeight = 40
      OptionsView.Indicator = True
      OptionsView.IndicatorWidth = 14
    end
    object MyGridLevel1: TcxGridLevel
      GridView = MyView
    end
  end
end

himitsu 9. Jul 2012 10:23

AW: QuantumGrid abgeleitete Views
 
Zitat:

Delphi-Quellcode:
OptionsView.GridLineColor = clSilver
OptionsView.HeaderHeight = 40

Wie gesagt...

Im Create gibst du nur die Grundeinstellung vor
und nach dem Create werden aus der DFM die aktuellen/geänderten Werte.

Lösung:
- manuell diese Werte aus der DFM löschen
- im OI die Werte manuell anpassen




Zuzätzlicher Hinweis:
Der Default-Wert des Property gibt an, was gespeichert werden soll und genau deswegen mußt du das anpassen, da es sonst mit der DFM probleme gibt.

Ein Beispiel, welches ich selbst schon so in unserem Programm erlebt hab.
- in der Originalklasse gibt es ein Color-Property, wo der Standardwert (Initialisierung im Create) und der Default-Wert auf clRed stehen
- in der Ableitung wurde es im Create auf clBlue geändert
- im Form-Designer wurde es wieder aus clRed geändert
- beim Speichern erkennt Delphi daß dieses mit dem Default-wert übereinstimmt und speichert es somit nicht in der DFM (denn dort werden nur Änderungen gespeichert, um die DFM klein zu halten)
- da nun nichts mehr in der DFM steht, wird beim Laden das überschriebene clBlue geladen und dieses nicht mehr von der DFM überschrieben
- ergo, du kannst in der Form clRed einstellen wie du willst, es wird immer wieder auf clBlue geändert, solange der Default-Wert nicht angepasst wurde (alle anderen Farben gehn aber)

Gremlin 9. Jul 2012 10:41

AW: QuantumGrid abgeleitete Views
 
Vielen Dank für deine Hilfe...

Richtig, im Create möchte ich die Einstellungen vorgeben, aber mein Problem ist doch, das ich keinerlei Defaultwerte für meine Ableitung setzen kann.
Natürlich würde dies über das Anpassen der Einstellungen im OI funktionieren, aber gerade diesen Weg möchte ich nicht gehen, da es wie vorgesehen im Constructor geschehen muß - sonst wäre ein zusätzlicher Aufwand gegeben, von den "vergessenen" Properties ganz zu schweigen.

Deshalb war die Frage, ob jemand auch einen QuantumGrid einsetzt und bei dem diese Ableitungen funktionieren, sonst muss ich doch noch über den Sourcecode des Quantums meditieren :(

himitsu 9. Jul 2012 11:07

AW: QuantumGrid abgeleitete Views
 
Zitat:

- manuell diese Werte aus der DFM löschen
fertig

Gremlin 9. Jul 2012 12:39

AW: QuantumGrid abgeleitete Views
 
Zitat:

Zitat von himitsu (Beitrag 1174072)
Zitat:

- manuell diese Werte aus der DFM löschen
fertig

Das ist leider keine Lösung, es sind ja nicht nur zwei Properties die ich setzen muss, bzw. löschen müsste.
Trotzdem Danke.

himitsu 9. Jul 2012 13:25

AW: QuantumGrid abgeleitete Views
 
Das ist aber die einzige "richtige" Lösung, im Umgang mit den zu ladenden Werten aus der DFM.

Du kannst auch das Loaded überschreiben und dort die DFM-Änderungen rückgängig machen (nochmals diese Werte setzen),
aber das solltest du danach auch wieder ausbauen, da man sonst dort nichts mehr über die DFM angeben könnte.
(ich kenn da eine Komponente, da war z.B. mal jemand auf die gloreiche Idee gekommen quasi im OnPaint bestimmte Dinge zurückzusetzen, was sehr unpraktisch war, als wir doch mal etwas Anderes brauchten und uns wunderten warum es nicht geht)




Man könnte sich aber einen "setze Standardwerte"-IDE-Helper schreiben, welchen man einmal aufrufte und der dann alles zurücksetzt, was man will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz