AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit SelStart

Offene Frage von "himitsu"
Ein Thema von Hazebukelar · begonnen am 28. Jan 2010 · letzter Beitrag vom 31. Mär 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Problem mit SelStart

  Alt 28. Jan 2010, 18:19
Frage von den billigen Rängen:

Was steht denn in SelText?
Das die Markierungen manchmal etwas eigenwillig sind ignoriere ich schon länger.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem mit SelStart

  Alt 28. Jan 2010, 18:29
Zitat von himitsu:
[edit]
SelStart und SelLengt arbeiten wirklich nur mit einem Byte als Zeilenumbruch
Das Memo arbeitet aber noch richtig
Der Inhalt von SelText stimmt mit der Markierung überein und es enthält für einen Zeilenumbruch nur #$D.

Kann das mal bitte jemand in einer anderen unicodefähigen Sprache ausprobieren?
(nicht unbedingt C#, das wurde ja zum Teil von Delphi inspiriert)


Es ist also eindeutig im Unicode-Richedit ein anderer Zeilenumbruch, aber ob es nun an Windows oder der VCL liegt, das ist jetzt die Frage.



[edit]
es ist leider ein Problem der VCL

das Richedit scheint intern nur mit #13 (#$D) zu arbeiten,
dieses wird an vielen Stellen auch angepaßt,
aber leider nicht bei SelStart und SelLength.

z.B. in TRichEditStrings.Insert und AdjustLineBreaks sieht man eine Umwandlung zwischen #13#10 und #13.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hazebukelar

Registriert seit: 28. Sep 2009
Ort: Nähe Bodensee
22 Beiträge
 
#13

Re: Problem mit SelStart

  Alt 29. Jan 2010, 08:58
Guten Morgen,

vielen Dank für Euren Input, ist ja nicht wirklich erfreulich.
It's a bug or it's a feature?

Dokumentiert scheint diese Änderung (wenn's denn eine ist?) nirgends, zumindest habe ich nichts gefunden.

Hat vielleicht noch jemand eine Idee wie wir nun damit umzugehen haben?

Die ganzen Suchroutinen welche SelStart benutzen umbauen damit es evtl. beim nächsten
Servicepack wieder geändert wurde ist auch nicht die beste Möglichkeit?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem mit SelStart

  Alt 29. Jan 2010, 09:03
Eine Möglichkeit wäre alle #13#10<>#13-Umwandlungen beim RichEdit auszubauen/abzuschalten.

Aber dann gibt es ein Problem, daß eventuell andere Dinge nicht mehr richtig arbeiten
(#13 ist außerdem kein richtiger Zeilenumbruch, das sind ja normalerweise nur #13#10 für Windows und #10 für Linux ... die #13 alleine wird von manchen Codes auch nicht richtig erkannt)



Die andere Möglichkeit wäre, bei SelStart/SelLength/SelText auch noch diese Umwandlung mit einzubauen,
damit es wieder zusammenpaßt.
Aber das hat noch nicht so richtig geklappt.
Hier mein Versuch
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hazebukelar

Registriert seit: 28. Sep 2009
Ort: Nähe Bodensee
22 Beiträge
 
#15

Re: Problem mit SelStart

  Alt 29. Jan 2010, 12:53
Vieleicht wäre ja auch ein Ansatz nur in der Suchroutine alle #10 aus dem Buffer zu entfernen in welchen
ich den Memotext übernehme?

Dann würden diese automatisch nicht mitgezählt werden und der Rückgabewert der Position des gefundenen
Searchstrings müsste passen und das TRichEdit müsste nicht manipuliert werden.

Meine Suchroutine wird so initialisert:

Delphi-Quellcode:
function SearchMemo(Memo: TCustomEdit;
                    const SearchString: String;
                    Options: TFindOptions): Boolean;
var
  Buffer, P: PChar;
  Size,X,Z: Integer;
begin
  Result := False;
  if (Length(SearchString) = 0) then Exit;
  Size:=Memo.GetTextLen;
  Inc(Size);
  if (Size=0) then Exit;
  Buffer:=StrAlloc(Size);
  try
    Memo.GetTextBuf(Buffer,Size); ---> // Hier müsste man irgendwie die #10 rausschmeissen -> weißt Du dafür eine gute Lösung?
    P:=SearchBuf(Buffer, Size, Memo.SelStart, Memo.SelLength, SearchString, Options);
    if P <> nil then
    begin
      Memo.SetFocus;
      Memo.SelStart:=P-Buffer; ---> // dann würde dieser Wert stimmen
      Memo.SelLength:=Length(SearchString);
      Memo.Repaint;
      Result:=True;
    end;
  finally
    StrDispose(Buffer);
  end;
end;
Bekomme ich die #10 irgendwie aus dem Buffer oder gar nicht erst rein (oder sitze ich auf dem Schlauch)?

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit SelStart

  Alt 10. Nov 2010, 17:06
Kann mal bitte wer prürfen, ob dieses Problem(chen) in Delphi XE immernoch besteht?

> 'nen TRichEdit auf eine Form pappen
> und dann Folgendes ins OnCreate rein
Delphi-Quellcode:
RichEdit1.Text := '123'#10'456'#10'789'#10'abc';
RichEdit1.SelStart := 6;
RichEdit1.SelLength := 4;
ShowMessage(Format('%d %d', [Length(Trim(RichEdit1.Text)),
  Length(Trim(RichEdit1.Lines.Text))]));
Ist dort die "6" bis "8" markiert und die Message zeigt "18 18" an, dann wurde es wohl nicht behoben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hogla

Registriert seit: 15. Jun 2019
1 Beiträge
 
#17

AW: Problem mit SelStart

  Alt 22. Jan 2020, 09:42
Hallo,
habe eben dein Beitrag entdeckt.
Habe gerade das selbe Problem.
Hast du damals raus gefunden woran das liegt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit SelStart

  Alt 31. Mär 2020, 13:47
Erstmal nutzt das RichEdit im Windows (nicht die alte/erste Version/API) ein #13 als Zeilenumbruch.

Jemandem von den Delphi-Entwicklern gefiel das nicht und daher wird beim Zugriff auf .Text und .Lines der Zeilenumbruch auf sLineBreak (#13#10) geändert. (was per se eine eigentlich gute Idee "wäre")
Allerdings wird hier SelText und auch SelStart+SelLength nicht ebenfalls entsprechend umgerechnet, womit diese noch auf den Indize mit #13 bassieren und es somit mit jeder Zeile um jeweils ein weiteres Zeichen verrutscht.


Ich hatte mal mühevoll versucht auch diese Indize umzurechnen und einen Bugfix für die Komponente an Embarcadero übergeben, aber na ja .... nach all den Jahren des Ignorierens wird das wohl nix mehr.

Du kannst aber ReplaceStr(RichEdit.Text, sLineBreak, #10) und ReplaceStr(RichEdit.SelText, #13, #10) nutzen (da sich das kranke Verhalten nicht abschalten lässt),
um die Texte wieder auf #13, ähhh besser #10 zurückzuändern, was dann mit den Indize von SelStart, SelText, FindText usw. übereinstimmt.


Wobei, wenn ich jetzt nochmal drüber nachdenk, dann wäre die einfachste Lösung, wenn emba das Ersetzen von #13 nach #13#10 zu #10 abändert. (auch ein richtiger Zeilenumbruch, aber genauso lang)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (31. Mär 2020 um 13:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:56 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