Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Komponentenprogrammierung, eigene TForm statt Standard TForm
Jakane - Do 29.08.13 14:46
Titel: Komponentenprogrammierung, eigene TForm statt Standard TForm
Hallo liebe Delphi-Helfer :)
ich experiemtier gerade mit meinem eigenen Formular rum (TJForm).
Wenn ich nun ein neues Formular mache und "TFHaupt = class(TForm)" in "TFHaupt = class(TJForm)" ändere,
kann ich zwar auch die Eigenschaften von TJForm im Quellcode zugreifen, aber diese werden nicht vom Objektinspektor geladen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| unit JForms;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TJForm = class(TForm) private FJPanelVisible: Boolean; public published property JPanelVisible: Boolean read FJPanelVisible write FJPanelVisible; end;
var JForm: TJForm;
procedure Register;
implementation
{$R *.DFM}
procedure Register; begin RegisterComponents('Jakane', [TJForm]); end;
end. |
Bei JEdits, JButton und JPanel wird mir die Eigenschaft angezeigt, im JForm nicht.
Danke für Hilfen :)
WasWeißDennIch - Do 29.08.13 15:13
Das dürfte daran liegen, dass die Eigenschaft nicht in der DFM gespeichert wird. Ich wüsste spontan auch keine Möglichkeit, dem abzuhelfen. Du könntest aber eine nicht-visuelle Komponente erstellen, die Deine Form-Unit einbindet und dort die Properties dann deklarieren und über Setter an das Formular weiterreichen. Oder aber Du verzichtest auf eine Komponente und nutzt stattdessen die Objektablage.
Tranx - Do 29.08.13 20:00
Also, ich habe mal die Komponente mit Delphi 5 installiert. Das klappt eigentlich. Ich sehe die Eigenschaft JPaneVisible im Objektinspektor. Abgesehen davon, dass eine abgeleitete Formularkomponente in einem Formular etwas gewöhnungsbedürftig ist, klappt das. Es passiert wegen der fehlenden Prozeduren der property natürlich nichts. Wie gesagt, die property-Eigenschaft sehe ich.
jaenicke - Do 29.08.13 20:11
Bei Delphi XE4 funktioniert das nicht. Ich würde das aber auch nicht so machen, auch wenn man es mit eigenen Property Editoren für TForm vermutlich hinbekommen würde. Das bringt höchstens den Designer der IDE durcheinander...
Jakane - Fr 30.08.13 09:06
Tranx hat folgendes geschrieben : |
| Also, ich habe mal die Komponente mit Delphi 5 installiert. Das klappt eigentlich. Ich sehe die Eigenschaft JPaneVisible im Objektinspektor. Abgesehen davon, dass eine abgeleitete Formularkomponente in einem Formular etwas gewöhnungsbedürftig ist, klappt das. Es passiert wegen der fehlenden Prozeduren der property natürlich nichts. Wie gesagt, die property-Eigenschaft sehe ich. |
Äh, Ja.
Wenn ich JForm auf ein Form lege, sehe ich es auch, aber ich will ja das JForm STATT der Form haben
Muss doch irgendwie gehen :x
jaenicke - Fr 30.08.13 09:53
Jakane hat folgendes geschrieben : |
Wenn ich JForm auf ein Form lege, sehe ich es auch, aber ich will ja das JForm STATT der Form haben
Muss doch irgendwie gehen :x |
Wie gesagt, höchstens mit eigenen Property Editoren, bei denen du die Property manuell im Objektinspektor anzeigst. Das ist aber eben ein hoher Aufwand und ob das Probleme an anderer Stelle macht, weiß ich nicht.
Viel einfacher ist es doch die Werte einfach in FormCreate zu setzen. Dann können die auch nicht so einfach aus Versehen geändert werden wie im Objektinspektor. Wenn man da beim Einchecken der .dfm ins Repository die Änderung einer solchen Eigenschaft übersieht, funktioniert plötzlich etwas nicht mehr wie gewünscht und man sieht nicht warum. Im Quelltext sollte eine Änderung beim Einchecken auf jeden Fall auffallen...
Jakane - Fr 30.08.13 11:01
stimmt auch wieder
kkausp - Fr 30.08.13 11:35
Bitte in der DFM Datei im Text Modus in die Erste Zeile inherited einfügen.
z.B. inherited JFORM1: TJFORM
Dann funktioniert die Vererbung. (zusätzliche Properties habe ich allerdings noch nicht probiert)
oder in D2009 bei Neuanlage des Forms
Datei->Neu->Weitere dann Delphi-Projekte->Vererbbare Elemente
Dabei muss das TJFORM schon dem Proekt hinzugefügt sein, aber nicht automatisch erzeugt werden .
Jakane - Fr 30.08.13 14:05
kkausp hat folgendes geschrieben : |
Bitte in der DFM Datei im Text Modus in die Erste Zeile inherited einfügen.
z.B. inherited JFORM1: TJFORM
Dann funktioniert die Vererbung. (zusätzliche Properties habe ich allerdings noch nicht probiert) |
Das habe ich probiert, aber ich bekomme dann beim Aufruf einen Fehler: "Fehler beim Erzeugen von Formular: "=" erwartet in Zeile 1."
kkausp hat folgendes geschrieben : |
oder in D2009 bei Neuanlage des Forms
Datei->Neu->Weitere dann Delphi-Projekte->Vererbbare Elemente
Dabei muss das TJFORM schon dem Proekt hinzugefügt sein, aber nicht automatisch erzeugt werden . |
Vererbung geht auch bei D5, aber im Objektinspektor seh ich den Wert trotzdem nicht :?
Sehr seltsam.
----------------------
So am Rand, kann man seine Signatur automatisch mitgeben oder muss man immer das Häckchen setzen :?
Jakane - Fr 30.08.13 14:36
Jetzt funktionierts!!!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| unit JForms;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TJForm = class(TForm) private FJPanelVisible: Boolean; protected public published property JPanelVisible: Boolean read FJPanelVisible write FJPanelVisible; end;
var JForm: TJForm;
Procedure Register;
implementation
uses DsgnIntf;
Procedure Register; begin RegisterCustomModule(TJForm, TCustomModule); end;
end. |
Mit RegisterCustomModule muss ich nur noch JForm in die Uses legen, aus TForm ein TJForm machen und das Projekt/Formular neustarten.
Dann werden alle neuen Eigenschaften geladen ohne das JForms als Formular im Projekt ist und ohne vererbung :D
Schau dann im Kopf so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| unit Haupt;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, JForms;
type TFHaupt = class(TJForm) |
Troztdem danke für die Hilfen :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!