Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear menú en tiempo de ejecución (https://www.clubdelphi.com/foros/showthread.php?t=56001)

FerCastro 04-05-2008 21:42:21

Crear menú en tiempo de ejecución
 
Hola al foro, tengo el siguiente problema.

Necesito crear un menu conceptual (popup) en tiempo de ejecución y asignar una acccion a cada opcion del menu,

Lo que hago es que tomo los datos de un query para crear los items del menu, y eso me queda bien. Ahora, como agrego la propiedad onclick en tiempo de ejecución a cada item que voy creando?

Lo que hago es lo siguiente:

Código Delphi [-]
nTotal := Data.AQMenuPopTSegmentos.RecordCount;
nTotal := Data.AQMenuPopTSegmentos.FindFirst;
For nCiclo := 0 to nTotal - 1 do
  Begin
    MenuItem := TMenuItem.Creaete(mPopTSegmentos)
    MenuItem.Caption := Data.AQMenuPopTSegmentos.FieldbyName('NombreSegemento').AsString;
    mPopTSegmentos.Items.Add(MenuItem);
    Data.AQMenuPopTSegmentos.FindNext


Esto me crea perfectamente los items del menu, pero estos no tienen metodo onclick declarado, lo que necesito es agregarselo pues cada item tiene un llamado a un mismo procedimiento mandando como procedimiento el valor del caption.

Que puedo hacer? cómo se hace lo que deseo?

Agradezco y espero haber sido claro con lo que estoy planteando aqui,

Fernando Castro
México, D.F.

dec 04-05-2008 21:55:50

Hola,

Puedes asignar al evento "OnClick" de los menús un método que tengas preparado a tal efecto. En el mismo formulario, por ejemplo, puedes declarar un método privado tal que así:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure MyOnClick(Sender: TObject);
  end;

Este método puedes asignarlo ya mediante el evento "OnClick" de los "items", tal que así:

Código Delphi [-]
MenuItem.OnClick := MyOnClick;

En la implementación del método "MyOnClick" puedes acceder al "Caption" del "item" que disparó el evento "OnClick" correspondiente y que terminó ejecutando el procedimiento "OnClick":

Código Delphi [-]
procedure TForm1.MyOnClick(Sender: TObject);
var
  itemCaption: string;
begin
  itemCaption := '';
  if (Sender is TButton) then
  begin
    itemCaption := TButton(Sender).Caption;  
  end;

  {...}

end;

Y creo que eso es más o menos todo lo que necesitas. :)

FerCastro 05-05-2008 00:46:21

Gracias DEC
 
Hallé la respuesta en esta dirección:

http://delphi.about.com/od/kbcurt/a/dynamicmenuitem.htm

Agradezco infinitamente tu ayuda.

Fernando Castro
Mexico, D.F.

vejerf 01-07-2008 16:18:36

Hola a todos:
Estoy usando el método de dec para crear un menú en runtime y añadir un evento onClick. Al parecer todo va bien, excepto que estoy viendo que me está añadiendo al crear el TMenu un acceso rápido y me añade el símbolo & delante de alguna letra del caption por lo que al comparar en el evento onClick nunca me da el elemento seleccionado. La pregunta es si hay alguna forma de evitar esto o deshabilitar la tecla de acceso rápido.

Gracias a todos.

dec 17-08-2016 22:57:03

Hola,

Cita:

Empezado por vejerf (Mensaje 297446)
Hola a todos:
Estoy usando el método de dec para crear un menú en runtime y añadir un evento onClick. Al parecer todo va bien, excepto que estoy viendo que me está añadiendo al crear el TMenu un acceso rápido y me añade el símbolo & delante de alguna letra del caption por lo que al comparar en el evento onClick nunca me da el elemento seleccionado. La pregunta es si hay alguna forma de evitar esto o deshabilitar la tecla de acceso rápido.

Gracias a todos.

Seguramente hay una forma de "quitar" la "tecla aceleradora" del menú o de un determinado elemento. Sin ir más lejos podríamos usar "StringReplace" antes de comparar los "Captions". Sin embargo, en 2016, en lugar del "Caption", yo optaría por usar la propiedad "Tag" de los elementos del menú: conseguiríamos lo que queremos sin necesidad de lidiar con el "Caption" de los elementos.

roman 17-08-2016 23:14:12

Cita:

Empezado por dec (Mensaje 507839)
Sin embargo, en 2016, en lugar del "Caption", yo optaría por usar la propiedad "Tag" de los elementos del menú: conseguiríamos lo que queremos sin necesidad de lidiar con el "Caption" de los elementos.

No es lo mismo el dec mosquetero que ocho años después ;)

LineComment Saludos

dec 17-08-2016 23:24:08

¡Hola!

Cita:

Empezado por roman (Mensaje 507841)
No es lo mismo el dec mosquetero que ocho años después ;)

LineComment Saludos

¡Ay! ¡Ya lo creo que no es lo mismo Román! ... :p


La franja horaria es GMT +2. Ahora son las 06:46:50.

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