[ Pobierz całość w formacie PDF ]
.Create(AOwner : TComponent);begininherited;{ Przypisanie wartoœci domyœlnych polom danych.}FFlashEnabled := True;FFlashRate := 800;FFlashLimit := 0;FlashCount := 0;{ Inicjalizacja obiektu timera.}Timer := TTimer.Create(Self);{ Ustawienie przedzia³u timera przy u¿yciu wsp.migotania.}Timer.Interval := FFlashRate;{ Przypisanie w³asnej funkcji obs³uguj¹cej zdarzenie OnTimer.}{ do zdarzenia OnTimer.}Timer.OnTimer := OnTimer;end;procedure TFlashingLabel.SetFlashEnabled(AFlashEnabled : Boolean);begin{ Ustawienie pola FFlashEnabled.}FFlashEnabled := AFlashEnabled;{ Nie uruchamiaj timera, je¿eli komponent w formularzu }{ znajduje siê w trybie projektowania.Powrót z procedury.}if csDesigning in ComponentState thenExit;{ Uruchomienie timera.}Timer.Enabled := FFlashEnabled;{ Je¿eli migotanie zosta³o wy³¹czone trzeba upewniæ siê, }{ ¿e etykieta jest widoczna.}if not FFlashEnabled thenVisible := True;end;procedure TFlashingLabel.SetFlashRate(AFlashRate : Integer);begin{ Ustawienie pola FFlashRate i przedzia³u czasowego timera.}FFlashRate := AFlashRate;Timer.Interval := AFlashRate;end;procedure TFlashingLabel.OnTimer(Sender : TObject);begin{ Je¿eli komponent znajduje siê w formularzu w trybie }{ projektowania, nastêpuje zatrzymanie timera i powrót.}if csDesigning in ComponentState then beginTimer.Enabled := False;Exit;end;{ Zmiana stanu w³aœciwoœci Visible, za ka¿dym razem kiedy }{ pojawia siê zdarzenie timera.}Visible := not Visible;{ W miarê potrzeby wywo³anie zdarzenia.Zwiêkszenie licznika }{ je¿eli etykieta jest widoczna.}{ Wygenerowanie zdarzenia w miarê koniecznoœci.Zwiêksznieif (FFlashLimit 0) and Visible then begin{ Zwiêkszenie pola FlashCount.}Inc(FlashCount);{ Je¿eli pole FlashCount jest wiêksze lub równe }{ wartoœci w³aœciwoœci FlashLimit, nastêpuje wyzerowanie }{ wartoœci FlashCount i wywo³anie zdarzenia.}if FlashCount >= FFlashLimit then beginFlashCount := 0;DoLimitReached;end;end;end;procedure TFlashingLabel.DoLimitReached;varStop : Boolean;beginStop := False;if Assigned(FOnLimitReached) thenFOnLimitReached(Self, Stop);FlashEnabled := not Stop;end;procedure TFlashingLabel.Click;begin{ Wydanie dŸwiêku, a nastêpnie wywo³anie metody Click klasy }{ podstawowej w celu przeprowadzenia domyœlnej obs³ugi zdarzenia.}MessageBeep(0);inherited;end;procedure Register;beginRegisterComponents('Samples', [TFlashingLabel]);end;end.Listing 20.4.FlashTstU.pasunit FlshTstU;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls, Flashing;typeTMainForm = class(TForm)FlashBox: TCheckBox;Group: TRadioGroup;procedure FormCreate(Sender: TObject);procedure GroupClick(Sender: TObject);procedure FlashBoxClick(Sender: TObject);private{ Private declarations }Flasher : TFlashingLabel;procedure OnLimitReached(Sender : TObject; var Stop : Boolean); public{ Public declarations }end;varMainForm: TMainForm;implementation{$R *.DFM}procedure TMainForm.FormCreate(Sender: TObject);beginFlasher := TFlashingLabel.Create(Self);Flasher.Parent := Self;Flasher.SetBounds(20, 20, 200, 20);Flasher.Font.Size := 16;Flasher.Caption := 'This is a test';Flasher.FlashRate := 800;Flasher.FlashLimit := 5;Flasher.OnLimitReached := OnLimitReached;end;procedure TMainForm.OnLimitReached(Sender : TObject; var Stop : Boolean);begin{ Funkcja obs³uguj¹ca zdarzenie OnLimitReached.Ustawienie }{ parametru Stop na True powoduje zatrzymanie migotania, }{ pozostawienie parametru bez zmian powoduje kontynuacjê }{ migotania.}Stop := True;end;procedure TMainForm.GroupClick(Sender: TObject);begincase Group.ItemIndex of0 : Flasher.FlashRate := 1200;1 : Flasher.FlashRate := 800;2 : Flasher.FlashRate := 400;3 : Flasher.FlashRate := 150;end;end;procedure TMainForm.FlashBoxClick(Sender: TObject);beginFlasher.FlashEnabled := FlashBox.Checked;end;end.Komponent FlashingLabel i program testuj¹cy FlashTst wchodz¹ w sk³ad dyskietkido³¹czonej do ksi¹¿ki.Ró¿nica wystêpuje w nazwie pliku kodu Ÿród³owegokomponentu, któr¹ jest Flashing.pas.Uruchom program testuj¹cy, aby przekonaæ siê, ¿e zdarzenie dzia³a zgodnie ztym, co zosta³o powiedziane.Poeksperymentuj z programem, aby lepiej zrozumieæw jaki sposób dzia³a zdarzenie i obs³uguj¹ca go procedura.Zwróæ uwagê nacharakterystyczny dŸwiêk wydawany podczas klikania na etykietê (w chwili gdyjest ona widoczna).Ma to miejsce dziêki przes³oniêciu metody dynamicznej onazwie Click.Procedura ta ma zobrazowaæ sposób przes³aniania zdarzeñ klasypodstawowej.Je¿eli chcesz zainstalowaæ na Palecie Komponentów zmodyfikowany komponentFlashingLabel, otwórz pakiet DCLUSR40 i kliknij na przycisk Compile Package
[ Pobierz całość w formacie PDF ]