Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Lista de documentos recientes en ActionMainMenuBar (https://www.clubdelphi.com/foros/showthread.php?t=97669)

CarlosCorp 08-09-2025 17:39:17

Lista de documentos recientes en ActionMainMenuBar
 
Hola amigos, espero puedan ayudarme.
Mi consulta es cómo puedo hacer para crear una lista de documentos recientes que se muestre en el menú de Archivo de un ActionMainMenuBar.
He podido hacerlo en un Ribbon, pero quisiera hacerlo en un ActionAiMaMenuBar.
Gracias de antemano.

Neftali [Germán.Estévez] 09-09-2025 10:37:39

A priori no me suena que haya nada de forma automática para generar esa lista.
Se me ocurre, que
  1. Por un lado crees la lista de ficheros abiertos recientemente (cuando se abre un fichero o cuando se graba uno).
  2. Por otro lado "pintar" esa lista de ficheros en el menú. Para esto deberías crear un nuevo TActionBarItem y a partir de ahí añadirle los elementos de la lista.

Neftali [Germán.Estévez] 09-09-2025 11:03:05

Un pequeño código por si te sirve para arrancar.
Puedes utilizar el proyecto de MDI que genera de ejemplo Delphi, para aplicaciones MDI (un pequeño editor).

Genera el proyecto de ejemplo, pon un botón y asígnale este código:

Código Delphi [-]
procedure TMainForm.Button1Click(Sender: TObject);
var
  iActionClientItem: TActionClientItem;
  ItemFichero: TActionClientItem;
  iActionReciente: TCustomAction;
begin
  // Buscamos el elemento que queremos para añadirlo por debajo
  // En mi caso al final del menú de ficheros
  ItemFichero := ActionManager1.FindItemByAction(FileExit1);
  // Si lo ha enconbtrado seguimos...
  if Assigned(ItemFichero) then begin
    // Añadir un elemento a un menú existente
    // Primero el separador
    ActionManager1.AddSeparator(ItemFichero , False);
    iActionClientItem := ActionManager1.AddSeparator( ActionManager1.FindItemByAction(FileExit1) );
    // Crear la nueva accion
    iActionReciente :=  TCustomAction.Create(Self);
    iActionReciente.OnExecute := AbrirRecent;
    iActionReciente.Caption := 'Nuevo elemento reciente';
    iActionClientItem := ActionManager1.AddAction(iActionReciente, iActionClientItem) ;
  end;
end;

Genera un separador, y un nuevo elemento con un texto.
Genera un procedimiento como este para el Execute.

Código Delphi [-]
procedure TMainForm.AbrirRecent(Sender: TObject);
begin
  ShowMessage('Abrir fichero con este nombre: ' + TCustomAction(Sender).Caption);
end;

Con eso conseguirás que ejecute el código.

CarlosCorp 11-09-2025 02:38:18

Muchas gracias por las ideas, las probaré.


La franja horaria es GMT +2. Ahora son las 06:30:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi