Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Personalizar TMainMenu

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.
Archivos Adjuntos
Tipo de Archivo: rar TMainMenu.rar (2,4 KB, 11 visitas)
Responder Con Cita
  #2  
Antiguo 13-04-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

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

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 14-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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é.
Responder Con Cita
  #4  
Antiguo 15-04-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-04-2016 a las 01:13:38. Razón: agregar comentario
Responder Con Cita
  #5  
Antiguo 15-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias ecfisa. Me he vuelto loco tratando de encontrar una solución similar a la que sugieres.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TMainMenu no se muestra brakaman Lazarus, FreePascal, Kylix, etc. 4 06-06-2014 12:13:26
Cascade() sin TMainMenu Diego827 Varios 1 19-10-2011 02:17:45
color TMainMenu VRO OOP 0 12-06-2008 17:45:21
TmainMenu no en top del form jonmendi OOP 1 14-04-2008 17:19:53
!TmainMenu Desplegado Carlosguiland OOP 1 09-11-2004 19:28:11


La franja horaria es GMT +2. Ahora son las 23:20:52.


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
Copyright 1996-2007 Club Delphi