PDA

Ver la Versión Completa : Cambiando aspecto del caption en barra de título


rarratia
21-01-2012, 14:55:37
Tengo el siguiente problema: capturo el mensaje Paint y Activate de windows para mi ventana y poder modificar los atributos del caption de mi teform con los siguientes procedimientos privados:
procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE;

Implemento estos procedimientos de la siguiente forma:

procedure Tf_main.WMNCPaint(var Msg: TWMNCPaint);
var
Lienzo : TCanvas;
begin
inherited;
lienzo := TCanvas.Create;
try
lienzo.Handle := GetWindowDC(Self.Handle);
with lienzo do
begin
Brush.Color := clActiveCaption;
Font.Size := 12;
TextOut(GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXBORDER),
Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Font.Height)) / 2) + 1, 'algún texto');
end;
finally
ReleaseDC(Self.Handle, lienzo.Handle);
lienzo.Free;
end;
end;

procedure Tf_main.WMNCActivate(var Msg: TWMNCActivate);
var
Lienzo : TCanvas;
begin
inherited;
lienzo := TCanvas.Create;
try
lienzo.Handle := GetWindowDC(Self.Handle);
with lienzo do
begin
Brush.Color := clActiveCaption;
Font.Size := 12;
TextOut(GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXBORDER),
Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Font.Height)) / 2) + 1, ' Some Text');
end;
finally
ReleaseDC(Self.Handle, lienzo.Handle);
lienzo.Free;
end;
end;

Esto que funciona bien en window xp, no me funciona en window 7 ¿Qué estará pasando? ¿Estoy olvidando algo? Por favor si alguien me ayuda para poder cambiar el tamaño de mi caption en el form. Gracias por anticipado

José Luis Garcí
22-01-2012, 09:30:18
Me imagino que es por culpa del Aero, hay una librería, que te permite desactivarlo y activalo la DSiWin32 la encontraras en http://gp.17slon.com/gp/dsiwin32.htm, yo la he probado bajo Windows 7 64 bits y delphi 2010 y funciona.

Espero te funcione.

rarratia
23-01-2012, 13:19:34
Gracias, voy a probar esa librería, ¿se compila con delphi? o se incluye como unidad? ¿Tiene algún método en particular?

José Luis Garcí
24-01-2012, 09:09:30
Llama la unidad en el uses, normalmente en el OnCreate pones AeroDisable y normalmente en el Onclose AeroEnabled, no hagas mucho caso al nombre de aeroDisable y Aeroenabled, lo he escrito de memoria.