Estoy usando un menú emergente en Delphi. Quiero usarlo en un modo de "grupo de radio", donde si el usuario selecciona un elemento, se marca y los otros elementos no se marcan. Intenté usar la propiedad AutoCheck, pero esto permite verificar varios elementos. ¿Hay alguna manera de configurar el menú emergente para que solo se pueda verificar un elemento?Delphi Menú emergente cheques
Respuesta
Zartog tiene razón, pero si desea mantener la casilla de verificación, asigne este evento a cada elemento en el menú emergente.
Tenga en cuenta que este código es un poco peludo porque no depende de saber el nombre de su menú emergente (por lo tanto, buscándolo con "GetParentComponent").
procedure TForm2.OnPopupItemClick(Sender: TObject);
var
i : integer;
begin
with (Sender as TMenuItem) do begin
//if they just checked something...
if Checked then begin
//go through the list and *un* check everything *else*
for i := 0 to (GetParentComponent as TPopupMenu).Items.Count - 1 do begin
if i <> MenuIndex then begin //don't uncheck the one they just clicked!
(GetParentComponent as TPopupMenu).Items[i].Checked := False;
end; //if not the one they just clicked
end; //for each item in the popup
end; //if we checked something
end; //with
end;
Puede asignar el evento en tiempo de ejecución para cada cuadro emergente en su forma como esto (si desea hacerlo):
procedure TForm2.FormCreate(Sender: TObject);
var
i,j: integer;
begin
inherited;
//look for any popup menus, and assign our custom checkbox handler to them
if Sender is TForm then begin
with (Sender as TForm) do begin
for i := 0 to ComponentCount - 1 do begin
if (Components[i] is TPopupMenu) then begin
for j := 0 to (Components[i] as TPopupMenu).Items.Count - 1 do begin
(Components[i] as TPopupMenu).Items[j].OnClick := OnPopupItemClick;
end; //for every item in the popup list we found
end; //if we found a popup list
end; //for every component on the form
end; //with the form
end; //if we are looking at a form
end;
En respuesta a un comentario más abajo esta respuesta: si desea solicitar que se verifique al menos un elemento, luego use esto en lugar del primer bloque de códigos. Es posible que desee establecer un elemento marcado predeterminado en el evento oncreate.
procedure TForm2.OnPopupItemClick(Sender: TObject);
var
i : integer;
begin
with (Sender as TMenuItem) do begin
//go through the list and make sure *only* the clicked item is checked
for i := 0 to (GetParentComponent as TPopupMenu).Items.Count - 1 do begin
(GetParentComponent as TPopupMenu).Items[i].Checked := (i = MenuIndex);
end; //for each item in the popup
end; //with
end;
Para el tratamiento de la ventana emergente (o cualquier otro) elementos de menú como elementos del grupo de radio, defina la propiedad 'RadioItem' a verdadero de cada artículo que desea tener en el grupo de radio.
En lugar de mostrar una marca de verificación, se mostrará una viñeta en el elemento seleccionado, pero funcionará de la manera que desee, y la señal visual en realidad coincidirá con un estándar de Windows.
Para ampliar en la publicación de Zartog: los menús emergentes en Delphi (desde al menos D6) tienen una propiedad GroupIndex que le permite tener múltiples conjuntos de elementos de radio dentro de un menú. Establecer groupIndex a 1 para el primer grupo, 2 para la segunda, etc.
Así: Conjunto AutoCheck = True Conjunto RadioItem = True Conjunto groupIndex si necesita más de un grupo de elementos de radio
- 1. Buscando el componente de menú emergente radial para Delphi
- 2. Menú emergente Android
- 3. Qt - Menú emergente
- 4. iOS burbuja menú emergente similar a iTunes
- 5. ¿Cómo agregar elementos en el menú emergente?
- 6. Cómo cambiar el color del menú emergente
- 7. Multiple instanceof cheques
- 8. ¿Cómo configurar el menú emergente para la barra de encabezado ListView junto con el menú emergente de elementos?
- 9. ¿Cómo mostrar una ventana que actúa como un menú emergente?
- 10. ¿Cómo hacer un menú emergente con la barra de desplazamiento?
- 11. Cómo crear un menú emergente con submenú en Java
- 12. cómo asignar teclas para el menú emergente en vim
- 13. Interceptar el botón Menú de Android en una ventana emergente
- 14. Completar menú emergente sin archivo XML en android
- 15. Creación de un menú emergente en Qt para QTableView
- 16. Creación de un menú emergente para iPhone similar al menú de aplicación de correo
- 17. Mostrar el menú predeterminado del botón derecho del mouse - Delphi
- 18. Delphi agregar elemento de menú en Windows Explorer clic derecho
- 19. Xcode 4 deshabilitar "emergente" emergente
- 20. Menú principal oculto en un programa delphi, que se muestra automáticamente con la tecla Alt
- 21. Ventana emergente en winforms
- 22. afirmaciones de cheques en una lambda en Python
- 23. Cómo evitar la multiplicidad de si los cheques nulos
- 24. ¿Cuál es el componente que hace clic en un menú emergente originado de
- 25. Elemento de la lista de pulsación larga para abrir el menú emergente
- 26. Encontrar la fila JTable en la que se ha invocado un menú emergente
- 27. Menú emergente al hacer clic en un botón en acción Barra
- 28. wpf popup no se cierra automáticamente cuando datagrid dentro del menú emergente captura el mouse
- 29. ¿Cuál es el truco para inspeccionar el estilo de menú emergente/desplegable con Firebug?
- 30. ventana emergente en el menú contextual de las extensiones de cromo
Él debe también agregue el código que verifica que al menos un elemento del menú esté marcado y que agregue que el usuario de verificación desactiva la entrada marcada. Eso debería ser simple dados sus ejemplos. – gabr
No estoy seguro de que sea su objetivo, pero agregué un bloque para manejar eso en la respuesta. En realidad, simplifica las cosas un poco. – JosephStyons
Esto definitivamente no es el camino a seguir: esta funcionalidad ya está incorporada. Vea las publicaciones de Zartog y Gerry, y combine las dos. – onnodb