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í, Trik, Zjednodušený příklad, Shockwave, Spuštěná aplikace, Díl


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

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ý | 65

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 57

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

** Čeští vědci pod vedením Tomáše Jungwirtha vyvíjí nový typ revolučního paměťového čipu ** Zatímco v současnosti elektronika pracuje s elektrony, v budoucnu to budou spiny elektronů ** Čipy budou moci být klidně i 1 000x rychlejší a úspornější

Karel Javůrek | 32

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

** Vědci spočítali, jak velká by musela být posádka pro vícegenerační let k nejbližší hvězdné soustavě ** Proxima Centauri se nachází 4,3 světelných let od nás ** Za současných technologií bychom k ní letěli 6300 let

Petr Kubala | 53

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji