Zitat von
MarcusB:
Warum setzt
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
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.