Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   puedo lograr un CheckBox.OnChange? (https://www.clubdelphi.com/foros/showthread.php?t=69456)

sidneyb 19-08-2010 17:05:34

puedo lograr un CheckBox.OnChange?
 
buen dia estimados amigos, tengo una pequeña duda

estoy creando una aplicacion, en la que estoy realizando un registro de paises, estados y ciudades, los dos primeros con un par de combobox por lo que ya los tengo previamente registrados, deseo colocar un checkbox, para filtrar un dbgrid que tengo lleno gracias a una consulta en x tablas, pero deseo filtrar en ciertos casos para reducir la cantidad de registros mostrados en el grid dependiendo de que estado y pais este seleccionado, checked=filtrado y si no no me filtre, pero no deseo depender de otro boton que me mire el estado del checkbox, todo lo contrario, quiero que desde el mismo checkbox se detecte cuando ha sido modificado sin depender de otro componente... como podria ser posible hacerlo?

gracias por su ayuda

urixiv 19-08-2010 17:16:09

Hola,
espero poderte ayudar, no se si hay otra manera, pero yo lo haria con el evento onClick del Checkbox.
Creo recordar, pero hablo de memoria lejana :p que este evento salta cuando alguien le da al checkbox, tanto con el raton o bien con el espacio una vez parado en el componente.

Bueno espero haberte podido ayudar

sidneyb 19-08-2010 18:09:46

Cita:

Empezado por urixiv (Mensaje 373940)
Hola,
espero poderte ayudar, no se si hay otra manera, pero yo lo haria con el evento onClick del Checkbox.
Creo recordar, pero hablo de memoria lejana :p que este evento salta cuando alguien le da al checkbox, tanto con el raton o bien con el espacio una vez parado en el componente.

Bueno espero haberte podido ayudar


con el onclick nosolo tocaria o recibiria el click del mouse? no se si este programado tambien para captar la barra espaciadora, en todo caso, cualquier cosa que me detecte que ha cambiado de estado me sirve, solo me gustaria evitar otro componente, sino, tocara usarlo, pero igual probare tu planteamiento, honestamente no he probado, asumi que solo tomaria el click del raton, igual, sigo escuchando ideas, muchas gracias

ecfisa 19-08-2010 18:45:35

Hola sydneyb.

A tál efecto podés usar los eventos OnDropDown y OnCloseUp del TComboBox.

Activando el filtro en OnDropDown y desactivándolo en OnCloseUp.


Saludos.

coso 19-08-2010 20:43:21

Hola,
tambien puedes crear una variante del componente, sobreescribiendo la propiedad Checked

Código Delphi [-]
type TCheckBox=class(stdctrls.TCheckBox)
...
private
    FOnChange : TNotifyEvent;
protected
    procedure SetVChecked(c : boolean);
    function  GetVChecked : boolean;

published
    property Checked : boolean read GetVChecked write SetVChecked;
    property OnChange : TNotifyEvent read FOnChange write FOnChange;
end;

...

procedure TCheckBox.SetVChecked(c : boolean);
begin
   inherited Checked := c;
   if Assigned(FOnChange) then FOnChange(self);
end;

function TCheckBox.GetVChecked : boolean;
begin
   result := inherited Checked;
end;

algo asi. No se si te dara error al ya existir la propiedad checked. Si es asi, casi que lo mejor seria crear el componente de nuevo desde TCustomCheckBox. Un saludo, y espero que al menos cojas alguna idea que te sirva.

PD: creo que existen directamente los métodos SetChecked y GetChecked en la misma TCheckBox. En ese caso, se reduciria lo anterior a algo asi:

Código Delphi [-]

type TCheckBox = class (stdctrls.TCheckBox)
    private
     FOnChange : TNotifyEvent;
    protected
     procedure SetChecked(Value : boolean); override;
    public
    published
    property OnChange : TNotifyEvent read FOnChange write FOnChange;
...
end;

...

procedure TCheckBox.SetChecked(Value : boolean);
begin
     inherited SetChecked(Value);
     if Assigned(FOnChange) then FOnChange(self);
end;
    
end;

Lo mismo, a ver si te sirve. Saludos.

afunez2007 19-08-2010 20:56:26

yo lo hago asi:
en el evenvto on click del checkbox
Código Delphi [-]
if checkbox1.checked=true then
begin
   Table1.filtered:=false;
   Table1.Filter:='lo que quieras';
   Table1.filtered:=True;
end;
if checkbox1.checked=false then
begin
   Table1.filtered:=false;
   Table1.Filter:='';
end;

Espero te sisrva

Saludos


La franja horaria es GMT +2. Ahora son las 00:28:35.

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