Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   checkbox change ohne click (https://www.delphipraxis.net/160348-checkbox-change-ohne-click.html)

khh 9. Mai 2011 14:01

checkbox change ohne click
 
hallo zusammen,
gibt es ne Möglichkeit den Status einer Checkbox zu ändern, ohne das Ereignis OnClick auszulösen.
Wenn ich das richtig sehe werden beide Ereignisse zusammen ausgelöst.
Wozu dann die Unterscheidung?
Hintergund ist, dass ich auf das Setzen des Status im Programm anders reagieren möchte als wenn der Benutzer die checkbox anklickt.

rainerg 9. Mai 2011 14:04

AW: checkbox change ohne click
 
Ich denke, dies hier könnte dir helfen:
http://www.delphi-library.de/topic_Z...n_91692,0.html

khh 9. Mai 2011 14:08

AW: checkbox change ohne click
 
ich danke dir

DeddyH 9. Mai 2011 14:27

AW: checkbox change ohne click
 
Dafür eine eigene Komponente finde ich etwas übertrieben. Wie wäre es denn so?
Delphi-Quellcode:
type
  TCheckbox = class(StdCtrls.TCheckbox)
  private
    FAvoidClick: Boolean;
    function GetMyState: TCheckBoxState;
    procedure SetMyState(const Value: TCheckBoxState);
  public
    property AvoidClick: Boolean read FAvoidClick write FAvoidClick;
    property State: TCheckBoxState read GetMyState write SetMyState;
  end;

  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    ...
  end;

...

function TCheckbox.GetMyState: TCheckBoxState;
begin
  Result := inherited State;
end;

procedure TCheckbox.SetMyState(const Value: TCheckBoxState);
begin
  ClicksDisabled := FAvoidClick;
  inherited State := Value;
  ClicksDisabled := false;
end;
Über die neue Property AvoidClick kann man individuell je Checkbox angeben, ob sie ein Click-Event auslösen soll, wenn State geändert wird.

himitsu 9. Mai 2011 14:43

AW: checkbox change ohne click
 
oder einfach nur
Delphi-Quellcode:
type
  TCheckbox = class(StdCtrls.TCheckbox)
    property ClicksDisabled;
  end;
Wenn man nun im OnCreate der Form
Delphi-Quellcode:
CheckBox1.ClicksDisabled := True;
setzt, wird ab da beim OnChange kein OnClick mehr ausgeführt.

DeddyH 9. Mai 2011 14:47

AW: checkbox change ohne click
 
Ich hatte gar nicht in den Source von StdCtrls geschaut und wusste daher nicht, ob man ClicksDisabled dauerhaft ohne Probleme setzen kann/darf. Aber wenn das nicht zu unerwünschten Nebeneffekten führt, kann man sich den ganzen Schmonses tatsächlich sparen.

ConnorMcLeod 10. Mai 2011 07:10

AW: checkbox change ohne click
 
Delphi-Quellcode:
var
  lfOldOnClick: TNotifyEvent;
begin
  lfOldOnClick := chkBox.OnClick;
  chkBox.OnClick := nil;
  ...
  MachWasGanzGefinkeltes();
  ...
  chkBox.OnClick := lfOldOnClick;
end;
Ungetestet in die Tastatur gehämmert.

Oder guckst Du hier.
Delphi-Quellcode:
{set a checked}
yourCheckBox.Perform(BM_SETCHECK, 1, 0);

{set a unchecked}
yourCheckBox.Perform(BM_SETCHECK, 0, 0);

khh 10. Mai 2011 11:38

AW: checkbox change ohne click
 
Zitat:

Zitat von himitsu (Beitrag 1099739)
oder einfach nur
Delphi-Quellcode:
type
  TCheckbox = class(StdCtrls.TCheckbox)
    property ClicksDisabled;
  end;
Wenn man nun im OnCreate der Form
Delphi-Quellcode:
CheckBox1.ClicksDisabled := True;
setzt, wird ab da beim OnChange kein OnClick mehr ausgeführt.

scheint mir die einfachste Lösung zu sein:-)

Ich danke euch


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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