[ Pobierz całość w formacie PDF ]
.CPL_DBLCLK(5)Wysy³any po dwukrotnym klikniêciu ikony apletuWywo³anie danego apletu logicznego.Parametr lParam1 zawiera numer apletu;lParam2 – wartoœæ pola lData struktury CPLINFO.Efektem wys³ania tegokomunikatu powinno byæ wyœwietlenie przez aplet okreœlonego okna (formularza).CPL_STOP(6)Wysy³any do wszystkich apletów bezpoœrednio przed zakoñczeniem dzia³aniaaplikacji zarz¹dzaj¹cej, dok³adnie raz dla ka¿dego okna dialogowegoPolecenie zwolnienia zasobów zwi¹zanych z danym apletem (identyfikowanym przezparametr lParam1).Parametr lParam2 zawiera wartoœæ pola lData strukturyCPLINFO, wype³nianej w odpowiedzi na komunikat CPL_INQUIRE.CPL_EXIT(7)Wysy³any jednokrotnie po przes³aniu ostatniego komunikatu CPL_STOP ibezpoœrednio przed wywo³aniem przez zarz¹dzaj¹c¹ aplikacjê funkcjiFreeLibrary(), usuwaj¹cej z pamiêci kod apletuPolecenie zwolnienia zasobów (np.bloków pamiêci) przydzielonych „globalnie”przez kod apletu (niezwi¹zanych z poszczególnymi oknami dialogowymi).ParametrylParam1 i lParam2 nie s¹ u¿ywane.Przeanalizujmy obecnie poszczególne komunikaty w kolejnoœci ich wysy³ania.Jakopierwszy do funkcji CPlApplet() trafia komunikat CPL_INIT, wysy³any przezaplikacjê zarz¹dzaj¹c¹ apletami (Panel sterowania) w trakcie ich ³adowania.Obs³uga tego komunikatu obejmuje inicjacjê pracy apletu, przydzielenie zasobówitd., zaœ po jego przetworzeniu funkcja CPlApplet() powinna zwróciæ wartoœæniezerow¹.Zwrócenie wartoœci zero (FALSE) sygnalizuje niepowodzenieinicjalizacji apletu i nakazuje Panelowi sterowania zakoñczenie wymiany danychi usuniêcie kodu apletu z pamiêci.Po udanym przetworzeniu komunikatu CPL_INIT aplikacja zarz¹dzaj¹ca przesy³akomunikat CPL_GETCOUNT, nakazuj¹cy zwrócenie liczby apletów logicznych (okiendialogowych) zawartych w pliku.cpl (jeœli np.w pliku zdefiniowaliœmy trzytakie okna, funkcja CPlApplet() powinna zwróciæ wartoœæ 3).W kolejnym kroku aplikacja zarz¹dzaj¹ca przesy³a do apletu seriê komunikatówCPL_INQUIRE i CPL_NEWINQUIRE (po jednej parze dla ka¿dego apletu logicznego).Ich obs³uga sprowadza siê do wype³nienia przez aplet struktur typu CPLINFO iCPLNEWINFO, zawieraj¹cych dane, opisuj¹ce poszczególne okna.Dane te –identyfikatory ikon i ich podpisów oraz opisy okien – umieszczane s¹odpowiednio w polach: idIcon, idName i idInfo; pole lData przeznaczone jest nadodatkowe informacje.Zawartoœæ struktury CPLINFO jest buforowana przezaplikacjê zarz¹dzaj¹c¹ i zachowywana pomiêdzy kolejnymi wywo³aniami danegoapletu.Zwi¹zana z tym poprawa wydajnoœci jest powodem, dla którego w systemachWindows 9x i NT zaleca siê korzystanie w³aœnie z komunikatu CPL_INQUIRE iignorowanie CPL_NEWINQUIRE.Informacje zwracane w wyniku obs³u¿enia tegoostatniego nie s¹ buforowane.Widoczny niekiedy efekt powolnego ³adowaniaPanelu sterowania spowodowany jest w³aœnie obs³ugiwaniem przez niektóre apletykomunikatów CPL_NEWINQUIRE (co wynika z d¹¿enia do zachowania wstecznejzgodnoœci).Ró¿nica w obs³udze komunikatów CPL_INQUIRE i CPL_NEWINQUIREsprowadza siê do innej postaci zwracanej struktury danych – w przypadkuCPL_NEWINQUIRE parametr lParam2 wskazuje na strukturê typu NEWCPLINFO,zawieraj¹c¹ informacje zale¿ne od bie¿¹cego stanu systemu (pozwala to np.dynamicznie zmieniaæ postaæ ikony lub opisu okna dialogowego).Chocia¿ apletpowinien akceptowaæ zarówno komunikat CPL_INQUIRE, jak i CPL_NEWINQUIRE, tenostatni mo¿na w wiêkszoœci przypadków zignorowaæ.Warto te¿ pamiêtaæ, ¿eopisane tu „zapytania” nie s¹ wysy³ane przez aplikacjê zarz¹dzaj¹c¹ wokreœlonym porz¹dku i nie nale¿y czyniæ ¿adnych za³o¿eñ na temat ich kolejnoœcilub wzajemnej zale¿noœci.Przesy³any wraz z komunikatami CPL_INQUIRE i CPL_NEWINQUIRE parametr lParam1okreœla numer apletu logicznego, którego opisu ¿¹da aplikacja zarz¹dzaj¹ca(numer mo¿e zawieraæ siê w przedziale od zera do wartoœci zwróconej wodpowiedzi na komunikat CPL_GETCOUNT).Parametr lParam2 wskazuje odpowiedni¹strukturê CPLINFO lub NEWCPLINFO.Kolejnym komunikatem przekazywanym do funkcji CPlApplet() jest CPL_DBLCLK,sygnalizuj¹cy dwukrotne klikniêcie mysz¹ ikony apletu (jego wywo³anie).Parametrami komunikatu s¹ numer uruchamianego apletu logicznego oraz wartoœæumieszczona w polu lData struktury CPLINFO zwracanej w odpowiedzi na komunikatCPL_INQUIRE (jest ona równie¿ przekazywana wraz z komunikatem CPL_STOP).¯¹danie zakoñczenia dzia³ania apletu sygnalizuje seria komunikatów CPL_STOP, poktórych przesy³any jest pojedynczy komunikat CPL_EXIT.W odpowiedzi na niefunkcja CPlApplet() powinna zwolniæ zasoby przydzielone przez kod apletu(pamiêæ, zarejestrowane klasy okien).Po zwróceniu sterowania aplikacjazarz¹dzaj¹ca wywo³uje funkcjê FreeLibrary(), usuwaj¹c¹ kod apletu z pamiêci.Utworzenie apletuPora teraz na praktykê, czyli utworzenie samego apletu.Na pocz¹tek podamykilka praktycznych regu³, o których warto pamiêtaæ podczas budowy apletu i pojego skonstruowaniu.Aby aplet zosta³ „zauwa¿ony” przez Panel sterowania, nale¿y go skopiowaæ dokatalogu Windows\System lub \Winnt\System32 (system przechowuje tam wszystkiepliki.CPL).Dane o aplecie mo¿na wprowadziæ do rejestru Windows (standardowym miejscem ichprzechowywania jest klucz HKEY_CURRENT_USER\ControlPanel).Po skompilowaniu kodu apletu nale¿y zmieniæ rozszerzenie nazwy utworzonegopliku biblioteki DLL na.CPL.C++Builder pozwala te¿ na ustalenie rozszerzeniapliku wynikowego w ramach projektu – w tym celu nale¿y wydaæ polecenie Optionsz menu Project, wybraæ kartê Application i w polu Target extension wpisaæ CPL.Chocia¿ zawartoœæ okna Panelu sterowania (jak ka¿dego innego okna) mo¿nasortowaæ, porz¹dek ³adowania apletów nie jest ustalony i nie nale¿y czyniæ naten temat ¿adnych za³o¿eñ.Po tych kilku uwagach pozostaje wzi¹æ siê do pracy.Uruchom IDE.Za pomoc¹ polecenia Close All z menu File zamknij wszystkie otwarte okna, niezapisuj¹c ¿adnych plików, projektów itd.(w ten sposób utworzymy sobie „czystepole” do dalszej czêœci eksperymentu).Obecnie utworzymy dwa formularze, bêd¹ce oknami dialogowymi naszego apletu.Wybierz polecenie New Form z menu File.Do utworzonego w ten sposób formularza wstaw etykietê i przycisk, ustalaj¹c ichw³aœciwoœci zgodnie z tabel¹ 14.30.Tabela 14.30.W³aœciwoœci komponentów okna dialogowego apletuKomponentW³aœciwoœciLabel1Caption = 'To ja, aplet numer 1'Button1Caption = 'Kliknij'Uzupe³nij funkcjê OnClick() przycisku do nastêpuj¹cej postaci:void __fastcall TForm1::Button1Click(TObject *Sender){Close();}Zapisz formularz pod nazw¹ Form1.Wybierz ponownie polecenie New Form z menu File i utwórz na formularzuanalogiczne komponenty, jak w punkcie 4.(etykieta powinna zawieraæ numer 2).Utwórz dla drugiego przycisku funkcjê obs³ugi zdarzenia OnClick identyczn¹ zprzedstawion¹ w punkcie 5.Za pomoc¹ inspektora obiektów zmieñ nazwê formularza na Form2 i zapisz go.Projekt powinien teraz zawieraæ dwa podobne formularze.Zamknij wszystkie plikipoleceniem Close All z menu File.Kolejnym etapem bêdzie utworzenie ikon reprezentuj¹cych oba okna.Co prawdadefiniowanie oddzielnej ikony dla ka¿dego okna nie jest konieczne (w razie ichbraku system u¿yje dla obu okien ikony domyœlnej).Skoro jednak nasz aplet masiê wyró¿niaæ, utworzymy dlañ niestandardowe ikony.Zminimalizuj okna IDE i uruchom edytor graficzny (Tools|Image Editor).Utwórznowy plik zasobów poleceniami New i Resource File z menu File
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL