Tipy a triky v Delphi, díl 83.

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).

Váš názor Další článek: Nové produkty na bázi VoIP od Kerio Technologies

Témata článku: , , , , , , , , , , ,