Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Question Evento OnClick

Saludos

Tengo algo curioso

En el evento onclick de un RadioGroup tengo asignado uno codigo(cualquiera), supongo que esto debe ejecutarse al hacer Click en este componente. Pero resulta que al cambiar un Item por codigo tambien llama a este evento.

Pueden darme alguna explicacion?

Nt: Me ha pasado con otros componentes pero al tener evento Onchance no le di importancia
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #2  
Antiguo 08-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Una explicación puede verse en el constructor de "TCustomRadioGroup", que es el tipo del que hereda directamente "TRadioGroup":

Código Delphi [-]
constructor TCustomRadioGroup.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := [csSetCaption, csDoubleClicks, csParentBackground];
  FButtons := TList.Create;
  FItems := TStringList.Create;
  TStringList(FItems).OnChange := ItemsChange;
  FItemIndex := -1;
  FColumns := 1;
end;
Observa cómo se "castea" la variable "FItems", de tipo "TStrings" para "promoverla" al tipo "TStringsList" y aprovechar así el evento "OnChange" de este último. De ese modo, cuando cambias por código el "ItemIndex" de un "TRadioGroup" se dispara dicho evento "OnChange".

Continuando un poco este es el método que se asigna al evento "OnChange":

Código Delphi [-]
procedure TCustomRadioGroup.ItemsChange(Sender: TObject);
begin
  if not FReading then
  begin
    if FItemIndex >= FItems.Count then FItemIndex := FItems.Count - 1;
    UpdateButtons;
  end;
end;
Nótese la llamada a "UpdateButtons", cuya implementación se ve a continuación:

Código Delphi [-]
procedure TCustomRadioGroup.UpdateButtons;
var
  I: Integer;
begin
  SetButtonCount(FItems.Count);
  for I := 0 to FButtons.Count - 1 do
    TGroupButton(FButtons[i]).Caption := FItems[i];
  if FItemIndex >= 0 then
  begin
    FUpdating := True;
    TGroupButton(FButtons[FItemIndex]).Checked := True;
    FUpdating := False;
  end;
  ArrangeButtons;
  Invalidate;
end;
De todos modos no soy yo el más indicado para tratar estas cosas. Simplemente quería aportar algo y aquí estoy a riesgo de que me contradigan los que sepan/puedan hacerlo.

Creo haber respondido porqué ocurre lo que ocurre cuando cambias mediante código el "ItemIndex" de un "TRadioGroup", pero, no sabría explicar porqué esto ocurre así en algunos controles y no en otros.

Es verdad que ninguno de los tipos de que hereda "TRadioGroup" cuenta con un evento "OnChange". No ocurre así, por ejemplo, con "TComboBox", el cual hereda de "TCustomComboBox" y este de "TCustomCombo" y este de "TCustomListControl", que es quien implementa el evento "OnChange".

En todo caso hay modos de evitar que cuando cambies programáticamente el "ItemIndex" de un "TRadioGroup" y aun de otros controles, se dispare el evento "OnClick", si es esto lo que necesitas. Hace poco salió el tema aquí mismo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 08-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Gracias dec por la explicacion.

Vi el hilo que pusiste, aunque no me gusta esa manera, tendra que ser asi. Trate de capturar y crear eventos del componente y mensajes de Windows para el proposito, si exito.

Hasta Luego
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #4  
Antiguo 08-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por vtdeleon
Vi el hilo que pusiste, aunque no me gusta esa manera, tendra que ser asi.
Es posible que halla una forma mejor de hacerlo, pero, sinceramente, no encuentro nada "malo" en hacerlo de ese modo, porque, lo que se hace es perfectamente "normal". ¿Puede saberse porqué te ha caído gorda esa solución?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 08-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Jeje, vi tan simple la solucion qeu hasta me cayo mal y yo matandome la cabeza.

Gracias a dios y a usted, todo solucionado
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:33:51.


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
Copyright 1996-2007 Club Delphi