Sziasztok, előző havi példaprogramunk (a 'Gülüszemek' alias XEyes) után folytatjuk a komponensek tárgyalását. Eddig pár komponenst tárgyaltunk csak a menüt, a gombokat, a label-t, a shape komponenst és egyéb pár apróságot. Most bővítjük e sort, folyamatosan haladunk végig a Delphi 3 komponens listáján. Lássuk:

TEdit - Egysoros szöveg beviteli doboz   

  • Szerepe, egysoros szöveg megjelenítése, bevitele, szerkesztése
  • Fontosabb jellemzői:
    • AutoSelect property: A szövegdobozban az egész szöveg automatikusan kijelölődik mikor fókuszt kap a szövegdoboz. Ez alapértelmezés szerint bekapcsolt, így ha nem szeretnénk, hogy mindig kilegyen jelölve a szöveg, akkor állítsuk False-ra.

    • Text property: A szerkesztődobozban megjelenítendő szöveget tárolja. Ezt egyaránt tervezési és futási időben módosíthatjuk, kiolvashatjuk. A szövegdobozra nincsen korlátozva Delphi 2 óta, hogy mennyi karaktert tartalmazhat, elvileg akár 2 GB-nyit is.

    • Kis kiegészítő a karakterláncokról: Ez a Delphi 2-ben bevezetett AnsiString, új karakterlánc típus miatt van. (Delphi 1-ben csak a hagyományos 255 karakteres String típus volt a használatos.) Hogy megemlítsük a Delphi 2-ben definiálták a ShortString-et, mely hasonlóan 255 karaktert tud tárolni a sima String-hez képest. A Delphi 3 új karakterlánc típusa a WideString mely lényegében megegyezik az AnsiString-gel, de karaktereit két byte-on (egy word-ön) tárolja az Unicode támogatása miatt. Javaslat, hogy ha nincs szükség nagyobb karakterláncokra akkor a ShortString-et használjuk, ha Unicode-ban kódolt szöveggel dolgozunk akkor nyílván csak a WideString a jó, nagyobb karakterláncok esetén az AnsiString, míg a közvetlen API hívásoknál a PChar típus a használatos. Ide tartozik a {$H}fordító direktíva mely megadja, hogy a String típus begépelése esetén milyen konkrét típusként viselkedjen. Bekapcsolt állapotban ({$H+}) AnsiString-ként, és kikapcsoltban pedig ShortString-ként viselkedik. Figyelem alapállapotban bekapcsolt, az-az a String mindig AnsiString-ként viselkedik. Így egyszerű kis programokban érdemes kikapcsolni. A {$H+} direktívának megfelel a {$LONGSTRINGS ON} direktíva (és létezik az OFF végű direktíva is mely = {$H-}).

    • MaxLength property: A maximálisan tárolható (kiírható / bevihető) karakterek száma.

    • Modified property: Megmutatja, hogy a szövegdoboz tartalma módosult -e azóta, hogy utoljára False volt e tulajdonság.

    • SelText property: A szövegdobozban kijelölt szöveg.

    • SelStart property: A szövegdobozban a szöveg kijelölésének kezdete,

    • SelLength property: A szövegdobozban a kijelölés hossza.

Pl.: 
SelText = 'X User'
SelStart = 3
SelLength = 6
  • Fontosabb metódusok:
    • Clear metódus: A szövegdoboz tartalmát kitörli.
    • ClearSelection metódus: A szövegdobozban a kijelölt szövegrészt kitörli.
    • CutToClipboard, CopyToClipboard, PasteFromClipboard metódusok: a vágólapra áthelyezi (kivágja), a vágólapra átmásolja, és a vágólapról beilleszti a szöveget a szövegdobozba. Az első két metódus a kijelölt szövegrészen dolgozik, míg a harmadik vagy a kurzor aktuális helye után illeszti be, vagy a kijelölt szöveget felülírva illeszti be a vágólapról a szöveget.

    • SelectAll metódus: Az egész szöveget kijelöli.
  • Fontosabb események:
    • OnChange esemény: a szöveg megváltozásakor, pontosabban az után hívódik meg. Csak szöveg megváltozáskor, a szövegdobozban való mozgáskor nem, erre az OnKeyDown esemény alkalmazandó.

TMemo - Többsoros szövegbeviteli doboz   
  • Szerepét tekintve több soros szöveg szerkesztésére használatos.
  • A fontosabb tulajdonságot:
    • Text property: a teljes szöveget tárolja folytonosan,
    • Lines property: a teljes szöveget tárolja sorokban.
Pl.:

Memo1-et létrehozzuk vizuális komponensként, majd a forráskód részben:

Memo1.Text ? a tárolt teljes szöveg Memo1.Lines[0] ? az első sor Memo1.Lines[1] ? a második sor ... Memo1.Lines[Memo.Lines.Coun - 1] az utolsó sor
    • A TMemo többi metódusa hasonló a TEdit metódusaihoz (a hasonló ősök miatt).
TRichEdit - Formázható többsoros szövegdoboz   

A Delphi 2-ben jelent meg az a komponens. A többi szövegdoboztól a legfőbb eltérés, hogy itt a szöveg formázható. A TMemo-hoz hasonló tulajdonságokkal és metódusokkal rendelkezik. A szöveg formázására vonatkozóan a Rich Text formátumban megvalósítható műveletek élnek itt is. További előnye, hogy minden gond nélkül beolvassa, vagy lementi RTF állományba /-ból a formázott szöveget. Pl. Winword-del vagy Wordpad-del előállítunk egy RTF file-t, s azt beolvashatjuk Delphi-ben. Saját megfigyelésem, hogy nem tudom miért, de nem látszanak a képek a Delphi által megjelenített RTF file-ban.

  • Fontosabb tulajdonság:
    • Lines property: A TMemo-hoz hasonlóan épül fel. TStrings típusa. A TStrings típusnak van olyan metódusa mely file-ból olvassa be a szöveget, ill. oda ki tudja menteni. Itt a TRichEdit esetében van egy automatikus konverzió, hogy ne a RTF file sima szöveges változatát lássuk, hanem a megformázottat. Így nekünk csak a beolvasással vagy a file-ba írással kell törődnünk.

    • TStrings
      • TStrings.LoadFromFile(const AFileName: String) metódus olvassa be file-ból a kívánt szöveget.

      • TStrings.SaveToFile(const AFileName: String) metódus írja ki file-ba a kívánt szöveget.

    • Így egy RTF file beolvasása:
RichEdit1.Lines.LoadFromFile('E:\delphi.rtf');

Lássuk ezzel kapcsolatos első példaprogramunkat:

  • A képen látható módon hozzunk létre a Form1 ablakon egy TRichEdit komponenst (a Win32 komponens palettában helyezkedik el), ill. alá egy TMemo típusú szövegdobozt (ez a Standard komponens palettában helyezkedik el).

  • Hozzunk lére három TBitBnt gombot (az Additional palettán van), majd állítsuk be minden egyes gomb Caption-ét (kiírandó név) az Object Inspector-ban. A továbbiakban edit-áljuk a Glyph: TBitmap nevű tulajdonságát. 


    Itt állíthatjuk be, hogy milyen kép kerüljön a gombra. A tulajdonság edit-álása során előjön a fenti dialógus ahonnan betölthetjük a képet a gombra. A BitBnt gombhoz előre készített képek a \Borland\Delphi 3.0\Images\Buttons könyvtárban vannak. (más kép is használható). Mindekét gombnak adjunk hasonló képet, én a megnyitáshoz az FldrOpen.BMP-t adtam meg.

    A továbbiakban a harmadik gombnak pedig adjuk meg a Kind tulajdonságban, hogy kilépés gomb, avagy bkClose a jellemző.

  • Ezután létre kell hoznunk a Delphi Dialog-s komponensei közűl két TOpenDialog-ot, a RichEdit-hez egyet és a Memo-hoz egyet. Ez egy olyan rendszer dialógus lesz mellyel a file-t kikereshetjük, megnyithatjuk. (Van elmentéshez, nyomtatáshoz is dialógus.) Ha sikeres volt a file kikeresése (létezik a file) és nem a Cancel gombra nyomtunk, akkor a megnyitandó file nevét kiolvassuk az OpenDialog.FileName mezőből. A file megnyitás sikerességét az OpenDialog-t lefuttató függvény adja vissza: OpenDialog.Execute: Boolean. Az OpenDialog Filter tulajdonságánál állíthatjuk be, hogy milyen kiterjesztésű file-okat mutasson meg. A Filter tulajdonságra klikkantva egy ablakban adhatjuk meg ezeket a kiterjesztéseket a legkönnyebben. (De simán szövegként is bevihető pl.: 'RTF file-ok|*.RTF') Az Options tulajdonságban megadhatunk a dialógus ill. a file keresés, megnyitással kapcsolatos tulajdonságokat. (Én pl. ezeket választottam ki, értelemszerűen: [ofPathMustExist, ofFileMustExist])

  • Ezek után már csak át kell adni a TMemo.Lines-nak (TStrings típusnak), hogy olvassa be az adott file-t. Ha RTF-et olvasunk be akkor automatikusan megtörténik a konverzió, s text-file-nál meg nincs mivel törődni. (Erről egy oldallal feljebb, már beszéltünk.) Íme a megvalósítás:

    if OpenDialogRTF.Execute then RichEdit1.Lines.LoadFromFile(OpenDialogRTF.FileName);
TSpeedButton - Eszköztár gomb   
  • Az eddig tárgyalt gombok, a sima TButton, a TBitBnt gombok nem használhatóak toolbar avagy eszköztár gombnak. Gondoljuk végig, pl. hogy Winword-ben a szöveg igazításánál:

    tehát a szöveg igazításánál a gombok közűl egy állandóan lenyomott állapotban van. Ezt a többi gomb nem tudja megvalósítani. A kölcsönös kizárás lényege ilyen esetben, hogy az egy csoportba tartozó gombok közűl, mindig csak egy lehet lenyomva, s a másik lenyomásakor az előző felenged. Még külön megadható, hogy legalább egynek benyomva kell -e lennie (pl. szöveg igazítás: valahogy biztosan igazítva van), vagy egy csoportban mindegyik lehet -e felengedett állapotban.

  • Fontosabb jellemzők:
    • Caption property: A gomb neve
    • Glyph property: A gombon elhelyezendő kép. Négy különböző képet helyezhetünk el a gomb állapotainak megfelelően. Mi csak két állapotú gombokat használunk. A kép megadása a fent elmondottak szerint történik.

    • GroupIndex property: Ezen tulajdonság segítségével csoportosíthatóak a gombok. Az egy csoportba tartozó gomboknak azonos GroupIndex-xel kell rendelkezniük. Amennyiben a GroupIndex = 0 akkor a gomb TBitBnt gombként fog viselkedni, tehát nem fog benyomva (milyen csúnya kifejezés; legyen 'beragadva') maradni. Ha GroupIndex-nek 0-nál nagyobb számot adunk akkor létrejön a csoportosítás.

    • Down property: Ez a tulajdonság adja meg, hogy a gomb lenyomott állapotban van -e. (True esetén lenyomott állapotban van) Csak 0-tól különböző GroupIndex esetén használható.

    • AllowAllUp property: Ez a tulajdonság határozza meg, hogy az egy csoportba tartozó gombok közűl lehet -e mind egyszerre felengedve (AllowAllUp=True), vagy az egyik gombnak mindenképen muszáj benyomva maradnia, ilyen pl. a Winword-ben a szöveg igazítása. (Ekkor AllowAllUp=False)

Nos, hogy ilyen szépen végig vettük a gombokat használni is kellene valamire őket. A TSpeedButton-t általában egy TPanelon helyezik el, s eszköztárat alakítanak ki belőlük. Valahogy így:

Viszont ennél van egy sokkal szebb megoldás, melyet már igazán nevezhetünk toolbar-nak, sőt leginkább CoolBar-nak, hisz olyan klassz. A TCoolbar komponens a Winword 97 toolbar-jaihoz hasonló húzogatható (áthelyezhetô) toolbar-okat ad.

Most csak áttekintés szinten foglalkozunk vele, majd a következő számban részletezzük. Elkészítése egyszerű: hozzunk létre egy TCoolbar-t, majd ezt kijelölve; a komponens palettán pl. kettő TToolbar-t. Ekkor megjelenik a Coolbar-ban a kettő áthelyezhető toolbar. Jelöljük ki az egyik toolbar-t, majd rakjunk rá pár TSpeedButton-t. Rakjuk a gombokat megfelelően csoportokba, rendeljünk hozzájuk képeket, és kész is.

Példa programunk így néz ki (próbáljátok ki !):

Mára ennyit, a következő számban a TCoolbar használatát részletezzük, ill. további komponensekkel foglalkozunk. A cikkben szereplő példa programok, és forráskódjuk természetesen megtalálhatóak itt:
Textopener forráskód és EXE
Toolbar forráskód és EXE