Fügen Sie eine Grenze Symbol Form
-
26-09-2019 - |
Frage
Mit Delphi Ich möchte einen anderen Knopf an der Grenze Symbolschaltflächen hinzuzufügen; schließen, maximize, minimieren. Alle Ideen, wie dies zu tun?
Lösung
Dies war leicht vor Windows Aero zu tun. Sie hatten einfach die WM_NCPAINT
und WM_NCACTIVATE
Nachrichten abzuhören oben auf der Titelleiste zu ziehen, und in ähnlicher Weise könnte man die anderen WM_NC*
Nachrichten reagieren auf Mausklicks usw., insbesondere WM_NCHITTEST
, WM_NCLBUTTONDOWN
und WM_NCLBUTTONUP
verwenden.
Zum Beispiel eine Zeichenfolge auf der Titelleiste ziehen, können Sie nur tun mußten,
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.
Nun, dies ermöglicht nicht mit Aero arbeiten. Dennoch gibt es eine Möglichkeit, auf der Titelleiste zu ziehen; Ich habe das getan, aber es ist viel komplizierter. Siehe dieser Artikel für ein Arbeitsbeispiel .
Andere Tipps
Chris Rolliston einen ausführlichen Blog schrieb über eine benutzerdefinierte Titelleiste auf Vista und Windows 7 erstellen .
Er schrieb auch ein Follow-up-Artikel und geposteten Beispielcode auf Codecentral .
Ja, stellen Sie die Rahmenstil-Eigenschaft auf bsNone der Form und realisiert einen eigenen Titelleiste mit allen Tasten und individuellen Verhalten, das Sie wie.