HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Események lefutását jelző események készítése


Példaprogram letöltése

3842 bájt

Ha megnézzük a TForm osztályának forráskódját, akkor hamar megtalálhatjuk azt a részt, ahol a From egyes eseményei aktivizálásra kerülnek. Például vegyük az OnShow eseményt. Amikor a TForm ezt aktivizálja, akkor előtte is és utána is futtat különféle kódot. Éppen ezért amikor mi felhasználjuk az OnShow eseményt, akkor az általunk, az eseménykezelőben lefuttatott kód előtt is és utána is fut olyan funkció, mely a Form megjelenésével kapcsolatos. Sok esetben azonban az lenne a kívánatos, hogy a mi kódunk csak akkor fusson, amikor már minden a Form megjelenítésével kapcsolatos kód lefutott. Egy amolyan OnAfterShow eseményre lenne szükségünk. Ilyet persze nem találunk a TForm osztályában. Sem olyat, hogy OnAfterCreate, vagy OnAfterResize. Azonban ami nincs, azt létre lehet hozni...

A megoldás trükkje abban rejlik, hogy a TForm-nál létrehozzuk annak az eseménynek a kezelőjét, melyhez az OnAfter... kezdetű eseményt szeretnénk használni. Például használjuk fel az OnShow-t. Amikor ez meghívásra kerül, akkor küldünk a Form-nak egy újabb üzenetet, ehhez viszont a PostMessage függvényt használjuk. Ez abban különbözik a SendMessage-től, hogy nem várja meg az üzenet feldolgozását, hanem csak bekerül a Form üzenetkezelési sorába és rögtön a PostMessage után folytatódik a programunk. Így lefut a OnShow-hoz írt kódunk, illetve az OnShow-t kiváltó eljárásnak a kódja is. A Form csak ezután dolgozza fel az újonnan beérkezett üzeneteket, melyek között ott lesz a mi általunk küldött is. Most már csak le kell kezelnünk a magunknak küldött üzenetet, melyhez létrehozunk egy újabb eseménykezelőt. Amikor ez meghívásra kerül, akkor biztosak lehetünk benne, hogy az OnShow és minden hozzá tartozó kód már lefutott.
Nézzük mindezt a gyakorlatban:
A saját üzenethez létrehozunk egy új konstanst. Ezzel azonosítjuk saját üzenetünket.
const
  WM_AFTERSHOW = WM_USER + 1000;
Ehhez az üzenethez létrehozunk egy saját üzenetkezelő eljárást.
  TForm1 = class(TForm)
  private
    procedure DoAfterShow(var Msg: TMessage); message WM_AFTERSHOW;
Ezt követően az OnShow eseményhez is létrehozzuk annak kezelőjét. Ezen belül kell használnunk a PostMessage függvényt, mellyel küldünk saját Form-unknak egy WM_AFTERSHOW üzenetet.
procedure TForm1.FormShow(Sender: TObject);
begin
  ListBox1.Items.Add('Show');
  PostMessage(Handle, WM_AFTERSHOW, 0, 0);
end;
Amikor a Form megkapja ezt az üzenetet, akkor fut a DoAfterShow eljárás, ahol tetszőleges kódot futtathatunk.
procedure TForm1.DoAfterShow(var Msg: TMessage);
begin
  ListBox1.Items.Add('AfterShow');
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
1488DelphiMS SQL tárolt eljárások1. rész
1499DelphiMS SQL tárolt eljárások2. rész
1507DelphiMS SQL tárolt eljárások3. rész
1519DelphiMS SQL tárolt eljárások4. rész
1526DelphiMS SQL tárolt eljárások5. rész
1537DelphiMS SQL tárolt eljárások6. rész
1546DelphiMS SQL tárolt eljárások7. rész
1553DelphiMS SQL tárolt eljárások8. rész
1564DelphiMS SQL tárolt eljárások9. rész
1573DelphiMS SQL tárolt eljárások10. rész
1582DelphiMS SQL tárolt eljárások11. rész
1591DelphiMS SQL tárolt eljárások12. rész
1600DelphiMS SQL tárolt eljárások13. rész
1609DelphiMS SQL tárolt eljárások14. rész
1617DelphiMS SQL tárolt eljárások15. rész
1626DelphiMS SQL tárolt eljárások16. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 443. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |