Už jste si zkoušeli vytvořit opravdu maličké okno? Dnes si povíme, jak na to.
Připadá vám úvodní otázka nesmyslná? No jen si to zkuste. Dejme tomu, že potřebujeme vytvořit nějakou speciální aplikaci a chceme zařídit, aby její okno mělo naprosto minimální rozměry, řekněme 50x50 pixelů. Ponechme teď stranou konkrétní praktický smysl takového okna (může obsahovat třeba jen jedno malé tlačítko) a zaměřme se čistě na problém jeho velikosti.
Chceme-li opravdu "klasické" okno, tedy včetně titulkového pruhu, narazíme v Delphi velmi brzy na jeden problém. Totiž dokonce i když vypneme zobrazování ikonek na zavření, minimalizaci a obnovení okna, nepodaří se nám horizontální rozměr okna dostat pod hranici 112 pixelů. Ve vertikálním směru tento problém není a rozměr okna lze zmenšit klidně na nulovou hodnotu (vidět tedy bude jen samotný titulkový pruh). V horizontálním směru se ale pod výše uvedenou hranici prostě nedostanete a to nejen při návrhu aplikace v Delphi IDE, ale i při pokusu vnutit rozměr okna změnou příslušného parametru za běhu aplikace.
Jak z toho ven? Budeme prostě muset systém "přemluvit" a vnutit mu vlastní konstanty pro minimální rozměr okna. A již vás zřejmě nepřekvapí, že i tentokrát k tomu použijeme zprávy systému, konkrétně WM_GETMINMAXINFO.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure GetMinMaxInfo(var Msg: TWMGETMINMAXINFO); message WM_GETMINMAXINFO;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.GetMinMaxInfo(var Msg: TWMGETMINMAXINFO);
begin
inherited;
with Msg.MinMaxInfo^ do
begin
ptMinTrackSize.X := 0;
ptMinTrackSize.Y := 0;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
BorderIcons := BorderIcons - [biSystemMenu];
Width := 50;
Height := 50;
end;
end.
Zdrojový kód je myslím dostatečně jasný a není třeba moc vysvětlovat. V události OnCreate jsou pro ukázku nastaveny rozměry na slíbených 50x50 (a rovněž zařízeno vypnutí tlačítek na titulkovém pruhu).