Delphi alapok

Írta: Kovács Endre János

 

Tartalomjegyzék

 

1. Fejezet - Pascal? Delphi?

2. Fejezet - Randi a fejlesztői környezettel

3. Fejezet - Első programunk

4. Fejezet - Ismerkedés az alapvető komponensekkel

5. Fejezet - Kapcsolat a formok között

6. Fejezet - A médialejátszó kezelése

 

Vissza a programozás lapra


1. Fejezet

Azt hiszem, a Pascal után magasabb régiókba léphetünk... Először is hasonlítsuk össze a két fejlesztői környezetet: A Pascal-t már láttuk, a Delphi:

A Delphi fejlesztői környezete

Nos, igen... van különbség. Ugye?

2. Fejezet

Azt már előre szeretném megjegyezni, hogy a Delphi egy igen összetett, ugyanakkor rendkívül kényelmes programozási eszköz. Viszont! Teljes részletességgel még a szakkönyvek sem tárgyalják, hát tőlem se várjon el senki teljeskörű leírást. Nem is lehetne... Amit itt szeretnék bemutatni az az, hogy alapjaiban mi a különbség a Pascal és a Delphi között, ill. alapvetően hogyan használhatjuk a Delphi-t Windows-os alkalmazások készítésére...

Nézzük az alapokat:

Mi is látható a Delphi indítása után?

A szokásos Új, Megnyitás, Mentés, Futtatás  ...stb. innen is elérhető

Először is egy szokásos rész a programunk kezeléséhez... mentés, megnyitás; kivágás; Futtatás...stb.

Gyors és kényelmes megoldást biztosít az eszköztár

A fő funkciók gombokkal is elérhetőek az alatta levő eszköztáron...

Ezek a komponensek. Ezek vezérlik majd a program futását

A legfontosabb rész. Ez a komponenspaletta. Később majd még bővebben is kitérek erre...

A FORM lesz a mi 'festővásznunk'. Erre kerülnek majd fel a komponensek!

Az alap 'vászon'. Ide fogunk majd felrakni dolgokat (komponenseket), hogy azokat kezelhessük... türelem!

Itt lehet majd a komponensek tulajdonságát beállítani. Méret, felirat, szín...stb.

Ez a rész a komponensek (azok a dolgok, amiket majd a 'vászon'-ra teszünk) alapvető beállítását teszi lehetővé.

A programozók igazi helyszíne. Ide kerülnek majd a parancsok

Végezetül: itt fognak majd a legérdekesebb dolgok történni... Ide írjuk azokat a parancsokat, amikkel majd a komponenseket (...) vezéreljük.

3. Fejezet

Kezdjünk egy rövid programmal...

A Delphi indítása után elénk tűnik a 'megszokott' környezet. Itt láthatjuk az első formunkat (Form1), azaz azt a palettát, amire a komponenseket fogjuk felrakni...

Mi is az a komponens?

Az a programozási eszköz, aminek a segítségével vezérelhetjük a program futását, ill. kapcsolatot tarthatunk a felhasználóval... Pl.: egy SZÖVEGBVITELI MEZŐ Ez egy szövegbeviteli mező, vagy egy NYOMÓGOMB Ez egy nyomógomb.

Ezek után nézzük tehát, hogy hogyan is készül az első programunk! :

A felhasználó által megadott szöveget gombnyomásra írassuk ki egy szövegcimkébe!

Az első dolgunk, hogy kiválasszuk a komponenspalettáról a megfelelő komponenseket és azokat felhelyezzük a formra. Ezt úgy tudjuk elérni, hogy a megfelelő komponensre 2-szer kattintunk (a másik az, hogy 1-szer a komponensre, utánna 1-szer a formra kattintunk).

Ez a komponenslista. Innen tehetjük a form-ra a kívánt komponenseket

Rakjunk fel egy szövegcimkét (neve = LABEL), egy szövegbeviteli mezőt (neve = EDIT) és egy nyomógombot (neve = BUTTON)!

- A szövegcimkét általában arra használjuk, hogy a felhasználónak szöveget írjunk ki. Ezt ő közvetlenül nem tudja megváltoztatni.

- A szövegbeviteli mező azt a célt szolgálja, hogy a felhasználó szöveget tudjon nekünk beírni (pl.: a nevét), és azt mi kezelni tudjuk (pl.: kiírjuk, hogy 'SZIA'+Felhasználó neve+'!'  - bővebb infó erről: Pascal rész )

- A nyomógomb pedig ahhoz kell (jelen esetben), hogy elindítsunk egy folyamatot (most: gombnyomásra rakjuk bele a szövegcimkébe a felhasználó által megadott szöveget a szövegbeviteli mezőből).

A komponensek alapértelmezett sorszámokkal rendelkeznek. Pl.: A feltett nyomógomb neve nem BUTTON, hanem BUTTON1 lett. Ha még egyet feltennénk, akkor annak már BUTTON2 lenne a neve és így tovább... ezek természetesen szabadon megváltoztathatóak, de erről majd később... Ezt azért írtam le, mert a programozási résznél fontos szerepet játszik majd!

A 2. lépés az, hogy az OBJECT INSPECTOR-ban (objektumfelügyelő - az a rész, ahol a komponensek és egyebek tulajdonságait [pl.: név, szélesség, magasság ...stb] beállíthatjuk) beállítjuk a LABEL-nek a feliratát (amit a felhasználó látni fog). Keressük meg a CAPTION részt, és írjuk át a LABEL1-et ...bármire... Megjegyezném, hogy az előbb megemlítettem azt a tényt, miszerint a komponensek komponenstípus+szám névvel születnek (pl.: label1). A LABEL1 caption-jét (cimkéjét) megváltoztatva az azonosítója (label1) nem változik meg!

Az EDIT1-nek a szövegét viszont ne a CAPTION-nél keressük, mert olyat, hogy caption, nem lesz! Helyette nézzünk egy kicsit lejjebb, ahol viszont találhatunk egy TEXT tulajdonságot! Ez az, amit mi kerestünk! Ezt én ki szoktam törölni, hogy ne zavarja a felhasználót...

Legvégül a BUTTON feliratát (ami viszont szintén a CAPTION-nél van) írjuk át valamire... persze, csak ha kedvünk tartja...

És most következik a programozás!!!

Kattintsunk 2-szer a BUTTON-ra (a Form-on), ekkor előjön a forrásablak. A Delphi olyan rendes nyelv, hogy a megfelelő részeket már bele is írta a forrásba HELYETTÜNK! Tehát amit látunk:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

Erről csupán annyit -egyenlőre-, hogy a begin end közötti rész fog végrehajtódni akkor, ha a gombra kattintunk. Nézzük, mit is kell ide írnunk, hogy megvalósítsuk a feladatot:

- Azt tudjuk, hogy a szövegcimkébe (mostantól maradjunk a LABEL-nél...) kell beletennünk a szövegmező (EDIT)tartalmát.

- Azt is tudjuk, hogy a LABEL felirata a CAPTION-nel kérhető le ill. módosítható, az EDIT felirata pedig a TEXT-tel.

Ezek után már nem kell mást beírnunk, mint : Label1.Caption:=Edit1.Text;

Ha elkezdjük begépelni, akkor a ponttig jutunk, ekkor azonban furcsa dolgot tapasztalunk:

Hatékony segítség az, ha a van aki kitalálja a gondolatainkat!

A Delphi a komponenshez tartozó 'utasításokat' kilistázza az orrunk elé! Nekünk nem kell mást tennünk, mint kiválasztanunk a megfelelő 'parancsot'! (Ha tovább gépelünk, akkor szűkül a kiválasztható parancsok köre. A fenti képen a 'C' leütése után már csak a 'C'-vel kezdődő 'parancsokat' látjuk!)

És kész!

Futtassuk is le! Vagy a RUN/RUN menüpontból, vagy az eszköztáron levő zöld háromszöggel...

Voila! És kész az első Delphi-s programunk!

Utánna a megszokott X-et lenyomva a -jobb oldalán a programnak- visszatérünk a Delphi-hez. Gratulálok!

4. Fejezet

A következőkben egy pár alapvető komponenst szeretnék bemutatni, ill. azok használatának módjait. Lássuk hát!

Rakjunk fel pár alapvető komponenst a STANDARD és az ADDITIONAL fülről...

Ezekkel a komponensekkel fogunk most megismerkedni

Szövegbeviteli mező - EDITNyomógomb - BUTTONSzövegcimke - LABELKép - IMAGEFeljegyzés - MEMOLista-tároló - LISTBOXLegördülő lista - COMBOBOX - ezekről a komponensekről van szó (Edit,Button,Label,Image,Memo,ListBox,ComboBox).

 Szövegbeviteli mező (EDIT):

Már beszéltünk róla, azt már tudjuk, hogy a benne levő szöveget a TEXT tulajdonság határozza meg. Mit tud még? Nos, most ez talán a legfontosabb tulajdonsága nekünk. Aki szeretne többet tudni róla, annak ajánlom, nézze meg a COLOR, ill. a BEVELKIND  tulajdonságokat... ezek talán azok, amelyek még elsőre jópofa dolognak számíthatnak. Ja, és a FONT tul.-on levő szövegbeállításokat is érdemes megnézni! Vagy a + jelre kattintunk a FONT előtt, vagy a mögötte levő '...' (pontpontpont) jelre.

 Nyomógomb (BUTTON):

Ezzel is foglalkoztunk már... Ennek van egy CAPTION tul.-a, ami a nyomógomb szövegét állítja be, ill. még a FONT részét érdemes megnézni...

 Szövegcimke (LABEL):

Szintén ismert komponens... Van CAPTION, COLOR, FONT tul.-a, mint a többieknek, kiemelném még a LAYOUT tul.-át, amivel beállíthatjuk a szöveg elhelyezkedését (lent, fennt, középen), ha esetleg megnyújtjuk (erről később!).

 Kép (IMAGE):

Ezzel a komponensel még nem találkoztunk... Egy képet tudunk vele kirakni a formra. Rakjuk fel ezt a komponenst, és láthatjuk, hogy először semmit se látunk... huhh!

Most, csupán annyi a dolgunk, hogy az object inspectoron (ahol a tulajdonságok vannak) megkeressük a PICTURE részt és rányomunk a '...' gomb(?)ra. Itt válasszuk ki a LOAD gombot, keressük meg a kívánt képet és válasszuk ki. Ha megvagyunk, akkor OK gomb.

De! Mi van akkor, ha a kép nagyobb, mint az IMAGE komp.? Nos, több lehetőségünk is van:

- Megnöveljük a komponens méretét: Fogjuk meg a komponens jobb alsó sarkát és ha megváltozott az egérmutató, akkor folyamatos egérgomb-nyomvatartás (!!! micsoda szöveg !!!) mellett húzzuk az egeret lefele a kívánt méretig.

- Beállítjuk a komponens méretét: Ha figyelmesek vagyunk láthatjuk, hogy szinte minden komponens mérete megváltoztatható. A fennti megoldás jó, de nem túl precíz! Nézzük meg, hogy mi is van a tulajdonságok között... Jé!!! WIDTH és HEIGHT... magyarul: szélesség és magaság! Ezeket az értékeket átírva pixel-pontosan be tudjuk lőni az adott komponens méretét! Juhéj!

- A képet a komponenshez 'zsugorítjuk': Az IMAGE-nek van egy STRETCH tulajdonsága. Ez vagy igaz (TRUE) vagy hamis (FALSE). Ha igaz, akkor torzítjuk a képet a komponenshez, ha hamis akkor nem.

Érdemes még a CENTER tul.-ot TRUE-ra állítani (persze ez STRETCH = True-nál felesleges...), így szebb a kép elhelyezkedése a komponens közepén.

 Feljegyzés (MEMO):

Az EDIT mező egy sor szöveget tud megjeleníteni ill. bekérni. Ez jó, ha esetleg csak egy névre, lakcímre...stb. van szükségünk, de nagyobb terjedelmű szöveg esetén bizony nem túl célravezető megoldás... A megoldás a MEMO komponens. Ez tetszőleges (?) méretű szöveget meg tud jeleníteni, ill. tudunk bele írni... (ez nem volt szép mondat nyelvtanilag, bocsi...)

Alapvető szöveget a LINES tulajdonságnál tudunk beállítani, ez soronként íródik bele. Próbáljuk csak ki! Továbbá az alapvető COLOR, FONT tul.-nál érdemes körülnézni. Ha pedig már írunk is bele, akkor azt szeretnénk is lementeni egy fájlba. Ugye? Erre mutatok egy kis példát. Legalább gyakoroljuk a komponensek használatát:

1., Kell: MEMO, BUTTON (a neveket ne változtassuk meg... MEMO1, BUTTON1) komponens

2., MEMO1 ürítése: LINES tul., .... kitöröljük a sort....

3., BUTTON1-re kétszer katt, megjelenik a forrás ... írjuk bele:

 

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.SaveToFile('C:\Hello.txt');
end;

Tehát: A MEMO sorait (LINES) töltsd be a megadott fájlba (SAVETOFILE)... nem bonyolult. Ugye?

Megjegyzés: Nos, aki már programozott az tudja, hogy az itt 1(!) sorban levő utasítás (miszerint mentsük le a fájlba...) alacsonyabb szintű programozási nyelvekben (pl.: PASCAL) kb. 8-10 sor is lehet! És még az is jó arány! Itt pedig csak 1 sor!

Azért mielőtt vadul begépelnénk a fenti sort, azért hadd jegyezzem meg: Még nincs leellenőrizve, hogy van-e ilyen fájl a megadott helyen (C:\HELLO.TXT)!!! Ezért először hozzuk létre, különben csúnya hibák léphetnek majd fel! Később majd ezt is kiküszöböljük... ok? Most csak a komponensekkel szórakozunk egy kicsit....

És még valami: Van egy Memo1.Lines.LoadFromFile(...) parancs is! Lehet próbálkozni az állomány visszatöltésével a MEMO-ba! :)

A teljes szöveget a TEXT-ben tárolja, így pl. két MEMO tartalmat úgy hasonlíthatunk össze, hogy a TEXT-jeiket összevetjük: if Memo1.Text = Memo2.Text then ...

Szeretném még megjegyezni, hogy érdemes használni a SCROLLBARS tulajdonságot:

- ssNone = Nincs görgetősávja a MEMO-nak

- ssBoth = Vízszintes és függőleges görgetősávja van MEMO-nak

- ssHorizontal = Vízszintes ... blabla ...

- ssVertical = Függőleges ... ua. ...

 Lista-tároló (LISTBOX):

Tegyük fel, hogy van egy listánk. Ennek vannak elemei. Ezeket szeretnénk mi kezelni (felvinni, törölni ...stb.). Erre a célra tökéletesen alkalmas a LISTBOX nevű komponens, aminek a legfőbb tul.-a az ITEMS-rész, ahol fel tudjuk venni az alapvető listaelemeket (ha akarunk). Ebben a szerkesztőben (az ITEMS-nél... igen) minden egyes sor egy új elemet fog jelenteni. De mi most ezt is saját kezünkkel programozzuk le! Ok?

1., Kell: ListBox, Edit és 2 db Button (felvételhez és törléshez)

2., Edit szövegrészének kiürítése

3., 2 klikk a Button1-re, a forrásba írjuk a következőt:

 

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Add(Edit1.Text);
end;

Tehát: A lista (LISTBOX) elemeihez (ITEMS) add hozzá (ADD) a következő szöveget: Ami az Edit1.Text-ben van. Ok?

4., Visszatérve a forrásból a formra (F12), a Button2-be pedig a következőt írjuk:

 

procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.DeleteSelected;
end;

 

Tehát: Töröld a listából (LISTBOX) a kijelölt elemet (DELETESELECTED). Ok?

És kész. Tudunk a listába felvenni és onnan törölni. Persze lehet 2 azonost is felvenni, de ennek a megoldása is a jövő zenéje...

Bővítsük ki azért még egy gombbal, hogy tudjak írni erről még egy kicsit. A gomb megnyomásakor írja ki a form fejlécébe (Form1.Caption) a keresett szöveg (az Edit1.Text-be írt szöveg a keresett szöveg most) lista-pozícióját. Megjegyzem, hogy a legelső elem pozíciója : 0 (nulla), az utolsóé pedig : összes elemszám-1. Azt, hogy jelenleg hány elem van a listában azt a ListBox1.Items.Count-ból lehet lekérdezni...

Visszatérve a gombra:

procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Caption:=IntToStr(ListBox1.Items.IndexOf(Edit1.Text));
end;

Vagyis: A gomb megnyomásakor a Form1 fejléce kapjon értéket, ami a következő: A ListBox1 elemjei között keresett szöveg pozíciója, ami megegyezik az Edit1.Text-ben levő értékkel... Jajj! Ez egy kicsit durva volt... Tehát: A felhasználó megad egy szöveget az Edit-be, amit keresni szeretne a ListBox-ban. Ezek után megnyomja a gombot és kap egy értéket a Form fejlécébe. Ez az érték a szöveg helye a listában. Pontosabban akkor lenne pontos, ha hozzáadnánk 1-et. Ugyanis 0-ról kezd a ListBox... De!!! A STRING és az INTEGER típus nem fér össze, és mivel az INDEXOF függvény INTEGER típust ad vissza (a pozíciót), a Form fejléce pedig STRING típusú, így az INTEGER típust át kell alakítani STRING-gé. Erre való az INTTOSTR függvény. Ez annyit tesz, hogy a zárójelben levő értéket -ami INTEGER típusú- átalakítja STRING-gé. Ezzel még majd foglalkozunk, csak elöljáróban leírtam...

Végszóként ehhez: A SORTED tulajdonságot érdemes TRUE-ra állítani, mivel akkor ABC sorrendbe rakja a lista elemeit... hmmm!

 Legördülő lista (COMBOBOX):

Az utolsó komponens amit ebben a fejezetben szeretnék bemutatni az tulajdonképpen egy olyan LISTA és EDIT komponens-kombináció, ami rendkívül hatékony eszköz. Arról van szó, hogy a felhasználó egy Edit mezőt lát a formon (kicsit azért másképp néz ki először...), de nem szükséges beírnia a kívánt szöveget, hanem ki is választhatja egy legördülő listából. Sőt! Ha elkezdi begépelni a kívánt szöveget és az szerepel a listában, akkor a COMBOBOX ki is egészíti azt!

Nézzük meg egy kicsit közelebbről!

Először is rakjuk fel a formra, majd a TEXT tulajdonságát töröljük! Aztán keressük meg az ITEMS tulajdonságot és a szerkesztőrészbe írjunk pár sort. Minden egyes sor egy új elemét jelenti a listának. Futtassuk le a programot és láthatjuk, hogy írni is tudunk a combobox-ba, ill. a jobb oldalán levő -lefele mutató- nyílra kattintva láthatjuk a listát és onnan ki is választhatjuk a kívánt elemet. Próbáljuk ki továbbá egy létező listaelem nem kiválasztását, hanem begépelését! Az eredmény: az első karakter után már megjelenik az első lehetséges elem. Tovább gépelve a kivánt elemet pontosíthatjuk a keresést...

Lássuk mindezt képekben:

  

Az első képen egy tetszőleges szöveget gépeltem be, a másodikon a nyílra kattintva kiválasztottam a 'kettő' nevű elemet, a harmadikban pedig elkezdtem begépelni a 'kettő' szót és látható, hogy már a 'k' betünél kiegészítette teljes szóvá a COMBOBOX... Ahogy mondtam, ez egy nagyon jó eszköz! :)

Nézzük meg pár egyszerűbb tulajdonságát:

ITEMINDEX : Melyik elem legyen látható alapértelmezetten? (-1 = egyik sem, 0 = az első, 1 = második ...stb.)

SORTED : ua., mint a LISTBOXnál. ABC-s sorrendbe rakja a lista elemeit

STYLE : nnna, többféle lehetőség is van:

- csDropDown : az alap beállítás. Írhatunk is a ComboBox-ba, ill. listázhatunk is

- csDropDownList : csak listázást engedélyez

- csOwnerDrawFixed : ???

- csOwnerDrawVariable : ???

- csSimple : nincs listázás, csak gépelési lehetőség (a keresés ekkor is működik!)

Általánosságban a komponensek tulajdonságairól:

Pár tulajdonság, ami szinte minden komponensnél ua.-t jelenti:

- Color : Háttér színe

- Cursor : Milyen legyen a kurzor amikor a komponensre kerül?

- Enabled : Lehessen-e használni, vagy sem? (ha nem, akkor ált. szürkévé válik és (pl.) nem lehet bele írni)

- Font : A benne levő szöveg stílusa (szín, méret, betütípus...stb)

- Height : A komponens magassága (pixelben)

- Hint : Ha az egérrel a komponens fölé megyünk, akkor az általunk megadott szöveget írja ki. Ehhez viszont a SHOWHINT tulajdonságot TRUE-ra kell állítani.

- Left : A komponens távolsága pixelben a form bal szélétől. Minél magasabb ez az érték, annál távolabb lesz a komponens a form (bal) szélétől.

- Name : A komponens neve. Pl.: 'Button1'-ről átírhatjuk 'Gomb'-ra. Nem ajánlott az ékezet használata. Továbbá, ha a forrásban akarunk vele dolgozni, akkor (pl.) ezentúl nem 'Button1.Caption'-t kell írni, hanem 'Gomb.Caption'-t. Ez érthető. Ugye?

- Top : A komponens távolsága pixelben a form tetejétől. Minél magasabb ez az érték, annál távolabb lesz a komponens a form tetejétől.

- Visible : A komponens láthatóságát állíthatjuk be. Ha TRUE, akkor látható a formon.

- Width : A komponens szélessége (pixelben)

Egyenlőre ennyit. Ajánlom az obj.inspector nézegetését, mert kevés angol tudással és próbálkozó szellemmel sikert arathatunk!

5. Fejezet

Eddig csak egy formon dolgoztunk. Ám egy nagyobb program már szükségessé teszi több form használatát. Lássuk hát!

Először is kérnünk kell egy új formot:

Látható, hogy azonnal megjelenik a Form2 is a Form1-es mellett... De ezzel még nincs meg a kapcsolat a két form között!

Az első Form-ra tegyünk fel egy gombot. Ezt lenyomva fogunk majd átugrani a második Form-ra.

Gépeljük be a következő sort erre a gombra:

 Ez a parancs meghívja a FORM2 megjelenítő eljárását.

Nézzük meg ezt egy kicsit másképp:

 A két parancs közötti különbség legjobban futás közben látható.

Ha csupán SHOW-t írunk, akkor a Form2 megjelenik ugyan, de át tudunk váltani a Form1-re is. Ez néha nagyon kellemetlen meglepetéseket okozhat. Azért próbálja ki mindenki akinek kedve van! Amennyiben SHOWMODAL-t írunk, akkor az előbbi problémát megakadályozzuk. Vagyis: A felhasználó addig nem tud visszatérni a FORM1-re amíg a FORM2 látható. Végül: Zárjuk be a Form2-őt! Ehhez is rakjunk fel egy gombot!

Írjuk erre a gombra a következő parancsot:

Ennyi. Ha valami nem világos, akkor egy jótanács: Figyeljük meg a fenti képeken (direkt raktam képeket!), hogy hol van TForm1.Button1Click és hol van TForm2.Button1Click! Mert nem mindegy!

Ha ezek után szeretnénk menteni, egy ablak jelenik meg:

Nem kell megijedni, ez csupán egy kérdés a Delphitől, hogy a USES listába (... az a rész, ahol a formok 'láttatni engedik' egymást... ennél azért bonyolultabb... mindegy...) felvegye-e az új (az eddig fel nem vett) Form-ot. Nyomjunk minden esetben nyugodtan YES-t! Ezzel ki is tárgyaltuk a formok közötti kapcsolatok alapjait.

Nézzük meg ezek után a Formok kinézetére vonatkozó - alap - beállítási lehetőségeket:

Properties (Object inspectorban):

- BorderIcons : Melyik ikon legyen látható?

- BiSystemMenu : Az ablak bezáró ikon (True,False)

- BiMinimize : A tálcára tevő ikon (ua.)

- BiMaximize : A teljesképernyőre váltó ikon (ua.)

- BiHelp : A súgófájl ikonja... ezt nem szoktam alkalmazni....

- BorderStyle : Milyen legyen a form változtathatósága?

- BsDialog : A Form mérete változtatható, láthatóak az ikonok, látható a fejléc-menü

- BsNone : A Form mérete nem változtatható, semmi sem látható csak maga a form; nem ajánlom

- BsSingle : A Form mérete nem változtatható, minden látszódik. Az én alapbeállításom...

- BsSizeable : ua., mint a BsDialog ...

- BsSizeToolWin : A Form mérete változtatható, csak a SystemMenu ikon látható KICSIBEN!

- BsToolWin : A Form mérete nem változtatható, csak a SystemMenu ikon látható KICSIBEN!

- Position : Hol helyezkedjen el a form? (Nincs most türelmem mindet részletezni...bocs...)

- PoScreenCenter : Ezt szoktam alkalmazni, mindíg a képernyő közepére helyezi a formot. Akinek a fejlesztési időben levő hely tetszik az hagyja PoDesigned-en...

Minden egyes új form létrehozásakor azonnal beállítom az értékeimet. Változtatni csak ritkán szoktam. Ha elmarad a beállítás, akkor könnyen elfeledkezhetünk róla és elég csúnyán tud kinézni a form... Komolyan!

6. Fejezet

Egy kis lazítás a sok száraz-anyag után. Készítsünk saját médialejátszót! Persze eleinte nem lesz valami hatalmas mű, de örüljünk annak is, hogy már meg tudjuk szólaltatni a hangkártyát... aztán majd a többi is eljön...

Kérjünk egy új formot (vagy teljesen új projektet), majd helyezzük fel a MEDIAPLAYER komponenst. Ez a

 'System' komponenspaletta-fülön található a Delphi 6 alapbeállításaként.

 Így fog kinézni. Ezzel még nem vagyunk készen, még pár dolgot be kell állítanunk:

 

AutoOpen: ezzel 'aktívvá' tesszük a MediaPlayert. Fontos, hogy a FileName be legyen állítva!

DeviceType: Itt lehet manuálisan beállítani, hogy milyen típusú fájlt (WAV, CDAUDIO, DAT...stb.) szeretnénk lejátszani. Én mindíg dtAutoSelect-en hagyom...

Display: Amennyiben videofájlt szeretnénk lejátszani, úgy még egy panelt (a Standard fülről) is tegyünk fel a formra. Utánna állítsuk be a DISPLAY-ben a panelt. Ezek után már a panel lesz a 'vetítővászon', ahol a tartalom (pl. : film) megjelenik.

FileName: A lejátszandó fájl elérési útja és neve kerül ide. Fontos, hogy még az OPEN (vagy AutoOpen) előtt legyen megadva!

A program lefuttatásakor megjelenik a form, azon a MediaPlayer és már kezelhetjük is! Lejátszás, leállítás, szünet... stb.

Most egy kicsit alaposabban is nézzük meg a problémát: Eddig csak azt tudtuk lejátszani, amit a programozás közben alapbeállításként megadtunk. De mi van akkor, ha a felhasználó mást is szeretne lejátszani? Tudni kellene a fájl nevét, aztán ezt közölni a MediaPlayer-rel.

Egy egyszerű Edit mező talán nem a legmegfelelőbb megoldás az elérési utak és fájlnevek kezeléséhez, de most azért is jön kapóra, mert így legalább bemutathatom azt az eseményt, ami a billentyűzet leütést figyeli az Edit mezőben.

1., Helyezzünk fel egy Edit mezőt a formra

2., egy mediaplayert is... ennyi...

A MPlayer tulajdonságaihoz most ne nyúljunk, azt majd az Edit mezőn való ENTER leütésekor kezeljük. Tehát:

Menjünk az Edit-re és keressük meg az (obj. insp.-ban) az Events fülecskét (ott lesz a properties mellett).

Itt keressük meg az OnKeyPress bejegyzést, majd kattintsunk duplán, hogy bejöjjön az alábbi forráskód-rész:

Részletezése: Ha a leütött billentyű (az Edit1-ben!) egyenlő ENTER-rel (ASCII kódja az ENTER-nek : #13), akkor

A MPlayer fájlneve legyen az Edit1 tartalmával, majd legyen megnyitva (vagyis legyen aktív) a MPlayer. Ennyi.

Ha a felhasználó elindítja a proginkat, és megadja a HELYES!!! elérési utat és fájlnevet, akkor azt le tudja játszani a programunk. Még nem vettük a hibakezelést, úgyhogy ez csak egy kis próba-lejátszó lett, de alapnak azért nem rossz. Ugye?

Vissza a programozás lapra