platzierte visuelle Objekte nachträglich ableiten
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
platzierte visuelle Objekte nachträglich ableiten
Etwas, das ich bei Delphi immer vermisst und nicht gefunden habe. Geht das vielleicht in Lazarus:
Ich platziere eine visuelle Komponente aus der Komponenten Library auf einem Form.
Für diese Komponente möchte ich zusätzliche Funktionalitäten definieren.
Ich möchte also von dieser Klasse eine neue ableiten und die neue statt der ursprünglichen aus der Komponenten Library verwenden, ohne extra die neue Klasse in der Library installieren zu müssen.
Das sollte möglich sein, da die neu definierten Funktionalitäten nicht "published" sind und keinen design-time Code enthalten, der Form-Editor also nicht betroffen ist.
Gibt's da was ?
-Michael
Ich platziere eine visuelle Komponente aus der Komponenten Library auf einem Form.
Für diese Komponente möchte ich zusätzliche Funktionalitäten definieren.
Ich möchte also von dieser Klasse eine neue ableiten und die neue statt der ursprünglichen aus der Komponenten Library verwenden, ohne extra die neue Klasse in der Library installieren zu müssen.
Das sollte möglich sein, da die neu definierten Funktionalitäten nicht "published" sind und keinen design-time Code enthalten, der Form-Editor also nicht betroffen ist.
Gibt's da was ?
-Michael
Re: platzierte visuelle Objekte nachträglich ableiten
Dafür ist ein "Bounty" ausgesetzt
http://wiki.lazarus.freepascal.org/index.php/Bounties" onclick="window.open(this.href);return false;
Siehe: Visual Form Inheritance (VFI) - $400
http://wiki.lazarus.freepascal.org/index.php/Bounties" onclick="window.open(this.href);return false;
Siehe: Visual Form Inheritance (VFI) - $400
-
- 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:
Ne, der designer muss die komponenten kennen mit denen er arbeitet egal ob die propertys für ihn ne rolle spielen oder nicht.
Was es ansatzweise gibt und geben wird ist Visual Form Inherence, da kannst du dir eine Form basteln und andere davon ableiten Visuell.
Was es ansatzweise gibt und geben wird ist Visual Form Inherence, da kannst du dir eine Form basteln und andere davon ableiten Visuell.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Und was ist die IDE ?Christian hat geschrieben:woher soll die ide denn wissen das deine neuen eigenschaften keine alten der komponente verändern das ist schlichtweg unmöglich

Die visuellen Komponenten bringen ihre eigenen Routinen mit, die ablaufen, wenn ein auf einem Form an ihnen gebastelt wird. Die abgeleitete Komponente erbt diese von der
Standard-Komponente. Also "im Prinzip" kein Problem.
Und woher bezieht die IDE ihr "Wissen" über die Eigenschaften einer Komponente ?
Die "visuellen" Eigenschaften der Komponenten werden im "published" Bereich definiert und dann in der lfm-Datei gespeichert. Wie gesagt, soll beim Ableiten der published-Bereicht nicht verändert werden. Die nicht "published"-Eigenschaften der Komponente interessieren die IDE nicht. Also auch hier "im Prinzip" kein Problem.
Das sollte also irgendwie möglich sein.
-Michael
-
- 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:
Nein die komponenten haben keine extra routinen für den designer.
Der designer überschreibt die Narichtenschleife der Komponenten und kann so bestimmern welche narichten an die komponente weitergeleitet werden ausserdem sendet er eigene Narichten zum verschieben oder ähnliches.
Damit er die Schleife überschreiben kann muss die komponente dynamisch oder statisch eingelinkt werden (unter delphi mit packages, unter lazarus (noch) nativ).
Du magst das villeicht so hanedeln das du bestehende Möglichkeiten nicht modifizierst. Aber wenn es das feature wirklich geben würde würde irgendjemand garantiert mal auf die alten eigenschaften der komponente zugreifen oder die Narichtenschleife selbst benutzen wollen und das alles funktioniert dann plötzlich nicht weil lazarus mit einer veralteten version der komponente arbeitet. Das macht mehr ärger als das es nutzen bringt. Fpc 2.2.x wird packaging mitbringen damit können dann komponenten "on-the-fly" eingebunden werden wie bei delphi und wenn ne komponente mal ärger macht stürzt nicht gleich die ganze ide ab sondern nur das package und kann entfernt werden. ich denke es macht mehr sinn auf den fpc 2.2.x zu warten ist ja auch nicht mehr in so weiter ferne.
Nebenbei die 0.9.22 wird in den nächsten tagen freigegeben werden
und da sind schöne neue sachen drin wie z.b. die cursors funktionieren usw 
Der designer überschreibt die Narichtenschleife der Komponenten und kann so bestimmern welche narichten an die komponente weitergeleitet werden ausserdem sendet er eigene Narichten zum verschieben oder ähnliches.
Damit er die Schleife überschreiben kann muss die komponente dynamisch oder statisch eingelinkt werden (unter delphi mit packages, unter lazarus (noch) nativ).
Du magst das villeicht so hanedeln das du bestehende Möglichkeiten nicht modifizierst. Aber wenn es das feature wirklich geben würde würde irgendjemand garantiert mal auf die alten eigenschaften der komponente zugreifen oder die Narichtenschleife selbst benutzen wollen und das alles funktioniert dann plötzlich nicht weil lazarus mit einer veralteten version der komponente arbeitet. Das macht mehr ärger als das es nutzen bringt. Fpc 2.2.x wird packaging mitbringen damit können dann komponenten "on-the-fly" eingebunden werden wie bei delphi und wenn ne komponente mal ärger macht stürzt nicht gleich die ganze ide ab sondern nur das package und kann entfernt werden. ich denke es macht mehr sinn auf den fpc 2.2.x zu warten ist ja auch nicht mehr in so weiter ferne.
Nebenbei die 0.9.22 wird in den nächsten tagen freigegeben werden


W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
(...für zur Designzeit laufenden Code in visuellen Komponenten gibt es extra csdesigning...)
Das ist aber auch nicht das, worauf ich hinaus will.
Die IDE soll ruhig weiter mit der ursprünglichen Komponente arbeiten. Erst zur Runtime soll der neue Typ verwendet werden. Also erst Application.CreateForm muss den neuen Typ kennen. Die zugehörige Information steht in der lfm-Datei und kommt dann als Ressource in's Programm. Die Veränderung müsste also vorgenommen werden, wenn die Ressource erzeugt wird (dann müsste man das Compile-System entsprechend erweitern), wenn die Ressource verarbeitet wird (Runtime-System), oder der Typ wird nachträglich ausgetauscht, wenn alles schon läuft.
Das letzte kommt mir am leichtesten vor, weil (wenn's denn geht) nur user-Code nötig ist. Man kann eine Komponente doch in eine andere kopieren. Wenn die neue nun den abgeleiteten Typ hat, sollten wir doch fast da sein.
Ich probier's 'mal.
-Michael
Ah, verstehe,Christian hat geschrieben:Aber wenn es das feature wirklich geben würde würde irgendjemand garantiert mal auf die alten eigenschaften der komponente zugreifen
Das ist aber auch nicht das, worauf ich hinaus will.
Die IDE soll ruhig weiter mit der ursprünglichen Komponente arbeiten. Erst zur Runtime soll der neue Typ verwendet werden. Also erst Application.CreateForm muss den neuen Typ kennen. Die zugehörige Information steht in der lfm-Datei und kommt dann als Ressource in's Programm. Die Veränderung müsste also vorgenommen werden, wenn die Ressource erzeugt wird (dann müsste man das Compile-System entsprechend erweitern), wenn die Ressource verarbeitet wird (Runtime-System), oder der Typ wird nachträglich ausgetauscht, wenn alles schon läuft.
Das letzte kommt mir am leichtesten vor, weil (wenn's denn geht) nur user-Code nötig ist. Man kann eine Komponente doch in eine andere kopieren. Wenn die neue nun den abgeleiteten Typ hat, sollten wir doch fast da sein.
Ich probier's 'mal.
-Michael
-
- 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:
das ist nur dafür da damit die komponente weiss on sie im designer läuft, so wissen kommerzielle delphi komponenten z.b. das sie jetzt keinen nag screen anzeigen müssen oder komponenten die in der ide noch nicht funktionieren sollen wie z.b. ne videocapturekomponente o.ä.(...für zur Designzeit laufenden Code in visuellen Komponenten gibt es extra csdesigning...)
du verstehst aber anscheinend auch nicht worauf ich hinaus will.Das ist aber auch nicht das, worauf ich hinaus will.
das feature ist sehr verwirrend für leute die das komponentensystem nicht oder nur schlecht kennen. Ausserdem bringt es keine vorteile ausser das du die ide im moment noch neu kompilieren musst was dann entfällt. sobals das packaging system fertig ist wäre dieses feature also volkommen überflüssig.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Mit "if csdedigning in Componentstate" z.B. in der Set-Funktion einer Property kann man feststellen, ob die Property zur Runtime vom User-Programm gesetzt wird oder zur Design-Time durch die IDE. Hierdurch kann man das Verhalten der Komponente in der IDE bestimmen. Die IDE (wie die User-Software) "macht" nämlich nichts mit den Komponenten, sondern sagt ihnen, was sie mit sich selbst machen sollen (setzt z.B. die Property Left, damit sich die Komponente selbst an der entsprechenden Posution darstellt). csdesigning wird benötigt, wenn das verhalten zur Design-Zeit anders sein soll als im Programm. Ich könnte also die Komponente in der IDE rot darstellen, wenn Left ungerade ist, im Normalbetrieb aber allse beim alten lassen. (So ist das zumindest in Delphi, In Lazarus habe ich mir das noch nicht angeschaut.) Die IDE weiß von der Komponente also auch nicht mehr als im Sourcecode steht.
>>Fpc 2.2.x wird packaging mitbringen damit können dann komponenten "on-the-fly" eingebunden werden
Heißt das, mit Lazarus muss eine visuelle Komponente "global" installiert werden, projektspezifisch geht im Moment nicht ? (OK kein Problem, wenn Verbesserung in Sicht ist.)
Wie installiert man bei Lazarus denn überhaupt neue visuelle Komponenten ?
Gruß,
-Michael
>>Fpc 2.2.x wird packaging mitbringen damit können dann komponenten "on-the-fly" eingebunden werden
Heißt das, mit Lazarus muss eine visuelle Komponente "global" installiert werden, projektspezifisch geht im Moment nicht ? (OK kein Problem, wenn Verbesserung in Sicht ist.)
Wie installiert man bei Lazarus denn überhaupt neue visuelle Komponenten ?
Gruß,
-Michael
-
- 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:
Seit wann kann denn Delphi Projektspezifisch komponenten einbinden ?Heißt das, mit Lazarus muss eine visuelle Komponente "global" installiert werden, projektspezifisch geht im Moment nicht ? (OK kein Problem, wenn Verbesserung in Sicht ist.)
und wie läuft das dann muss ich in dem projekt einstellen wo die komponenten liegen und mit dem projekt in diesem verzeichnis mitliefern ?
ich kenn Delphi nur bis zur version 7 und dort muss man alle komponenten installiert haben die ein projekt benötigt.
Genau wie bei Delphi Komponenten->Package Datei öffnen->InstallierenWie installiert man bei Lazarus denn überhaupt neue visuelle Komponenten ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Nei war auch bei Delphi nicht nötig. Du hast dort auch jederzeit visuelle Komponeneten ohne Einbindung in die IDE verwenden können. Die Komponeneten Unit mit uses einbinden, dann die Komponenete zur Laufzeit erzeugen und richtig parameterisieren. Mit der IDE ist es ja viel bequemer, deshalb ist der Weg oft in Vergessenheit geraten. Aber wenn probierst eine Komponente selbst zu entwickeln, dann wirst du auf das Erzeugen zur Laufzeit nicht verzichten wollen.ch kenn Delphi nur bis zur version 7 und dort muss man alle komponenten installiert haben die ein projekt benötigt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).