Difference between revisions of "Extending the IDE/sk"

From Free Pascal wiki
Jump to navigationJump to search
 
Line 23: Line 23:
 
Vytvorte nový komponent pomocou Editora balíčkov.
 
Vytvorte nový komponent pomocou Editora balíčkov.
  
==Písanie editorov komponentov==
+
==Editory komponentov==
  
Viz príklady v componenteditors.pas
+
Editory komponentov poskytované s Lazarus sú definované v jednotke '''componenteditors.pas'''. Editor komponentu je plugin použitý vývojárom na pridanie špeciálnych funkcií pre triedy komponentov.   
 +
 
 +
Editor komponenty je vytvorený pre každý komponent, ktorý je vybratý v návrhu formulára a je založený na type komponentu (viz '''GetComponentEditor''' a '''RegisterComponentEditor'''). Pri dvojkliku na komponent je volaná metóda Edit. Pri vyvolaní kontextového menu komponentu, sú volané metódy '''GetVerbCount''' a '''GetVerb''', ktoré vybudujú položky menu. Ak je niektorá položka vybratá, je volaná metóda '''ExecuteVerb'''. Metóda '''Paste''' je volaná vždy keď je komponent vložený do schránky.
 +
 
 +
Editor komponentu potrebujete vytvoriť len ak chcete pridať položku/y do kontextového menu, zmeniť predvolené správanie sa pri dvojkliku na komponent alebo pridať rozšírený formát schránky.
 +
 
 +
Predvolený editor komponentu (TDefaultEditor) implementuje metódu '''Edit''' na vyhľadávanie vlastností komponentu a generovanie (alebo navigádiu do) udalostí '''OnCreate''', '''OnChanged''' alebo '''OnClick''' (ktorú nájde prvú). Vždy keď Editor komponentu modifikuje komponent, musí volať Designer.Modified na informovanie návrhára, že formulár bol modifikovaný. (Or else the user can not save the changes).
 +
 
 +
Všetky Editory komponentov sú odvodené od virtuálnej abstraktnej triedy '''TBaseComponentEditor'''.
 +
 
 +
===Triedy Editorov komponentov===
 +
;TDefaultComponentEditor
 +
: Editor, ktorý poskytuje predvolené správanie pre dvojkliknutie, ktoré opakovane prechádza vlastnosti, hľadajúc najvhodnejšiu metódu vlastnosti na editovanie.
 +
;TComponentEditor
 +
: Táto trieda poskytuje základnú implementáciu pre rozhranie IComponentEditor. Nie je podmienkou odvodiť váš Editor vlastností od tejto triedy. IDE vyžaduje len dediť od TBaseComponentEditor a implementovať IComponentEditor, táto trieda pomáha pri implementácii triedy, ktorá vyhovuje týmto podmienkam.
 +
;TNotebookComponentEditor
 +
: Predvolený editor komponentu pre TCustomNotebook.
 +
;TPageComponentEditor
 +
: Predvolený editor komponentu pre TCustomPage.
 +
;TStringGridComponentEditor
 +
: Predvolený editor komponentu pre TStringGrid.
 +
;TToolBarComponentEditor
 +
: Predvolený editor komponentu pre TToolBar.
 +
;TFileDialogComponentEditor
 +
: Predvolený editor komponentu pre TFileDialog.
 +
 
 +
===Metódy k predefinovaniu===
 +
 
 +
Na zmenu správania štandartného Editora vlastností môžete predefinovať tieto metódy:
 +
;Create(AComponent, ADesigner)
 +
: Konštruktor triedy je volaný na vytvorenie Editora komponentu. AComponent je komponent, ktorý má byť editovaný v editore. ADesigner je rozhranie pre nájdenie prvku a vytvorenie metód (často nie je použitý). Ak Editor komponentu akokoľvek modifikuje komponent, musí volať ADesigner.Modified.
 +
;Edit
 +
: Metóda je volaná pri dvojkliku na komponent. Editor komponenty môže vyvolať v tejto metóde napríkald vyvolať dialóg alebo nejaký typ návrhového experta. Ak je GetVerbCount väčší ako nula, Edit spustí obsluhu prvej položky (ExecuteVerb(0)).
 +
;ExecuteVerb(Index)
 +
: Je volaná vybratím položky kontextového menu, zvolená položka je udávaná pomocou Index. Jej správanie je určené Editorom komponentu.
 +
;GetVerb
 +
: Editor komponentu musí vrátiť reťazec, ktorý bude zobrazený v kontextovom menu. Editor komponentu je zodpovedný za vhodné umiestnenie znaku & a znakov '...'.
 +
;GetVerbCount
 +
: Počet platných indexov pre GetVerb a ExecuteVerb. Index začína nulou (tj. 0..GetVerbCount - 1).
 +
;PrepareItem
 +
: Pri vytváraní kontextového menu je pre každú položku volaná PrepareItem. Editor komponentu môže vhodne prispôsobovať položky menu, vrátane pridávania podpoložiek. Ak niektorú položku nechcete zobraziť, neuvoľňujte ju, jednoducho nastavte vlastnosť Visible na False.
 +
;Copy
 +
: Je volaná pri kopírovaní komponentu do schránky. Aj obrázok komponentu je vložený do schránky. Poskytuje možnosť Editoru komponentu vložiť iný typ formátu, ktorý je ignorovaný v Designer, ale môže byť podporovaný inou aplikáciou.
 +
;IsInInlined
 +
: Určuje či je komponent v Designer, ktorý ho vlastní. V podstate, komponenty nemôžu byť pridané do inštancie Frame (collections are fine though) tak táto funkcia určuje, či aktuálne vybratý komponent je nvútri inštancie Frame alebo nie.
 +
;GetComponent
 +
: Vracia editovaný komponent.
 +
;GetDesigner
 +
: Vracia aktuálny Designer formulára vlastniaceho komponent.
 +
 
 +
===Registrácia Editora komponentu===
 +
 
 +
Aby IDE vedelo, ktorý Editor komponentu má použiť, je nutné ho registrovať. Pre toto je v jednotke '''componenteditors.pas''' definovaný procedurálny typ:
 +
 
 +
type
 +
  TRegisterComponentEditorProc
 +
    = procedure (ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
 +
var
 +
  RegisterComponentEditorProc: TRegisterComponentEditorProc;
 +
 
 +
a jedna procedúra a jedna funkcia:
 +
 
 +
  procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
 +
  function GetComponentEditor(Component: TComponent; const Designer: TComponentEditorDesigner): TBaseComponentEditor;
 +
 
 +
Registráciu Editora komponentu urobíte jednoducho volaním funkcie RegisterComponentEditor, pričom do ComponentClass zadáte triedu komponentu a do ComponentEditor zadáte triedu Editora komponentu, napr.:
 +
 
 +
  RegisterComponentEditor(TCustomNotebook, TNotebookComponentEditor);
 +
 
 +
Čím je zaregistrovaný Editor kompentu TNotebookComponentEditor pre komponenty typu TCustomNotebook.
  
 
==Písanie editorov vlastností==
 
==Písanie editorov vlastností==

Revision as of 20:34, 1 April 2005

Rozširovanie IDE

Úvod

IDE podporuje niekoľko typov pluginov:

Komponenty
Sú to položky Palety komponentov. Napríklad TButton môžete použiť na vytváranie tlačítiek.
Editory komponentov
Tieto sú použité pri dvojkliku na komponent v návrhu alebo pridaním niektorých ďalších položiek do kontextového menu návrhu, ktoré vyvoláte pravým kliknutím na komponent.
Editory vlastností
Tieto sú použité riadkymi v Object Inspectore.
Experti
Toto sú všetky ostatné typy.


Máte dve možnosti ako pridať svoj vlastný plugin do IDE Lazarus:

  1. Napíšte balíček, nainštalujte ho a registrujte svoj plugin v procedúre 'Register' jednotky.
  2. Rozšírte kód Lazarus a pošlite svoj CVS rozdiely do maillistu Lazarus.

Písanie komponentov

Vytvorte nový komponent pomocou Editora balíčkov.

Editory komponentov

Editory komponentov poskytované s Lazarus sú definované v jednotke componenteditors.pas. Editor komponentu je plugin použitý vývojárom na pridanie špeciálnych funkcií pre triedy komponentov.

Editor komponenty je vytvorený pre každý komponent, ktorý je vybratý v návrhu formulára a je založený na type komponentu (viz GetComponentEditor a RegisterComponentEditor). Pri dvojkliku na komponent je volaná metóda Edit. Pri vyvolaní kontextového menu komponentu, sú volané metódy GetVerbCount a GetVerb, ktoré vybudujú položky menu. Ak je niektorá položka vybratá, je volaná metóda ExecuteVerb. Metóda Paste je volaná vždy keď je komponent vložený do schránky.

Editor komponentu potrebujete vytvoriť len ak chcete pridať položku/y do kontextového menu, zmeniť predvolené správanie sa pri dvojkliku na komponent alebo pridať rozšírený formát schránky.

Predvolený editor komponentu (TDefaultEditor) implementuje metódu Edit na vyhľadávanie vlastností komponentu a generovanie (alebo navigádiu do) udalostí OnCreate, OnChanged alebo OnClick (ktorú nájde prvú). Vždy keď Editor komponentu modifikuje komponent, musí volať Designer.Modified na informovanie návrhára, že formulár bol modifikovaný. (Or else the user can not save the changes).

Všetky Editory komponentov sú odvodené od virtuálnej abstraktnej triedy TBaseComponentEditor.

Triedy Editorov komponentov

TDefaultComponentEditor
Editor, ktorý poskytuje predvolené správanie pre dvojkliknutie, ktoré opakovane prechádza vlastnosti, hľadajúc najvhodnejšiu metódu vlastnosti na editovanie.
TComponentEditor
Táto trieda poskytuje základnú implementáciu pre rozhranie IComponentEditor. Nie je podmienkou odvodiť váš Editor vlastností od tejto triedy. IDE vyžaduje len dediť od TBaseComponentEditor a implementovať IComponentEditor, táto trieda pomáha pri implementácii triedy, ktorá vyhovuje týmto podmienkam.
TNotebookComponentEditor
Predvolený editor komponentu pre TCustomNotebook.
TPageComponentEditor
Predvolený editor komponentu pre TCustomPage.
TStringGridComponentEditor
Predvolený editor komponentu pre TStringGrid.
TToolBarComponentEditor
Predvolený editor komponentu pre TToolBar.
TFileDialogComponentEditor
Predvolený editor komponentu pre TFileDialog.

Metódy k predefinovaniu

Na zmenu správania štandartného Editora vlastností môžete predefinovať tieto metódy:

Create(AComponent, ADesigner)
Konštruktor triedy je volaný na vytvorenie Editora komponentu. AComponent je komponent, ktorý má byť editovaný v editore. ADesigner je rozhranie pre nájdenie prvku a vytvorenie metód (často nie je použitý). Ak Editor komponentu akokoľvek modifikuje komponent, musí volať ADesigner.Modified.
Edit
Metóda je volaná pri dvojkliku na komponent. Editor komponenty môže vyvolať v tejto metóde napríkald vyvolať dialóg alebo nejaký typ návrhového experta. Ak je GetVerbCount väčší ako nula, Edit spustí obsluhu prvej položky (ExecuteVerb(0)).
ExecuteVerb(Index)
Je volaná vybratím položky kontextového menu, zvolená položka je udávaná pomocou Index. Jej správanie je určené Editorom komponentu.
GetVerb
Editor komponentu musí vrátiť reťazec, ktorý bude zobrazený v kontextovom menu. Editor komponentu je zodpovedný za vhodné umiestnenie znaku & a znakov '...'.
GetVerbCount
Počet platných indexov pre GetVerb a ExecuteVerb. Index začína nulou (tj. 0..GetVerbCount - 1).
PrepareItem
Pri vytváraní kontextového menu je pre každú položku volaná PrepareItem. Editor komponentu môže vhodne prispôsobovať položky menu, vrátane pridávania podpoložiek. Ak niektorú položku nechcete zobraziť, neuvoľňujte ju, jednoducho nastavte vlastnosť Visible na False.
Copy
Je volaná pri kopírovaní komponentu do schránky. Aj obrázok komponentu je vložený do schránky. Poskytuje možnosť Editoru komponentu vložiť iný typ formátu, ktorý je ignorovaný v Designer, ale môže byť podporovaný inou aplikáciou.
IsInInlined
Určuje či je komponent v Designer, ktorý ho vlastní. V podstate, komponenty nemôžu byť pridané do inštancie Frame (collections are fine though) tak táto funkcia určuje, či aktuálne vybratý komponent je nvútri inštancie Frame alebo nie.
GetComponent
Vracia editovaný komponent.
GetDesigner
Vracia aktuálny Designer formulára vlastniaceho komponent.

Registrácia Editora komponentu

Aby IDE vedelo, ktorý Editor komponentu má použiť, je nutné ho registrovať. Pre toto je v jednotke componenteditors.pas definovaný procedurálny typ:

type
  TRegisterComponentEditorProc 
    = procedure (ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
var
  RegisterComponentEditorProc: TRegisterComponentEditorProc;

a jedna procedúra a jedna funkcia:

 procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
 function GetComponentEditor(Component: TComponent; const Designer: TComponentEditorDesigner): TBaseComponentEditor;

Registráciu Editora komponentu urobíte jednoducho volaním funkcie RegisterComponentEditor, pričom do ComponentClass zadáte triedu komponentu a do ComponentEditor zadáte triedu Editora komponentu, napr.:

 RegisterComponentEditor(TCustomNotebook, TNotebookComponentEditor);

Čím je zaregistrovaný Editor kompentu TNotebookComponentEditor pre komponenty typu TCustomNotebook.

Písanie editorov vlastností

Viz príklady v propedits.pp

Registrovanie obslúh udalostí

V IDE je niekoľko udalostí, pre ktoré môže plugin pridať svoju vlastnú obsluhu. V súbore propedits.pp sa nachádza objekt GlobalDesignHook", ktorý obsluhuje neikoľko udalostí pre navrhovanie. Každá udalosť volá zoznam obslúh. Predvolené obsluhy sú pridané samotným IDE. Svoje vlastné obsluhy môžete pridať pomocou metód AddHandlerXXX a RemoveHandlerXXX. Tieto budú volané pred predvolenými obsluhami.

Príklady:

 Pridanie svojej obsluhy (toto by mal vykonať konštruktor vášho objektu):
   GlobalDesignHook.AddHandlerComponentAdded(@YourOnComponentAdded);
 Odstránenie vašej obsluhy:
   GlobalDesignHook.RemoveHandlerComponentAdded(@YourOnComponentAdded);
 Môžete odstrániť všetky obsluhy naraz. Napríklad, je vhodé pridať do deštruktora objektu tentor riadok:
   GlobalDesignHook.RemoveAllHandlersForObject(Self);

Obsluhy GlobalDesignHook:

 // lookup root
 ChangeLookupRoot
   Je volaná pri zmene "LookupRoot". "LookupRoot" je vlastník objektu aktuálne vybratého komponentu. Zvyčajne to je TForm.
 // methods
 CreateMethod
 GetMethodName
 GetMethods
 MethodExists
 RenameMethod
 ShowMethod
 MethodFromAncestor
 ChainCall
 // components
 GetComponent
 GetComponentName
 GetComponentNames
 GetRootClassName
 ComponentRenamed
   Volaná pri premenovaní komponentu
 ComponentAdded
   Volaná pri priradní komponentu do LookupRoot
 ComponentDeleting
   VOlaná pred uvoľnením komponentu.
 DeleteComponent
   VOlaná pri odstráenní komponentu pomocou IDE.
 GetSelectedComponents
   Vracia aktuálny výber komponentov.
 // persistent objects
 GetObject
 GetObjectName
 GetObjectNames
 // modifing
 Modified
 Revert
 RefreshPropertyValues


Spolupracovníci a zmeny

This page has been converted from the epikwiki version.

This document was authored by Mattias Gaertner Initial import and formatted for Lazarus-CCR - VlxAdmin 9/26/2003

  • Prvotný preklad - Slavko 02:24, 26 Mar 2005 (PST)