// Hiermit kann man
ermitteln, an welcher Stelle der Kursor in einem
// Memo oder in einem Richedit steht. Man beachte, dass die Zählung
// der Zeilen auch bei "0" beginnt.
// Getestet mit D4 unter WinME
// Variant 1 (vorrangig für ältere Versionen)
procedure stelle(tcm: TCustomMemo; var sp, zl: integer);
begin
zl := tcm.perform(EM_LINEFROMCHAR, tcm.selstart, 0);
sp := tcm.selstart - tcm.perform(EM_LINEINDEX, zl, 0);
end;
// Variant 2
procedure stelle(tcm: TCustomMemo; var sp, zl: integer);
var p: TPoint;
begin
p := tcm.CaretPos;
sp := p.x;
zl := p.y;
end;
// ------ Beispielaufruf -----------
procedure TForm1.Button1Click(Sender: TObject);
var
spalte, zeile: integer;
s: string;
begin
stelle(Memo1, spalte, zeile);
if spalte = 0 then
s := 'am Zeilenanfang'
else if spalte = length(Memo1.lines[zeile]) then
s := 'am Zeilenende'
else
s := 'hinter dem ' + inttostr(spalte) + '. Zeichen';
label1.caption := 'Der Kursor steht ' + s + ' der ' +
inttostr(zeile + 1) + '. Zeile';
Memo1.setfocus; // bei Bedarf
end;
![](zurueck.gif)
|