Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Neue Komponente, "keine Expandierung möglich"
Jakane - Do 05.09.13 15:45
Titel: Neue Komponente, "keine Expandierung möglich"
Hallo liebe Delphi-Helfer :)
es gibt zu dem Problem zwar viele Foreneinträge die ich mir schon angeschaut habe, aber ich bekomm es einfach nicht hin :(
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: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| unit JForms;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TJDatenbank = class(TPersistent) private FVerbunden : Boolean; public procedure Assign(Source: TPersistent); override; published property JVerbunden : Boolean read FVerbunden write FVerbunden; end;
type TJForm = class(TForm) private public published property JDatenbank : TJDatenbank read FDatenbank write FDatenbank stored ISDB; end;
var JForm: TJForm;
Procedure Register;
implementation
uses DsgnIntf;
Procedure Register; begin RegisterCustomModule(TJForm, TCustomModule); end;
procedure TJDatenbank.Assign(Source: TPersistent); begin if Source is TJDatenbank then begin FVerbunden := TJDatenbank(Source).FVerbunden; Exit; end; inherited Assign(Source); end;
end. |
Wie ihr seht habe ich in der TJDatenbank-Komponente bisher nur "Verbunden" drin.
Ich krieg aber nicht raus wie ich nun auf das + klicken kann :(
Hoffe jemand kann mir das erklären
Danke
WasWeißDennIch - Do 05.09.13 15:50
Ich bin mir nicht ganz sicher, ob ich Dich richtig verstanden habe, aber fehlt da nicht eine published-Property in Deiner Formklasse?
Jakane - Do 05.09.13 15:53
Nein, ich seh auf meinem Hauptformular (Typ JForm) die JDatenbank Eigenschaft im Inspektor,
nur wenn ich das aufklappen will um eben die Untereigenschaft Verbunden einzustellen,
bekomme ich die Fehlermeldung "keine Expandierung möglich"
WasWeißDennIch - Do 05.09.13 16:24
Dann versuch mal Folgendes:
- die Formklasse erhält ein privates Feld vom Typ TJDatenbank
- davon wird im Konstruktor eine Instanz angelegt und im Destruktor wieder freigegeben
- die entsprechende Property bekommt einen Setter spendiert, der intern Assign() aufruft
Das sollte dann etwa so aussehen:
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:
| type TJForm = class(TForm) private FDatenbank: TJDatenbank; procedure SetDatenbank(const Value: TJDatenbank); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property JDatenbank : TJDatenbank read FDatenbank write SetDatenbank; end;
constructor TJForm.Create(AOwner: TComponent); begin inherited; FDatenbank := TJDatenbank.Create; end;
destructor TJForm.Destroy; begin FDatenbank.Free; inherited; end;
procedure TJForm.SetDatenbank(const Value: TJDatenbank); begin FDatenbank.Assign(Value); end; |
Jakane - Mo 09.09.13 15:11
Für mich zwar nicht nachvollziehbar, aber es funktioniert ^^
Danke
jaenicke - Mo 09.09.13 15:27
Jakane hat folgendes geschrieben : |
Für mich zwar nicht nachvollziehbar |
Du hattest zwar die Eigenschaft JDatenbank, aber du hast dort nie ein Objekt hineingelegt. Es lag dort also nil, also nichts, drin. Und aus nichts kann der Objektinspektor eben auch keine Informationen holen, die er beim Aufklappen anbieten könnte.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!