Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-12-2020
LACV LACV is offline
Miembro
 
Registrado: oct 2015
Posts: 80
Poder: 9
LACV Va por buen camino
Exclamation Menu dinamico

Buena tarde

Compañeros estoy realizando un menu dinamico pero me falta que cuando se genere y se le de clic abra un formulario
Código Delphi [-]
procedure TFrmHome.FormCreate(Sender: TObject);
var
  Item: TMenuItem;
begin
  // generamos el menu dinamico
  DModulot.ResetConf();

  with DModulo.QueryDocumentos do
  begin
    if RecordCount > 0 then
    begin
      First;
      while Eof = false do
      begin
        Item := TMenuItem.Create(Self);
        MVentas.Add(Item);

        Item.Caption := FieldByName('Documento').AsString;
        Item.ImageIndex := 1;
        Item.OnClick := menuDinamicoClick;
        Next;
      end;
    end;
  end;
end;

tengo esta funcion pero no se me ocurre como llamar el formulario
Código Delphi [-]
procedure TFrmHome.menuDinamicoClick(Sender: TObject);
begin
  if Sender is TMenuItem then
  begin
    ShowMessage('Hola');
  end;
end;

Última edición por LACV fecha: 07-12-2020 a las 21:40:48.
Responder Con Cita
  #2  
Antiguo 07-12-2020
LACV LACV is offline
Miembro
 
Registrado: oct 2015
Posts: 80
Poder: 9
LACV Va por buen camino
El real problema es que necesito pasar un valor por la funcion pero no al llarmla me arroja error ya que no se valor darle al sender
Código Delphi [-]
procedure TFrmHome.menuDinamicoClick(Documento: string; Sender: TObject);
begin
  if Sender is TMenuItem then
  begin
    try
      FrmVentasCrud := TFrmVentasCrud.Create(Application);
      // cargamos que rol se va a usar

      FrmHome.Visible := false;

      with FrmVentasCrud do
      begin
        LbTipoDocumento.Caption := '';
        ShowModal;
      end;

    finally
      FreeAndNil(FrmVentasCrud);
      FrmHome.Visible := true;
    end;

  end;
end;
Responder Con Cita
  #3  
Antiguo 08-12-2020
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Ese Documento, ¿qué es? O sea, ¿para qué lo necesitas? ¿De dónde sale? ¿Qué contiene?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 09-12-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Siguiendo el ejemplo que has puesto hay varias cosas a comentar...
La cabecera del procedimiento menuDinamicoClick debe coincidir con el evento al que la estás asignando, por lo tanto debe ser como en el primer mensaje, no como en el segundo.

Código Delphi [-]
procedure TFrmHome.menuDinamicoClick(Sender: TObject);

Para obtener el documento hay varias formas, las más sencillas que se me ocurren:

a) Usar los parámetros que tienes disponibles. En tu caso tienes un Sender que es de tipo TMenuItem. Si de alguna forma puedes añadir el Documento a ese parámetro ya lo tendrás disponible dentro del procedimiento. En tu caso ya lo has hecho usando el Caption.

Código Delphi [-]
Item.Caption := FieldByName('Documento').AsString;

Has utilizado esta línea, por lo tanto dentro del evento puedes utilizar lo siguiente:

Código Delphi [-]
procedure TForm1.menuDinamicoClick(Sender: TObject);
begin
  if Sender is TMenuItem then
  begin
    ShowMessage('Documento: ' + TMenuItem(Sender).Caption);
  end;
end;


b) La segunda opción que se me ocurre, es que crees una lista que te relacione los diferentes elementos del menú con el Documento, por ejemplo utilizado una TStringList o un TDictionary.

Cuando creas los elementos del menú, los añades a una TStringList, como parejas (Documento, TMenuItem):

Código Delphi [-]
...

private
  ListaItems:TStringList;
....

procedure TFrmHome.FormCreate(Sender: TObject);
begin
...
  ListaItems := TStringList.Create;

...
  // añadir cada item a la lista

  ListaItems.AddObject(doc, item);

...

Dentro del evento puedes buscar en la lista y encontrar el elemento (TMenuItem) y obtener el Documento asociado.

Código Delphi [-]
procedure TForm1.menuDinamicoClick(Sender: TObject);
var
  index:integer;
begin
  if Sender is TMenuItem then begin
    // Buscar el MenuItem
    index := ListaItems.IndexOfObject(Sender);
    // encontrado?
    if (index <> -1) then begin
      // ListaItems[index] tiene el documento
      ShowMessage('Documento: ' + ListaItems[index]);
    end;
  end;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Menu Dinamico utilizando Ribbon steelha Varios 3 21-07-2020 15:29:20
Componente Menú Dinámico mantraxer21 Varios 3 31-03-2013 14:10:15
Menú dinámico con JavaScript y PHP lucasarts_18 PHP 14 24-11-2007 21:13:54
Main Menu Dinamico cahosoft Varios 2 30-06-2005 09:45:56
Menu dinamico xxxFALKORxxx OOP 1 23-03-2005 18:06:51


La franja horaria es GMT +2. Ahora son las 18:00:03.


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