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í, DLL, Pace, Formulář, TRI, Výsledné dílo, Běžné zobrazení, DEL, Trik, Díl, Knihovna



25 nejlepších filmových parodií, které můžete vidět. Víme, kde je najdete online

25 nejlepších filmových parodií, které můžete vidět. Víme, kde je najdete online

Filmové parodie jsou divácky velmi vděčné a mezi filmaři oblíbené. Tvůrci v nich mohou totiž zcela beztrestně vykrádat cizí díla a v jejich nápodobě popustit uzdu své fantazii. Vybrali jsme nejlepší zahraniční i české parodie.

Jaromír PukMarek Čech
Filmy, které musíte vidět
Tři tipy, jak proklepnout signál Wi-Fi v domácnosti i kanceláři

Tři tipy, jak proklepnout signál Wi-Fi v domácnosti i kanceláři

** Poradíme, jak řešit problémy s rychlostí bezdrátového připojení ** Ukážeme, jak najít nejvhodnější Wi-Fi kanál ** Prozradíme, jak prověřit pokrytí prostoru signálem

Karel Kilián
RouterWi-FiTipy
15 nejlepších válečných filmů, kterým můžete věřit. Víme, kde je najdete online

15 nejlepších válečných filmů, kterým můžete věřit. Víme, kde je najdete online

Vybrali jsme 15 jedinečných filmů, které se věnují válkám ve 20. století. Vybrané snímky mají společné to, že válku neoslavují nebo nevzývají. Naopak kriticky a bolestně obnažují její zrůdnost a nesmyslnost. Jsou to válečné filmy, kterým můžete věřit.

Marek ČechVojtěch Malý
Filmy, které musíte vidět
Vlk se nažral a koza zůstala celá. Google bude dál špehovat i bez cookies

Vlk se nažral a koza zůstala celá. Google bude dál špehovat i bez cookies

Podle posledních informací Google v polovině příštího roku odstraní z Chromu takzvané cookies třetích stran. Přidá se tak k většině ostatních prohlížečů. Co to bude znamenat pro běžné uživatele?

Jan Spěšný
Články z Computeru