Tipy a triky v Delphi, díl 172. – formulář v DLL knihovně

Do třetice si budeme povídat o DLL knihovnách a tentokrát si do ní uložíme rovnou celý formulář. Postup je opět velmi jednoduchý.

Samozřejmě i tentokrát začneme nejprve knihovnou. Stejně jako v minulém a předminulém dílu založíme nový projekt typu DLL knihovna. Poté opět přes menu File -> New -> Form vložíme do projektu nový formulář, který ihned uložíme a následně přes menu Project -> Add to Project přidáme formulář do projektu DLL knihovny.

Nyní můžeme vložený formulář libovolně vizuálně upravit dle libosti a potřeby. Můžeme přidat další komponenty, vložit vlastní funkce a kódy událostí, zkrátka cokoliv vás napadne. Máme-li formulář připraven, není to ještě vše. Musíme do kódu projektu knihovny přidat funkce pro zobrazení formuláře, neboť jinak by nebylo možné zobrazit formulář z externí aplikace. Přesněji řečeno to bude jedna procedura, která slouží k běžnému zobrazení formuláře, a jedna funkce, která se postará o modální zobrazení (její návratovou hodnotou je modal result). Funkci i proceduru pak přidáme do seznamu externě dostupných funkcí knihovny. Kód projektu pak vypadá takto:

library Project1;

uses
  SysUtils,
  Classes,
  Unit1 in `Unit1.pas` {Form1}

{$R *.res}

procedure ShowF; stdcall;
begin
  Form1 := TForm1.Create(nil);
  Form1.Show;
end;

function ShowFModal:integer; stdcall;
begin
  Form1 := TForm1.Create(nil);
  Result := Form1.ShowModal;
end;

Exports ShowF, ShowFModal;

begin

end.

Direktiva stdcall, kterou nalezneme u názvu funkce i procedury, patří mezi tzv. volací konvence, kterých je několik druhů a rozhodují o způsobu předávání parametrů (jejich pořadí). Detaily a další možnosti (jako např. register, safecall apod.) naleznete v nápovědě Delphi.

Nesmíme zapomenout na jednu věc a tou je řádné ukončení (resp. destrukce) formuláře po jeho uzavření a tím správné uvolnění zdrojů. Využijeme k tomu událost OnClose formuláře, kde nastavíme TOnCloseAction na hodnotu caFree, která uvolní paměť. Kód události pak bude vypadat takto:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

Tím je knihovna hotová a zbývá nám jen kompilace, abychom získali výsledný DLL soubor. Ten pak použijeme v ukázkové aplikaci. Založíme nový projekt, do dané složky zkopírujeme naši DLL knihovnu a na formulář umístíme pouze dvě tlačítka. První bude volat funkci knihovny pro tradiční zobrazení formuláře, druhé tlačítko pak pro modální zobrazení. Důležitá je ovšem deklarační část unitu formuláře, kde musíme nadefinovat příslušnou proceduru a funkci, které pak budeme v událostech OnClick zmiňovaných tlačítek volat. V této deklaraci si zvolíme vhodný název a uvedeme, že se funkce nachází v externím zdroji, který je opět definován názvem DLL knihovny a tentokrát i názvem funkce. Tyto dva deklarační řádky pak mohou vypadat jednoduše takto:

.
.
procedure ShowForm; stdcall; external `Project1.dll` name `ShowF`;
function ShowFormModal:integer; stdcall; external `Project1.dll` name `ShowFModal`;
.
.

Tím je vlastně dnešní příklad hotov. A využití? Představte si, že máme aplikaci a z menu voláme její funkce. Ty se pak otvírají v dalších oknech. Pokud tato okna (včetně příslušných funkcí, samozřejmě) uložíme do DLL knihovny, umožní nám to velmi elegantní aktualizaci naší aplikace, kdy stačí vyměnit pouze příslušnou knihovnu. Navíc můžeme funkce aplikace rozdělit do pomyslných "plug-inů" a aktualizovat pak pouze jednotlivé části aplikace zvlášť. To je pochopitelně jen nástin nabízejících se možností.

I tentokrát si můžete kompletní zdrojové kódy ukázkové aplikace i samotné knihovny stáhnout zde.

Diskuze (10) Další článek: Sophos rozšíří své produkty o firewall

Témata článku: Software, Programování, Trik, Běžné zobrazení, Díl, DLL, Výsledné dílo, Pace, Knihovna, Formulář


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

WALL-E vyfotil Zemi ze vzdálenosti 1 milionů km

WALL-E vyfotil Zemi ze vzdálenosti 1 milionů km

** Malá sonda s přezdívkou WALL-E pořídila fotografii Země a Měsíce ze vzdálenosti 1 milionů km ** CubeSat letí se sondou InSight k Marsu ** InSight přistane na Marsu 26. listopadu

Petr Kubala | 4

Šéf amerického Red Hatu: Odpojte Brno od internetu a zhroutíme se

Šéf amerického Red Hatu: Odpojte Brno od internetu a zhroutíme se

** V Česku najdete hromadu skvělých vývojářů ** Mnozí z nich přispívají do open-source ** Třeba v brněnském Red Hatu

Jakub Čížek | 51

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

** Nejprve svoji velkou dílnu otevřelo Brno ** Letos se přidala i Praha ** Nabízí malé 3D tiskárny i velké průmyslové stroje

Jakub Čížek | 11

Našli jsme 22 schopných internetových prohlížečů: Vyberte si, který vám nejvíc sedne

Našli jsme 22 schopných internetových prohlížečů: Vyberte si, který vám nejvíc sedne

** Není jen Chrome, Firefox, Edge či Opera. Na výběr máte mnohem více! ** Internetové prohlížeče se liší funkcemi, zaměřením i designem. Našli jsme 22 použitelných prohlížečů pro Windows ** Vyberte si prohlížeč, který vám bude nejvíce vyhovovat

Karel Kilián | 30

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového 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 | 42

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 28


Aktuální číslo časopisu Computer

Kdy necháme řídit chytrá auta?

6 Wi-Fi Mesh systémů ve velkém testu

Srovnali jsme 7 sportovních kamer

Znáte pravidla pro létání s drony?