![]() |
Cursorposition im Memo festlegen
Hallo,
ich probiere es schon den ganzen Tag :-( Wenn in einem Memo die Enter-Taste gedrückt wird, sollen die zwei Tags eingefügt werden und der Cursor soll zwischen diesen beiden Tags stehen. Der Cursor springt aber immer zwei Zeilen tiefer unter das Abschluss </p>. Hoffe Ihr könnt mir helfen, dass der Cursor nach Tastendruck um zwei Zeilen wieder nach oben springt. Viele Grüsse, moperswings
Delphi-Quellcode:
procedure TForm1.Memo1OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if key = VK_RETURN then Memo1.Lines.Add(' '); //cursor position if key = VK_RETURN then Memo1.Lines.Add('</p>'); end; |
Re: Cursorposition im Memo festlegen
Das sollte funktionieren:
Delphi-Quellcode:
Wichtig ist dabei den Key auf 0 zu setzen, da er sonst weiter behandelt wird! Das +3 steht für die dritte Position im einzufügenden Text.
procedure TForm3.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var SelStart: Integer; TempStr: PChar; begin if Key = VK_RETURN then begin TempStr := ' </p>'; SendMessage(Memo1.Handle, EM_GETSEL, Longint(@SelStart), 0); SendMessage(Memo1.Handle, EM_REPLACESEL, 0, LongInt(TempStr)); SendMessage(Memo1.Handle, EM_SETSEL, SelStart+3, SelStart+3); Key := 0; // wichtig ! end; end; Grüße Michael |
Re: Cursorposition im Memo festlegen
Vielen Dank dass Du mich auf den richtigen Weg gebracht hast. Den Rest habe ich mir so hingebastelt wie ich es gebraucht habe.
Viele Grüsse, moperswings
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Memo1.SelStart := 3; end; procedure TForm1.Memo1OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var selstart: integer; TempStr2: PChar; begin if key = VK_RETURN then begin tempStr2 := '</p>'; SendMessage(Memo1.Handle, EM_Getsel, longint(@selstart), 0); SendMessage(Memo1.Handle, EM_Replacesel, 0, LongInt(TempStr2)); SendMessage(Memo1.Handle, EM_Setsel, selstart + 4, Selstart + 4); key := 0; end; end; procedure TForm1.Memo1OnKeyUP(Sender: TObject; var Key: Word; Shift: TShiftState); var selstart: integer; TempStr1: PChar; begin if key = VK_RETURN then begin tempStr1 := ' '; SendMessage(Memo1.Handle, EM_Getsel, longint(@selstart), 0); SendMessage(Memo1.Handle, EM_Replacesel, 0, LongInt(TempStr1)); SendMessage(Memo1.Handle, EM_Setsel, selstart + 4, Selstart + 3); key := 0; end; end; // Das letzte löschen: // Memo1.Lines.Delete(Memo1.Lines.Count - 1); end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz