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

user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
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.