active_x

Funkce

Přístroj active_x pracuje jako obecný kontejner schopný ve své ploše vytvořit a zobrazit komponentu odpovídající specifikaci ActiveX firmy Microsoft. Více se o ActiveX a souvisejících technologiích firmy Microsoft můžete dočíst v kapitole Control Web a ActiveX.

Technologie ActiveX je velmi úzce svázána s komponentovou technologií COM (Component Object Model), v řadě případů mnohé definice splývají (nejjednodušší ActiveX objekt je totéž co nejjednodušší COM komponenta -- stačí pokud vyváží základní a jediné povinné rozhraní všech COM komponent IUnknown).

Základní motivace vzniku technologie COM je vytvoření standardu umožňujícího tvorbu aplikací ze samostatných binárních komponent, tedy komponent vytvořených nezávislými firmami (programátory) v nezávislých vývojových nástrojích (jazycích). Stejně jako např. při návrhu elektronických obvodů lze použít zapouzdřené komponenty (třeba A/D převodník, DC/DC konvertor apod.) pouze se znalostí jejich rozhraní, i v případě COM komponent je vnitřní architektura nepodstatná, důležité je rozhraní komponenty. Klasické objektově-orientované technologie, dříve slibující znovupoužití již vytvořeného kódu prostřednictvím dědění objektů, v tomto ohledu selhaly, neboť objekty nedokázaly překročit hranice mezi vývojvými prostředími (jazyky) a mnohdy ani mezi různými verzemi téhož jazyka. Ojekty nebyly schopny relativně samostatné existence v rámci operačního systému, vždy zůstaly spíše jen způsobem vnitřní organizace dané aplikace. COM komponenty jsou naproti tomu registrovány v rámci operačního systému a jsou použitelné jakoukoliv aplikací, která využívá standardy COM. Použití COM objektů v rámci systému Control Web zajišťuje právě virtuální přístroj active_x.

Prostřednictvím přístroje active_x je tedy možno do aplikace zabudovat různé komponenty, např. Windows Media Player přehrávající MPEG nebo AVI video, Adobe Acrobat Reader zobrazující PDF dokumentaci, Macromedia Director zobrazující animace apod.

Jednou z klíčových úloh ActiveX je zajištění programové ovladatelnosti jednotlivých komponent. Pokud je dopředu znám typ (třída) jednotlivých komponent, jsou tedy známa rozhraní publikovaná komponentami a samozřejmě lze volat metody těchto rozhraní. Obecné nástroje ale musí pracovat s dopředu neznámými komponentami, proto byly v rámci ActiveX vyvinuty prostředky pro ovládání předem neznámých komponent zvané Automation (dříve OLE Automation). Komponenty programově ovládatelné (scriptable) informují o svých vlastnostech a metodách prostřednictvím tzv. typových knihoven (type libraries) a programy využívající služeb těchto komponent dokáží na základě informací v typových knihovnách za běhu přistupovat ke komponentám, o nichž neznali v době své tvorby (překladu) vůbec nic. Přístup ke komponentám se v principu děje dvěma způsoby:

Protože prostředí systému Control Web je volně programovatelné (viz. kapitola Programování a procedury), zajišťuje přístroj active_x taktéž zprostředkovávání přístupu k vlastnostem (properties) a metodám ActiveX komponenty z procedur libovolných virtuálních přístrojů aplikace Control Web.

Syntax

  active_x active_x_name;
    rem = string;
    bubble = string;
    timer = timer_name;
    owner = owner_name;
    position = integer, integer, integer, integer;
    win_disable = [ identifier, ... ];
    win_title = string;
    CLSID = class_id;
    name = string;
    properties
      property_name = property_value;
      ...
    end_properties;
  end_active_x;

Specifické parametry přístroje

Nativní procedury přístroje

Move( dx, dy : number )

Přesune přístroj o souřadnice dx, dy vzhledem ke stávající poloze. Velikost přístroje se nezmění.

MoveTo( x, y : number )

Přesune přístroj na souřadnice x, y vzhledem k vlastníkovi. Velikost přístroje se nezmění.

Size( w, d : number )

Změní velikost přístroje na w, d. Pozice přístroje není ovlivněna.

NewRect( x, y, w, d : number )

Změní současně pozici i velikost přístroje. Pozice je určena vzhledem k vlastníkovi.

Hide()

Skryje přístroj.

Show()

Zobrazí přístroj.

SetProperty( PropertyName : string; PropertyValue : any )
SetProperty( PropertyName : string; PropertyValue : any; index : number )
SetProperty( PropertyName : string; PropertyValue : any; index1, index2 : number )
SetProperty( PropertyName : string; PropertyValue : any; index1, index2, index3 : number )

Nastaví vlastnost (property) ActiveX komponenty, identifikované jménem PropertyName. Pokud je vlastnost indexovaná, je možno použít přetížených procedur akceptujících daný počet indexů.

GetProperty( PropertyName : string; &PropertyValue : any )
GetProperty( PropertyName : string; &PropertyValue : any; index : number )
GetProperty( PropertyName : string; &PropertyValue : any; index1, index2 : number )
GetProperty( PropertyName : string; &PropertyValue : any; index1, index2, index3 : number )

Přečte vlastnost (property) ActiveX komponenty, identifikované jménem PropertyName a vrátí její hodnotu do elementu PropertyValue. Pokud je vlastnost indexovaná, je možno použít přetížených procedur akceptujících daný počet indexů.

Automation metody

Přístroj active_x mapuje Automation metody ActiveX komponenty jako své nativní procedury. Protože množina těchto metod závisí na vložené ActiveX komponentě, nelze je staticky zobrazit. Z tohoto důvodu inspektor přístroje active_x nabízí přehled aktuálně existujících nativních procedur včetně automation metod:

Automation metody mapované jako nativní procedury

Automation metody mapované jako nativní procedury

Událostní procedury přístroje

Přístroj může volat standardní událostní procedury:

OnActivate()
OnSelect()
OnDeselect()
OnShow()
OnHide()
OnNewPosition( RectX, RectY, RectW, RectD : integer )
OnWindowMinimize()
OnWindowMaximize()
OnWindowRestore( WasMinimized, WasMaximized : boolean )
OnWindowClose()

Podrobnější informace k těmto procedurám lze nalézt v kapitole Programování a procedury.

Specifické událostní procedury přístroje

Pokud je ActiveX komponenta schopna generovat události (Events), publikuje je v podobě tzv. zdrojových rozhraní (source interfaces). Tato rozhraní komponenta neimplementuje, ale pouze říká, že má zájem je volat po výskytu nějaké události. Přístroj active_x vytvoří pro vloženou ActiveX komponentu dané rozhraní a naváže je na přípojný bod komponenty. Jednotlivé události volané komponentou jsou pak mapovány jako specifické událostní procedury přístroje active_x.

Aby byl přístroj active_x schopen mapovat události ActiveX komponenty jako specifické událostní procedury, musí být splněno několik podmínek: