Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi trichedit selstart - in Delphi 2010 anders definiert? (https://www.delphipraxis.net/147405-trichedit-selstart-delphi-2010-anders-definiert.html)

DrUArn 7. Feb 2010 18:51


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?

himitsu 7. Feb 2010 18:57

Re: trichedit selstart - in Delphi 2010 anders definiert?
 
Hier im Forum suchenTRichEdit SelStart = http://www.delphipraxis.net/internal...t.php?t=172659

DrUArn 9. Feb 2010 12:27

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.

himitsu 9. Feb 2010 12:35

Re: trichedit selstart - in Delphi 2010 anders definiert?
 
Zitat:

Zitat von DrUArn
selstart:=errechnetesSelstart-caretpos.y;

Und das funktioniert auch richtig?

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:
SelStart := errechnetesSelstart;
SelStart := errechnetesSelstart - CaretPos.y;
aber leider ergab dieses oftmals ein falsches Ergebnis
und vorallem zum Textende hin gab es quasi einen Überlauf.

DrUArn 9. Feb 2010 20:54

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:

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;
pos(p,richedit1.Text) ergibt 12;
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 09:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz