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: Software, Windows, Programování, Praktický smysl, Trik, Private, Díl, Klasické okno, Okno


Určitě si přečtěte

Intel má 50 let! Připomeňte si 6 klíčových milníků v historii firmy

Intel má 50 let! Připomeňte si 6 klíčových milníků v historii firmy

** Firma Intel byla založena přesně před 50 lety ** Intel začínal jako výrobce pamětí ** Dnes je největším výrobcem procesorů pro osobní počítače

David Polesný, Pavel Tronner | 10

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50

Cardano: kryptoměna nové generace, která se netěží, ale razí

Cardano: kryptoměna nové generace, která se netěží, ale razí

** Cardano je unikátní kryptoměna, která díky svým vlastnostem a schopnostem přitahuje pozornost ** Od Bitcoinu se zásadně liší ** Jejím smyslem není jen „koupit a prodat“, má pozoruhodné technologické možnosti

Martin Miksa | 28

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Sonda Dawn prolétá jen 35 km od trpasličí planety Ceres a posílá úchvatné fotografie!

Sonda Dawn prolétá jen 35 km od trpasličí planety Ceres a posílá úchvatné fotografie!

** Sonda Dawn zkoumá trpasličí planetu Ceres od března 2015 ** Sonda nyní přešla na novou dráhu, nejblíže se dostává k povrchu na vzdálenost jen 35 km ** Ceres je největší planetkou hlavního pásu mezi Marsem a Jupiterem

Petr Kubala | 4


Aktuální číslo časopisu Computer

Jak mobily určují svoji polohu?

Velký test notebooků pro studenty

Nejlepší reproduktory na párty

Služby a aplikace pro výuku angličtiny