// 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; 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke