
A mellékelt példaprogram megnyitása előtt az SrcRichEdit.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Az SrcRichEdit komponens a Delphi hagyományos RichEdit komponensének továbbfejlesztése. Amikor a komponens fölött megnyomjuk az egér jobb gombját, megjelenik egy gyorsmenü, amelyben választhatjuk a már más szövegszerkesztőkben eddig megszokott „Keresés” és „Csere” menüpontokat. Bármelyiket választjuk, megjelenik a menüpontnak megfelelő párbeszédablak, amelyben a keresendő szöveget kell megadnunk. A keresés és a csere mindig a kijelölt szövegrészben történik, annak hiányában pedig a kurzor aktuális pozíciójától kezdődően.
A komponens létrehozása
Első lépésben hozzunk létre egy privát változót, Menu néven. Ez a változó lesz a gyorsmenünk, így típusa TPopupMenu lesz. A menüpontokhoz tartozó ablakok TFindDialog és TReplaceDialog típusúak lesznek.
A menüt és a dialógusablakokat a Create metódusban hozzuk létre. Itt rendeljük hozzá a menüt a RichEdit objektumhoz is.
A menüpontok eseményeit a FindHandler és a ReplaceHandler eljárásokban programozzuk le.
A Find dialógusablak felesleges elemeit le kell tiltanunk.
with FindDialog do begin
OnFind:=FindDialogFind;
Options:=[frDown,frHideMatchCase,frHideWholeWord,frHideUpDown];
end;
Ugyanezt meg kell tennünk a ReplaceDialog esetében is.
A FindHandler és ReplaceHandler metódusok nyitják meg a megfelelő ablakot. Mindkét ablak esetében a Search metódus meghívásával jön létre a keresés.
A ReplaceDialog esetében lehetőségünk van keresésre és cserére. Keresés esetén ugyanaz a teendő, mintha a FindDialog ablak került volna meghívásra. Ha cseréről van szó, akkor tovább bonyolítja a helyzetet a „Csere” és az „Az összes cseréje” gombok használata. Ennek lekezelését az OnReplace esemény létrejöttekor kell lekezelnünk.
if frReplaceAll in ReplaceDialog.Options then
while Search(ReplaceDialog.FindText) do
SelText:=ReplaceDialog.ReplaceText
else if Search(ReplaceDialog.FindText) then SelText:=ReplaceDialog.ReplaceText;
A Search eljárás
function TSrcRichEdit.Search(SubString: String) : Boolean;
var
Found, ToEnd : LongInt;
begin
Result:=False;
ToEnd:=Length(Text)-SelStart;
Found:=FindText(SubString,SelStart,ToEnd,[stMatchCase]);
if Found<>-1 then begin
SetFocus;
SelStart:=Found;
SelLength:=Length(SubString);
Result:=True;
end;
end;
A kereséshez a RichEdit osztály FindText metódusát használjuk. A SelStart függvénnyel kérdezhetjük le a kurzor aktuális helyét. Ha valamit kijelöltünk a szövegben, akkor a keresés csak a kijelölt szövegrészben történik.