Delphi 2.0

2. óra

Menü

Feladat: Készítsünk egy alkalmazást mely adott menüpontból adott form-ot hív meg. Legyen kilépés menüpontja is.

Megoldás: File/ New Application menü segítségével egy új alkalmazás kérése. Az ablakra kiteszünk a Standard palettáról egy MainMenu főmenü komponenst (futás közben ez a komponens nem látszik, ezért bárhova kitehető). Utána kattintsunk rá duplán, és egy vizuális menüszerkesztőt kapunk, amin kialakíthatjuk a kívánt menüszerkezetet az almenükkel együtt. A menüpontok nevei mindig a Caption részbe íródnak. Építsük fel a következőképpen:

Ablakok                  Kilépés           

Gombvadászat                             

Üzenetablak

A Gombvadászat OnClick eseményéhez írjuk be következőt:

(Ennek hatására hívja majd meg a gombvadászat form-ot modálisan.)

procedure TForm1.Gombvadszat1Click(Sender: TObject);

begin

frmgombvadasz.Showmodal;

end;

 

Az üzenetablak OnClick eseményéhez írjuk be következőt:

(Meg fogja jeleníteni a szabványos üzenetablakot az aposztrófok közzé beírt üzenettel.)

procedure TForm1.zenetablak2Click(Sender: TObject);

begin

ShowMessage('Ilyen egy üzenetablak!');

end;

 

A Kilépés OnClick eseményéhez írjuk be következőt:

(Ki is kell tudni lépni az alkalmazásból, tehát be kell csukni az ablakot.)

procedure TForm1.Kilps1Click(Sender: TObject);

begin

Close;

end;

Most már bezárhatjuk a Vizuális menükészítőt.

Adjunk valamilyen nevet a Menüt tartalmazó formunknak és a Caption részhez is írjunk valamilyen feliratszöveget.

A File/New Form menüponttal kérjünk egy új ablakot, amin a gombvadászatot elkészíthetjük. Nevezzük el olyan néven, amilyen néven hivatkoztunk rá az adott menüpont OnClick eseményében (frmgombvadasz). Ennek a formnak a feladata az lesz, hogy egy gomb ugráljon rajta véletlenszerű helyekre addig, amíg el nem kapjuk (sikeresen rá nem kattintunk). Újbóli kattintásra induljon el megint.

Megoldás: Tegyünk az űrlapra egy bitképet is tartalmazó gombot az additional palettáról (BitBtn). Ahhoz, hogy bizonyos időközönként történjen valami, szükségünk van System palettáról egy Timer komponensre. Bárhova tehetjük az ürlapon, mert futás közben ez a komponens sem látszik.

A tulajdonságaik a következők legyenek:

Komponens Name Jellemző    Érték
BitBtn1 Gomb Caption  ‘Kapj el’
    Glyph C:\PogramFiles\Borland\DELPHI2.0\IMAGES\BUTTONS\FIND.BMP
(a kép elérési útvonala, ami rajta lesz. Ki kell választani a 3 pontot és load)
Timer1 Timer Interval 100 (egy tizedmásodperc)
    Enabled True („jár az óra")

Az OnTimer esemény tizedmásodpercenként következik be. Ilyenkor kell a gombot +-10 pixellel elmozdítani X és Y irányban.

procedure Tfrmgombvadasz.TimerTimer(Sender: TObject);

var rx, ry:integer;

begin

rx:=10*(1-random(3)); {rx =-10, 0 vagy 10}

ry:=10*(1-random(3));

if (gomb.left + rx > 0) and (gomb.left + rx + gomb.width < ClientWidth) Then

{ha nem lóg le az űrlap bal ill. jobb oldaláról}

gomb.left:=gomb.left + rx;

If (gomb.Top + ry > 0) and (gomb.top + ry + gomb.Height < ClientHeight) Then

{ha nem lép le az űrlap tetején ill. alján}

gomb.top:=gomb.top + ry;

end;

 

A ClientWidth és a ClientHeight a Width és a Height jellemzőtől eltérően az ablaknak az a mérete, ami nem tartalmazza a címsort, keretet, és a gördítősávokat.

A véletlenszámgenerátort a program elején kell inicializálnunk, hogy valóban véletlenszámokat kapjunk. Ezért a formunk OnCreate eseményébe be kell írnunk a következőt:

procedure Tfrmgombvadasz.FormCreate(Sender: TObject);

begin

Randomize;

end;

 

Ha rákattintunk a gombra, akkor 2 eset lehetséges:

ha mozgott, akkor meg kell állnia,

ha állt, akkor el kell indulnia.

Ezt a hatást az időzítő ki-be kapcsolásával tudjuk elérni. Ha az időzítőt kikapcsoljuk, akkor az OnTimer esemény nem következik be. Tehát a gomb OnClick eseményébe a következo sorok beírása szükséges:

procedure Tfrmgombvadasz.gombClick(Sender: TObject);

begin

Timer.enabled:=Not Timer.enabled; {ha true volt, akkor false lesz, ha false volt, akkor true lesz}

If Timer.enabled=true then

gomb.caption:='Kapj el'

else

gomb.caption:='Indíts el';

end;

A program indítása a menüs ablakból történjen, hiszen ez fogja meghívni a többi ablakot.