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 BUG seit D2009 (https://www.delphipraxis.net/127990-trichedit-bug-seit-d2009.html)

RoBu 22. Jan 2009 11:56


Trichedit BUG seit D2009
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe ein Problem mit TRichEdit und SelStart. Mit SelStart bestimme ich die Cursorposition und setzte auch den Cursor. Seit der D2009-Version werden vermutlich die Zeilenumbrüche <lf><cr> nicht mehr mit der Länge 2 gezählt, sondern nur noch mit 1.

Probleme kommen dann auch bei den Funktionen length, pos, insert und copy auf.


Gibt es eine einfache Lösung dafür?

Kleines Beispiel: D7-->okay D2009-->falsch
siehe Anhang

Delphi-Quellcode:
unit bug;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  richedit1.SetFocus;
  richedit1.text:='Hello world';
  richedit1.SelStart:=length(richedit1.text);
  label2.Caption:=inttostr(richedit1.SelStart);
  label3.Caption:=inttostr(length(richedit1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  richedit1.Text:=richedit1.Text+#13+#10+'Hello world';
  richedit1.SelStart:=length(richedit1.text);
  label2.Caption:=inttostr(richedit1.SelStart);
  label3.Caption:=inttostr(length(richedit1.Text));
end;

end.

himitsu 22. Jan 2009 12:03

Re: Trichedit BUG seit D2009
 
prüf mal, ob Length(sLineBreak) zufällig 1 ist.

Wenn ja, dann kannst du über Length(sLineBreak) den Zeilenumbruch entsprechend einberechnen.

RoBu 22. Jan 2009 22:32

Re: Trichedit BUG seit D2009
 
sorry, die Konstante ist als #13#10 definiert und hat die Länge 2.

Die wichtigste Änderung mit D2009 ist die Unterstützung von unicode. Ist die Komponente vieleicht nicht sauber zu unicode portiert?

Meine Migration von D2007 zu D2009 hat mich viel Zeit gekostet. Langsam habe ich das Gefühl, das Delphi mit Gewalt an die Wand gefahren wird. Ausser das der Objektinspektor die Eigenschaften wieder alphabetisch sortiert macht der Umstieg nur Probleme.

grüsse RoBu

Bernhard Geyer 22. Jan 2009 22:44

Re: Trichedit BUG seit D2009
 
Zitat:

Zitat von RoBu
Langsam habe ich das Gefühl, das Delphi mit Gewalt an die Wand gefahren wird.

Mit Sicherheit ist D2009 kein "Gegen die Wand fahren" (Kann man eher von D8/2005 sagen). Der Unicod-Port ist ein zwingende größere Anpassung will man auch mal auf Win64 wechseln. Leider ist ein solch großer Port auf VCL-Seite nicht fehlerfrei, noch sind viele Programm überhaupt darauf vorbereitet das SizeOf(Char) = 2 ist (um es vereinfacht zu schreiben).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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