Delphi - Nyomógombon többsoros felirat elhelyezése

forráskód letöltése
Sok esetben hasznos lenne, ha a egy-egy nyomógombra nem csak egy sorban tudnánk feliratot helyezni. Mivel a TButton ezt nem támogatja, így alaphelyzetben mindig csak egy sorban jelenik meg rajta a feliratunk. Szerencsére ezen a problémán könnyedén segíthetünk egy apró trükkel...
A trükk lényege abban rejlik, hogy a Windows vezérlőknél lehet egy olyan tulajdonságot megadni, hogy az egysoros, vagy többsoros legyen. A TEdit és a TMemo komponens is csak ebben az egy apróságban különbözik egymástól, legalábbis a megjelenítést tekintve.
Ha egy TButton-hoz is hozzárendeljük a többsoros megjelenítés tulajdonságát, akkor már is megoldottuk a problémát és akkor a Caption property-be már csak olyan sztringeket kell írnunk, melyekben van sortörés jel ott, ahol egy-egy új sort szeretnénk kezdeni. A sortörés jele a 13-as és 10-es kódú karakter fogja jelenteni, így ezt kell a szövegünkbe illeszteni.
procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Caption:='abc'#13#10'12345';
A többsorosság tulajdonsága a SetWindowLong függvénnyel állítható be. A GetWindowLong függvénnyel lekérdezzük a már meglévő tulajdonságokat, majd ehhez hozzáadjuk a BS_MULTILINE-t és az így kapott értéket fogjuk beállítani a SetWindowLong használatával.
  SetWindowLong(Button1.Handle, GWL_STYLE, GetWindowLong(Button1.Handle, GWL_STYLE) + BS_MULTILINE);
end;
Ezzel készen is vagyunk. Ha gyakran szükségünk van ilyen típusú nyomógombra, akkor célszerű egy új komponenst készíteni a TButton-ból származtatva, ahol annak CreateParams függvényét felülírva állítsuk be a fenti tulajdonságot, majd hozzunk létre egy új property-t, TStringList típussal, melybe felvehetjük a megjelenítendő többsoros szöveget.