HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Bug a képernyőn


Avagy különleges alakú Form létrehozása

Példaprogram letöltése

27365 bájt

A cikk címe ne tévesszen meg senkit, nem egy újabb programhibáról lesz ma szó. A „bug” szócskát most a valódi „bogár” jelentésében kell érteni, ugyanis mai cikkünkben készítünk egy bogár alakú Form-ot, amit véletlenszerűen fogunk a Windows munkaasztalán mozgatni.

Mindehhez először is meg kell változtatnunk a Form alakját. A könnyebb munka érdekében a bogár alakját ellipszis alakúra választottuk, így a CreateEllipticRgn függvény segítségével egyszerűen definiálhatunk számára egy ellipszis alakú régiót. Mivel a bogár 4 irányban mozoghat, ezért külön kell választanunk a fel-le, illetve a jobbra-balra irányuló mozgásokat, ugyanis első esetben álló, míg második esetben fekvő ellipszist kell definiálnunk.
procedure TForm1.DefineRegion;
begin
  DeleteObject(hRegion);
  Case direction of
    0,2 : hRegion:=CreateEllipticRgn(6,30,42,111);
    1,3 : hRegion:=CreateEllipticRgn(6,25,94,60);
  end;
  SetWindowRgn(Handle, hRegion, True);
end;
A DeleteObject függvénnyel felszabadítjuk az összes erőforrást, mely a hRegion objektumhoz tartozik, míg a SetWindowRgn függvény meghívásával beállíthatjuk a megadott régiót a Form-unkra.
A mozgás irányát egy-egy számmal definiáltuk, az alábbi módon.
  • 0: fel
  • 1: jobbra
  • 2: le
  • 3: balra
Mivel minden irányban más-más képet fogunk megjeleníteni, így a Form-on elhelyeztünk négy Image komponenst, melyek tartalmazzák a mozgásirányoknak megfelelő képeket. Amikor a Form létrejön, ezeket elhelyezzük annak bal felső sarkában, majd definiáljuk a régiót.
procedure TForm1.FormCreate(Sender: TObject);
begin
  Width:=196;
  Height:=216;
  Image1.Left:=0;
  Image1.Top:=0;
  Image2.Left:=0;
  Image2.Top:=0;
  Image3.Left:=0;
  Image3.Top:=0;
  Image4.Left:=0;
  Image4.Top:=0;
  DefineRegion;
end;
A bogár mozgatása véletlenszerűen történik. A mozgásirányokat a Random függvénnyel generáljuk. Mindezt egy számláló OnTimer eseményében helyezzük el, így a mozgás sebességét a Timer intervalluma fogja meghatározni. Azonban a mozgatás egyenletessége érdekében generálunk egy újabb véletlen számot. Esetünkben hét számjegy közül kapunk véletlenszerűen értéket. Amennyiben ez az érték ebből az intervallumból (esetünkben 0..6) egy általunk tetszőlegesen választott számmal egyezik meg, akkor történik a mozgatás.
procedure TForm1.Timer1Timer(Sender: TObject);
Var
  StepX, StepY: integer;
  NLeft, NTop : integer;
Const
  Offset=6;
begin
  if Random(7)=2 then
    begin
      Direction:=Random(4);
A kapott mozgásirányoknak megfelelően jelenítjük meg a képeket.
      image1.visible:=Direction=0;
      image2.visible:=Direction=1;
      image3.visible:=Direction=2;
      image4.visible:=Direction=3;
      DefineRegion;
    end;
A StepX változóban a kapott mozgásiránynak megfelelően a Form vízszintes, míg a StepY-ban a függőleges irányú elmozdulását adjuk meg.
  Case Direction of
    0 : StepX:=0;
    1 : StepX:=2;
    2 : StepX:=0;
    3 : StepX:=-2;
  end;
  Case Direction of
    0 : StepY:=2;
    1 : StepY:=0;
    2 : StepY:=-2;
    3 : StepY:=0;
  end;
Az NLeft változóban kapjuk meg a Form-nak a képernyő bal oldalától, míg az NTop-ban a tetejétől számított új értékét. Az Offset segítségével az elmozdulás nagyságát tudjuk szabályozni.
  NLeft:=Left+StepX*Offset;
  NTop:=Top-StepY*Offset;
Amennyiben a bogár túllépi a képernyőt, visszaigazítjuk a koordinátáit a képernyő széleihez.
  if NLeft>Screen.Width then NLeft:=Screen.Width-Width;
  if NTop>Screen.Height then NTop:=Screen.Height-Height;
  if NLeft<0 then NLeft:=0;
  if NTop<0 then NTop:=0;
  Form1.Left:=NLeft;
  Form1.Top:=NTop;
end;
Az alkalmazást indítás után az ALT+F4 billentyűkombinációval lehet lezárni, vagy ha valaki nagyon gyorsan tudja a bogarat követni a képernyőn az egérrel, akkor úgy is bezárhatja, hogy rákattint a képére.

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 590. 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 |