Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Desmarcar CheckBox sin ejecutar evento on Click (https://www.clubdelphi.com/foros/showthread.php?t=72911)

jlrdz 18-03-2011 16:58:58

Desmarcar CheckBox sin ejecutar evento on Click
 
Saludos, tengo dos componentes un CheckBox y un Boton

Este es el codigo del CheckBox

Código Delphi [-]

//Código Checkbox
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if checkbox1.Checked=True then
 begin
  showmessage('Marcado!');
 end
 else
 begin
  showmessage('No marcado!');
 end;
end;


//Código Botón
procedure TForm1.Button1Click(Sender: TObject);
begin
CheckBox1.Checked:=False;
end;

Cuando doy click en el checkbox y se marca me muestra el mensaje de "Marcado", cuando no esta marcado pues se muestra el otro mensaje pero lo que quiero es que cuando yo pulse el Button1 me desmarque el CheckBox1 sin que me muestre el mensaje "No marcado", es decir sin que ejecute el evento de CheckBox1, sólo que me quite la marca, es posible esto y si es asi cómo se hace?

Gracias. :)

oscarac 18-03-2011 17:04:31

se me ocurre que podrias usar una variable logica definida previamente
que en principio sea true
y que cuando se active el botton le cambies el valor a false

ya en el Click del checkbox preguntar si la variables es False (osea que proviene desde el boton), no mostrar el mensaje..

me deje entener?

jlrdz 18-03-2011 17:12:47

Eso lo intenté, este ejemplo que puse es muy simple y eso me funciona pero en generalo lo puse para que viera que la idea era esa, en donde lo ocupo que no es este ejemplo es un script más largo donde intenté lo que oscarac pero tengo que editar mucho codigo que ya tengo escrito y pensé que existia alguna otra forma diferente de hacer eso.

gracias por la respuesta oscarac.

ecfisa 18-03-2011 18:59:22

Hola jlrdz.

Una forma puede ser:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  CheckBox1.OnClick:= nil;
  CheckBox1.Checked:= False;
  CheckBox1.OnClick:= CheckBox1Click;
end;

Otra:
Código Delphi [-]
...
type
 TCheckBox = class(StdCtrls.TCheckBox);
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
  ...
implementation
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  CheckBox1.ClicksDisabled:= True;
  CheckBox1.Checked:= False;
  CheckBox1.ClicksDisabled:= False;
end;

Un saludo.

jlrdz 18-03-2011 21:49:18

Justo lo que necesitaba!, gracias ecfisa, las dos maneras funciona.

Saludos y gracias nuevamente. :)

rastafarey 22-03-2011 02:12:58

Resp
 
Código Delphi [-]

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if checkbox1.Checked then
 begin
  showmessage('Marcado!');
 end{si no lo usas para que lo pones
 else
 begin
  showmessage('No marcado!');
 end;}
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
  CheckBox1.Checked := Not CheckBox1.Checked;
end;

olbeup 22-03-2011 08:20:20

También puedes usar una variable intermedia que es lo que yo utilizo.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  OnEventTmp: TNotifyEvent;
begin
  OnEventTmp := CheckBox1.OnClick;
    CheckBox1.OnClick:= nil;
    CheckBox1.Checked:= False;
  CheckBox1.OnClick:= OnEventTmp;
end;
Un saludo.

P.D.: También, el componente que ha modificado y añadido una variable, es buena idea e incluso es más atractiva.


La franja horaria es GMT +2. Ahora son las 08:27:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi