Eigenschften von Unterkomponenten speichern.

Rund um die LCL und andere Komponenten
Antworten
Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Eigenschften von Unterkomponenten speichern.

Beitrag von Soner »

Hallo,
ich eine Komponente mit ein TZQuery und TDataSource. Die Änderungen von TZQuery und TDataSource im Formulardesigner werden nicht gespeichert,
ist das normal oder was muss man tun damit es gespeichert wird?
Besonders die TZQuery.Sql-Eigenschaft und Ereignisse sollten gespeichert werden.
Ich habe es so gemacht:

Code: Alles auswählen

 
  TMyDataset = class(TComponent)   
  private
    fQuery: TZQuery;
    fDataSource: TDataSource;
 
  protected
    procedure SetName(const NewName: TComponentName); override; //damit bekommen die Unterkompoonenten auch Namen 
  published
    property DataSource: TDataSource read fDataSource;
    property Query: TZQuery read fQuery write fQuery; //zum Testen habe ich write fQuery hinzugefügt funktioniert auch nicht
    property UpdateSQL: TZUpdateSQL read fUpdateSQL;
  end;
 

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Eigenschften von Unterkomponenten speichern.

Beitrag von Soner »

Und noch etwas. Kann man Unterkomponenten im Formulardesigner nicht benutzen?
Ich möchte irgeneinen TDBNavigator aus dem Formulardesigner DataSource von TMyDataSet zuweisen, so etwa:

Code: Alles auswählen

 
 DBNavigator1.DataSource:=MyDataSet.DataSource;
 

aber das geht mit Objektinspektor nicht. Geht das generell nicht oder muss man da etwas beachten?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Eigenschften von Unterkomponenten speichern.

Beitrag von mse »

Sollen die eingebetteten Komponenten wie TPersistent verwendet werden? Dann muss setsubcomponent(true) der eingebetteten Komponenten aufgerufen werden. Falls es normale Komponenten sein sollen müssen

Code: Alles auswählen

 
    procedure GetChildren(Proc: TGetChildProc; Root: tcomponent); dynamic;
    function GetChildOwner: tcomponent; dynamic;
    function GetChildParent: tcomponent; dynamic;
 
    function HasParent: Boolean; dynamic;
 

überschrieben werden. IIRC ist auch der Owner der Subkomponenten wichtig. Die Details sind mir im Moment leider nicht mehr präsent, ich bin froh, dass es läuft. :-)

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Eigenschften von Unterkomponenten speichern.

Beitrag von Soner »

Danke, ich habe es notiert und werde bei der Nächsten nutzen, diese aktuelle Komponente habe ich umgebaut. Ich habe festgestellt, dass ich DataSource nicht brauche und deshalb entfernt. Hauptkomponente stammt jetzt von TZQuery ab und TZUpdateSQL habe ich zum Public-Abschnitt verschoben weil es außerhalb nicht verwendet wird.
Als ich TZUpdateSQL zum Public-Abschnitt verschoben habe trat merkwürdiger Effekt bei Lazarus auf. Jedesmal wenn ich den Namen von Elternkomponente in Objektinspektor geändert habe, hat Lazarus TZUpdateSQL-Objekt in die Formular-Klasse aufgenommen, als ob es neue Kompente ist. Dann habe ich es wieder Published gemacht, nun ist alles gut.

Antworten