Asegurarse de que al menos 1 elemento en un menú TPopup esté siempre seleccionado
-
12-12-2019 - |
Pregunta
Tengo un menú emergente con 3 elementos configurados con las siguientes propiedades.
AutoCheck = True
RadioItem = True
y para el primer elemento del menú configuré el Checked
propiedad a True
Además, el menú tiene al menos 1 elemento seleccionado y se muestra inicialmente.Todo esto está muy bien, pero si hago clic en el elemento que está seleccionado actualmente, la marca (punto) desaparece y quiero que al menos 1 elemento en la ventana emergente esté seleccionado en todo momento.¿Cómo hago para hacer eso?
Solución
Los elementos del grupo también deben tener el mismo valor distinto de cero. GroupIndex
.Esto, junto con RadioItem
debería hacer que los elementos se comporten como un grupo de radio.
Sin embargo, parece que AutoCheck
no respeta GroupIndex
y RadioItem
properties, ya que borrará la marca cuando haga clic en un elemento actualmente marcado.(Podría decirse que esto podría considerarse un error en VCL).
Aquí hay una solución alternativa:
Colocar AutoCheck
a False
, asigna a todos los elementos el mismo valor distinto de cero GroupIndex
y un común OnClick
controlador para verificar el elemento en el que se hizo clic de esta manera:
procedure TForm1.ItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked := True;
end;
O usar Comportamiento, con ellos esto parece funcionar como se esperaba.
Otros consejos
Puede configurar el siguiente controlador OnClick para todos los elementos del menú de su grupo de radio:
procedure TForm1.MenuItemClickHandler(Sender: TObject);
begin
if Sender is TMenuItem then
begin
if not (Sender as TMenuItem).Checked then (Sender as TMenuItem).Checked:=True;
end;
end;