![]() |
Re: TCheckBox.Checked löst OnClick aus?
Mich würde auch etwas interessieren: Der Parameter "Sender", wofür steht der genau? In der Delphi-Reference wurde ich nicht fündig.
Ich hätte erwartet, dass so etwas geht, doch ich habe "Sender" hier wohl falsch interpretiert:
Delphi-Quellcode:
Dann ist "Sender" wohl generell die Komponente, die das Ereignis direkt oder indirekt auslöst und somit hier immer CheckBox1, richtig?
procedure TForm1.CheckBox1Click(Sender: TObject);
begin if (Sender as TCheckBox) = CheckBox1 then // durch CheckBox1 ausgelöst else // durch andere Komponenten ausgelöst, bsp. einen Button end; Nur wenn diese Prozedur auch anderen CheckBox-Komponenten zugewiesen ist, kann der Parameter variieren und dann ist Sender die CheckBox, die das Ereignis ausgelöst hast. Grüße, Matze |
Re: TCheckBox.Checked löst OnClick aus?
Es ist in der Tat so. Auch der folgende Code löst einen Beep aus:
Delphi-Quellcode:
Ich glaube, wenn man trotzdem das OnClick der CheckBox nutzen will, muss man das mit eine Hilfs-Status-Variablen regeln:
procedure TForm2.Button1Click(Sender: TObject);
begin if CheckBox1.State = cbChecked then CheckBox1.State := cbUnChecked else CheckBox1.State := cbChecked; end; procedure TForm2.CheckBox1Click(Sender: TObject); begin Beep; end;
Delphi-Quellcode:
Dann funktioniert es :)
procedure TForm2.Button1Click(Sender: TObject);
begin if CheckBox1.State = cbChecked then begin CanClick := False; // Hilfsvariable CheckBox1.State := cbUnChecked; end else begin CanClick := False; CheckBox1.State := cbChecked; end; end; procedure TForm2.CheckBox1Click(Sender: TObject); begin if CanClick then begin Beep; end else CanClick := True; end; |
Re: TCheckBox.Checked löst OnClick aus?
Zitat:
|
Re: TCheckBox.Checked löst OnClick aus?
Hallo,
das Problem kann man ebenfalls erschlagen, indem man die Checkbox mit einer Action verknüpft und das Umschalten über die Eigenschaft ![]() ![]() Gruß Hawkeye |
Re: TCheckBox.Checked löst OnClick aus?
Hier noch eine "saubere" Variante den Status zu setzen, ohne das Event auszulösen:
Delphi-Quellcode:
Grundsätzlich mit Action zu arbeiten, ist aber eventuell der bessere Weg.
procedure SetCheckBox(ACheckBox: TCheckBox; AValue: Boolean);
var Event: TNotifyEvent; begin with ACheckBox do begin Event := OnClick; try OnClick := nil; Checked := AValue; finally OnClick := Event; end; end; end; |
Re: TCheckBox.Checked löst OnClick aus?
Hallo,
Zitat:
auch getestet wird ... Daß es bei eventgetriebenem Code schwieriger ist, ist nat. klar. Bei mir steht in OnClick-Methoden z.B. auch kein direkter Code, sondern der Aufruf einer eigenen Prozedur. Dann noch einen Breakpoint auf diese Prozedur und es gibt (fast) keine Überrauschungen. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr. |
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