أضف أيقونة الحدود إلى النموذج
-
26-09-2019 - |
سؤال
باستخدام Delphi ، أود إضافة زر آخر إلى أزرار أيقونة الحدود ؛ إغلاق ، تعظيم ، تقليل. أي أفكار حول كيفية القيام بذلك؟
المحلول
كان هذا سهلًا قبل Windows Aero. كان عليك ببساطة الاستماع إلى WM_NCPAINT
و WM_NCACTIVATE
الرسائل التي يجب رسمها فوق شريط التسمية التوضيحية ، وبالمثل ، يمكنك استخدام الآخر WM_NC*
الرسائل للرد على نقرات الماوس وما إلى ذلك ، على وجه الخصوص WM_NCHITTEST
, WM_NCLBUTTONDOWN
, ، و WM_NCLBUTTONUP
.
على سبيل المثال ، لرسم سلسلة على شريط العنوان ، كان عليك فقط القيام به
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.
الآن ، هذا لا يعمل مع تمكين Aero. ومع ذلك ، هناك طريقة للرسم على شريط التسمية التوضيحية ؛ لقد فعلت ذلك ، لكنها أكثر تعقيدًا. يرى هذه المقالة للحصول على مثال عمل.
نصائح أخرى
كريس روليستون كتب مدونة مفصلة عن إنشاء شريط عنوان مخصص على Vista و Windows 7.
كما كتب أ متابعة المقالة ونشرت مثال رمز على الترميز.
نعم ، قم بتعيين خاصية نمط الحدود للنموذج على BSNONE وتنفيذ شريط الملكية الخاص بك مع جميع الأزرار والسلوك المخصص الذي تريده.