Ver Mensaje Individual
  #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.286
Reputación: 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