Einzelnen Beitrag anzeigen

DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#1

Programm vergißt Komponenteneinstellung im Objektinspektor

  Alt 14. Feb 2012, 12:57
Hi, Comm.,
prinzipielle Frage zur Darstellung und Übernahme von Eigenschaften aus dem Objektinspektor:
Delphi-Quellcode:
  TTestpanel = class(Tpanel)
  private
    FcheckA: TCheckBox;
    FcheckB: TCheckBox;

    { private declarations }
  protected
    { protected declarations }
  public
    { public declarations }

  published
    { published declarations }
    property checkA: TCheckBox read FcheckA write FcheckA;
    property checkB: tcheckbox read FcheckB write FcheckB;
    constructor create(AOWNER:tcomponent);override;
  end;


constructor TTestpanel.create(AOWNER: tcomponent);
begin
  inherited;
  checkA:=tcheckbox.Create(self);
  checkA.Caption:='A';
  InsertControl(checkA);
  checkb:=tcheckbox.Create(self);
  checkB.Caption:='B';
  checkB.top:=checkB.top+15;
  InsertControl(checkB);
end;

Stellt man im Objektinspektor die Eigenschaft checkA.checked auf true, sieht man das auch auf dem Formular - aber nach Start des Programms ist dieses checked=true wieder weg.

Spendiere ich z.B. checkA eine Setter und getter:

[DELPHI]
Delphi-Quellcode:
  TTestpanel = class(Tpanel)
  private
    FcheckA: TCheckBox;
    FcheckB: TCheckBox;
    procedure setcheckA(const Value: TCheckBox);
    Function getcheckA:tcheckbox;
    { private declarations }
  protected
    { protected declarations }
  public
    { public declarations }

  published
    { published declarations }
    property checkA: TCheckBox read FcheckA write setcheckA;
    property checkB: tcheckbox read FcheckB write FcheckB;
    constructor create(AOWNER:tcomponent);override;
  end;


procedure TTestpanel.setcheckA(const Value: TCheckBox);
begin
 FcheckA:=value;
end;

function TTestpanel.getcheckA: tcheckbox;
begin
result:=FcheckA;
end;
bleibt ales beim alten. SetcheckA wird im Debug-Modus erreicht, die Voreinstellung des Objektinspektors aber nicht übernommmen.

Nun speicherte ich den Zustand von checkA.Checked in einer Extra-Variablen:

Delphi-Quellcode:
  private
    FA:boolean;
    FcheckA: TCheckBox;
    FcheckB: TCheckBox;

    procedure SetA(const Value: boolean);
    function GetA: boolean;
    procedure setcheckA(const Value: TCheckBox);
    { private declarations }
  protected
    { protected declarations }
  public
    { public declarations }

  published
    { published declarations }
    property checkA: TCheckBox read FcheckA write setcheckA;
    property checkB: tcheckbox read FcheckB write FcheckB;
    constructor create(AOWNER:tcomponent);override;
  end;

procedure TTestpanel.SetA(const Value: boolean);
begin
 FA:=value;
 checkA.Checked:=value;
end;

function TTestpanel.GetA: boolean;
begin
  a:=FA;
end;
Jetzt wird die Eigenschaft aus dem Objektinspektor auch in's Programm übernommen - aber nur, wenn sowohl setA als auch getA genutzt werden (geht auch ohne setcheckA). Geht das nur so? - Finde ich umständlich.

Wo steckt mein Wissensdefizit?

MfG
Uwe
  Mit Zitat antworten Zitat