Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit checkbox.checked := true (https://www.delphipraxis.net/28291-problem-mit-checkbox-checked-%3D-true.html)

Stevie 23. Aug 2004 09:50

Re: Problem mit checkbox.checked := true
 
Zitat:

Zitat von MarcusB
Warum setzt

Delphi-Quellcode:
  checkbox.Perform(BM_SETCHECK, 1, 0);
zwar den Haken in die Checkbox, aber die Property "Checked" ist immer noch false?

Und bei der Lösung von scp

Delphi-Quellcode:
  checkbox1.OnClick := nil;
  checkbox1.checked := true;
verstehe ich nicht, dass nach OnClick := nil doch wieder checked:=true aufgerufen wird, was doch eigentlich wieder OnClick auslöst :drunken:

1. Dieser Befehl ist aus der Windows-API und dort hat eine Checkbox kein Checked-Property, wie in Delphi (also schon eins, ob die Box angehakt ist oder nicht, aber der Bool-Wert Checked in TCheckBox ist quasi zusätzlich) Das heißt, eine Änderung über die Win-API hat keine Änderung des Checked-Status einer TCheckBox zufolge andersrum aber schon (Check auf true setzen zeichnet die Box neu)

2. Intern wird die Funktion Click aufgerufen und die macht folgenden Befehl (vereinfacht):
Delphi-Quellcode:
if Assigned(FOnClick) then
  FOnClick(Self);
Das heißt, wenn OnClick (ist ja nur ein Methodenzeiger) nicht gesetzt ist (was ja mit dem := nil bewerkstelligt wurde), dann wird die Funktion auch nicht aufgerufen, wenn du Checked setzt.

MarcusB 23. Aug 2004 09:56

Re: Problem mit checkbox.checked := true
 
Wow, danke, ich glaube nun wird Licht im Kopf :idea:

:thumb: Wieder was gelernt, danke für Eure Mühe :)

Nothine 23. Aug 2004 16:45

Re: Problem mit checkbox.checked := true
 
da du den checked-status über die windows-message togglest, kannst du auch die abfrage über winapi-funktionen machen...
mithilfe von
Delphi-Quellcode:
CheckBox1.Perform(BM_GETCHECK,0,0)
bekommst du (bei einer normalen delphi-checkbox) entweder BST_CHECKED oder BST_UNCHECKED als ergebnis zurück, bedeutung dürfte klar sein, dann machst du halt statt
Delphi-Quellcode:
if CheckBox1.Checked then
ein
Delphi-Quellcode:
if CheckBox1.Perform(BM_GETCHECK,0,0) = BST_CHECKED then
und schon is das problem gelöst :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr.
Seite 2 von 2     12   

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