Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: 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:

ausblenden volle Höhe 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
    { Private-Deklarationen }
    FJPanelVisible: Boolean;
  public
    { Public-Deklarationen }
  published
    { Objekteingenschaften }
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 30.08.13 10:06 
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
Die Welt besteht aus Zahlen, also ist alles möglich.
[Delphi 5] - [Delphi XE5]
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 30.08.13 10:53 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 30.08.13 12:01 
stimmt auch wieder
kkausp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77
Erhaltene Danke: 1

W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 30.08.13 15:05 
user profile iconkkausp hat folgendes geschrieben Zum zitierten Posting springen:
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."

user profile iconkkausp hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 30.08.13 15:36 
Jetzt funktionierts!!!

ausblenden volle Höhe 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
    { Private-Deklarationen }
    FJPanelVisible: Boolean;
  protected
    { Protected-Deklarationen }
  public
    { Wärend der Programmierung auswählbare Funktionen }
  published
    { Objekteingenschaften }
    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:
ausblenden 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]