Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Checkbox auf Komponente funktioniert nicht (https://www.delphipraxis.net/137040-checkbox-auf-komponente-funktioniert-nicht.html)

Optiplex 13. Jul 2009 08:02


Checkbox auf Komponente funktioniert nicht
 
Hallo DP'Ler
ich habe folgendes Problem bei meiner Komponente.
Die Komponente kapselt ein TObject und ich habe auf meiner Komponente eine Checkbox, die bei einer Angabe im Setter diese Checkbox Enabled wieder auf true setzen soll und genau das funktioniert nicht, und ich weis nicht warum?
ich habe deshalb die ganze Komponente auf Enabled=false gesetzt. Kann mir da jemand weiterhelfen?

Delphi-Quellcode:
procedure TBoardEdit.SetBoard(const value: TBoardClass);
begin
  if FBoard=value then exit;
  FBoard:=Value;
  Enabled :=false;            // Ganze Komponente sperren
  if Assigned(FBoard) then begin
    Enabled :=true;            // Ganze Komponente freigeben
//    FBoardCheckBox.Enabled:=True; Warum funk das nicht ???
    Caption:=IntToStr(FBoard.BoardNr);
  end;
  repaint;
end;
Gruß Dieter

Stormy 13. Jul 2009 09:21

Re: Checkbox auf Komponente funktioniert nicht
 
Hi,

hast du schonmal geguckt ob der Code bis dahin überhaupt ausgeführt wird?
Und was genau ist FBoardCheckBox bzw. wie ist das aufgebaut?


Gruß
Stormy

Optiplex 13. Jul 2009 11:33

Re: Checkbox auf Komponente funktioniert nicht
 
hallo Stormy,
klar wird der Code ausgeführt. FBoardCheckBox ist die Checkbox, welche in beim Erstellen, das Property Enabled auf False gesetzt wird, um dann im Setter wieder auf True gesetzt werden soll sobald eine Instanz von TBoardclass existiert. Und dieses umschalten funktioniert nicht und ich kann mir nicht erklären warum.

Dieter

hoika 13. Jul 2009 12:15

Re: Checkbox auf Komponente funktioniert nicht
 
Hallo,

ich würde statt

1. TObject TComponent
und
2. statt Repaint Invalidate
benutzen

Ausserdem muss die Komponente enabled sein,
wenn FBoardCheckBox.Enabled aufgerufen wird.
Vielleicht hast du beim ganzen Rumprobieren das Enabled:= False
der Komponente noch dringehabt ?

Wie hast du denn FBoardCheckBox erzeugt ?

Wann genau rufst du das TBoardEdit.SetBoard auf ?
Im FormCreate ?


Heiko

Optiplex 13. Jul 2009 13:38

Re: Checkbox auf Komponente funktioniert nicht
 
Hallo Heiko, ich habe dir mal die wichtigsten Proceduren, wo was passiert, rauskopiert. der Setter wird vom Formular im FormCreate aus aufgerufen nachdem das Objekt Createt wurde.
Delphi-Quellcode:
constructor TBoardEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FBoardCheckBox:=TCheckBox.Create(nil);
//.....
  Enabled:=false;
end;
//===
destructor TBoardEdit.Destroy;
begin
  FBoardCheckBox.Free;
  inherited Destroy;
end;
procedure TBoardEdit.CreateWnd;
begin
inherited;
  FBoardCheckBox.Parent:=Self;
  if csDesigning in ComponentState then FBoardCheckBox.Enabled:=false;
  FBoardCheckBox.Name:=Name+'_TCheckBox1';
  FBoardCheckBox.Checked:=True;
  FBoardCheckBox.Enabled:=false
end;
Dieter

hoika 13. Jul 2009 13:58

Re: Checkbox auf Komponente funktioniert nicht
 
Hallo,

Zitat:

der Setter wird vom Formular im FormCreate aus aufgerufen nachdem das Objekt Createt wurde.
Das ist schlecht, weil zu diesem Zeitpunkt das eigentliche Windows-Fenster noch nicht erzeugt ist.
Warum benutzt du CreateWnd ?

Hast du mal einen BreakPoint auf CreateWnd und das FormCreate gesetzt ?

Ich denke FormCreate ist früher dran.

Statt CreateWnd würde ich Loaded nehmen (ist virtual also override).

Aussderm würde ich das Setter im FormActivate aufrufen.


Heiko

Optiplex 14. Jul 2009 08:08

Re: Checkbox auf Komponente funktioniert nicht
 
Hallo heiko,
das mit Formcreate ist schon ok, die Komponente funktioniert ja, nur das Enabled von dieser Checkbox will einfach nicht!
Ich vermute jetzt dass (wie du es schon geschrieben hast) das mit denm Ablauf zu tun hat, wann ich die Kompo Enabled setze und wieder freigebe, werde dich informieren sobald ich das durchgetestet habe.



Zitat:

Zitat von hoika
Hallo,

ich würde statt

2. statt Repaint Invalidate
benutzen

Heiko

Warum soll ich Invalidate nehmen ?

Gruß Dieter

hoika 14. Jul 2009 08:36

Re: Checkbox auf Komponente funktioniert nicht
 
Hallo,

Zitat:

Warum soll ich Invalidate nehmen ?
Weil man das so macht ;)

Invalidate löscht auch den Hintergrund.
Man könnte sogar InvalidateRect nehmen,
müsste im OnPaint das aber dann auch testen.


Zitat:

das mit Formcreate ist schon ok
Hast du es denn mal mit FormActivate getestet ?


Zitat:

das mit denm Ablauf zu tun hat
Wie testet du dass denn ?
Erzeuge die Komponente mal dynamisch (per Button-Klick),
dann kannst du auch Breakpoints setzen.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz