[Lazarus-es] Cambiar apariencia widget GTK2 programas para linux

José Mejuto joshyfun en gmail.com
Mie Jul 27 18:49:05 CEST 2011


Hello Sandro,

Wednesday, July 27, 2011, 5:00:44 PM, you wrote:

SA> Hola lista, tengo la necesidad de cambiar la apariencia visual de un
SA> programa en linux, el problema surge cuando ejecutan el programa en otra
SA> pc con un estilo GTk distinto, entonces se ven botones y fuentes 
SA> desfasados. Buscando por la web no encuentro nada que lo solucione, en
SA> el wiki de lazarus aclaran que la LCL toma por defecto y da prioridad al
SA> tema instalado en el sistema por una cuestión de compatibildad 
SA> multiplataforma.
SA> Pero existe la posibilidad de aplicar un tema específico?

No. La solución es que tu código funcione correctamente esté como esté
definido el skin de GTK. El mismo problema lo tendrías en Windows con
diferentes "themes" con o sin aero, classic Windows, etc...
Básicamente lo único que tienes que hacer es escalar los controles en
función del DPI del medio (pantalla en este caso) y opcionalmente en
función del tipo de fuente usado.

Recientemente se ha añadido a Lazarus un ScaleBy que debería escalar
los controles y el form. Yo no lo uso ya que me he escrito bastante
antes mi propio scaleby que se adapta un poco mejor a mis gustos.

La idea básica es que en tiempo de diseño calculo lo que ocupa un
texto tipo como "The quick brown fox jumps over the lazy dog" y en
tiempo de ejecución lo comparo con la fuente actual y aplico el
ScaleBy correspondiente.

Algo como:

Const
  TextReference='The quick brown fox jumps over the lazy dog';
  TextReferenceSizeX=233; //Por ejemplo
  TextReferenceSizeX=21;  //Por ejemplo

procedure Form1.AfterConstruction;
var
  X,Y: Single;
begin
  X:=Self.TextWidth(TextReference)/TextReferenceSizeX; //O era al revés?
  Y:=Self.TextHeight(TextReference)/TextReferenceSizeY;
  Self.ScaleBy(x,y);
end;

SA> Hay alternativas de pago para windows, como lazskin ó themeEngine, pero
SA> busco otra cosa, algo gpl ó la manera de hacerlo por código para linux,
SA> aunque también habría versión para windows.

Es una mala idea aplicar skins a menos que tu aplicación sea algo
multimedia que quieres que quede "espectacular". Todos los skins
suelen fallar en cosas, suelen ser lentos, y consumen memoria. En
Linux además está "mal visto" tener un skin que se salga del standard
definido por el usuario.

-- 
Best regards,
 José





More information about the Lazarus-es mailing list