SynEdit - CharIndexToRowCol

Rund um die LCL und andere Komponenten

SynEdit - CharIndexToRowCol

Beitragvon lzuser » 10. Mai 2019, 10:57 SynEdit - CharIndexToRowCol

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.
lzuser
 
Beiträge: 81
Registriert: 20. Jun 2009, 16:00

Beitragvon theo » 10. Mai 2019, 11:43 Re: SynEdit - CharIndexToRowCol

Fragt sich erst mal, was der Zweck ist.
Ggf reichen InsertTextAtCaret, TextBetweenPointsEx oder SetTextBetweenPoints
theo
 
Beiträge: 8174
Registriert: 11. Sep 2006, 19:01

Beitragvon lzuser » 10. Mai 2019, 15:22 Re: SynEdit - CharIndexToRowCol

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.
lzuser
 
Beiträge: 81
Registriert: 20. Jun 2009, 16:00

Beitragvon martin_frb » 10. Mai 2019, 17:15 Re: SynEdit - CharIndexToRowCol

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: 451
Registriert: 25. Mär 2009, 22:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other | 
CPU-Target: mostly 32 bit
Nach oben

Beitragvon martin_frb » 10. Mai 2019, 17:18 Re: SynEdit - CharIndexToRowCol

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

SelStart tut das nicht.
martin_frb
 
Beiträge: 451
Registriert: 25. Mär 2009, 22:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other | 
CPU-Target: mostly 32 bit
Nach oben

Beitragvon lzuser » 10. Mai 2019, 19:46 Re: SynEdit - CharIndexToRowCol

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: 81
Registriert: 20. Jun 2009, 16:00

Beitragvon lzuser » 12. Mai 2019, 09:28 Re: SynEdit - CharIndexToRowCol Nachfrage

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???
lzuser
 
Beiträge: 81
Registriert: 20. Jun 2009, 16:00

Beitragvon martin_frb » 12. Mai 2019, 12:18 Re: SynEdit - CharIndexToRowCol

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"
martin_frb
 
Beiträge: 451
Registriert: 25. Mär 2009, 22:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other | 
CPU-Target: mostly 32 bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried