[ Pobierz całość w formacie PDF ]
.W swoich aplikacjach mo¿esz korzystaæ z obydwu funkcji PostMessage iSendMessage.Przyk³adowo, aby wys³aæ komunikat do samego siebie, mo¿na u¿yænastêpuj¹cego polecenia:PostMessage(Handle, WM_QUIT, 0, 0);Pierwszym parametrem obu funkcji jest uchwyt okna, do którego wys³aæ chcemykomunikat.W tym przypadku komunikat wysy³any jest do g³Ã³wnego formularza(zak³adaj¹c, ¿e powy¿sza linia kodu znajduje siê w pliku kodu Ÿród³owegog³Ã³wnego formularza).Oprócz funkcji Windows API, VCL udostêpnia metodê o nazwie Perform, przy pomocyktórej mo¿na wysy³aæ komunikaty do dowolnego okna wywodz¹cego siê z VCL.Perform omija system komunikatów Windows i przesy³a komunikat bezpoœrednio domechanizmu obs³ugi danego okna.Operacja równowa¿na powy¿szej przywykorzystaniu funkcji Perform wygl¹da nastêpuj¹co:Perform(WM_QUIT, 0, 0);Mo¿esz wykorzystaæ dowoln¹ z przedstawionych trzech funkcji w celu wysy³aniakomunikatów do w³asnej aplikacji, a tak¿e do wchodz¹cych w jej sk³ad okien.Obs³uga zdarzeñMia³eœ ju¿ okazjê zapoznaæ siê z obs³ug¹ zdarzeñ VCL, niemniej jednak krótkapowtórka nie zaszkodzi.Kiedy okreœlony komponent otrzyma komunikat Windows,sprawdza, czy dla tego szczególnego komunikatu przypisana zosta³a funkcjaobs³uguj¹ca zdarzenie – i wywo³uje j¹, je¿eli odpowiedŸ jest twierdz¹ca.Je¿eli¿adna funkcja nie zosta³a przypisana, komunikat jest obs³ugiwany w sposóbdomyœlny.U¿ytkownik mo¿e wiêc obs³ugiwaæ tylko te zdarzenia, które gointeresuj¹, a resztê z nich zignorowaæ.To co dzieje siê we wnêtrzu w³asnych funkcji obs³uguj¹cych zdarzenia, zale¿y odszeregu czynników: komunikatu, który jest aktualnie przetwarzany, czynnoœci,jakie wykonuje program w odpowiedzi na komunikat, a tak¿e od tego, czynadchodz¹cy komunikat jest modyfikowany, czy te¿ funkcja obs³uguj¹ca zdarzeniema na celu jedynie poinformowanie o wyst¹pieniu konkretnego zdarzenia.W miarêpog³êbiania wiedzy na temat programowania dla Windows przekonasz siê, ¿eistniej¹ dos³ownie setki rzeczy, jakie mo¿na wykonaæ w odpowiedzi nazdarzenia.W wiêkszoœci przypadków bêdziesz korzysta³ z funkcji obs³uguj¹cych zdarzenia wcelu powiadamiania o zaistnieniu okreœlonego zdarzenia.Dla przyk³adu weŸmyzdarzenie OnMouseDown.Jego zasadniczy zadaniem jest powiadomienie aplikacji oklikniêciu na danym komponencie (formularze równie¿ s¹ komponentami).Prawdopodobnie nie bêdziesz mia³ zamiaru modyfikowaæ w jakikolwiek sposóbparametrów zdarzenia (procedury zdarzeniowej), bêdziesz chcia³ jedyniewiedzieæ, ¿e dane zdarzenie wyst¹pi³o.Ogromna liczba tworzonych przez Ciebieprocedur zdarzeniowych bêdzie mia³a taki w³aœnie charakter.Zdarz¹ siê jednak i takie przypadki, kiedy bêdziesz chcia³ zmieniæ jeden lubwiêcej parametrów komunikatu przed jego odes³aniem.Powiedzmy, ¿e chceszwymusiæ zmianê wszystkich znaków tekstu w okreœlonej kontrolce na du¿e litery.(oczywiœcie, efekt taki mo¿na osi¹gn¹æ ustawiaj¹c w³aœciwoœæ CharCasekomponentu Edit na wartoœæ ecUpperCase, ale mimo to trzymajmy siê przez chwilêtego przyk³adu.) Aby zamieniaæ wszelkie wpisywane znaki na du¿e, mo¿na wnastêpuj¹cy sposób zaprogramowaæ funkcjê obs³uguj¹c¹ zdarzenie OnKeyPress:procedure TForm1.Edit1KeyPress(Sender : TObject; var Key : Char);beginif Key >= 'a' thenDec(Key, 32);end;W tym przypadku modyfikowany jest pewien aspekt komunikatu przed jego wys³aniemdo VCL w celu obs³u¿enia.W³aœnie w tym celu parametry przesy³ane do funkcjiobs³uguj¹cej zdarzenie s¹ czêsto przekazywane przez referencjê.Delphi wprowadza pewien stopieñ ochrony parametrów komunikatu przedniezamierzon¹ modyfikacj¹, przekazuj¹c przez wartoœæ (do proceduryzdarzeniowej) te z nich, których modyfikacja jest zabroniona lub nie daje¿adnego efektu.WeŸmy ponownie po uwagê wspomniane ju¿ wczeœniej zdarzenieOnMouseDown: ma ono na celu jedynie powiadomienie o klikniêciu, nie ma wiêc¿adnego sensu modyfikowanie parametrów Button, Shift, X lub Y, dlategowszystkie one przekazywane s¹ przez wartoœæ.To, czy nale¿y modyfikowaæ jeden lub kilka parametrów, zale¿y od samegokomunikatu, a tak¿e od tego, co zamierzasz zrobiæ z tym komunikatem.Z biegiemczasu na pewno napotkasz takie sytuacje, kiedy modyfikacja okreœlonegokomunikatu stanie siê niezbêdna w celu wymuszenia okreœlonego zachowania siêWindows.Kiedy indziej nie bêdziesz w ogóle modyfikowa³ parametrów, alebêdziesz je œledzi³ w celu okreœlenia sytuacji panuj¹cej we w³asnej aplikacji.Poniewa¿ mo¿liwoœci s¹ tak ogromne, dalsze zg³êbianie parametrów komunikatówpozostawiam jako æwiczenie.Obs³uga pozosta³ych komunikatów WindowsZdecydowanie bêdzie musia³ istnieæ jakiœ powód, dla którego zajdzie potrzebazareagowania na komunikat Windows dla którego VCL nie udostêpnia ¿adnegozdarzenia.Kiedy nadejdzie taki czas, bêdziesz chcia³ wiedzieæ w jaki sposóbporadziæ sobie z tego typu komunikatami i w³aœnie o tym mówi ta sekcja.VCL udostêpnia zdarzenia dla najczêœciej stosowanych komunikatów Windows.Jasnejest, ¿e przy ponad 700 komunikatach Windows VCL nie udostêpnia zdarzeñ dlanich wszystkich.Teoria 80/20 mówi (mniej wiêcej), ¿e 20 procent ludzi wykonuje80 procent pracy.Identyczne stwierdzenie mo¿na z du¿ym prawdopodobieñstwemzastosowaæ do komunikatów Windows.VCL mo¿e udostêpniæ zdarzenia jedynie dla 20procent komunikatów Windows, ale s¹ to komunikaty, z których korzystaæ bêdzieszprzez 80 procent czasu.Mimo to istnieje wiele komunikatów, dla których VCL nieudostêpnia zdarzeñ, a które Ty bêdziesz musia³ byæ w stanie obs³u¿yæ kiedyzdarzy siê taka koniecznoœæ.Bêdziesz zadowolony dowiaduj¹c siê, ¿e jesteœ w stanie obs³u¿yæ niemal ka¿dykomunikat Windows, gdy bêdziesz wiedzia³ jak to zrobiæ.Po opanowaniu podstaw,ka¿dy komunikat bêdzie po prostu odmian¹ tego samego scenariusza.Mechanizm,którego Delphi u¿ywa do radzenia sobie z komunikatami nie obejmowanymi przezzdarzenia VCL kryje siê pod s³owem kluczowym message.S³owo to kojarzyokreœlony komunikat Windows z okreœlon¹ metod¹ kontrolki; wywo³anie tej metodyjest w³aœnie reakcj¹ na otrzymany komunikat
[ Pobierz całość w formacie PDF ]