Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Que objecto es ejecutado cuando se llama una opcion del menu (https://www.clubdelphi.com/foros/showthread.php?t=56546)

ASAPLTDA 20-05-2008 16:48:37

Que objecto es ejecutado cuando se llama una opcion del menu
 
Buenos dias Foristas,
Quiero recorrer las opciones las opciones de un menu para averiguar que opcion se ejecuta cuando selecciono la opcion, este proceso los realizado mediante el siguiente proceso y obtengo la lista de todos opciones por menu, pero requiero obtener el nombre de la accion que ejecuto. Esto es para genertar un archivo con las opciones del menu. Adjunto el framento de codigo conque obtengo los items y descripciones . pero quiero obtener es el programa que ejecuto ejemplo quiero obtener el datos TABLASGEN para identificar que programa ejecuta ya que nombre del objeto lo manejo como variable, gracias por su ayuda

Código:

      object M_TABLASGEOGRAFICA: TMenuItem
        Caption = 'Menu Tablas Datos Geograficos'
        Hint = 'M_TABLASGEOGRAFICA--Menu Tablas Datos Geograficos'
        object COUNTRY: TMenuItem
          Caption = 'Mantenimiento Codigos de Paises'
          Hint = 'PAISMST--Mantenimiento Codigos de Paises'
          OnClick = TABLASGEN
        end

Código:

procedure TFPGMMST.SpeedButtonActPgmMstClick(Sender: TObject);
var
 i:integer;
 Z:integer;
 p:string;
 D:string;
 W_ACTION:STRING;
 MENUITEM :TMenuItem;
 MENUITEMP:TMenuItem;

 NotifyEvent:TNotifyEvent;
  mp:string;

begin
//    TABLASGEN ;
//    CONSULTASGEN ;


  Z := fmenu.componentCount -1 ;  // FMENU LA FORMA DONDE ESTAN LOS MENU
  for i:= 0 to Z do begin
    if fmenu.components[i] is TmenuItem then begin
      mp:='';
      MENUITEM:= fmenu.components[i] as TMenuItem ;
      if  MENUITEM.hasparent = true then Begin    // NOMBRE DEL MENU DE LA OPCION
          MP:= MENUITEM.parent.name;
      end;

      p:= fmenu.components[i].name;
      D:= Trim(MENUITEM.Caption);                  // DESCRIPCION DE LA OPCION
      NotifyEvent:=  MENUITEM.OnClick ;
      //IF  NotifyEvent.
      if (D <> '-') AND (D<>'') then begin
      // CREAR OPCION DEL MENU EN ARCHIVO DE OPCIONES
      if not pgmmst.findkey([p]) then begin
          pgmmst.append;
          pgmmst.FieldByName('ACTIVO').asString  := 'A';
          pgmmst.FieldByName('PGMCODE').asString  := P;
          PgmMst.FieldByName('NOMBRE').asString  := D;
          PgmMst.FieldByName('DPGMCODE').asString := D;
          PgmMst.fieldbyname('MENUNAME').asstring :=  MP ;
          PgmMst.FieldByName('PUBLICO').asString  := 'N';
          PgmMst.post;
          PgmMst.ApplyUpdates(0);
      end;
      // ACTUALIZAR LA OPCION DEL MENU
      if  pgmmst.findkey([p]) then begin
        if Trim(PgmMst.fieldbyname('MENUNAME').asstring) = '' then begin
            PgmMst.Edit;
            PgmMst.fieldbyname('MENUNAME').asstring :=  MP ;
            PgmMst.post;
            PgmMst.ApplyUpdates(0);
        end;

      end;

      end;
    end;
  end;
end;


Lepe 20-05-2008 18:29:04

Pues vas a tener que hacerlo por RTTI, además que deberás compilar con la información de debug y tus ejecutables serán un poquito (400- 500 kb) más grandes.

El hecho es que ese "TablasGen" una vez compilado se traduce en una dirección de memoria, un puntero, por ello no es fácil de obtener el texto.

La verdad no entiendo bien lo que quieres hacer. Por un lado pones en amarillo el nombre de un método (o procedimiento) pero después dices que quieres el nombre de una "acción" ¿un TAction? no sé, no sé, me ha confundido un poco todo eso.


Creo que Neftali hizo un ejemplo para guardar los elementos de menú en un archivo y recuperarlos, quizás en su web encuentres algo.

Saludos


La franja horaria es GMT +2. Ahora son las 12:57:21.

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