Utilisation de Delphi Je souhaite ajouter un autre bouton aux boutons d'icône de bordure; Fermez, maximisez, minimisez. auriez vous des idées pour faire ça?Ajout d'une icône de bordure au formulaire
Répondre
Cela a été facile à faire avant Windows Aero. Vous deviez simplement écouter les messages WM_NCPAINT
et WM_NCACTIVATE
pour dessiner au-dessus de la barre de légende. De même, vous pouvez utiliser les autres messages WM_NC*
pour répondre aux clics de souris, etc., en particulier WM_NCHITTEST
, WM_NCLBUTTONDOWN
et WM_NCLBUTTONUP
.
Par exemple, pour dessiner une chaîne sur la barre de titre, vous ne deviez faire
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.
Maintenant, cela ne fonctionne pas avec Aero activé. Pourtant, il existe un moyen de dessiner sur la barre de légende; J'ai fait cela, mais c'est beaucoup plus compliqué. Voir this article pour un exemple de travail.
Oui, définissez la propriété de style de bordure du formulaire sur bsNone et implémentez votre propre barre de titre avec tous les boutons et comportements personnalisés que vous souhaitez.
Chris Rolliston a écrit un blog détaillé à propos de creating a custom title bar on Vista and Windows 7.
Il a également écrit un follow up article et posté un exemple de code sur CodeCentral.