Delphi - TDBRichEdit

DataControls paletta 13. rész

forráskód letöltése
Egy korábbi cikkünkben bemutattuk a TDBMemo komponenst, melyben többsoros szöveget tudunk megjeleníteni. Nemcsak megjeleníteni, hanem formázni is tudjuk a szöveget a TRichEdit komponens adatbázisos megfelelőjében, a TDBRichEdit-ben. Alapvető formázási lehetőségeink vannak:
pl. betűtípus, betűszín, betűméret, bekezdések behúzása, tabulátorok...stb. E komponensbe nemcsak TXT szöveget tudunk betölteni, mint a TDBMemo-ba, hanem RichText típusút (RTF) is. Ehhez a megjelenítendő mezőt MEMO típusúra kell definiálni. Az adatbázishoz a DataSource property-n keresztül kapcsolhatjuk hozzá, a mezőt pedig a DataField property-ben állíthatjuk be.

Az így beállított mezőt a Field property-n keresztül érhetjük el.

Ha szerkeszteni akarjuk a TDBRichText komponensen keresztül az adatbázis megadott mezőjét, akkor a ReadOnly tulajdonságot hagyjuk meg True állapotban (ez az alapértelmezett).

Most vizsgáljuk a meg a többi jellemzőt is!

AutoDisplay: értéke alapértelmezésben True. Ebben az állapotban rekordváltáskor automatikusan megjeleníti a hozzárendelt memo típusú mező tartalmát. Ha ez az érték False, akkor a DBRichEdit-en Enter-t nyomva vagy duplán kattintva, betöltődik a mező tartalma.

LoadMemo: ha az AutoDisplay=False, akkor ezzel a metódussal tudjuk betölteni a mező tartalmát a DBRichEDit-be.

PlainText: logikai property. Ha értéke igaz, akkor a betöltött RichText szövegformázás nélkül, egyszerű szövegként jelenik meg. Ellenkező esetben megtörténik az állomány konvertálása. A példaprogramban ezt a Nézet menüben állíthatjuk be.

SelAttributes: TTextAttributes típusú property, melyben a kijelölt szövegrészt formázhatjuk. A példaprogramban ezen keresztül állíthatjuk be a kijelölt szöveg betűtípusát, méretét, színét, egy FontDialog komponens felhasználásával.

Ha az egész komponensen alapértelmezettként szeretnénk beállítani TTextAttributes jellemzőket, akkor használhatjuk a DefAttributes property-t.

A bekezdések jellemzőit állíthatjuk be futási időben a Paragraph TParaAttributes típusú property-ben.
Alignment: példaprogramban beállítható a kijelölt szövegrész, vagy az aktuális bekezdés igazítása: taLeftJustyfi, taCenter, taRightJustyfi.
Numbering: a bekezdések felsorolás jellemzőjét állíthatjuk be:
  • nsNone esetén nincs jelölés;
  • nsBullet esetén egy pont jelöli a bekezdéseket.

A példaprogramban ugyan nem kerültek bemutatásra, de érdemes megemlíteni a TParaAttribute következő jellemzőit is:
  • FirstIdent: a bekezdés első sorának behúzása pixelben.
  • LeftIdent: a bekezdés bal behúzásának mértéke.
  • RightIdent: a bekezdés jobb behúzásának mértéke.
  • Tab: itt állíthatjuk be egy integer típusú tömbben a bekezdés tabulátorainak helyét.
  • TabCount: megadja, hogy az előző tömbnek hány eleme van (tabulátorok száma).


A következő lekérdezhető és beállítható property-k a kijelölésekkel kapcsolatosak:
  • SelStart: ez a tulajdonság a kijelölés kezdetének pozícióját adja vissza.
  • SelLenght: a kijelölés hossza.
  • SelText: a kijelölt szöveg.
  • HideSelection: logikai típusú property. Ha a fókusz más komponenshez kerül, akkor True érték esetén nem, False esetén pedig látszik a szövegkijelölés.


A SelectAll eljárással az egész szöveget kijelölhetjük. Ha meg akarjuk szüntetni a kijelölést, akkor azt a ClearSelection metódussal tehetjük meg.

SetSelTextBuf: PChar típusú szövegként adja vissza a kijelölt szöveget.
GetSelTextBuf: a kijelölt szövegrészt PChar típusú szövegként a memóriába másolja, és visszaadja a bemásolt karakterek számát.

A szöveg méretével, az attól függő megjelenítéssel kapcsolatosak a következő jellemzők:

Lines: a TDBRichEdit komponens tartalmához soronként férhetünk hozzá ezzel a jellemzővel.
A példaprogramban ezen a property-n keresztül tudunk betölteni és menteni állományokat egy OpenDialog és egy SaveDialog ablak segítségével.

MaxLenght: itt határozhatjuk meg, hogy maximálisan hány karaktert tartalmazzon a komponens. Alapértelmezésben nullára van állítva, így nincs felső limit.

WordWrap: ez a tulajdonság True állapotában a jobb szélen megtöri a sort. Ezt csak akkor tudjuk kihasználni, ha közben nincs bekapcsolva a vízszintes görgetősáv. Ha WordWrap=False, akkor a sorok "nem állnak meg" a DBRichEdit jobb szélén. Ekkor érdemes bekapcsolni a vízszintes görgetősávot.

HideScrollBar: logikai property. Ha a szöveg már nem fér el a komponensben, akkor Igaz értéke esetén bekapcsolja a görgetősávot. Ha HideScrollBar=False, akkor a görgetősáv mindig látszik, akkor is, ha esetleg még nem lenne rá szükség.
ScrollBars: itt állíthatjuk be, hogy melyik görgetősáv legyen látható. Értékei a következők:
  • ssHorizontal: vízszintes;
  • ssVertical: függőleges;
  • ssBoth: mindkettő;
  • ssNone: egyik sem.


PageRect: TRect típusú property, melyben meghatározhatjuk a lap méretét.

OnResizeRequest: ha a szövegnek kicsi a hely és át kellene méretezni, akkor eben az eseményben kapjuk meg TRect típusban az ablak méretét.

WantTabs: ha meg akarjuk engedni a felhasználónak, hogy a DBRichEditen belül a tabulátor billentyűvel is tudjon mozogni, akkor ezt a tulajdonságot állítsuk True-ra. Ha WantTabs=False (ez az alapértelmezett), akkor a tabulátor hatására kilép az ablakból.
WantReturn: az előzőhöz hasonlóan állíthatjuk be az Enter használatát. Ha WantReturn=True, akkor a komponensen belül Enter-rel tudunk új sort, bekezdést kezdeni. Egyébként pedig az Enter hatására az a nyomógomb aktivizálódik, mely a formon alapértelmezettként van megadva.

CaretPos: egy TPoint típusú rekordban adja vissza a kurzor aktuális X és Y koordinátáit.

FindText: ezzel az eljárással tudunk rész szöveget keresni a TDBRichEdit komponensben. A SearchSTr String típusú paraméterben adhatjuk meg a keresendő szöveget. StartPos és Length integer típusú paraméterben kell megadni a keresés kezdetét, ill. végét. A keresés módját az Options paraméterben határozhatjuk meg. Ennek két értéke lehet:
  • stWholeWord: egész szóra keres;
  • stMathCase: különbséget tesz kis és nagybetű között.

A példaprogramban a keresést egy FindDialog komponens segítségével végeztük.

Érdemes a metódusok közül megvizsgálni a vágólap műveleteket használókat is.

CopyToClipBoard: a kijelölt szövegrészt vágólapra másolja. Ha nincs kijelölés, a vágólapot nem törli.
CutToClipBoard: a kijelölt szövegrészt áthelyezi a vágólapra.
PasteFromClipBoard: a vágólap tartalmát beilleszti a kurzor aktuális helyére. Ha a beillesztés előtt volt kijelölt szöveg akkor azt törli, és annak a helyére kerül a vágólap tartalma.
OnSaveClipBoard: ha szöveget helyeztünk a vágólapra, és közben megszűnik a TDBRichEdit, akkor ebben az eseményben van lehetőségünk a vágólap tartalmának megőrzésére.

A törléssel, módosításokkal, műveletekkel és azok visszavonásával foglalkoznak a következők:

Clear: törli a DBRichEdit teljes tartalmát.

Undo: ha változtatunk a szövegen, akkor a változás az undo buffer-ba kerül. Ezzel a metódussal visszaírhatjuk az undo buffer tartalmát.

CanUndo: logikai tulajdonság. Ha a felhasználó módosítja a DBRichEdit tartalmát, akkor a CanUndo=True értéke mellett az Undo metódussal vissza tudja állítani az eredeti állapotot.

ClearUndo: kitörli az undo buffer-t, ekkor CanUndo=False, így az Undo metódus nem tudja visszaírni annak tartalmát.

Change: tájékoztatja az adatforrást ha a DBRichEdit tartalma megváltozik.

Modified: logikai tulajdonság. Értéke igaz, ha a DBRichEdit tartalma szerkesztés közben megváltozott.

OnChange: ez az esemény akkor következik be, amikor a DBRichEdit tartalma megváltozik.

OnSelectionChange: akkor következik be, ha a kijelölt szöveg változik meg.

OnProtectChange: akkor következik be, ha egy szövegrészt csak olvashatóra változtatunk, vagy töröljük a csak olvashatóságot. (A kijelölt szövegrészt csak olvashatóvá tehetjük a SelAttributes.Protected property Igazra állításával.)

Print: ezzel a metódussal nyomtathatjuk ki a TDBRichEdit tartalmát. Az eljárásnak van egy Caption String típusú paramétere, melyben a fejlécet adhatjuk meg. Természetesen a komponens tartalmát a QuickReport segítségével is ki tudjuk nyomtatni.

Hasznos lehet az adatbázishoz műveletek (Action) definiálása, ill. felhasználása, ha az action-t kódból szeretnénk végrehajtani, ill. update műveletet kell kezdeményeznünk. Erre használhatjuk az ExecuteAction, valamint az UpdateAction metódusokat. Logikai értékkel térnek vissza. Ha Action változójukban megadott TBasicAction típusú műveletet sikerült kezelni, akkor értékük True, különben False.

DataControls paletta cikksorozat