AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi trichedit selstart - in Delphi 2010 anders definiert?
Thema durchsuchen
Ansicht
Themen-Optionen

trichedit selstart - in Delphi 2010 anders definiert?

Ein Thema von DrUArn · begonnen am 7. Feb 2010 · letzter Beitrag vom 9. Feb 2010
Antwort Antwort
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#1

trichedit selstart - in Delphi 2010 anders definiert?

  Alt 7. Feb 2010, 19:51
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

Re: trichedit selstart - in Delphi 2010 anders definiert?

  Alt 7. Feb 2010, 19:57
Hier im Forum suchenTRichEdit SelStart = http://www.delphipraxis.net/internal...t.php?t=172659
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: trichedit selstart - in Delphi 2010 anders definiert?

  Alt 9. Feb 2010, 13:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#4

Re: trichedit selstart - in Delphi 2010 anders definiert?

  Alt 9. Feb 2010, 13:35
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: trichedit selstart - in Delphi 2010 anders definiert?

  Alt 9. Feb 2010, 21:54
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 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