Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Cambiando aspecto del caption en barra de título (https://www.clubdelphi.com/foros/showthread.php?t=77398)

rarratia 21-01-2012 14:55:37

Cambiando aspecto del caption en barra de título
 
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:
Código Delphi [-]
procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE;

Implemento estos procedimientos de la siguiente forma:

Código Delphi [-]
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
 
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.


La franja horaria es GMT +2. Ahora son las 18:02:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi