AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Checkbox auf Komponente funktioniert nicht

Ein Thema von Optiplex · begonnen am 13. Jul 2009 · letzter Beitrag vom 14. Jul 2009
Antwort Antwort
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#1

Checkbox auf Komponente funktioniert nicht

  Alt 13. Jul 2009, 09:02
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
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Checkbox auf Komponente funktioniert nicht

  Alt 13. Jul 2009, 10:21
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
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Checkbox auf Komponente funktioniert nicht

  Alt 13. Jul 2009, 12:33
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Checkbox auf Komponente funktioniert nicht

  Alt 13. Jul 2009, 13:15
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
Heiko
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Checkbox auf Komponente funktioniert nicht

  Alt 13. Jul 2009, 14:38
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Checkbox auf Komponente funktioniert nicht

  Alt 13. Jul 2009, 14:58
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
Heiko
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Checkbox auf Komponente funktioniert nicht

  Alt 14. Jul 2009, 09:08
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 von hoika:
Hallo,

ich würde statt

2. statt Repaint Invalidate
benutzen

Heiko
Warum soll ich Invalidate nehmen ?

Gruß Dieter
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Checkbox auf Komponente funktioniert nicht

  Alt 14. Jul 2009, 09:36
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 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