[ Pobierz całość w formacie PDF ]
.wrozdziale 17.ksi¹¿ki „Delphi 4 Vademecum Profesjonalisty”, wyd.HELION 1999(przyp.t³um.)]W kolejnym kroku uzyskiwany jest wskaŸnik do globalnego obiektureprezentuj¹cego Schowek — dostarcza go funkcja Clipboard() deklarowana w plikunag³Ã³wkowym Clipbrd.hpp.Obiekt Schowka jest obiektem typu singleton i nienale¿y w zwi¹zku z tym tworzyæ nowych egzemplarzy klasy TClipboard.W ostatnim kroku dane umieszczane s¹ w Schowku za pomoc¹ jednej z metod klasyTClipboard.Co prawda ca³¹ tê operacjê mo¿na by³o wykonaæ znacznie proœciej:void __fastcall TImageComponentEditor::Copy(void){TImage*Image =dynamic_cast(Component);if(Image){Clipboard()->Assign(Image->Picture);}}Zaprezentowaliœmy jednak podejœcie bardziej z³o¿one, by pokazaæ kilkaszczegó³Ã³w wspó³pracy komponentów ze Schowkiem.Jako ¿e ca³y opisywany tu scenariusz rozgrywa siê na etapie projektowania,niezmiernie istotne jest, by operacje wykonywane przez metodê Copy() nieinterferowa³y z „zasadniczym” kopiowaniem i wklejaniem danych z poziomu IDE.Metoda Copy() powinna byæ w zwi¹zku z tym wywo³ywana w sposób jawny, najlepiejza poœrednictwem jednej z opcji menu kontekstowego.U¿yteczne wydaje siê tak¿e uzupe³nienie naszego edytora o metodê Paste()dokonuj¹c¹ wklejania obrazków ze Schowka wprost do komponentu TImage:void __fastcall TImageComponentEditor::Paste(void){TImage*Image =dynamic_cast(Component);if(Image){Image->Picture->Assign(Clipboard());}}Rejestracja edytorów komponentówRejestracja edytora komponentu wykonywana jest podobnie do rejestracji edytoraw³aœciwoœci.Dokonuje jej funkcja RegisterComponentEditor() zadeklarowananastêpuj¹co:extern PACKAGE void __fastcall RegisterComponentEditor(TMetaClass* ComponentClass,TMetaClass* ComponentEditor);Funkcja ta posiada tylko dwa parametry przekazuj¹ce informacjê o typie(odpowiednio) edytowanego komponentu oraz samego edytora.Informacja takaudostêpniana jest przez operator __classid().Oto przyk³ad rejestracji edytoraTImageComponentEditor dla komponentu TImage:RegisterComponentEditor(__classid(TImage),__classid(TImageComponentEditor));Podobnie jak funkcja RegisterPropertyEditor(), tak i funkcjaRegisterComponentEditor() musi byæ wywo³ywana w ramach funkcji Register().Noworejestrowany edytor komponentu zastêpuje dotychczasowy edytor dla tego¿komponentu.Wykorzystanie predefiniowanych obrazków w edytorach komponentów i edytorachw³aœciwoœciDu¿¹ czêœæ naszej dotychczasowej dyskusji dotyczy³a graficznej prezentacjiedytowanych komponentów i ich w³aœciwoœci, rozdzia³ ten stanowi wiêc dobr¹okazjê do tego, by omówiæ wykorzystanie w tym celu obrazków „predefiniowanych”,czyli tworzonych w postaci niezale¿nych plików zasobowych.Prezentowane tukoncepcje s¹ na tyle ogólne, i¿ nie ograniczaj¹ siê jedynie do edytoróww³aœciwoœci czy komponentów, lecz posiadaj¹ odniesienie do projektów wogólnoœci.Predefiniowane obrazki powinny mieæ format bitmap (*.bmp), zaœ rozdzielczoœæich kolorów nie powinna wykraczaæ poza 8 bitów (256 kolorów).Obrazki takiemo¿na z ³atwoœci¹ tworzyæ za pomoc¹ wiêkszoœci edytorów graficznych, w tymrównie¿ za pomoc¹ Image Editor’a dostarczanego wraz z C++Builderem.Po stworzeniu poszczególnych obrazków nale¿y po³¹czyæ je w pojedynczy plik,zwany plikiem zasobowym (ang.resource file).Mo¿na to zrobiæ na kilka sposobów— jednym z nich jest utworzenie za pomoc¹ Image Editor’a skompilowanego plikuzasobowego (ang.compiled resource file) z rozszerzeniem *.res.Nale¿ymianowicie zainicjowaæ nowy plik zasobowy, dodaj¹c nastêpnie do niego kolejnebitmapy; nale¿y jednoczeœnie zwracaæ uwagê na nazwy reprezentuj¹ce poszczególnebitmapy w pliku zasobowym, bowiem nazwy te wykorzystywane bêd¹ póŸniej doidentyfikacji poszczególnych bitmap.Inny sposób polega na stworzeniu Ÿród³owego pliku zasobowego *.rc, zwanegokrótko skryptem zasobowym.U¿ywaj¹c dowolnego edytora tekstowego, chocia¿bytego z IDE C++Buildera (ikona Text na stronie New okna New Items) nale¿ywype³niæ go liniami w postaciBITMAP.bmpmo¿e byæ liczb¹ ca³kowit¹ lub ³añcuchem i musi byæunikalny dla ka¿dej bitmapy.Ka¿demu identyfikatorowi przypisywana jestunikalna wartoœæ w pliku nag³Ã³wkowym tworzonym automatycznie podczas kompilacjiprojektu.Oto przyk³ad jednego z plików *.rc pakietu EnhancedEditors zza³¹czonego CD-ROMu:RESOURCE_CopyImage BITMAP "CopyImage.bmp"RESOURCE_PasteImage BITMAP "PasteImage.bmp"RESOURCE_GreyedPasteImage BITMAP "GrayedPasteImage.bmp"RESOURCE_GreyedCopyImage BITMAP "GrayedCopyImage.bmp"RESOURCE_ActiveWritersGuildLogo BITMAP "ActiveWritersGuildLogo.bmp"RESOURCE_InActiveWritersGuildLogo BITMAP "InActiveWritersGuildLogo.bmp"RESOURCE_ImageListProperty BITMAP "ImageListProperty.bmp"(ujmowanie nazw plików w cudzys³owy nie jest konieczne).„Rêczne” tworzenie zawartoœci pliku zasobowego ma przewagê nad jegoautomatycznym tworzeniem przez Image Editor.Przede wszystkim edycja plikutekstowego jest zadaniem znacznie ³atwiejszym ni¿ edycja skompilowanego pliku*.res.Ponadto Image Editor ogranicza zawartoœæ tworzonych przez siebie plikówzasobowych do bitmap, kursorów i ikon; tworz¹c skrypt mo¿emy umieszczaæ w nimzasoby dowolnych typów.Dodawanie plików zasobowych do pakietówSkompilowany (*.res) lub Ÿród³owy (*.rc) plik zasobowy mo¿e byæ w ³atwy sposóbdo³¹czony do pakietu
[ Pobierz całość w formacie PDF ]