Eigene Komponente und Eigenschaften von Design auf Laufzeit

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Also das ganze ist eigentlich recht leicht:
Du musst nur ein Property Button defnieren z.b. so:

Code: Alles auswählen

published
  property Button:TButton read fButton write fButton
Fertig. Wobei beim Button gibt es einige Fehler meine ich. z.b. kann man da die Hintergrund Farbe nicht setzten oder so. Nim lieber ein BitBtn oder ein SpeedButton.
Das Was schon.
Jetzt musst du fButtons im Create erstellen.

Jetzt müsstest du im OI auf die Eigenschaften des Buttons zugreifen können.

Bei meiner eigenen GUI mache ich das nach dem gleichen Prinzip.
(in etwa *G*)

Oder habe ich dich jetzt falsch verstanden ?
MFG
Michael Springwald

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von alexander »

Christian hat geschrieben:A so, dann kann man den Button ja als property übergeben damit kann man dann schlagartig alle Eigenschaften des Buttons ändern.
Das hatte ich schon ganz oben... und das Problem war ja das die Eigenschaften nicht gespeichert werden von Design zu Laufzeit.. (hmmm bestimmt ds 10. Mal das ich das sage...)
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

schau dir mal eine Komponente im Soruce Code an. Du musst warscheinlich selbst speichern.
es müsste eine procedure geben die du überschreiben musst:
loadett oder so ähnlich. Und eine entsprechende Save Procedure muss es geben.

Weißt du wie ich meine ? Wenn du bei der IDE auf Speichern oder Laden klickst wird ja eine lfm Datei geladen mit allen Einstellungen die eine Komponenten betrifft. Du hast jetzt eine neue Komponente erstellt. woher soll jetzt Lazarus deine neuen Eigenschaften kennen ?

In der Wiki von Lazarus habe ich mal ein Beispiel dazu gefunden. Leider weiß ich nicht mehr wie ich darauf gekommen bin. Aber das dürfte dein Fehler sein !

Die beim Speichern und laden einer Komponente aufgerufen wird.
Wobei was wird nicht gespeichert ? Die Einstellungen im Button ?
Naja evlt. müsste sich dein Panel darum kümmern, aber das kann ich mir nicht vorstellen !
MFG
Michael Springwald

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von alexander »

pluto hat geschrieben:schau dir mal eine Komponente im Soruce Code an. Du musst warscheinlich selbst speichern.
es müsste eine procedure geben die du überschreiben musst:
loadett oder so ähnlich. Und eine entsprechende Save Procedure muss es geben.
Ahh ok. das ist mir neu. Ich schaue mal. Danke!

Gruß Alexander


EDIT:


Jaaa. das könnte es sein!!!

Code: Alles auswählen

procedure Loaded; override;

Code: Alles auswählen

procedure TCustomLabel.Loaded;
begin
  inherited Loaded;
  AdjustSize;
end;
ok, ich probiere es mal analog.


EDIT: Nee das ist es nicht! Leider. Das hat anscheinend nur was mit letzten Einstellungen, nicht aber mit deren Speicherung/Ladung zu tun.

EDIT 4: Es ist jetzt aber auch nicht mehr soo wichtig, ich habe es jetzt einfach unelegeant gemacht, wie ich es vorher beschrieben habe.... Wäre halt nur schön gewesen....
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

alexander hat geschrieben: EDIT 4:
... und wo ist edit 3? ;)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das hatte ich schon ganz oben... und das Problem war ja das die Eigenschaften nicht gespeichert werden von Design zu Laufzeit.. (hmmm bestimmt ds 10. Mal das ich das sage...)
natürlich werden sie nicht das kannst du innerhalb deiner Komponente ja aber einfach erledigen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Was mich wundet ist du nutzt doch einen einfachen Standart Button. Der müsste alle einstellungen Automatisch speichern und wieder herstellen.

Ich selbst habe einige Komponenten erstellt, da werde ich mal schauen ob es beim speichern auch Probleme gibt. Die sind z.b. von TListbox abgeleitet.

Stellen aber neue eigenschaften wie CurrDir zu verfügung. CurrDir wird ja jetzt nicht abgespeichert.
MFG
Michael Springwald

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von alexander »

Christian hat geschrieben:
Das hatte ich schon ganz oben... und das Problem war ja das die Eigenschaften nicht gespeichert werden von Design zu Laufzeit.. (hmmm bestimmt ds 10. Mal das ich das sage...)
natürlich werden sie nicht das kannst du innerhalb deiner Komponente ja aber einfach erledigen.
Und wie?!
pluto hat geschrieben:Was mich wundet ist du nutzt doch einen einfachen Standart Button. Der müsste alle einstellungen Automatisch speichern und wieder herstellen.

Ich selbst habe einige Komponenten erstellt, da werde ich mal schauen ob es beim speichern auch Probleme gibt. Die sind z.b. von TListbox abgeleitet.

Stellen aber neue eigenschaften wie CurrDir zu verfügung. CurrDir wird ja jetzt nicht abgespeichert.
Ich benutze den Button INNERHALB eines Panels.

pluto hat geschrieben:Also das ganze ist eigentlich recht leicht:
Du musst nur ein Property Button defnieren z.b. so:

Code: Alles auswählen

published
  property Button:TButton read fButton write fButton
Ahh jetzt verstehe ich langsam was du meinst... Nicht FButton erstellen innherhalb der Compo, sondern das Lazarus machen lassen.... hmmm ich probiere es aus...
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Soweit ich das jetzt verstanden hab:

Der Nutzer soll das ganze zur Laufzeit selbst festlegen...
Wieso nutzt du dafür nicht RTTI, einfach nen TTiPropertyGrid nehmen und dort die Komponente setzen, schon kann der user alles einstellen, was du auch zur Designtime im OI hast.

Und was das speichern angeht, wieso nicht ein TXML/IniPropStorage von der Karte Misc. In der Form kannst du dann die entsprechenden Eigenschaften festelegen (SessionProperties) und im den Rest kümmert sich das PropStorage.
Johannes

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von alexander »

@ monta: jetzt verstehe ich nichts mehr....

also wenn ich das so mache, und den Button innerhalb meiner Componente nicht creiere, dann sehe ich weder zur Design nicht Laufzeit einen Button.
Lazarus hat dann zwar ein Feld im OI, das ist aber leer und man k ann es mit einem Button verknüpfen...

Code: Alles auswählen

published
  property Button:TButton read fButton write fButton
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Natürlich musst du ihn erstellen.

War wohl ein Missverständnis, weil für mich ist der Endbenutzer derjenige, der sich nicht um den Quelltext kümmert, sondern das Programm fertig bekommt. Aber du meintest wohl andere Programmierer damit, wodurch sich die RTTI-Geschichte natürlich erledigt.
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

evlt. verstehen wir ja auch was falsch. Also du musst aufjedenfall fButton bei Create deiner Komponente installisieren. Dann soltlest du auch auf ihn zugreifen können.

Dort könntest du auch ein Standard Caption vergeben. aber das müsste eigentlich Autmatisch passieren.
MFG
Michael Springwald

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von alexander »

monta hat geschrieben:War wohl ein Missverständnis, weil für mich ist der Endbenutzer derjenige, der sich nicht um den Quelltext kümmert, sondern das Programm fertig bekommt. Aber du meintest wohl andere Programmierer damit, wodurch sich die RTTI-Geschichte natürlich erledigt.
ahhh ok. jetzt verstehe auch ich...
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

Antworten