Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar fuente del menu (https://www.clubdelphi.com/foros/showthread.php?t=50323)

VRO 14-11-2007 17:30:50

Cambiar fuente del menu
 
Hola, ¿hay alguna manera de cambiar las fuentes que se usan en los menus? ¿y en todo el programa?.

Gracias por adelantado.

jhonny 14-11-2007 17:48:21

Cita:

Empezado por VRO (Mensaje 246139)
Hola, ¿hay alguna manera de cambiar las fuentes que se usan en los menus? ¿y en todo el programa?.

Gracias por adelantado.

Si, hay manera de hacerlo, pero antes de decir cualquier cosa respondeme lo siguiente... ¿Realmente te refieres a todo en el programa, Osea Menus, Botones, Paneles, Titulos, etc, etc... o solo a algunos controles en especifico?

VRO 15-11-2007 17:14:24

Cambiar fuente
 
Correcto, me estoy refiriendo a cambiar la fuente de cualquier control para todo el programa.

Gracias por responder

jhonny 15-11-2007 17:58:56

Hay dos posibilidades, tu decides cual es mejor para vos :).

1) Bueno, para ser sincero no encontre una clase donde Font sea una propiedad común, en un principio creí que sería TWinControl pero pensandolo un poco mas y al ver que no tenia esa propiedad entendí que no tendria mucho sentido, quizá porque hay WinControls que no necesitan un Font (Como por ejemplo el TScrollBar)... en todo caso podriamos "engañar" un poco esto y hacerle creer a todos por unos instantes que solo estamos trabajando con Edits... despues de todo los demas tambien son descendientes de TControl y podemos hacer un Cast entre ellos, asi:

Código Delphi [-]
procedure CambiarFont(Forma :TForm; Fuente :String);
var
  i :Integer;
begin
  for i := 0 to Forma.ControlCount -1  do
  begin
    TEdit(Forma.Controls[i]).Font.Name := Fuente;
  end;
end;

Donde Forma es el formulario al que queremos aplicar dicho algortimo y fuente es el nombre de la fuente que queremos ver...


2) Todo lo anterior no seria necesario si tenemos todos los controles con su propiedad ParentFont en True y luego simplemente cambiamos el Font del formulario con una funcion tan sencilla como la siguiente:

Código Delphi [-]
procedure CambiarFont(Forma :TForm; Fuente :String);
begin
  Forma.Font.Name := Fuente;
end;

Automaticamente todos los controles que esten sobre él cambiaran su tipo de letra.

Espero que esto te sirva de algo ;).

jhonny 15-11-2007 19:18:48

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 :).

VRO 15-11-2007 19:48:58

Cambiar fuente
 
Muchas gracias por tus respuesta jhonny, voy a probarlas :)


La franja horaria es GMT +2. Ahora son las 05:13:37.

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