سؤال

باستخدام 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 وتنفيذ شريط الملكية الخاص بك مع جميع الأزرار والسلوك المخصص الذي تريده.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top