Autor |
Beitrag |
Jakane
      
Beiträge: 257
|
Verfasst: Do 29.08.13 15:46
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:
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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 29.08.13 16: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
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Do 29.08.13 21: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.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 29.08.13 21: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 
      
Beiträge: 257
|
Verfasst: Fr 30.08.13 10: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 
_________________ Die Welt besteht aus Zahlen, also ist alles möglich.
[Delphi 5] - [Delphi XE5]
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 30.08.13 10: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  |
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 
      
Beiträge: 257
|
Verfasst: Fr 30.08.13 12:01
|
|
kkausp
      
Beiträge: 77
Erhaltene Danke: 1
W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
|
Verfasst: Fr 30.08.13 12: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 
      
Beiträge: 257
|
Verfasst: Fr 30.08.13 15: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 
_________________ Die Welt besteht aus Zahlen, also ist alles möglich.
[Delphi 5] - [Delphi XE5]
|
|
Jakane 
      
Beiträge: 257
|
Verfasst: Fr 30.08.13 15:36
Jetzt funktionierts!!!
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
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 
_________________ Die Welt besteht aus Zahlen, also ist alles möglich.
[Delphi 5] - [Delphi XE5]
|
|
|