Tipy a triky v Delphi, díl 101.

Po minulém jubileu se opět vrháme na další tipy. Tentokrát je na řadě Macromedia Flash a jeho přehrávání v Delphi.
Tipy a triky v Delphi, díl 101. Po minulém jubileu se opět vrháme na další tipy. Tentokrát je na řadě Macromedia Flash a jeho přehrávání v Delphi.

Nejprve si vysvětlíme, co bude cílem dnešního snažení a pak se vrhneme na postup. Tak tedy, od našeho dnešního příkladu budeme chtít, aby v okně naší aplikace přehrál libovolný Flash soubor, resp. soubory s koncovkou swf. Jelikož si soubor s naší Flash animací uložíme do zdrojů, bude přímo součástí naší aplikace. Tím se sice může podstatně zvětšit velikost výsledného exe souboru (záleží na velikosti souboru s animací), nicméně bude vše pohromadě a alespoň si znovu pocvičíme práci se zdroji. Samozřejmě můžete zvolit svůj vlastní postup a soubor načítat externě (v konečném důsledku to tak stejně dopadne i našem příkladu). Aby toho nebylo ještě dost, ošetříme navíc jednu důležitou událost, která může nastat. Uživatel naší aplikace totiž nemusí mít Flash v počítači nainstalován, takže se postaráme i o tento případný "nedostatek" a Flash v případě potřeby doinstalujeme sami. Příslušný ocx modul bude rovněž součástí zdrojů naší aplikace. Výsledkem tedy bude aplikace, která přehraje danou Flash animaci a v případě potřeby ještě předtím zajistí instalaci Flashe.

Začneme tvorbou souboru se zdroji. To jsme již prováděli několikrát, takže jen velmi krátce. Do jednoho adresáře nakopírujte váš swf soubor s animací a dále soubor swflash.ocx, který naleznete v systémovém adresáři Windows (podle verze buď windows\system32\macromed\flash a nebo windows\system\macromed\flash). Poté vytvoříme textový soubor s názvem flash.rc, který bude obsahovat pouze tyto dva řádky:

SHOCKWAVEFILE RCDATA soubor.swf
SHOCKWAVEOCX RCDATA swflash.ocx

Tento soubor pak pomocí kompilátoru zdrojů, který naleznete v adresáři BIN v Delphi, zkompilujete příkazem:

Brcc32 flash.rc

a získáte tím zkompilovaný soubor se zdroji flash.res

Nyní je čas spustit Delphi a na paletu komponent importovat Flash, abychom pak mohli s tímto ActiveX objektem pracovat v naší aplikaci. V menu Component vybereme položku Import ActiveX Control, v zobrazeném seznamu nalistujeme Shockwave Flash a stiskneme tlačítko Install. Hotovo.

Konečně se dostáváme ke zdrojovému kódu. Vytvoříme si novou aplikaci a na formulář přidáme ze záložky ActiveX (pokud jste v předchozím kroku nezvolili jinou) komponentu ShockwaveFlash. Teď máte celkem volnou ruku ve změně rozličných parametrů, které se týkají animace i velikosti okna, ale zatím nenačítejte do komponenty žádný soubor s animací, protože ho budeme načítat ze zdrojů. Teď už jenom vytvoříme událost OnCreate, kde se budou veškeré akce odehrávat.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ShockwaveFlash1: TShockwaveFlash;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R flash.res}

procedure TForm1.FormCreate(Sender: TObject);
var
  SystemDir: array[0..MAX_PATH] of Char;
  SWFDir, AppDir: string;
  Fres: TResourceStream;
  Ffile: TFileStream;
begin
  GetSystemDirectory(@SystemDir, MAX_PATH);
  SWFDir := SystemDir + `\macromed\flash\`;
  GetDir(0, AppDir);
  if not FileExists(SWFDir + `swflash.ocx`) then
  begin
    {$i-}
    MkDir(SystemDir + `\macromed`);
    MKDir(SystemDir + `\macromed\flash`);
    {$i+}
    Fres := TResourceStream.Create(0, `SHOCKWAVEOCX`, RT_RCDATA);
    Ffile := TFileStream.Create(SWFDir + `swflash.ocx`, fmCreate);
    Ffile.CopyFrom(Fres, Fres.Size);
    Fres.Free;
    Ffile.Free;
    WinExec(PChar(`regsvr32 /s ` + SWFDir + `swflash.ocx`), SW_HIDE);
  end;
  Fres := TResourceStream.Create(0, `SHOCKWAVEFILE`, RT_RCDATA);
  Ffile := TFileStream.Create(`soubor.swf`, fmCreate);
  Ffile.CopyFrom(Fres, Fres.Size);
  Fres.Free;
  Ffile.Free;
  ShockwaveFlash1.Movie := AppDir + `\soubor.swf`;
end;

end.

A to je vše. Takto spuštěná aplikace nejprve ověří, zda je nainstalován Flash kontrolou existence příslušného souboru a pokud jej nenalezne, vytvoří si příslušný adresář a ze zdrojů naší aplikace jej do tohoto umístění "rozbalí". Pak jej jednoduchým příkazem v systému zaregistruje. Vzhledem ke snaze zkrátit a zpřehlednit výsledný kód je napsán poněkud zjednodušeně, ale ošetření výjimek určitě zvládnete přepracovat do profesionálnější podoby sami podle vašich potřeb. Určitě by také bylo vhodné ještě před samotnou instalací čehokoliv do systému se uživatele zeptat, zda si to přeje či ne a nebo ho alespoň upozornit.

Ve druhé části kódu se pak již rozbalí ze zdrojů samotný soubor s animací a začne se přehrávat. I zde je jisté zjednodušení. Určitě by se slušelo rozbalit soubor spíše do složky pro dočasné soubory a po ukončení aplikace jej smazat. Zkrátka jistě přijdete na řadu dalších zlepšení.

Diskuze (2) Další článek: Fujifilm uvádí FinePix S5000 Zoom - jako zrcadlovka!

Témata článku: Software, Programování, Zjednodušený příklad, Spuštěná aplikace, Díl, Trik, Shockwave


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

Podívejte se, co se stane, když dron DJI Phantom narazí do křídla letadla

Podívejte se, co se stane, když dron DJI Phantom narazí do křídla letadla

** Co se může stát, když relativně maličký dron narazí do křídla letadla? ** Tuto otázku zodpověděli odborníci laboratorním pokusem ** Kvadrokoptéra způsobila významné poškození křídla

Karel Kilián | 19

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 66

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 | 29

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

Solární panely v silnici vypadaly jako dobrý nápad. V praxi se ale neosvědčily

Solární panely v silnici vypadaly jako dobrý nápad. V praxi se ale neosvědčily

** Nápad použít na silnice místo asfaltu solární panely vypadal slibně ** Praktické testy však odhalily celou řadu nevýhod ** Nejhorší je směšná účinnost ve srovnání s fotovoltaickou elektrárnou

Karel Kilián | 65


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku