Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 18
FerCastro Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 04-05-2008
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,

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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 05-05-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 18
FerCastro Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 01-07-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 17-08-2016
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 vejerf Ver Mensaje
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 17-08-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec Ver Mensaje
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
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear conexion en tiempo de ejecución D1360666 Conexión con bases de datos 2 11-01-2016 15:17:56
Diseño menu no cambia en tiempo ejecución Rockin OOP 4 30-03-2009 18:01:54
Crear Controles en Tiempo de Ejecucion Neeruu Varios 3 31-05-2008 20:29:23
Crear BD mysql en tiempo de ejecucion vicvil MySQL 4 05-05-2008 22:55:11
Crear un DSN en tiempo de ejecucion neyvan Conexión con bases de datos 7 21-05-2004 17:41:45


La franja horaria es GMT +2. Ahora son las 13:12:33.


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