Añadir un icono de frontera para el formulario
-
26-09-2019 - |
Pregunta
El uso de Delphi que le gustaría añadir otro botón a la frontera icono de botones; estrecha, maximizar, minimizar. Cualquier ideas sobre cómo hacer esto?
Solución
Esto era fácil de hacer antes de Aero de Windows. Simplemente tenía que escuchar los mensajes WM_NCPAINT
y WM_NCACTIVATE
para dibujar en la parte superior de la barra de título, y de manera similar se puede utilizar los otros mensajes WM_NC*
para responder a los clics del ratón, etc, en particular, WM_NCHITTEST
, WM_NCLBUTTONDOWN
y WM_NCLBUTTONUP
.
Por ejemplo, para dibujar una cadena en la barra de título, sólo había que hacer
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
protected
procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE;
private
procedure DrawOnCaption;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMNCActivate(var Msg: TWMNCActivate);
begin
inherited;
DrawOnCaption;
end;
procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
begin
inherited;
DrawOnCaption;
end;
procedure TForm1.DrawOnCaption;
var
dc: HDC;
begin
dc := GetWindowDC(Handle);
try
TextOut(dc, 20, 2, 'test', 4);
finally
ReleaseDC(Handle, dc);
end;
end;
end.
Ahora bien, esto no funciona con Aero activado. Sin embargo, hay una manera de dibujar en la barra de título; Yo lo he hecho, pero es mucho más complicado. Ver este artículo para un ejemplo de trabajo .
Otros consejos
Chris Rolliston escribió un blog detallada acerca de la creación de una barra de título personalizado en Vista y Windows 7 .
También escribió un seguimiento artículo y código de ejemplo Enviado el CodeCentral .
Sí, establezca la propiedad estilo del borde de la forma de bsNone y poner en práctica su propia barra de título con todos los botones y la costumbre comportamiento te gusta.