Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Asignar evento en tiempo de ejecución en TMainMenu (https://www.clubdelphi.com/foros/showthread.php?t=90178)

Angel.Matilla 21-04-2016 12:43:58

Asignar evento en tiempo de ejecución en TMainMenu
 
Continuando con el tema del TMainMenu se me está presentando otro problema que no sé como abordar. En un formulario tengo un TMainMenu que construyo en tiempo de ejecución en función de los resultados de unas querys. Estoy usando este código:
Código PHP:

TMenuItem *mItem0 = new TMenuItem(this);
TMenuItem *mItem1 = new TMenuItem(this);

for (
nItem 0nItem Menu->Items->CountnItem ++)
     switch (
nItem)
     {
          case 
6:
               
fPersona->Auxiliar->Close();
               
fPersona->Auxiliar->SQL->Text "SELECT COUNT(*) Hay FROM Persona WHERE Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion' AND Situacion = 1) AND N_afiliado = 0";
               
fPersona->Auxiliar->Open();
               if (
fPersona->Auxiliar->FieldByName("Hay")->AsInteger 0)
               {
                    
mItem0 Menu->Items->Items[nItem];
                    
mItem0->OnClick NULL;

                    
mItem1 = new TMenuItem(mItem0);
                    
mItem0->Add(mItem1);
                    
mItem1->Caption "Sin número de afiliado";
                    
mItem1->Tag     61;
                    
mItem1->OnClick JlocalClick;
                    
mItem1->OnDrawItem JlocalDrawItem;

                    
mItem1 = new TMenuItem(mItem0);
                    
mItem0->Add(mItem1);
                    
mItem1->Caption "Todas";
                    
mItem1->Tag     62;
                    
mItem1->OnClick JlocalClick;
                    
mItem1->OnDrawItem JlocalDrawItem;
               }
               break;
          case 
7:
               break;
          case 
8:
               break;


Hay otras opciones del menú que son fijas siempre y en las que tengo definido en tiempo de diseño el mismo evento JlocalDrawItem. Sin embargo, tal como tengo puesto el código al compilar me este error:
Cita:

E2034 Cannot convert 'void (_fastcall* (_closure)(T0bject*,TCanvas *,TRect&,bool))(T0bject*,TCanvas_*,TRect&,bool)' to 'void (_fastcall* (_closure)(T0bject*,TCanvas *,const TRect&,bool))(T0bject*,TCanvas *,const TRect&,bool)'
He mirado la ayuda para ese error pero no me resuelve ninguna duda y ya no sé por dónde coger para solucionarlo.

ecfisa 21-04-2016 21:38:48

Hola.

Declará la función de este modo:
Código:

void __fastcall TForm1::MyMenuDrawItem(TObject *Sender,TCanvas *ACanvas,
  const TRect &ARect, bool Selected)

Saludos :)

Angel.Matilla 22-04-2016 09:38:49

Cita:

Empezado por ecfisa (Mensaje 504583)
Hola.

Declará la función de este modo:
Código:

void __fastcall TForm1::MyMenuDrawItem(TObject *Sender,TCanvas *ACanvas,
  const TRect &ARect, bool Selected)

Saludos :)

Muchas gracias. ¿Sabes que pasaba? Cómo los parámetros del evento los pone directamente Builder pues ni se me había ocurrido la posibilidad de modificarlos. ¡Seré burro! :o


La franja horaria es GMT +2. Ahora son las 10:39:38.

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