Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Personalizar TMainMenu (https://www.clubdelphi.com/foros/showthread.php?t=90134)

Angel.Matilla 13-04-2016 18:22:19

Personalizar TMainMenu
 
1 Archivos Adjunto(s)
Estaba probando un código que hay en otro foro al que estoy apuntado (Colores dentro del TMenu), y me ha surgido un pequeño problema. Os explico.


La primera imagen es SIN utilizar el código de César. Como véis hay un opción que tiene un submenú. Sin embargo, si uso el código del hilo ocurre lo de la segunda imagen, que el texto "invade" la zona del gráfico y no acabo de ver como evitarlo. En el fichero adjunto está el código en el que no soy capaz de encontrar como evitar ese problema.

ecfisa 13-04-2016 19:48:56

Hola.

Revisa que el item "Devoluciones" (así como todos), tenga asignada la función de dibujado en el evento OnDrawItem.

Saludos :)

Angel.Matilla 14-04-2016 10:15:56

Cita:

Empezado por ecfisa (Mensaje 504368)
Revisa que el item "Devoluciones" (así como todos), tenga asignada la función de dibujado en el evento OnDrawItem.

Gracias. Todas las opciones del menú tienen asignado el evento. Evidentemente, todas ellas apuntan al mismo. El código lo he escrito en OnDrawItem de la primera opción del menú (Personas); no creo que eso influya, pero no lo sé.

ecfisa 15-04-2016 01:08:31

Hola.

Por un lado la página del enlace me pedía registro para acceder y por otro no podía abrir el adjunto.

Ahora que pude abrir y ver el adjunto, usando el primer código del mismo, creo que podes hacer de este modo:
Código PHP:

// ...
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
int xymaxLen 0;

  
// hallar el texto mas largo
  
for (0MainMenu1->Items->Countx++)
  {
    
TMenuItemmi static_cast<TMenuItem*>(MainMenu1->Items->Items[x]);
    for (
0mi->County++)
      if (
mi->Items[y]->Caption.Length() > maxLen)
        
maxLen mi->Items[y]->Caption.Length();
  }

  
// agregar 5 espacios (o los que gustes) e igualar largos
  
maxLen += 5;
  for (
0MainMenu1->Items->Countx++)
  {
    
TMenuItemmi static_cast<TMenuItem*>(MainMenu1->Items->Items[x]);
    for (
0mi->County++)
      
mi->Items[y]->Caption +=  mi->Items[y]->Caption.StringOfChar(' ',
        
maxLen-mi->Items[y]->Caption.Length());
  }
}

void __fastcall TForm1::Listados1DrawItem(TObject *SenderTCanvas *ACanvas,
  
TRect &ARectbool Selected)
{
  
TRect FocusRectBorder ARect;
  
TRect FocusRectFill   ARect;
  
TRect TextRect        ARect;
  
TMenuItem *MenuItem   = ((TMenuItem*)Sender);
  
AnsiString Text MenuItem->Caption;

  if(
Text == "") return;

  
ACanvas->Brush->Color MainMenuBackground;
  
ACanvas->FillRect(ARect);

  if(
Selected)
  {
   
ACanvas->Brush->Color BorderColor;
   
ACanvas->FrameRect(FocusRectBorder);
   
FocusRectFill.Top    += 1;
   
FocusRectFill.Right  -= 1;
   
FocusRectFill.Left   += 1;
   
FocusRectFill.Bottom -= 1;
   
ACanvas->Brush->Color MainMenuHighlightColor;
   
ACanvas->FillRect(FocusRectFill);
   
ACanvas->Font->Color MainMenuHighlightTextColor;
  }
  else
    
ACanvas->Font->Color MainMenuTextColor;

  
InflateRect(&TextRect,-1,-1);
  
DrawText(ACanvas->HandleText.c_str(), Text.Length(),
    &
TextRectDT_SINGLELINE);


Resultado:


Saludos :)

Angel.Matilla 15-04-2016 10:04:44

Gracias ecfisa. Me he vuelto loco tratando de encontrar una solución similar a la que sugieres.


La franja horaria es GMT +2. Ahora son las 16:51:45.

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