PDA

Ver la Versión Completa : Detectar cuando cambia el itemindex de un radiogroup desde codigo


Anel Hernandez
10-01-2018, 07:39:07
Hola,

tengo un procedimiento que se activa cuando cambia el itemindex de un radiogroup. Cuando se hace con el mouse todo funciona bien porque se activa el evento onclick. Pero cuando se hace desde codigo no se activa ningún evento.

Como pudiera detectar cuando cambia el itemindex de un radiogroup desde codigo?

gracias,
A

newtron
10-01-2018, 10:45:24
Hola.

Si lo haces por código no necesitas detectarlo, ya sabes que valores estás poniendo, ¿no?

Saludos

duilioisola
10-01-2018, 13:01:23
Desde código puedes forzar el OnClick, después de modificar el valor de ItemIndex.


begin
...
aRadioGroup.ItemIndex := 1;
aRadioGroupChange(Sender);
...
end;



begin
...
aRadioGroup.ItemIndex := 1;
// Si Sender no te interesa o no lo utilizas dentro del OnChange puedes usar NIL.
aRadioGroupChange(nil);
...
end;

Anel Hernandez
10-01-2018, 15:02:24
Hola,

en ese caso cuando le de click entonces se activa el onclick dos veces. Preferiria hacer un nuevo evento OnItemChange que se active solo cuando cambio el item desde codigo y no desde el click. Pueden explicarme como lo hago?

gracias,
A

duilioisola
10-01-2018, 15:18:37
No se activará dos veces...
Cuando le des con el mouse se activa el OnClick.
Cuando lo modifiques por código no se ejecuta OnClick, a menos que le ejecutes exprésamente como he ejemplificado.

ecfisa
11-01-2018, 12:12:36
Hola.
Hola,

tengo un procedimiento que se activa cuando cambia el itemindex de un radiogroup. Cuando se hace con el mouse todo funciona bien porque se activa el evento onclick. Pero cuando se hace desde codigo no se activa ningún evento.

Como pudiera detectar cuando cambia el itemindex de un radiogroup desde codigo?

A mi no me queda claro que es lo que te está sucediendo, por que si cambias la propiedad ItemIndex desde código, el evento OnClick del TRadioButton se disparará como podes apreciar en este ejemplo simple:

var
ix : Integer = -1;

procedure TForm1.FormCreate(Sender: TObject);
begin
RadioGroup1.Items.CommaText := 'cero,uno,dos,tres,cuatro,cinco';
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
ShowMessage('RadioGroup1Click');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if ix < RadioGroup1.Items.Count then
Inc(ix)
else
ix := 0;
RadioGroup1.ItemIndex := ix;
end;


https://s9.postimg.org/f6vxpll1r/Anel.gif

Saludos :)

escafandra
11-01-2018, 15:46:36
Efectivamente ecfisa tiene razón. El evento OnClick del RadioGroup se activa cuando el índice se cambia por código. Quizás la pregunta de Anel Hernandez no esté bien planteada.

Saludos.

Anel Hernandez
12-01-2018, 06:59:35
Hola,

el problema esta en que yo cambio el itemindex desde codigo en el formcreate y entonces el onclick no se entera.

resolvi con la ayuda de duiloisola,

gracias+
A

Anel Hernandez
12-01-2018, 07:28:14
hola nuevamente,

pensando en lo que decia ecfisa me puse a revisar y encontre el error.

Siempre entra al onclick. lo que pasa que en ese onclick hago operaciones con variables, una de ellas estaba definida x duplicado, global y dentro del procedimiento.

corregido todo,

gracias mil,
A