![]() |
Checkbox onClick
Es ist wieder eine Zeit hin, dass ich mit Komponenten gearbeitet habe. Ich hab nur ein Problem mit der Sichtbarkeit.
Ich möchte eine Checkbox von TCheckbox ableiten, die nicht die Eigenschaft hat, dass bei dem Setzen von checked im Quelltext nicht automatisch onClick aufgerufen wird. Habe herausgefunden, dass tCheckbox ein Nachfahre von tCustomCheckbox ist. Nun würde ich gerne in meiner Abgeleiteten Klasse auf fState zurückgreifen.
Delphi-Quellcode:
Problem ist nur, dass FState private deklariert ist. Ich sehe zur Zeit irgendwie keine Möglichkeit auf den Wert in der Abgeleiteten Klasse zuzugreifen.
Procedure TMeineCheckBox.SetCheckedOnly(inCheckedStatus:Boolean);
begin If inCheckedStatus Then FState := cbChecked Else FState := cbUnchecked; End; Hab auch schon im Forum nach Möglichkeiten gesucht. Bei der Lösung onClick temporär auf nil zu setzen wird mein Prog arg langsam. Sieht jemand eine andere Möglichkeit? |
Re: Checkbox onClick
Mal eine Frage, wozu brauchst Du das genau ? Und wenn Du jetzt selber zur Laufzeit die TCustomCheckbox erstellst, würde Dir das dann weiterhelfen ?
|
Re: Checkbox onClick
Ich möchte einfach nicht, dass wenn ich checked ein Wert im Quelltext zuweise onClick aufgerufen wird.
Dadurch kommt es im Programm immer wieder zu Problemen und die möchte ich nun gerne ausschließen. |
Re: Checkbox onClick
Wieso Du kannst doch das OnClick - Ereignis einfach weglassen. Und dann über einen Button den Status von Checked abfragen. Oder verstehe ich da etwas falsch ?
|
Re: Checkbox onClick
Wenn Du im Quelltext so etwas schreibst:
Delphi-Quellcode:
Wird beim Ausführen dieser Zeile das onClickEreignis aufgerufen. Was man ja nicht unbedingt haben will...
checkbox.checked:=true;
|
Re: Checkbox onClick
Mal ein sehr unschöner Workaround. Ob er klappt, weiß ich allerdings nicht.
Delphi-Quellcode:
Grüße, Matze
CheckBox.OnClick := nil;
CheckBox.Checked := true; CheckBox.OnClick := CheckBoxClick; |
Re: Checkbox onClick
etwas weniger unschön vielleicht
Delphi-Quellcode:
Die ClicksDisabled property ist bei der normalen checkbox aus irgendeinem Grund protected(hab den code dazu nich gefunden...), wenn man sich aber seine eigene von TCustomCheckbox ableitet scheints zu klappen.
MyCheckBox.ClicksDisabled:= true;
MyCheckBox.Checked:= true; MyCheckBox.ClicksDisabled:= false; €dit: okay clicksdisabled ist in TButtonControl schon als proctected declariert, klappt aber trotzdem problemlos wenn man sich seine eigene CheckBox ableitet^^ |
Re: Checkbox onClick
Bin beim Stöbern stdctrls.pas auch auf ClicksDisabled gestoßen.
Delphi-Quellcode:
und werde es nun wohl so lösen...
Procedure MeineCheckBox.SetCheckedOnly(inCheckedStatus:Boolean);
var Save:Boolean; begin Save:=ClicksDisabled; ClicksDisabled:=true; checked:= inCheckedStatus; ClicksDisabled:=Save; End; |
Re: Checkbox onClick
Beide Workarounds sind funktionsfähig, wobei der von Henkst eher dem entspricht, was wohl erwartet wird um das zu umgehen.
Wenn man sich mal den Quellcode in TCustomCheckBox anschaut sieht man auch, das hier ein Klick ausgeführt wird.
Delphi-Quellcode:
Lg
procedure TCustomCheckBox.SetState(Value: TCheckBoxState);
begin if FState <> Value then begin FState := Value; if HandleAllocated then SendMessage(Handle, BM_SETCHECK, Integer(FState), 0); if not ClicksDisabled then Click; end; end; |
Re: Checkbox onClick
Zitat:
Delphi-Quellcode:
Beim Laden von Datensätzen und setzen der Controls wird dann die Handlerfreigabe dementsprechend gesetzt:
if not Handlerfreigabe then exit;
Delphi-Quellcode:
Gefrickelt, aber hat sich in meinen Programmen bewährt. Hilft auch bei doppelten betätigen des Speicherbuttons etc., weil ich die Handlerfreigabe in allen Ereignisprozeduren habe. Während ich lade, speichere etc. interessieren mich die User-Inputs nicht.
Handlerfreigabe := false;
MyCheckBox.Checked:= true; ... Handlerfreigabe := true; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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