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;
...
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
index := ListaItems.IndexOfObject(Sender);
if (index <> -1) then begin
ShowMessage('Documento: ' + ListaItems[index]);
end;
end;
end;