AGB  ·  Datenschutz  ·  Impressum  







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

Checkbox onClick

Ein Thema von Bomberbb · begonnen am 20. Jan 2009 · letzter Beitrag vom 20. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#1

Checkbox onClick

  Alt 20. Jan 2009, 14:59
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:
Procedure TMeineCheckBox.SetCheckedOnly(inCheckedStatus:Boolean);
begin
  If inCheckedStatus Then FState := cbChecked Else FState := cbUnchecked;
End;
Problem ist nur, dass FState private deklariert ist. Ich sehe zur Zeit irgendwie keine Möglichkeit auf den Wert in der Abgeleiteten Klasse zuzugreifen.

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?
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

Re: Checkbox onClick

  Alt 20. Jan 2009, 15:13
Mal eine Frage, wozu brauchst Du das genau ? Und wenn Du jetzt selber zur Laufzeit die TCustomCheckbox erstellst, würde Dir das dann weiterhelfen ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#3

Re: Checkbox onClick

  Alt 20. Jan 2009, 15:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: Checkbox onClick

  Alt 20. Jan 2009, 15:41
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#5

Re: Checkbox onClick

  Alt 20. Jan 2009, 15:46
Wenn Du im Quelltext so etwas schreibst:
checkbox.checked:=true; Wird beim Ausführen dieser Zeile das onClickEreignis aufgerufen. Was man ja nicht unbedingt haben will...
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Checkbox onClick

  Alt 20. Jan 2009, 15:54
Mal ein sehr unschöner Workaround. Ob er klappt, weiß ich allerdings nicht.

Delphi-Quellcode:
CheckBox.OnClick := nil;
CheckBox.Checked := true;
CheckBox.OnClick := CheckBoxClick;
Grüße, Matze
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#7

Re: Checkbox onClick

  Alt 20. Jan 2009, 16:03
etwas weniger unschön vielleicht

Delphi-Quellcode:
MyCheckBox.ClicksDisabled:= true;
MyCheckBox.Checked:= true;
MyCheckBox.ClicksDisabled:= false;
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.

€dit:
okay clicksdisabled ist in TButtonControl schon als proctected declariert, klappt aber trotzdem problemlos wenn man sich seine eigene CheckBox ableitet^^
narf - not a real function
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#8

Re: Checkbox onClick

  Alt 20. Jan 2009, 16:08
Bin beim Stöbern stdctrls.pas auch auf ClicksDisabled gestoßen.
Delphi-Quellcode:
Procedure MeineCheckBox.SetCheckedOnly(inCheckedStatus:Boolean);
var
  Save:Boolean;
begin
  Save:=ClicksDisabled;
  ClicksDisabled:=true;
  checked:= inCheckedStatus;
  ClicksDisabled:=Save;
End;
und werde es nun wohl so lösen...
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Checkbox onClick

  Alt 20. Jan 2009, 16:09
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:
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;
Lg
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
mannewolff

Registriert seit: 21. Okt 2008
48 Beiträge
 
RAD-Studio 2009 Arc
 
#10

Re: Checkbox onClick

  Alt 20. Jan 2009, 16:10
Zitat von HenKst:
etwas weniger unschön vielleicht
Delphi-Quellcode:
MyCheckBox.ClicksDisabled:= true;
MyCheckBox.Checked:= true;
MyCheckBox.ClicksDisabled:= false;
Ich mache das so, dass ich eine Variable habe die sowas wie "Handlerfreigabe" heisst. In den Ereignisprozeduren steht dann

if not Handlerfreigabe then exit; Beim Laden von Datensätzen und setzen der Controls wird dann die Handlerfreigabe dementsprechend gesetzt:

Delphi-Quellcode:
Handlerfreigabe := false;
MyCheckBox.Checked:= true;
...
Handlerfreigabe := true;
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:17 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