![]() |
trichedit selstart - in Delphi 2010 anders definiert?
Beim kompilieren eines Programmes unter Delphi 2010, welches unter Turbodelphi 2006 erstellt wurde,
kommt es bei Nutzung von trichedit zu Störungen. Ich nutze häufig selstart und sellength, um den trichedit-Text zu manipulieren. Selstart beschreibt in Trichedit unter delphi 2010 etwas anderes als unter z.B. Turbodelphi: Der Zeilenvorschub #13#10 wird nicht mit zwei Zeichen, sondern nur mit einem gezählt. Man muß, um für selstart zum gleichen ergebnis zu kommen, pro Zeilenvorschub jeweils 1 abziehen. Wozu ist das gut? |
Re: trichedit selstart - in Delphi 2010 anders definiert?
|
Re: trichedit selstart - in Delphi 2010 anders definiert?
Danke für den Hinweis!
Für meine zwecke habe ich mir an der Stelle, an welcher ich selstart setzen möchte, eine kleine Hilfe eingebaut: errechnetesSelstart:=pos(substr,text);//Vorkommen von substr im Text von trichedit selstart:=errechnetesSelstart-caretpos.y; D.h. pro Zeilenvorschub wird 1 abgezogen. |
Re: trichedit selstart - in Delphi 2010 anders definiert?
Zitat:
Denn CaretPos ist ja von SelStart abhänging und demnach müßte man, um CaretPos auslesen zu können erstmal (errechnetesSelstart - ZeilenumbrücheVorErrechnetesSelstart) an SelStart übergeben. Praktisch ein Teufelskreis. (darum ist an dieser Stelle in meinem Code auch soeine aufwändige Berechnung, obwohl sie inzwischen schon sehr stark optimiert wurde) Aus diesem Grunde hatte ich auch mal quasi so angefangen,
Delphi-Quellcode:
aber leider ergab dieses oftmals ein falsches Ergebnis
SelStart := errechnetesSelstart;
SelStart := errechnetesSelstart - CaretPos.y; und vorallem zum Textende hin gab es quasi einen Überlauf. |
Re: trichedit selstart - in Delphi 2010 anders definiert?
Stimmt - mein Vorschlag geht nur, wenn der Cursor in der richtigen Zeile steht - reicht für mein Programm - werde das aber noch mal verallgemeinern.
Hier ein allgemeingültiger Vorschlag: der text eines Richedit könnte so aussehen: 01#13#10 (#13#10 nur zur veranschaulichung mitgeschrieben) 234#13#10 5678
Delphi-Quellcode:
pos(p,richedit1.Text) ergibt 12;function getcharcount(c:char;s:string):integer; //zählt c in s var p:pchar; begin result:=0; p:=pchar(s); while p^<>#0 do begin if p^=c then inc(result);inc(p)end; end; function getnewselstart(atext:string;apos:integer):integer; var i:integer; //atext: der Text von trichedit; apos: die gewünschte Position des Cursors in atext begin setlength(atext,apos); //kappen des textes bis zur gewünschten Position result:=apos-getcharcount(#13,atext);//von dieser gewünschten Positon die Anzahl der darin enthaltenen Zeilenvorschübe abziehen end; procedure test; var p:string; begin p:='7' richedit1.SelStart:=getnewselstart(richedit1.Text,pos(p,richedit1.Text)); richedit1.sellength:=1;//damit mans auch sieht end; für selstart ist - in einem tmemo die Anzahl der Buchstaben (8) + 4 für den Zeilenvorschub macht selstart=12 - im neuen trichedit die Anzahl der Buchstaben (8) + 2 für den Zeilenvorschub macht selstart=10 markiert wird die 8 nunmehr auch im "neuen" trichedit |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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