Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   como lanzar un tactionlist desde el código (https://www.clubdelphi.com/foros/showthread.php?t=69629)

r1d2m3 30-08-2010 04:45:48

como lanzar un tactionlist desde el código
 
Hola a todos, explicaré un poco mejor el título con la siguiente pregunta: ¿existe alguna forma de lanzar una acción creada con un tactionlist desde una línea de código?. Hasta donde he usado las tactionlist, las mismas debían estar asociadas a la propiedad Action de un menú, botón, etc, etc, cualquier componente que tuviera disponible la propiedad Action. Mi problema es que, bajo ciertas circunstancias, debo lanzar una de estas acciones directamente desde el código y no se como se resuelve esto.

Desde ya, gracias y saludos.

ecfisa 30-08-2010 08:05:44

Hola r1d2m3.

No sé si es lo que estás buscando, pero hice una prueba muy simple con este código y parece funcionar ok.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  with ActionList1 do
    Actions[Random(ActionCount)].OnExecute(Sender);
    // ó de otra forma
    //  ActionList1.Actions[0].OnExecute(Sender); 
    // ...
    //  ActionList1.Actions[ActionList1.ActionCount-1].OnExecute(Sender);
end;

Un índice [0] está haciendo referencia al primer TAction y [ActionCount -1] al último.
También es cierto, que es más fácil llamar directamente al nombre del procedimiento asociado...

Saludos :)

r1d2m3 30-08-2010 15:04:39

Hola ecfisa, gracias por tu respuesta, mirando tu post y recurriendo un poquito a prueba y error, pude resolver lo que necesitaba con la siguiente línea de código
Código Delphi [-]
  rvActionsResource.rvActionSaveAs1.Execute

Saludos.

movorack 30-08-2010 15:55:01

No es necesario llamar al ActionList... todas las acciones creadas en el action list quedan registradas en el formulario/datamodule...

Código Delphi [-]
  TForm1 = class(TForm)
    ActionList1: TActionList;
    ActnAdd: TAction;
    procedure ActnAddExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

entonces puedo llamarlas directamente.

ActnAdd.Execute


La franja horaria es GMT +2. Ahora son las 22:42:54.

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