Sign in Join
Wiki copytemporary

Extending the IDE/sk: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-## Contents
2-
3- * 1 Rozširovanie IDE
4- * 1.1 Úvod
5- * 1.2 Písanie komponentov
6- * 1.3 Editory komponentov
7- * 1.3.1 Triedy Editorov komponentov
8- * 1.3.2 Metódy k predefinovaniu
9- * 1.3.3 Registrácia Editora komponentu
10- * 1.4 Editory vlastností
11- * 1.4.1 Trieda TPropertyEditor
12- * 1.5 Registrovanie obslúh udalostí
13- * 1.6 Spolupracovníci a zmeny
14-
151# Rozširovanie IDE
162
173## Úvod
184
19-IDE podporuje niekoľko typov pluginov:
5+IDE podporuje niekoľko typov pluginov:
206
21-Komponenty
22- Sú to položky Palety komponentov. Napríklad TButton môžete použiť na vytváranie tlačidiel.
7+Komponenty
8+Sú to položky Palety komponentov. Napríklad TButton môžete použiť na vytváranie tlačidiel.
239
24-Editory komponentov
25- 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 komponentu.
10+Editory komponentov
11+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 komponentu.
2612
27-Editory vlastností
28- Tieto sú použité riadkami v Inšpektorovi objektov (Object Inspector).
13+Editory vlastností
14+Tieto sú použité riadkami v Inšpektorovi objektov (Object Inspector).
2915
30-Experti
31- Toto sú všetky ostatné typy.
16+Experti
17+Toto sú všetky ostatné typy.
3218
33-
34-Existujú dva spôsoby, ako pridať svoj vlastný plugin do IDE Lazarus:
19+Existujú dva spôsoby, ako pridať svoj vlastný plugin do IDE Lazarus:
3520
36- 1. Napíšte balíček, nainštalujte ho a zaregistrujte svoj plugin v procedúre 'Register' jednotky.
37- 2. Rozšírte kód Lazarus a pošlite svoj CVS rozdiely do maillistu Lazarus.
21+1. Napíšte balíček, nainštalujte ho a zaregistrujte svoj plugin v procedúre 'Register' jednotky.
22+2. Rozšírte kód Lazarus a pošlite svoj CVS rozdiely do maillistu Lazarus.
3823
3924## Písanie komponentov
4025
41-Vytvorte nový komponent pomocou Editora balíčkov.
26+Vytvorte nový komponent pomocou Editora balíčkov.
4227
4328## Editory komponentov
4429
45-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.
30+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.
4631
47-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.
32+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.
4833
49-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.
34+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.
5035
51-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).
36+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).
5237
53-Všetky Editory komponentov sú odvodené od virtuálnej abstraktnej triedy **TBaseComponentEditor**.
38+Všetky Editory komponentov sú odvodené od virtuálnej abstraktnej triedy **TBaseComponentEditor**.
5439
5540### Triedy Editorov komponentov
5641
57-TDefaultComponentEditor
58- Editor, ktorý poskytuje predvolené správanie pre dvojkliknutie, ktoré opakovane prechádza vlastnosti, hľadajúc najvhodnejšiu metódu vlastnosti na editovanie.
59-TComponentEditor
60- 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.
61-TNotebookComponentEditor
62- Predvolený editor komponentu pre TCustomNotebook.
63-TPageComponentEditor
64- Predvolený editor komponentu pre TCustomPage.
65-TStringGridComponentEditor
66- Predvolený editor komponentu pre TStringGrid.
67-TToolBarComponentEditor
68- Predvolený editor komponentu pre TToolBar.
69-TFileDialogComponentEditor
70- Predvolený editor komponentu pre TFileDialog.
42+TDefaultComponentEditor
43+Editor, ktorý poskytuje predvolené správanie pre dvojkliknutie, ktoré opakovane prechádza vlastnosti, hľadajúc najvhodnejšiu metódu vlastnosti na editovanie.
7144
45+TComponentEditor
46+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.
47+
48+TNotebookComponentEditor
49+Predvolený editor komponentu pre TCustomNotebook.
50+
51+TPageComponentEditor
52+Predvolený editor komponentu pre TCustomPage.
53+
54+TStringGridComponentEditor
55+Predvolený editor komponentu pre TStringGrid.
56+
57+TToolBarComponentEditor
58+Predvolený editor komponentu pre TToolBar.
59+
60+TFileDialogComponentEditor
61+Predvolený editor komponentu pre TFileDialog.
62+
7263### Metódy k predefinovaniu
7364
74-Na zmenu správania štandartného Editora vlastností môžete predefinovať tieto metódy:
65+Na zmenu správania štandartného Editora vlastností môžete predefinovať tieto metódy:
7566
76-Create(AComponent, ADesigner)
77- 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.
78-Edit
79- 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)).
80-ExecuteVerb(Index)
81- 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.
82-GetVerb
83- Editor komponentu musí vrátiť reťazec, ktorý bude zobrazený v kontextovom menu. Editor komponentu je zodpovedný za vhodné umiestnenie znaku & a znakov '...'.
84-GetVerbCount
85- Počet platných indexov pre GetVerb a ExecuteVerb. Index začína nulou (tj. 0..GetVerbCount - 1).
86-PrepareItem
87- 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.
88-Copy
89- 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.
90-IsInInlined
91- 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.
92-GetComponent
93- Vracia editovaný komponent.
94-GetDesigner
95- Vracia aktuálny Designer formulára vlastniaceho komponent.
67+Create(AComponent, ADesigner)
68+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.
9669
70+Edit
71+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)).
72+
73+ExecuteVerb(Index)
74+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.
75+
76+GetVerb
77+Editor komponentu musí vrátiť reťazec, ktorý bude zobrazený v kontextovom menu. Editor komponentu je zodpovedný za vhodné umiestnenie znaku & a znakov '...'.
78+
79+GetVerbCount
80+Počet platných indexov pre GetVerb a ExecuteVerb. Index začína nulou (tj. 0..GetVerbCount - 1).
81+
82+PrepareItem
83+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.
84+
85+Copy
86+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.
87+
88+IsInInlined
89+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.
90+
91+GetComponent
92+Vracia editovaný komponent.
93+
94+GetDesigner
95+Vracia aktuálny Designer formulára vlastniaceho komponent.
96+
9797### Registrácia Editora komponentu
9898
99-Aby IDE vedelo, ktorý Editor komponentu má použiť, je nutné ho registrovať. Pre toto je v jednotke **componenteditors.pas** definovaný procedurálny typ:
100-```
101-type
102- TRegisterComponentEditorProc
103- = procedure (ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
104- var
105- RegisterComponentEditorProc: TRegisterComponentEditorProc;
106-```
99+Aby IDE vedelo, ktorý Editor komponentu má použiť, je nutné ho registrovať. Pre toto je v jednotke **componenteditors.pas** definovaný procedurálny typ:
107100
108-a jedna procedúra a jedna funkcia:
109-```
110-procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
111- function GetComponentEditor(Component: TComponent; const Designer: TComponentEditorDesigner): TBaseComponentEditor;
112-```
101+`type`\
102+`  TRegisterComponentEditorProc `\
103+`    = procedure (ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);`\
104+`var`\
105+`  RegisterComponentEditorProc: TRegisterComponentEditorProc;`
113106
114-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.:
115-```
116-RegisterComponentEditor(TCustomNotebook, TNotebookComponentEditor);
117-```
107+a jedna procedúra a jedna funkcia:
118108
119-Čím je zaregistrovaný Editor kompentu TNotebookComponentEditor pre komponenty typu TCustomNotebook.
109+` procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);`\
110+` function GetComponentEditor(Component: TComponent; const Designer: TComponentEditorDesigner): TBaseComponentEditor;`
120111
112+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.:
113+
114+` RegisterComponentEditor(TCustomNotebook, TNotebookComponentEditor);`
115+
116+Čím je zaregistrovaný Editor kompentu TNotebookComponentEditor pre komponenty typu TCustomNotebook.
117+
121118## Editory vlastností
122119
123-Editory vlastností sú používané v Object Inspectore, pre editáciu jednotlivých vlastností. Sú vlastne rozhraním medzi riadkymi Inšpektora Objektov a vlastnosťou v RTTI. V jednotke **propedits.pp** je definovaných niekoľko základných Editorov vlastností, ktorých základom je **TPropertyEditor**.
120+Editory vlastností sú používané v Object Inspectore, pre editáciu jednotlivých vlastností. Sú vlastne rozhraním medzi riadkymi Inšpektora Objektov a vlastnosťou v RTTI. V jednotke **propedits.pp** je definovaných niekoľko základných Editorov vlastností, ktorých základom je **TPropertyEditor**.
124121
125122### Trieda TPropertyEditor
126123
127-Edituje vlastnosť komponentu alebo zoznamu komponentov, vybratú v Inšpektore objektov. Príslušný Editor vlastnosti je vytvorený v závislosti na type editovanej vlastnosti, ktorý je určený registrácii Editora vlastností pomocou **RegisterPropertyEditor**. Inšpektor objektov používa **TPropertyEditor** pre všetky modifikácie vlastnosti. **GetName** a **GetValue** sú volané na zobrazenie mena a hodnoty vlastnosti. **SetValue** je volaná vždy, keď užívateľ požaduje zmeniť hodnotu vlastnosti. **Edit** je volaná keď užívateľ dvojklikne na vlastnosť v Inšpektore objektov. **GetValues** je volaná pri zobrazení rozbaľovacieho zoznamu. **GetProperties** pri rozbalení vlastnosti pre zobrazenie pod-vlastností. **AllEqual** je volané na určenie, či bude zobrazená hodnota vlastnosti prei výbere viac ako jedného komponentu.
124+Edituje vlastnosť komponentu alebo zoznamu komponentov, vybratú v Inšpektore objektov. Príslušný Editor vlastnosti je vytvorený v závislosti na type editovanej vlastnosti, ktorý je určený registrácii Editora vlastností pomocou **RegisterPropertyEditor**. Inšpektor objektov používa **TPropertyEditor** pre všetky modifikácie vlastnosti. **GetName** a **GetValue** sú volané na zobrazenie mena a hodnoty vlastnosti. **SetValue** je volaná vždy, keď užívateľ požaduje zmeniť hodnotu vlastnosti. **Edit** je volaná keď užívateľ dvojklikne na vlastnosť v Inšpektore objektov. **GetValues** je volaná pri zobrazení rozbaľovacieho zoznamu. **GetProperties** pri rozbalení vlastnosti pre zobrazenie pod-vlastností. **AllEqual** je volané na určenie, či bude zobrazená hodnota vlastnosti prei výbere viac ako jedného komponentu.
128125
129-Nasledujúce metódy môžu byť predefinované na zmenu správania Editora vlastnosti:
126+Nasledujúce metódy môžu byť predefinované na zmenu správania Editora vlastnosti:
130127
131-Activate
132- Je volaná keď sa vlastnosť v Inšpektore objektov stáva vybratou. Je užitočná na povolenie určitých atribútov vlastnosti určených len keď je vlastnosť vybratá v Inšpektore objektov. Len paSubProperties a paMultiSelect, vrátené z GetAttributes, je vyžadované pred volaním tejto metódy.
133-Deactivate
134- Je volaná, keď vlastnosť v Inšpektore objektov prestáva byť vybratá.
135-AllEqual
136- Je volaná, keď je vybratý viac ako jeden komponent. Ak táto metóda vracia True, je volaná GetValue, inak je v Inšpektore objektov zobrazené prázdne políčko. Je volaná, len ak GetAttributes vracia paMultiSelect.
137-AutoFill
138- Je volaná na určenie či hodnoty vrátené pomocou GetValues môžu byť prírastkovo vybraté v Inšpektore objektov. Je volaná len keď GetAttributes vracia paValueList.
139-Edit
140- Je volaná pri stlačení tlačítka '...' alebo dvojkliku na vlastnosť. Môže, napríklad, vyvolať dialóg na editovanie komponentu v nejakom výstižnejšom štýle ako je textový (napr. vlastnosť Font).
141-GetAttributes
142- Vracia informáciu, ktorú Inšpektor objektov používa na zobrazenie príslušných nástrojov. GetAttributes vracia množinu typu TPropertyAttributes:
128+Activate
129+Je volaná keď sa vlastnosť v Inšpektore objektov stáva vybratou. Je užitočná na povolenie určitých atribútov vlastnosti určených len keď je vlastnosť vybratá v Inšpektore objektov. Len paSubProperties a paMultiSelect, vrátené z GetAttributes, je vyžadované pred volaním tejto metódy.
143130
144- * * **paValueList** : Editor vlastnosti môže vrátiť vymenovaný zoznam hodnôt pre vlastnosť. Ak GetValues volá Proc s hodnotami, potom musí byť tento atribút nastavený. Táto hodnota spôsobuje zobrazenie tlačítka rozbaľovacieho zoznamu na pravej strane vlastnosti v Inšpektore objektov.
145- * **paSortList** : Inšpektor objektov zotriedi hodnoty vrátené z GetValues.
146- * **paSubProperties** : Editor vlastnosti má sub-vlastnosti, ktoré budú zobrazené odsadené pod aktuálnou vlastnosťou v štandartnom formáte. Ak GetProperties bude generovať objektové vlastnosti, potom musí byť tento atribút nastavený.
147- * **paDynamicSubProps** : Sub-vlastnosti možno zmeniť. Všetky návrhové nástroje (tj. Editory vlastností, Editory komponentov), ktoré zmenia zoznam, musia volať UpdateListPropertyEditors, aby Inšpektor objektov znova načítal sub-vlastnosti.
148- * **paDialog** : Udáva, že metóda Edit vyvolá dialóg, tým bude zobrazené tlačítko '...' na pravej strane vlastnosti v Inšpektore objektov.
149- * **paMultiSelect** : Dovoľuje zobrazenie vlastnosti, keď je vybratý viac ako jeden komponent. Niektoré vlastnosti nie sú vhodné pre viacnásobný výber (napr. vlastnosť Name).
150- * **paAutoUpdate** : Spôsobuje volanie metódy SetValue pri každej zmenu, čím sa prejaví v editore, narozdiel od volania po zmene (napr. vlastnosť Caption).
151- * **paReadOnly** : Hodnota nemôže byť menená, ale ak je nastavené paDialog môže hodnotu meniť dialóg. Táto voľba zakazuje len zmenu v políčku Inšpektora objektov.
152- * **paRevertable** : Umožňuje vrátiť hodnotu vlastnosti na pôvodnú hodnotu. Návrat k pôvodnej hodnote nie je možný pre vnorené vlastnosti (ako Fonts) a prvky zložených vlastností, ako množina hodnôt prvkov.
153- * **paFullWidthName** : Vraví Inšpektoru objektov, že hodnotu nie je treba poskytovať a ako také meno môže byť poskytnuté na celú šírku Inšpektora.
154- * **paVolatileSubProperties** : Všetky zmeny hodnoty vlastnosti spôsobia znovazostavenie sub-vlastností.
155- * **paDisableSubProperties** : Všetky sub-vlastnosti sú len na čítanie (ani pomocou dialógu).
156- * **paReference** : Vlastnosť obsahujúca odkaz na niečo iné. Pri použití spolu s paSubProperties môže byť odkazovaný objekt zobrazený ako sub-vlastnosti tejto vlastnosti.
157- * **paNotNestable** : Indikuje, že vlastnosť nie je bezpečné zobrazovať pri zobrazení vlastností rozbaleného odkazu.
131+Deactivate
132+Je volaná, keď vlastnosť v Inšpektore objektov prestáva byť vybratá.
158133
159-GetComponent
160- Vracia Index-tý komponent, ktorý je editovaný Editorom vlastností. Je použitá na získanie komponentu. Editor vlastností môže odkazovať na viac komponentov len ak GetAttributes vracia paMultiSelect.
161-GetEditLimit
162- Vracia počet znakov, ktoré môže užívateľ zadať ako hodnotu. Príslušný editor Inšpektora objektov bude potrebovať obmedzenie pre svoj text nastavený na vrátenú hodnotu. Predvolený limit je 255.
163-GetName
164- Vracia meno vlastnosti. Predvolená hodnota je získaná z typovej informácie so všetkými podtržítkami '_' nahradenými medzerami. Táto metóda môže byť predefinovaná ak meno vlastnosti nie je menom, ktoré sa má objaviť v Inšpektore objektov.
165-GetProperties
166- Môže byť prepísaná na volanie PropertyProc pre každú sub-vlastnosť (alebo vnorenú vlastnosť) editovanej vlastnosti a poslaním nového TPropertyEdtior pre každú sub-vlastnosť. Predvolene nie je PropertyProc volaná a nie sú predpokladané sub-vlastnosti. TClassPropertyEditor pošle nový Editor vlastnosti pre každú publikovanú vlastnosť triedy. TSetPropertyEditor posiela nový editor pre každý prvok množiny.
167-GetPropType
168- Vracia ukazovateľ typovej informácie editovanej vlastnosti.
169-GetValue
170- Vracia reťazcovú hodnotu vlasntosti. Predvolene vracia '(unknown)'. Musí byť prepísaná, aby vracala príslušnú hodnotu.
171-GetValues
172- Je volaná keď GetAttributes vrátila paValueList. Musí volať Proc pre každú hodnotu, ktorá je akceptovateľná pre túto vlastnosť. TEnumPropertyEditor budeposielať každý vymenovaný prvok.
173-Initialize
174- Je volaná po vytvorení Editora vlastnosti, ale pred jeho prvým použitím. Veľakrát sú Editory vlastností vytvorené a pretože nemajú spoločnú vlastnosť vo výbere, sú vytvorené zbytočne. Initialize je volaná po určení, že Editor vlastností má byť použitý Inšpektorom objektov a nie zbytočne.
175-SetValue(Value)
176- Je volaná na nastavenie hodnoty vlastnosti. Editor vlastnosti nusí byť schopný preložiť reťazec a volať jednu z metód SetXxxValue. Ak reťazec nemá správny formát alebo má nepovolenú hodnotu, Editor vlastnosti musí generovať výnimku popisujúcu problém. SetValue môže ignorovať všetky zmeny a dovoliť všetky úpravy vlastnosti urobené pomocou metódy Edit (napr. vlastnosť Picture).
177-ListMeasureWidth(Value,Canvas,AWidth)
178- Je volaná počas výpočtu šírky rozbaľovacieho zoznamu.
179-ListMeasureHeight(Value,Canvas,AHeight)
180- Je volaná počas výpočtu výšky položky/hodnoty rozbaľovacieho zoznamu. Je veľmi podobná OnMeasureItem triedy TListBox, len s inými parametrami.
181-ListDrawValue(Value,Canvas,Rect,Selected)
182- Je volaná počas poskytovania položky/hodnoty rozbaľovacieho zoznamu. Je veľmi podobná OnDrawItem triedy TListBox, len s inými parametrami.
183-PropMeasureHeight(Value,Canvas,AHeight)
184- Je volaná počas výpočtu výšky položky/vlastnosti riadku Inšpektora objektov. Je veľmi podobná OnMeasureItem triedy TListBox, len s inými parametrami.
185-PropDrawName(Canvas,Rect,Selected)
186- Je volaná počas poskytovania stĺpca mena zoznamu vlastností. Je veľmi podobná OnDrawItem triedy TListBox, len s inými parametrami.
187-PropDrawValue(Canvas,Rect,Selected)
188- Je volaná počas poskytovania stĺpca hodnôt zoznamu vlastností. Je veľmi podobná PropDrawName. Ak sú zvolené viaceré položky a ich hodnoty sú rôzne, táto procedúra posiela prázdnu hodnotu.
134+AllEqual
135+Je volaná, keď je vybratý viac ako jeden komponent. Ak táto metóda vracia True, je volaná GetValue, inak je v Inšpektore objektov zobrazené prázdne políčko. Je volaná, len ak GetAttributes vracia paMultiSelect.
189136
190-Vlastnosti a metódy užitočné pri vytváraní nových tried TPropertyEditor:
137+AutoFill
138+Je volaná na určenie či hodnoty vrátené pomocou GetValues môžu byť prírastkovo vybraté v Inšpektore objektov. Je volaná len keď GetAttributes vracia paValueList.
191139
192-property Name
193- Vracia meno vlastnosti vrátené z GetName.
194-property PrivateEditory
195- TKonfiguračný adresár Lazarus. Ak Editor vlastnosti potrebuje pomocné alebo stavové súbory (šablóny, príklady, atď.) môžu byť uložené tu.
196-property Value
197- Aktuálny hodnota, v reťazcovom formáte, vlastnosti vrátená z GetValue.
198-Modified
199- Volaná na indikovanie, že hodnota vlastnosti bola zmenená. Je volaná automaticky z metódy SetXxxValue, ak voláte metódu SetXxxValue priamo, musíte volať aj Modified.
200-GetXxxValue
201- Vracia hodnotu prvej vlastnosti vo vlastnosti Properties. Volajte príslušnú metódu GetXxxValue na získanie hodnoty.
202-SetXxxValue
203- Nastavuje hodnotu všetkých vlastností vo vlastnosti Properties. Volajte príslušné metódy SetXxxxValue na nastavenie hodnoty.
204-GetVisualValue
205- Funkcia vráti zobraziteľnú hodnotu vlastnosti. Ak je vybratá len jedna položka alebo všetky položky viacnásobného výberu majú rovnakú hodnotu, potom táto funkcia vráti aktuálnu hodnotu vlastnosti. Inak vracia prázdny reťazec.
140+Edit
141+Je volaná pri stlačení tlačítka '...' alebo dvojkliku na vlastnosť. Môže, napríklad, vyvolať dialóg na editovanie komponentu v nejakom výstižnejšom štýle ako je textový (napr. vlastnosť Font).
206142
143+GetAttributes
144+Vracia informáciu, ktorú Inšpektor objektov používa na zobrazenie príslušných nástrojov. GetAttributes vracia množinu typu TPropertyAttributes:
145+
146+- - **paValueList**: Editor vlastnosti môže vrátiť vymenovaný zoznam hodnôt pre vlastnosť. Ak GetValues volá Proc s hodnotami, potom musí byť tento atribút nastavený. Táto hodnota spôsobuje zobrazenie tlačítka rozbaľovacieho zoznamu na pravej strane vlastnosti v Inšpektore objektov.
147+ - **paSortList**: Inšpektor objektov zotriedi hodnoty vrátené z GetValues.
148+ - **paSubProperties**: Editor vlastnosti má sub-vlastnosti, ktoré budú zobrazené odsadené pod aktuálnou vlastnosťou v štandartnom formáte. Ak GetProperties bude generovať objektové vlastnosti, potom musí byť tento atribút nastavený.
149+ - **paDynamicSubProps**: Sub-vlastnosti možno zmeniť. Všetky návrhové nástroje (tj. Editory vlastností, Editory komponentov), ktoré zmenia zoznam, musia volať UpdateListPropertyEditors, aby Inšpektor objektov znova načítal sub-vlastnosti.
150+ - **paDialog**: Udáva, že metóda Edit vyvolá dialóg, tým bude zobrazené tlačítko '...' na pravej strane vlastnosti v Inšpektore objektov.
151+ - **paMultiSelect**: Dovoľuje zobrazenie vlastnosti, keď je vybratý viac ako jeden komponent. Niektoré vlastnosti nie sú vhodné pre viacnásobný výber (napr. vlastnosť Name).
152+ - **paAutoUpdate**: Spôsobuje volanie metódy SetValue pri každej zmenu, čím sa prejaví v editore, narozdiel od volania po zmene (napr. vlastnosť Caption).
153+ - **paReadOnly**: Hodnota nemôže byť menená, ale ak je nastavené paDialog môže hodnotu meniť dialóg. Táto voľba zakazuje len zmenu v políčku Inšpektora objektov.
154+ - **paRevertable**: Umožňuje vrátiť hodnotu vlastnosti na pôvodnú hodnotu. Návrat k pôvodnej hodnote nie je možný pre vnorené vlastnosti (ako Fonts) a prvky zložených vlastností, ako množina hodnôt prvkov.
155+ - **paFullWidthName**: Vraví Inšpektoru objektov, že hodnotu nie je treba poskytovať a ako také meno môže byť poskytnuté na celú šírku Inšpektora.
156+ - **paVolatileSubProperties**: Všetky zmeny hodnoty vlastnosti spôsobia znovazostavenie sub-vlastností.
157+ - **paDisableSubProperties**: Všetky sub-vlastnosti sú len na čítanie (ani pomocou dialógu).
158+ - **paReference**: Vlastnosť obsahujúca odkaz na niečo iné. Pri použití spolu s paSubProperties môže byť odkazovaný objekt zobrazený ako sub-vlastnosti tejto vlastnosti.
159+ - **paNotNestable**: Indikuje, že vlastnosť nie je bezpečné zobrazovať pri zobrazení vlastností rozbaleného odkazu.
160+
161+GetComponent
162+Vracia Index-tý komponent, ktorý je editovaný Editorom vlastností. Je použitá na získanie komponentu. Editor vlastností môže odkazovať na viac komponentov len ak GetAttributes vracia paMultiSelect.
163+
164+GetEditLimit
165+Vracia počet znakov, ktoré môže užívateľ zadať ako hodnotu. Príslušný editor Inšpektora objektov bude potrebovať obmedzenie pre svoj text nastavený na vrátenú hodnotu. Predvolený limit je 255.
166+
167+GetName
168+Vracia meno vlastnosti. Predvolená hodnota je získaná z typovej informácie so všetkými podtržítkami '_' nahradenými medzerami. Táto metóda môže byť predefinovaná ak meno vlastnosti nie je menom, ktoré sa má objaviť v Inšpektore objektov.
169+
170+GetProperties
171+Môže byť prepísaná na volanie PropertyProc pre každú sub-vlastnosť (alebo vnorenú vlastnosť) editovanej vlastnosti a poslaním nového TPropertyEdtior pre každú sub-vlastnosť. Predvolene nie je PropertyProc volaná a nie sú predpokladané sub-vlastnosti. TClassPropertyEditor pošle nový Editor vlastnosti pre každú publikovanú vlastnosť triedy. TSetPropertyEditor posiela nový editor pre každý prvok množiny.
172+
173+GetPropType
174+Vracia ukazovateľ typovej informácie editovanej vlastnosti.
175+
176+GetValue
177+Vracia reťazcovú hodnotu vlasntosti. Predvolene vracia '(unknown)'. Musí byť prepísaná, aby vracala príslušnú hodnotu.
178+
179+GetValues
180+Je volaná keď GetAttributes vrátila paValueList. Musí volať Proc pre každú hodnotu, ktorá je akceptovateľná pre túto vlastnosť. TEnumPropertyEditor budeposielať každý vymenovaný prvok.
181+
182+Initialize
183+Je volaná po vytvorení Editora vlastnosti, ale pred jeho prvým použitím. Veľakrát sú Editory vlastností vytvorené a pretože nemajú spoločnú vlastnosť vo výbere, sú vytvorené zbytočne. Initialize je volaná po určení, že Editor vlastností má byť použitý Inšpektorom objektov a nie zbytočne.
184+
185+SetValue(Value)
186+Je volaná na nastavenie hodnoty vlastnosti. Editor vlastnosti nusí byť schopný preložiť reťazec a volať jednu z metód SetXxxValue. Ak reťazec nemá správny formát alebo má nepovolenú hodnotu, Editor vlastnosti musí generovať výnimku popisujúcu problém. SetValue môže ignorovať všetky zmeny a dovoliť všetky úpravy vlastnosti urobené pomocou metódy Edit (napr. vlastnosť Picture).
187+
188+ListMeasureWidth(Value,Canvas,AWidth)
189+Je volaná počas výpočtu šírky rozbaľovacieho zoznamu.
190+
191+ListMeasureHeight(Value,Canvas,AHeight)
192+Je volaná počas výpočtu výšky položky/hodnoty rozbaľovacieho zoznamu. Je veľmi podobná OnMeasureItem triedy TListBox, len s inými parametrami.
193+
194+ListDrawValue(Value,Canvas,Rect,Selected)
195+Je volaná počas poskytovania položky/hodnoty rozbaľovacieho zoznamu. Je veľmi podobná OnDrawItem triedy TListBox, len s inými parametrami.
196+
197+PropMeasureHeight(Value,Canvas,AHeight)
198+Je volaná počas výpočtu výšky položky/vlastnosti riadku Inšpektora objektov. Je veľmi podobná OnMeasureItem triedy TListBox, len s inými parametrami.
199+
200+PropDrawName(Canvas,Rect,Selected)
201+Je volaná počas poskytovania stĺpca mena zoznamu vlastností. Je veľmi podobná OnDrawItem triedy TListBox, len s inými parametrami.
202+
203+PropDrawValue(Canvas,Rect,Selected)
204+Je volaná počas poskytovania stĺpca hodnôt zoznamu vlastností. Je veľmi podobná PropDrawName. Ak sú zvolené viaceré položky a ich hodnoty sú rôzne, táto procedúra posiela prázdnu hodnotu.
205+
206+Vlastnosti a metódy užitočné pri vytváraní nových tried TPropertyEditor:
207+
208+property Name
209+Vracia meno vlastnosti vrátené z GetName.
210+
211+property PrivateEditory
212+TKonfiguračný adresár Lazarus. Ak Editor vlastnosti potrebuje pomocné alebo stavové súbory (šablóny, príklady, atď.) môžu byť uložené tu.
213+
214+property Value
215+Aktuálny hodnota, v reťazcovom formáte, vlastnosti vrátená z GetValue.
216+
217+Modified
218+Volaná na indikovanie, že hodnota vlastnosti bola zmenená. Je volaná automaticky z metódy SetXxxValue, ak voláte metódu SetXxxValue priamo, musíte volať aj Modified.
219+
220+GetXxxValue
221+Vracia hodnotu prvej vlastnosti vo vlastnosti Properties. Volajte príslušnú metódu GetXxxValue na získanie hodnoty.
222+
223+SetXxxValue
224+Nastavuje hodnotu všetkých vlastností vo vlastnosti Properties. Volajte príslušné metódy SetXxxxValue na nastavenie hodnoty.
225+
226+GetVisualValue
227+Funkcia vráti zobraziteľnú hodnotu vlastnosti. Ak je vybratá len jedna položka alebo všetky položky viacnásobného výberu majú rovnakú hodnotu, potom táto funkcia vráti aktuálnu hodnotu vlastnosti. Inak vracia prázdny reťazec.
228+
207229## Registrovanie obslúh udalostí
208230
209-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.
231+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.
210232
211-Príklady:
212-```
213-Pridanie svojej obsluhy (toto by mal vykonať konštruktor vášho objektu):
214- GlobalDesignHook.AddHandlerComponentAdded(@YourOnComponentAdded);
215- Odstránenie vašej obsluhy:
216- GlobalDesignHook.RemoveHandlerComponentAdded(@YourOnComponentAdded);
217- Môžete odstrániť všetky obsluhy naraz. Napríklad, je vhodé pridať do deštruktora objektu tentor riadok:
218- GlobalDesignHook.RemoveAllHandlersForObject(Self);
219-```
233+Príklady:
220234
221-Obsluhy GlobalDesignHook:
222-```
223-// lookup root
224- ChangeLookupRoot
225- Je volaná pri zmene "LookupRoot". "LookupRoot" je vlastník objektu aktuálne vybratého komponentu. Zvyčajne to je TForm.
226- // methods
227- CreateMethod
228- GetMethodName
229- GetMethods
230- MethodExists
231- RenameMethod
232- ShowMethod
233- MethodFromAncestor
234- ChainCall
235- // components
236- GetComponent
237- GetComponentName
238- GetComponentNames
239- GetRootClassName
240- ComponentRenamed
241- Volaná pri premenovaní komponentu
242- ComponentAdded
243- Volaná pri priradní komponentu do LookupRoot
244- ComponentDeleting
245- VOlaná pred uvoľnením komponentu.
246- DeleteComponent
247- VOlaná pri odstráenní komponentu pomocou IDE.
248- GetSelectedComponents
249- Vracia aktuálny výber komponentov.
250- // persistent objects
251- GetObject
252- GetObjectName
253- GetObjectNames
254- // modifing
255- Modified
256- Revert
257- RefreshPropertyValues
258-```
235+` Pridanie svojej obsluhy (toto by mal vykonať konštruktor vášho objektu):`\
236+`   GlobalDesignHook.AddHandlerComponentAdded(@YourOnComponentAdded);`\
237+` Odstránenie vašej obsluhy:`\
238+`   GlobalDesignHook.RemoveHandlerComponentAdded(@YourOnComponentAdded);`\
239+` Môžete odstrániť všetky obsluhy naraz. Napríklad, je vhodé pridať do deštruktora objektu tentor riadok:`\
240+`   GlobalDesignHook.RemoveAllHandlersForObject(Self);`
259241
260-
242+Obsluhy GlobalDesignHook:
261243
244+` // lookup root`\
245+` ChangeLookupRoot`\
246+`   Je volaná pri zmene "LookupRoot". "LookupRoot" je vlastník objektu aktuálne vybratého komponentu. Zvyčajne to je TForm.`\
247+` // methods`\
248+` CreateMethod`\
249+` GetMethodName`\
250+` GetMethods`\
251+` MethodExists`\
252+` RenameMethod`\
253+` ShowMethod`\
254+` MethodFromAncestor`\
255+` ChainCall`\
256+` // components`\
257+` GetComponent`\
258+` GetComponentName`\
259+` GetComponentNames`\
260+` GetRootClassName`\
261+` ComponentRenamed`\
262+`   Volaná pri premenovaní komponentu`\
263+` ComponentAdded`\
264+`   Volaná pri priradní komponentu do LookupRoot`\
265+` ComponentDeleting`\
266+`   VOlaná pred uvoľnením komponentu.`\
267+` DeleteComponent`\
268+`   VOlaná pri odstráenní komponentu pomocou IDE.`\
269+` GetSelectedComponents`\
270+`   Vracia aktuálny výber komponentov.`\
271+` // persistent objects`\
272+` GetObject`\
273+` GetObjectName`\
274+` GetObjectNames`\
275+` // modifing`\
276+` Modified`\
277+` Revert`\
278+` RefreshPropertyValues`
279+
262280## Spolupracovníci a zmeny
263281
264-This page has been converted from the epikwiki [version](<http://lazarus-ccr.sourceforge.net/index.php?wiki=ExtendingTheIde>).
282+This page has been converted from the epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=ExtendingTheIde).
265283
266-This document was authored by Mattias Gaertner Initial import and formatted for Lazarus-CCR - [ VlxAdmin](</User:Tom> "User:Tom") 9/26/2003
284+This document was authored by Mattias Gaertner Initial import and formatted for Lazarus-CCR - VlxAdmin 9/26/2003
267285
268- * Prvotný preklad - [Slavko](</User:Slavko> "User:Slavko") 02:24, 26 Mar 2005 (PST)
269- * Doplnený preklad kapitoly Editory vlastností a komponentov - [Slavko](</User:Slavko> "User:Slavko") 10:54, 1 Apr 2005 (PST)
286+- Prvotný preklad - Slavko 02:24, 26 Mar 2005 (PST)
287+- Doplnený preklad kapitoly Editory vlastností a komponentov - Slavko 10:54, 1 Apr 2005 (PST)
270288
271289---
272-*From the Free Pascal wiki, page "Extending the IDE/sk", as the Internet Archive kept it on 2022-09-25. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
290+*From the Free Pascal wiki, page "Extending the IDE/sk", as it stood on 2006-04-14 after a change by Swen, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history