[ Pobierz całość w formacie PDF ]
.hpp"class TCustomDefaultEditor : public TDefaultEditor{typedef TDefaultEditor inherited;protected:// dwukrotne klikniêcie// WYBÓR ZDARZENIAvirtual void __fastcall EditProperty(TPropertyEditor* PropertyEditor,bool& Continue,bool& FreeEditor);public:// klikniêcie prawym przyciskiem// MENU KONTEKSTOWE - krok 1virtual int __fastcall GetVerbCount(void);// - krok 2virtual AnsiString __fastcall GetVerb(int Index);// - krok 3 (NIEOBOWI¥ZKOWY)virtual void __fastcall PrepareItem(int Index,const Menus::TMenuItem* AItem);// - krok 4virtual void __fastcall ExecuteVerb(int Index);// kopiowanie do schowkavirtual void __fastcall Copy(void);public:#pragma option push -w-inlinline __fastcall virtualTCustomDefaultEditor(Classes::TComponent* AComponent,_di_IFormDesigner ADesigner): TDefaultEditor(AComponent, ADesigner){ }#pragma option poppublic:#pragma option push -w-inlinline __fastcall virtual ~TCustomDefaultEditor(void) { }#pragma option pop};Analizuj¹c powy¿sze wydruki, nietrudno zauwa¿yæ ró¿nicê pomiêdzy metodamiEdit() w obydwu rodzajach edytorów.Podobnie jak we wczeœniejszej czêœci rozdzia³u przyjrzymy siê teraz szczegó³omimplementacji wymienionych w tabeli metod przyk³adowych edytorów obydwurodzajów – TCustomComponentEditor i TCustomDefaultEditor.Metoda Edit()Wobec oczywistoœci tej metody w klasie TComponentEditor (patrz tabela 8.11)ograniczymy siê tutaj do jej implementacji w klasie wyprowadzonej zTDefaultEditor.Jej zadaniem jest realizacja dialogu uruchamianego w wynikudwukrotnego klikniêcia komponentu, który to dialog mo¿e byæ bardziejspecjalizowany ni¿ standardowe generowanie szkieletu funkcji zdarzeniowej.Przyk³adem dialogu tej klasy jest np.dialog uruchamiany przez edytorkomponentu TChart, którego formularz przedstawia rysunek 8.10.Rysunek 8.10.Przyk³adowy dialog realizowany przez metodê Edit() edytorakomponentuPodobnie jak w przypadku edytorów w³aœciwoœci ³¹cznoœæ realizowanego dialogu zdanymi edytowanego komponentu mo¿e mieæ dwojaki charakter – dane te mog¹mianowicie byæ uaktualniane na bie¿¹co albo dopiero po zatwierdzeniu dialogu(tj.zakoñczeniu go z wynikiem mrOK).Niezale¿nie od wybranego rodzajuaktualizacji wymaga siê ponadto, by IDE powiadamiane by³o o ka¿dej modyfikacjikomponentu – powiadamianie to realizowane jest przez metodê Modified()projektanta formularzy, dlatego te¿ instrukcjaif (Designer) Designer–>Modified()powinna stanowiæ integraln¹ czêœæ implementacji metody Edit().Przy aktualizacji na bie¿¹co wszelkie modyfikacje komponentu, jak równie¿zwi¹zane z tym powiadomienia pod adresem IDE, wykonywane s¹ przez metodêExecute() formularza dialogowego wyœwietlanego przez metodê ShowModal() wtrybie modalnym.Wynika st¹d, i¿ formularz ten powinien dysponowaæ zarównoadresem egzemplarza edytowanego komponentu, jak i referencj¹ do w³aœciwoœciDesigner edytora zawieraj¹cej adres projektanta formularzy.W przyk³adzie nawydruku 8.33 egzemplarz edytowanego komponentu wskazywany jest przez w³aœciwoœæComponentClass, zaœ referencjê do adresu projektanta formularzy zawiera poleDesigner.Nie nale¿y oczywiœcie zapominaæ o zrobieniu u¿ytku z tego pola(Designer–>Modified()) przy ka¿dej aktualizacji danych komponentu.Wydruk 8.33.Edycja komponentu z aktualizacj¹ „na bie¿¹co”// Najwa¿niejsze fragmenty kodu formualzra dialogowego://// W PLIKU NAG£ÓWKOWYM//---------------------------------------------------------------------------//#ifndef MyComponentEditorFormH#define MyComponentEditorFormH//---------------------------------------------------------------------------//#include#include#include#include#include "HeaderDeclaringTComponentClass"//---------------------------------------------------------------------------//class TMyComponentEditorForm : public TForm{__published: // IDE-managed Componentsprivate:TComponentClass* FComponentClass;_di_IformDesigner& Designer;.inne deklaracje niezbêdne do przywrócenia pocz¹tkowych ustawieñ komponentuw przypadku anulowania dialogu.protected:void __fastcall SetComponentClass(TComponentClass* Pointer);public:__fastcall TMyComponentEditorForm(TComponent* Owner,_di_IformDesigner& EditorDesigner);__property TComponentClass* ComponentClass = {read=FComponentClass,write=SetComponentClass};.};//---------------------------------------------------------------------------//#endif// W PLIKU IMPLEMENTACYJNYM//---------------------------------------------------------------------------//#include#pragma hdrstop#include "MyComponentEditorForm.h"//---------------------------------------------------------------------------//#pragma package(smart_init)#pragma resource "*.dfm"//---------------------------------------------------------------------------//__fastcallTMyComponentEditorForm::TMyComponentEditorForm(TComponent* Owner,_di_IformDesigner& EditorDesigner): TForm(Owner), Designer(EditorDesigner){// zwróæ uwagê, i¿ inicjowane jest tutaj pole Designer}//---------------------------------------------------------------------------//void __fastcall TMyPropertyForm::SetComponentClass(TComponentClass* Pointer){FComponentClass = Pointer;if(FComponentClass != 0){.zapamiêtaj aktualne wartoœci w³aœciwoœci komponentu i wyœwietl je.}}//---------------------------------------------------------------------------//// METODA Edit()#include "MyComponentEditorForm
[ Pobierz całość w formacie PDF ]
Linki
- Strona startowa
- Miecz mroków 03 Triumf Miecza Mroków Weis Margaret, Hickman Tracy
- Farmer Philip Jose Œwiat Rzeki 03 Mroczny wzór (2)
- Adrian Lara Rasa Œrodka Nocy 03 Przebudzenie o północy
- Anne McCaffrey Jezdzcy Smokow 03 Bialy Smok
- Timothy Zahn Trylogia Thrawna 03 Ostatni Rozkaz
- Butcher, Jim Dresden 03 Grave Peril
- [ICI][PL] Tyrmand Leopold Cywilizacja komunizmu
- Conrad, Joseph The Nigger of the Narcissus
- Arcymag Kreol z Ur 01 Rudazow Aleksander
- Boyd William Jak lody w sloncu
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- wiolkaszka.htw.pl