HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Kurzor alatt található szó lekérdezése TMemo komponensben


Példaprogram letöltése

4399 bájt

A TMemo komponens sok funkcióval rendelkezik, azonban képességei tovább bővíthetők. Cikkünkben is ezt tesszük, vagyis kiegészítjük a TMemo komponens lehetőségeit is új képességgel. A mellékelt példában elkészített komponens képes lesz visszaadni, hogy a kurzor – amennyiben tartalmaz szöveget a komponens – a tartalom mely szava fölött helyezkedik el aktuálisan. A szó egy property-ből lekérdezhető.

A mellékelt példaprogram megnyitása előtt a SpecMemo.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component – Install Component menüpontot.
Az új komponens tehát a TMemo osztályból származik. A komponenst kiegészítjük egy property-vel, melyből le lehet kérdezni azt a karakterláncot, mely fölött a kurzor éppen tartózkodik. A megvalósításhoz a TMemo osztály MouseMove eseményét kell felülírnunk.
A property mellett egy új eseményt is létrehozunk a komponensben, mely minden esetben bekövetkezik, amikor a kurzort mozgatjuk a komponens kliensterülete fölött. Deklarációik a következők:
TSpecMemo = class(TMemo)
  private
    { Private declarations }
    FWordUnderCursor : string;
    FOnWordChange: TNotifyEvent;
    ...
A művelet során a Perform metódust használjuk fel, melynek segítségével közvetlenül küldhetünk üzeneteket a kontrol ablakfüggvényének. A metódus első paraméterében kell megadnunk az üzenet-konstanst, a második és harmadik paraméterében pedig az üzenet paramétereit.
A művelet sikere érdekében az EM_CHARFROMPOS üzenetet juttatjuk el kontrolhoz, mellyel lekérdezhetjük az aktuális kurzorpozíciót.
A metódus deklarációja a következő:
Perform
Osztály:
function Perform(
Msg: Cardinal; WParam, LParam: Longint
): Longint;
Üzenetküldés közvetlenül a kontrolnak.
Paraméterek
Msg: Cardinal
Az üzenet-konstans.
WParam
Első paraméter.
LParam: Longint
Második paraméter, mely jelen esetben a kurzor aktuális pozíciója, paraméterré alakítva.
Visszatérési érték
A kontrol szövegében azon karakter indexe, mely fölött a kurzor tartózkodik.
A komponens MouseMove eseménykezelőjében első lépésként meghívjuk a metódust, hogy a pozíció a rendelkezésünkre álljon.
i:=LoWord(Perform(EM_CHARFROMPOS, 0, MakeLParam(X, Y)));
Ezt követően némi számítás eredményeképpen megkaphatjuk a pozícióhoz tartozó szó kezdő- és végpozícióját.
while (self.Text[i] <> ' ') and (i > 0) do Dec(i);
s := i+1;
while (self.Text[i+1] <> ' ') and (i+2 < Length(self.Text)) do Inc(i);
e := i+1;
Majd létrehozzuk azt az eseményt, amelyre majd a felhasználó alkalmazásban egy kezelőmetódust deklarálunk, a kijelölt szót lekérdezendő.
if Assigned(FOnWordChange) then begin
  Self.FOnWordChange(Self);
end;
Végül a szót értékül adjuk a komponens új property-jének, majd a szöveget ki is jelöljük.
FWordUnderCursor := Copy(Text, s, e-s);
SelStart := s-1; SelLength := e-s;
Az alkalmazásban már csak a kezelőt kell létrehoznunk, hogy a címkén megjeleníthessük az adott szót.
procedure TForm1.SpecMemo1WordChange(Sender: TObject);
begin
  label1.Caption := 'A kijelölt szó: ' + Trim(SpecMemo1.WordUnderCursor);
end;

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