Amikor a Delphi létrehoz egy komponenst, mely a TWinControl osztályból származtatható (például egy EditBox, Button vagy Form), az adott objektum Create metódusa meghívja a CreateWindowEx API függvényt, mely létrehozza az aktuális ablakot. Mielőtt azonban ez megtörténne, végrehajtódik a CreateParams metódus, melyben a létrehozandó ablak stílusa van eltárolva, és amely egy virtuális metódusa a TForm osztálynak. Ez azt jelenti, hogy felülírható, így akár igényeink szerint beállíthatjuk a létrehozandó ablak stílusát. Feltölthetünk egy TCreateParams típusú adatstruktúrát, mely az adott ablak jellemzőit tárolja, és melyek paraméterként kerülnek a CreateWindowEx függvényhez.
Lássuk ennek az adatstruktúrának a felépítését.
type
TCreateParams = record
Caption: PChar;
Style: DWORD;
ExStyle: DWORD;
X, Y: Integer;
Width, Height: Integer;
WndParent: HWND;
Param: Pointer;
WindowClass: TWndClass;
WinClassName: array[0..63] of Char;
end;
Paraméterek
Caption: PChar
Az ablak fejlécének szövege.
Style: DWORD
Stílus flag, mely a létrehozandó ablak stílusát határozza meg.
ExStyle: DWORD
Kiterjesztett stílus flag, további stílus beállításokat tesz lehetővé.
X, Y: Integer
Az ablaknak a képernyő bal, illetve felső szélétől való távolsága.
Width Height: Integer
Az ablak szélessége és magassága.
WndParent: HWND
Szülőablak leírója.
Param: Pointer
Egy paraméterre mutat, melyet az LParam változóban adunk át a WM_CREATE Windows üzenetnek.
WindowClass: TWndClass
A létrehozandó ablak osztályának információit tartalmazza.
WinClassName: array[0..63] of Char
A létrehozandó ablak osztályának megnevezése.
Néhányukat közvetlenül az Object Inspector-ból is beállíthatunk tervezési időben. Így például az ablak Caption, Left, Top, Width és Height paramétereit.
A mellékelt példaprogramban láthatunk néhány példát a CreateParams struktúra és a különböző stílusok használatára. Ahhoz, hogy a beállításaink érvényesüljenek, felül kell írnunk az alapértelmezett CreateParams metódust. Ezt a Form Private részében tehetjük meg.
...
private
procedure CreateParams
(var Params: TCreateParams); override;
...
Nézzük, hogyan hozhatunk létre egy süllyesztett keretű ablakot, a WS_EX_OVERLAPPEDWINDOW kiterjesztett stílus használatával.
procedure TForm3.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle OR WS_EX_OVERLAPPEDWINDOW;
end;
Hasonlóképpen hozhatunk létre Stay On Top, azaz mindig látszó alkalmazást is, a WS_EX_TOPMOST stílus használatával.
procedure TForm5.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do begin
ExStyle := ExStyle or WS_EX_TOPMOST;
WndParent := GetDesktopwindow;
end;
end;
A mellékelt programban további stílusokra is találhatunk példákat.
A CreateParams metódus minden olyan komponensnél felhasználható, mely a TWinControl osztályból származik, így például egy nyomógombnak többsoros feliratot adhatunk, amennyiben hozzáadjuk a BS_MULTILINE stílust. Ügyeljünk azonban arra, hogy a különböző komponenseknek megvan a saját stíluskészletük.