Ver Mensaje Individual
  #5  
Antiguo 15-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Reputación: 30
jhonny Va camino a la famajhonny Va camino a la fama
Bueno, estuve investigando un poco y note que para cambiar el tipo de fuente en un TMenu es necesario interceptar el evento OnDrawItem de los MenuItems, por ejemplo asi:

Código Delphi [-]
procedure TForm1.Prueba11DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
begin
  ACanvas.Font.Name := 'Comic Sans MS';
  ACanvas.TextRect(ARect, ARect.Left, ARect.Top, StringReplace(TMenuItem(Sender).Caption,'&', '', []));
end; 
  // Para que este evento se "dispare" es necesario tener la propiedad
  // OwnerDraw del TMainMenu en True...

Pero como lo que queremos es cambiarlo en todos los items de menu del TMainMenu, pues podemos recorrer todos los Items de menu asignandole a este evento uno que nosotros creamos "manualmente", asi por ejemplo:

Código Delphi [-]
//Este es el metodo que creamos "manualmente", muy parecido al OnDrawItem 
//original, para poderlo asignar mas adelante
procedure TForm1.AplicarEstoAlDibujar(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
begin
  ACanvas.Font.Name := 'Comic Sans MS';
  ACanvas.TextRect(ARect, ARect.Left, ARect.Top, StringReplace(TMenuItem(Sender).Caption,'&', '', []));
end; 


//Con el siguiente metodo recorremos todos los Items del Menu y le
//asignamos al evento OnDrawItem del Item en curso el metodo anterior

procedure TForm1.CambiarFontMenus(vMenu :TMenuItem; Indice :Integer = 0);
var
  i :Integer;
begin
  if vMenu.MenuIndex <> -1 then
  begin
    vMenu.OnDrawItem := AplicarEstoAlDibujar; //<-- Aqui lo asignamos
  end;

  if vMenu.Count > 0 then
  for i := 0 to vMenu.Count -1 do
  begin
    CambiarFontMenus(vMenu.Items[i]); //<- Aplicamos una retroalimentación
  end;
end;


//El siguiente metodo es un ejemplo de llamar al metodo anterior...
procedure TForm1.FormCreate(Sender: TObject);
begin
  CambiarFontMenus(Self.Menu.Items);
end;

Espero que todo este asunto te sirva de algo .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 15-11-2007 a las 19:36:29. Razón: Mejorar un poco el primer metodo...
Responder Con Cita