HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Rövidített tartalmat megjelenítő Edit komponens készítése


Példaprogram letöltése

4317 bájt

Készítünk egy új Edit komponenst, amelyet képessé teszünk arra, hogy igény szerint, tartalmát rövidített formában jelenítse meg. Beállíthatjuk például azt, hogy ha a mező fókusszal rendelkezik, akkor minden normális legyen, de ha elveszti a fókuszt, akkor tartalma rövidített legyen. A rövidítés azt jelenti, hogy ha a Text tulajdonságba beírt szöveg szélesebb, mint az Edit mező szélessége, akkor az a következő formában kerül megjelenítésre: Kov…ter. Ez lehet mondjuk a Kovács Péter rövidítése.

A mellékelt példaprogram megnyitása előtt a ShortEdit.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A ShortEdit komponens alapvetően ugyanúgy működik, mint a hagyományos Edit. Rendelkezik két plusz metódussal, melyek használata opcionális.
A SetShort metódus meghívásával, a Text tulajdonság tartalma rövidített formába kerül. Ez csak akkor történik meg, ha a szöveg szélesebb, mint az Edit mező szélessége.
A rövidített formát a SetNormal metódus meghívásával állíthatjuk vissza, normál megjelenítésre.
Megtehetjük például azt, hogy a ShortEdit OnEnter eseményében meghívjuk a SetNormal metódust, az OnExit eseményben pedig a SetShort-ot.
Az OnEnter esemény tartalma:
(Sender as TShortEdit).SetNormal;
Az OnExit esemény tartalma:
(Sender as TShortEdit).SetShort;
Ilyenkor a fókusszal nem rendelkező mezők rövidített tartalmat mutatnak, a fókusszal rendelkezők pedig teljesen hagyományosan működnek. A mellékelt példaprogram is ezt a lehetőséget mutatja be.
Az IsShort függvény segítségével bármikor lekérdezhetjük, hogy a komponens rövidített értéket mutat-e. Ha igen, akkor a függvény visszatérési értéke igaz.
A komponenst a TEdit osztályból származtatjuk. A TEdit osztályt bővítjük ki a SetNormal és SetShort metódusokkal.
Szükségünk van egy String típusú változóra, amely minden esetben a teljes szöveget fogja tárolni. Ezt nevezzük el FStText-nek.
A SetShort metódus meghívásakor, ebbe az FStText változóba mentjük el a Text mező értékét. Amikor pedig a SetNormal kerül meghívásra, akkor a Text tulajdonság értékét visszaállítjuk FStText-re.
A rövidítés algoritmusát a SetSize metódus tartalmazza.
Az FShort logikai változóban tároljuk el, hogy a komponens rövidített értéket mutat-e, vagy sem. Ha a felhasználó egymás után kétszer is meghívná a SetShort metódust, akkor az adatvesztést eredményezne. Második alkalommal a már rövidített érték kerülne eltárolásra, nem az eredeti szöveg. Ezt az FShort változó segítségével kivédhetjük.
  if FShort=False then begin
    FStText:=Text;
    SetSize;
    FShort:=True;
  end;  
Hogy az FShort értékét programból is le lehessen kérdezni, létre kell hoznunk az IsShort függvényt, amely semmi mást nem csinál, mint visszaadja az FShort értékét.
A SetSize eljárás
A rövidített forma előállítását ez a metódus hajtja végre. A megjelenítendő szöveg szélességét könnyedén lekérdezhetjük a TCanvas osztály TextWidth metódusával. A TEdit osztály, amelyből származtattunk, azonban nem rendelkezik ilyen tulajdonsággal. Ezért ideiglenesen létrehozunk egy TBitmap típusú objektumot, amelynek felhasználjuk a Canvas tulajdonságát.
Hogy a Canvas.TextWidth mindig korrekt értéket szolgáltasson, a Canvas betűtípusát be kell állítanunk a ShortEdit mező Font értékének megfelelően.
Bitmap.Canvas.Font:=Font;
A ShortEdit mező felhasználható szélességét a ClientWidth adja meg. A méretezést csak akkor kell elkezdenünk, ha a Canvas.TextWidth értéke nagyobb, mint a ClientWidth értéke.
if Bitmap.Canvas.TextWidth(FStText)>ClientWidth then begin
A rövidített formában egy olyan String-et kell előállítani, amelynek eleje az eredeti szöveg eleje, közepe „…”, a vége pedig az eredeti szöveg vége. Gyakorlatilag az eredeti szöveg közepét kell kivágnunk és a „…”-al helyettesítenünk.
Az Index1 és Index2 változók különbsége mindig a kivágásra kerülő szövegrész. A változók kezdőértékként a szöveg közepén lévő két karakterre mutatnak.
Index1:=Length(FStText) div 2;
Index2:=Index1+1;
A feldolgozás folyamán az Index1 értéke folyamatosan csökken, az Index2 értéke pedig nő. A vágott szöveg első része mindig az első karaktertől az Index1-edik karakterig fog tartani. A szöveg vége az Index2 és a Length(FStText) közti karaktersorozat lesz.
A feldolgozást egy repeat – until ciklussal végezzük. A feldolgozási ciklus akkor érhet véget, ha a vágott szöveg elfér a ClientWidth szélességén, vagy ha az Index1 és Index2 változók elérték az eredeti szöveg két szélét.
Ha a feldolgozás véget ért, akkor a vágott szöveget elhelyezzük a Text tulajdonságban.

Cikksorozat

#IDKategóriaCikk címeSorozat
1621DelphiMySQL szerverek elérése Delphi-ből1. rész
1632DelphiMySQL szerverek elérése Delphi-ből2. rész
1641DelphiMySQL szerverek elérése Delphi-ből3. rész
1649DelphiMySQL szerverek elérése Delphi-ből4. rész


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