Tipy a triky v Delphi, díl 91.

Dlouho jsme se nevěnovali Windows XP a novinkám, které nám přináší, takže to dnes trochu napravíme. Začneme tím nejviditelnějším, tedy novou vizuální podobou neboli tématy.
Nový vzhled Windows se systémem "skinů" (témat) nejen že znechutil některé uživatele (a teď ponechme stranou jak velká část uživatelů to je), ale také přinesl některé problémy programátorům. O některých problémech s Delphi jsme zde již také kdysi hovořili, ale to je již naštěstí minulost a s příchodem Delphi 7 můžeme bez potíží (nebo dodatečných úprav) vizuálních témat v našich aplikacích snadno používat.

Přesto se ovšem může přihodit situace, kdy zkrátka aplikace nevypadá pod vlivem nových stylů pěkně. Ve starších verzích Windows je třeba vše v pořádku, ale styly Windows XP celé okno aplikace nějak nepěkně "rozhodí". Abychom na to mohli nějak reagovat, hodila by se nám funkce, která dokáže zjistit jestli jsou styly aktivní či ne. Naše aplikace pak podle toho může kupříkladu mírně upravit vlastnosti nějaké vizuální komponenty, která pod XP nevypadá úplně dokonale. Jednoduchý test, který by prostě ověřil je-li aplikace spuštěna pod Windows XP, samozřejmě nestačí, protože i pod Windows XP si může uživatel styly vypnout. Proto si na to musíme vytvořit zvláštní funkci. Vrací logickou hodnotu True nebo False a její použití vidíte v přiložením příkladu.

Další věc, která s problémem úzce souvisí, je detekce změny použitého stylu. Jak víte, změnit styl není pro uživatele nic obtížného a je to otázkou několika vteřin. I na takovou událost pak může naše aplikace příslušným způsobem reagovat. Tentokrát nám k tomu nebude sloužit funkce, ale systém zpráv Windows.

Společný zdrojový kód pro oba příklady tedy následuje zde:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  WM_THEMECHANGED = $031A;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure WMTHEMECHANGED(var Msg: TMessage); message WM_THEMECHANGED;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ThemeActive: Boolean;
const
  themelib = `uxtheme.dll`;
type
  TIsThemeActive = function: BOOL; stdcall;
var
  IsThemeActive: TIsThemeActive;
  huxtheme: HINST;
begin
  Result := False;
  if (Win32Platform  = VER_PLATFORM_WIN32_NT) and (((Win32MajorVersion = 5) and (Win32MinorVersion >= 1)) or (Win32MajorVersion > 5)) then
  begin
    huxtheme := LoadLibrary(themelib);
    if huxtheme <> 0 then
    begin
      try
        IsThemeActive := GetProcAddress(huxtheme, `IsThemeActive`);
        Result := IsThemeActive;
      finally
        if huxtheme > 0 then FreeLibrary(huxtheme);
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ThemeActive then ShowMessage(`Temata jsou zapnuta.`)
                  else ShowMessage(`Temata jsou vypnuta.`);
end;

procedure TForm1.WMTHEMECHANGED(var Msg: TMessage);
begin
  ShowMessage(`Doslo ke zmene tematu.`);
  Msg.Result := 0;
end;

end.

Ještě připomínám, že za změnu tématu je považována nejen změna jako taková, ale též výběr jiného barevného profilu téhož tématu a nebo samozřejmě i jeho úplné vypnutí (přepnutí do klasického zobrazení) či naopak zapnutí.

Tolik tedy pro dnešek k vizuálním tématům Windows XP.

Diskuze (6) Další článek: Sony uvádí další verzi své populární „obojetné“ vypalovačky DVD

Témata článku: Software, Windows, Programování, Díl, Trik, Vizuální téma


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

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 65

Kde se bere elektřina v zásuvce? Poznejte 10 tajemství venkovních stožárů s dráty

Kde se bere elektřina v zásuvce? Poznejte 10 tajemství venkovních stožárů s dráty

Elektřina se vyrábí v elektrárnách, ale do zásuvek v našich domovech to pak má ještě hodně daleko. Dnes se na tuhle dlouhou cestu podíváme.

David Polesný | 81

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

** Evropská komise přijala legislativní návrh na zrušení střídaní času ** Možná tak v březnu 2019 přesuneme ručičky hodinek naposledy ** Od toho okamžiku bude permanentně platit letní čas

Karel Kilián | 96

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

** Strojové učení v posledních deseti letech dokázalo divy ** Používáme ho dnes každý den nejen ve vyhledávači ** A přesto se člověku nepřibližuje ani náznakem

Jakub Čížek | 59

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

** Americká námořní pěchota nedávno představila 3D tištěná kasárna pro vojáky ** Ty jim tiskne velká 3D tiskárna na beton ** Výsledkem je solidní obytný prostor, který je slušně chráněný před nepřátelskou palbou

Stanislav Mihulka | 18

Odposlouchávali jsme děravou domácnost: Katka z Brightonu právě sedí doma, zatímco její manžel hraje asi golf

Odposlouchávali jsme děravou domácnost: Katka z Brightonu právě sedí doma, zatímco její manžel hraje asi golf

** Na internetu jsou tisíce nezabezpečených chytrých domácností ** Podívali jsme se na jednu z britského Brightonu ** Útočník sestaví kompletní socioekonomický profil rodiny

Jakub Čížek | 31


Aktuální číslo časopisu Computer

Megatest: 13 grafických karet

Srovnání 7 dokovacích stanic s USB-C

Jak na perfektní noční fotografie

Kvalitní zdroje informací pro sebevzdělávání