Standard-Kompos um eigene Eigenschaften erweitern?

Rund um die LCL und andere Komponenten
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: Standard-Kompos um eigene Eigenschaften erweitern?

Beitrag von mse »

"Class helper" sind nicht das gleiche wie "type helper".

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

New_props_for_all_Components

Beitrag von Frank Ranis »

Hi Ho ,

ich habe diesen etwas älteren Beitrag noch mal rausgekramt , weil das Thema ja nicht wirklich gelöst wurde.

Ich hatte mal wieder den Betraf , alle in einem Projekt vorhandenen Komponenten mit neuen Eigenschaften zu erweitern.
Wichtig ist:
1) Kein Eingriff in das Lazarus selber .
2) Keine Vererbung von bereits benutzen Bildschirm-Komponenten und dem ganze Wust der sich daraus ergibt.

Nach einigem Grübeln habe ich mir nun eine Klasse (tnewprop) mit den neu gewünschten Eigenschaften gebaut .
Diese Klasse wird dann für jede Bildschirm-Komponente als Owner erzeugt , also an die Komponentenliste dieser Bildschirm-Komponente angefügt ,damit braucht man sich auch nicht um das Vernichten kümmern.
Dazu habe ich in der project1.lpr den Aufruf patch_all_components; eingebaut.
Patch_all_components juckelt alle Komponenten in allen Forms durch und fügt tnewprop an .
Das Erzeugen von newprop wird mit Hilfe der procedure create_newprop_for(AOwner:tcomponent) erledigt.
Diese prüft vorher , ob bereits ein newprop vorhanden ist , sonst ballert es.

Das setzen und abfragen der neuen Eigenschaften erfolgt dann über die Methoden
procedure set_prop(c:tcomponent;propertyname:string;value:variant);
function get_prop(c:tcomponent;propertyname:string):variant;

Ich habe den Value als Variant genommen , da hiermit das setzten und holen von Werten universell ist .

Desweitern gibt es noch eine procedure set_prop_from_string(s:string);
Damit kann man dann z.B. die Propertys rein mit einer Textzeile umschreiben .
Beispiele sind in der Combobox des Demos vorhanden.

Man muß auch nicht alle Komponenten des Projektes umschreiben , so wie es patch_all_components macht .
Möchte man nur eine bestimmte Komponentnenklasse (z.B. Buttons oder Edits) patchen , muß man es halt passig filtern.

Was schick wäre , wenn jemand noch Propertys für spezielle Ereignissbehandlungen einbaut , das habe ich jetzt noch nicht ausprobiert.

Das ganze ist bestimmt noch ausbaufähig , oder schöner zu lösen.

Bin gespannt , was ihr davon haltet , TOP oder FLOPP.
Würde mich aber auch nicht wundern , wenn es das so in der Art eh schon gibt , ich es nur nicht gefunden habe.

Gruß

Frank
New_Props_for_all_Components.zip
(1.01 MiB) 41-mal heruntergeladen
www.flz-vortex.de

Antworten