SynEdit - CharIndexToRowCol

Rund um die LCL und andere Komponenten
Antworten
lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

SynEdit - CharIndexToRowCol

Beitrag von lzuser »

Laz 1.8.4, Win10
ich benutze

Code: Alles auswählen

 
var StartSpaZei:TPoint;
StartSpaZei:=MySynEdit.CharIndexToRowCol(TSE[Taktiv].SelStart);
 

StartSpaZei.X liefert immer einen um 2 zu großen Wert im Vergleich zum richtigen CaretX
Das kann man ja verschmerzen, aber da die Anwendung von CharIndexToRowCol nicht empfohlen wird, frage ich doch mal, ob es eine bessere Funktion gibt, die das gleiche tut.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: SynEdit - CharIndexToRowCol

Beitrag von theo »

Fragt sich erst mal, was der Zweck ist.
Ggf reichen InsertTextAtCaret, TextBetweenPointsEx oder SetTextBetweenPoints

lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Re: SynEdit - CharIndexToRowCol

Beitrag von lzuser »

Ich benötige alle ganzen Zeilen eines markierten Blocks und zwar unabhängig davon wo in der Zeile SelStart und SelEnd ist.
Also hätte ich gerne die entsprechenden Zeilennummern.

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: SynEdit - CharIndexToRowCol

Beitrag von martin_frb »

Was ist denn TSE ? Und TActive?

Die Zeile für die Selektion (nicht sicher ob 0 oder 1 basiert...):
SynEdit1.BlockBegin.y
SynEdit1.BlockEnd.y

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: SynEdit - CharIndexToRowCol

Beitrag von martin_frb »

CharIndexToRowCol rechnet bei jeder Zeile ein "LineEnding" mit ein.

SelStart tut das nicht.

lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Re: SynEdit - CharIndexToRowCol

Beitrag von lzuser »

martin_frb hat geschrieben:Was ist denn TSE ? Und TActive?

Entschuldigung, die Vereinfachung der Fragestellung war unvollständig:

Code: Alles auswählen

StartSpaZei:=MySynEdit.CharIndexToRowCol(MySynEdit.SelStart);

martin_frb hat geschrieben:SynEdit1.BlockBegin.y
SynEdit1.BlockEnd.y

Das funktioniert, 1 basiert wie die Zeilennummern im Synedit.
Vielen Dank für den Hinweis.

lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Re: SynEdit - CharIndexToRowCol Nachfrage

Beitrag von lzuser »

Nachfrage:
BlockBegin.x und BlockBegin.y lässt sich leider nur lesen.
Wie kann man denn eine bestimmte Zeile/einen Block vom Programm aus markieren, d.h. SelStart und SelEnd setzen?
Antwort selbst: BlockBegin muss ein TPoint zugewiesen werden statt .x und .y, dann klappt es.

Hintergrund:
Es ist kein Problem, Lines[Nr] zu manipulieren, jedoch ist das dann nicht im SynEdit.Undo registriert.
Wenn ich das richtig sehe, werden dort nur Änderungen über Blocks (SelStart/SelEnd) registriert???

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: SynEdit - CharIndexToRowCol

Beitrag von martin_frb »

Code: Alles auswählen

SynEdit1.BlockBegin := Point(x,y);


Erst BlockBegin, dann BlockEnd setzen.

Beim setzen von BlockBegin, wird BlockEnd gelöscht.

http://wiki.lazarus.freepascal.org/SynEdit
http://wiki.lazarus.freepascal.org/Edit ... :_TSynEdit

Unbedingt lesen: http://wiki.lazarus.freepascal.org/SynE ... t_position
BlockBegin/End sind "Logical"

Antworten