![]() |
Zeilen einer Auswahl unter SynEdit erhalten
Hallo Leute!
Heute habe ich mal eine Frage zu SynEdit. Eigentlich sollte das ganz einfach sein (ich habe auch schon verschiedene Lösungen im Internet gefunden), aber es klappt bei mir einfach nicht. Das Problem ist, ich würde gerne die Anfangs- und Endzeile einer Auswahl unter SynEdit ermitteln. Im Prinzip sollte folgender Code funktionieren:
Delphi-Quellcode:
Leider funktioniert der Code aber nicht. StartLine und EndLine sind beide 0. Weiss zufällig jemand, was ich hier falsch gemacht habe?
var
StartLine : Integer; EndLine : Integer; begin ... if mySynEd.SelStart = mySynEd.SelEnd then exit; StartLine := mySynEd.Perform(EM_LINEFROMCHAR,mySynEd.SelStart,0); EndLine := mySynEd.Perform(EM_LINEFROMCHAR,mySynEd.SelEnd,0); MessageDlg ('StartLine: '+Inttostr(StartLine)+' - Endline: '+IntToStr(EndLine), mtWarning, [mbOK], 0);; ... end; Viele Grüsse und vielen Dank Frank |
Re: Zeilen einer Auswahl unter SynEdit erhalten
Wo issn der Code drinn ? Ich mein wann wird er ausgeführt ?
Und was machst du da mit dem perform ? Wenn ich mich recht erinnere müsste doch gehen:
Delphi-Quellcode:
anfang := SynEdit1.SelStart;
ende := SynEdit.SelEnd; |
Re: Zeilen einer Auswahl unter SynEdit erhalten
Zitat:
Erstmal vielen Dank für Deine Antwort. Also der Code wird einfach über ein Kontextmenü aufgerufen. Ist aber auch eigentlich egal, dass einzige, was hier gewährleistet sein muss ist, dass irgendwas im SynEdit markiert ist, so dass SelStart und SelEnd einen sinnvollen Wert besitzen. Der Code, den Du geschrieben hast liefert mir einfach die Anfangs- bzw. Endposition der Markierung im Buffer zurück, d.h. er liefert die Zeichenposition im Puffer. Ich hätte aber gerne die Zeile, in der die Markierung beginnt und die Zeile in der die Markierung endet. Es gibt unter der Windows API die Message EM_LINEFROMCHAR (für Memos oder RichText-Edits glaube ich...), die eigentlich, wenn man eine Position im Buffer übergibt (geschieht in meinem Beispielcode durch mySynEdit.SelStart bzw SelEnd) die entsprechend Zeile zurückliefern soll. Alternativ zu Perform kann man auch SendMessage verwenden. Hier benötigt man allerdings das Handle des Objektes, an das man eine Nachricht schicken möchte.
Delphi-Quellcode:
Das funzt aber leider auch nicht.
StartLine := SendMessage (mySynEdit.Handle, EM_LINEFROMCHAR, mySynEdit.SelStart,0);
Trotzdem vielen Dank Frank |
Re: Zeilen einer Auswahl unter SynEdit erhalten
So geht's einfacher:
Delphi-Quellcode:
In die Uses-clause deiner Unit musst du dazu noch SynEditTypes hinzufügen.
Var
XY : TBufferCoord; Begin XY := SynEdit.CharIndexToRowCol(SynEdit.SelStart); showmessage('Column: ' + IntToStr(XY.Char) + #13#10+ 'Row: ' + IntToStr(XY.Line)); |
Re: Zeilen einer Auswahl unter SynEdit erhalten
Funktioniert natürlich genauso mit "SynEdit.SelEnd"...
|
Re: Zeilen einer Auswahl unter SynEdit erhalten
Hi GeorgeWNewbie!
Ich bin's noch mal. Natürlich bin ich offensichtlich wirklich zu blöd. Tut mir leid... :wall: diese Fuktion gibt es auch unter meiner SynEdit Version. Allerdings ist der Rückgabetyp nicht TBufferCoord sondern TPoint. Hier ist mein Code, der funktioniert:
Delphi-Quellcode:
Die zweite Frage habe ich allerdings noch nicht gelöst... :-D
var
myLine : Integer; XY : TPoint; begin if mySynEd.SelStart = mySynEd.SelEnd then exit; XY := mySynEd.CharIndexToRowCol(mySynEd.SelStart); myLine := XY.Y; MessageDlg (Inttostr(myLine), mtWarning, [mbOK], 0);; end; Viele Grüsse und vielen Dank Frank |
Re: Zeilen einer Auswahl unter SynEdit erhalten
Hi,
das liegt daran das du wahrscheinlich eine ältere Version hast. Die Umstellung von TPoint auf TBufferCoord und TDisplayCoord fand erst in der letzten CVS-Version statt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 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-2025 by Thomas Breitkreuz