E két adat lekérdezéséhez készítünk két függvényt GetFirstVisibleLine és GetLastVisibleLine névvel. A GetFirstVisibleLine függvény megvalósításánál egyszerű a dolgunk, mivel a TRichEdit képes ezt az adatot egy egyszerű EM_GETFIRSTVISIBLELINE üzenet hatására elárulni számunkra.
function GetFirstVisibleLine(RichEdit: TRichEdit): integer;
begin
result:=RichEdit.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
end;
Bonyolultabb helyzet áll elő az utolsó látható sor meghatározásánál. Itt első lépésként lekérdezzük a komponens területét az EM_GETRECT üzenet elküldésével. Az eredményt egy TRect-be kapjuk.
function GetLastVisibleLine(RichEdit: TRichEdit): integer;
begin
RichEdit.Perform(EM_GETRECT, 0, Longint(@r));
r.Left:=r.Left+1;
r.Top:=r.Bottom-2;
Ezt követően meghatározzuk a TRichEdit-ben utolsóként látható karakter sorszámát.
i:=RichEdit.Perform(EM_CHARFROMPOS, 0, integer(@r.topleft));
Az EM_EXLINEFROMCHAR üzenet elküldésével pedig megkapjuk, hogy hányadik sorban található a paraméterként megadott sorszámú karakter a TRichEdit-en belül.
result:=RichEdit.Perform(EM_EXLINEFROMCHAR, 0, i);
end;
A függvények felhasználása egyszerű: csak meg kell adnunk paraméterként a kérdéses RichEdit komponenst. Visszatérési értékként az első, illetve az utolsó látható sornak a sorszámát adják a függvények.
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=RichEdit1.Lines[GetFirstVisibleLine(RichEdit1)];
Label2.Caption:=RichEdit1.Lines[GetLastVisibleLine(RichEdit1)];
end;