Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Curosr in Memo bewegen


lemming - Do 12.08.04 10:22
Titel: Curosr in Memo bewegen
Hi!

Ich habe ein Memo mit viel viel Text. Jetzt möchte ich gerne das der Cursor steuern lässt. Nach link und Recht mache ich es mit Dec(Memo.SelStart) und Inc(Memo.SelStart); Ich möchte den Cursor aber auch nach oben und unten - eine Zeile höher oder tiefer - befördern können. Wie mache ich das am dümmsten?

lemming


lemming - Do 12.08.04 10:44

Hab was gefunden

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Procedure GetMemoLinePos(Memo:TMemo;var MemoRow,MemoCol:Integer);
Begin
  With Memo do Begin
    MemoRow := SendMessage(Handle,EM_LINEFROMCHAR,SelStart,0);
    MemoCol := SelStart - SendMessage(Handle,EM_LINEINDEX,MemoRow,0);
  End;
End;

Procedure SetMemoLinePos(Memo:TMemo;MemoRow,MemoCol:Integer );
Begin
  If MemoRow <= Memo.Lines.Count
    Then Memo.SelStart := SendMessage(Memo.Handle,EM_LINEINDEX,MemoRow,0) + MemoCol
    Else Memo.SelStart := SendMessage(Memo.Handle,EM_LINEINDEX,Memo.Lines.Count,0) + MemoCol
End;


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.


Crowbar - Do 12.08.04 10:53

Hallo,
ich habe hier auch noch ein Beispiel, wie man den Cursor in einem Memofeld neu plazieren kann und zu dieser Position scrollen kann:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button3Click(Sender: TObject);
begin
 with Memo1 do
 begin
 // Zur letzten Zeile Scrollen:
    SelStart := Length(Text);
    Perform(EM_SCROLLCARET, 00);
 
 // Zur ersten Zeile Scrollen:
    selstart:=perform(EM_LineIndex,0,0);
    Perform(EM_SCROLLCARET, 0 , 0);

 // Cursor auf Linie 5, Postion 3 setzen:
    selstart:=perform(EM_LineIndex,5,0)+3;
    perform(EM_SCROLLCARET,0,0);

 // Den Fokus setzten:
    SetFocus;
 end;
end;


cu
Crowbar


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.