Autor |
Beitrag |
Hochhaus
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mi 06.06.12 14:11
Hallo allerseits !
es hat mich viele Stunden gekostet zu sehen, dass der folgende Quellcodebefehl nicht funktioniert:
Delphi-Quelltext 1:
| RichEdit1.Text := StringReplace(Richedit1.Text,#10,'',[rfReplaceAll]); |
Weiss jemand Rat ? Das RichEdit wird nicht geändert, die #10 - Zeichen bleiben erhalten. Das Problem tritt unter Delphi XE2 auf - ob vorher auch, weiss ich nicht.
Gruss,
Hochhaus
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 06.06.2012 um 14:40
Moderiert von Narses: Titel geändert, war: "Korrektheit der Ausführung einer Delphi-Quellcodezeile !".
|
|
DonManfred
      
Beiträge: 148
Erhaltene Danke: 2
Windows 7
Delphi XE3 Pro + HTML5Builder
|
Verfasst: Mi 06.06.12 17:00
Sicher das das #10 stehen bleibt oder kann es nicht doch sein das das was du da noch siehst ein #13 ist? Normal ist ein Zeilenumbruch ja #13+#10...
_________________ Gruss Manfred
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mi 06.06.12 17:16
Der Text wird ja nicht in Delphi verwaltet sondern an ein Wincontrol übergeben, diese wertet #10#13 oder #10 oder #13 als Zeilenumbruch aus, bei der Rückgabe bekommst Du für jeden Zeilenumbruch ein #13#10.
Was passiert sieht man mit diesem "Provokationstest"
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm5.Button1Click(Sender: TObject); begin RichEdit1.Text := 'Hallo'#13#10'Nase'; Caption := IntToStr(Length(RichEdit1.Text)); RichEdit1.Text := StringReplace(Richedit1.Text,#13#10,#10#13,[rfReplaceAll]); Caption := Caption +'-' +IntToStr(Length(RichEdit1.Text)); end;
procedure TForm5.Button2Click(Sender: TObject); begin Memo1.Text := 'Hallo'#13#10'Nase'; Caption := IntToStr(Length(Memo1.Text)); Memo1.Text := StringReplace(Memo1.Text,#13#10,#10#13,[rfReplaceAll]); Caption := Caption +'-' +IntToStr(Length(Memo1.Text)); end;
procedure TForm5.Button3Click(Sender: TObject); begin Label1.Caption := 'Hallo'#13#10'Nase'; Caption := IntToStr(Length(Label1.Caption)); Label1.Caption := StringReplace(Label1.Caption,#13#10,#10#13,[rfReplaceAll]); Caption := Caption +'-' +IntToStr(Length(Label1.Caption));
end; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Für diesen Beitrag haben gedankt: Hochhaus
|
|
IhopeonlyReader
      
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Mi 06.06.12 17:26
Vielleicht was ganz einfaches wie, dass Wordwrap von dem Richedit an ist? so würde, falls der text länger als das Richedit ist ein Zeilenumbruch hinzugefügt  Vielleicht ist das folgende Abfolge:
- 'Hallo'+#10#13+'Zeile2' //dann zeilenumbruch durch nichts ersetzen
- 'HalloZeile2' //RicheditWordWrap schaltet sich ein
- 'Hallo'+#10#13+'Zeile2'
Eventuell machst du mal sowas
Showmessage(StringReplace(richedit1.text,#10#13,'',[rfReplaceAll]));
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mi 06.06.12 20:22
bummi hat folgendes geschrieben : | Der Text wird ja nicht in Delphi verwaltet sondern an ein Wincontrol übergeben, diese wertet #10#13 oder #10 oder #13 als Zeilenumbruch aus, bei der Rückgabe bekommst Du für jeden Zeilenumbruch ein #13#10.
|
Danke für Eure Beiträge. Mit einem TMemo treten die Schwierigkeiten nicht mehr auf. Dafür kriege ich die Zeile und Spalte im Editor nicht mehr hin:
Delphi-Quelltext 1: 2: 3:
| Zeile := 0; Zeile := Memo1.Perform(EM_LineFromChar, Zeile-1, 0) + 1; Column:= Memo1.SelStart - Memo1.Perform(EM_LINEINDEX, Zeile-1, 0) + 1; |
...funktioniert nicht mehr.
Gruss,
Hochhaus
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 07.06.12 06:40
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Do 07.06.12 06:51
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Dies ist nicht das Problem. Ich habe schlicht und einfach vergessen, die Prozedur auszuführen ... Sorry, mein Fehler !
Hochhaus
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 07.06.12 07:11
Das kann so aber trotzdem keine korrekten Ergebnisse liefern... 
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Do 07.06.12 07:26
jaenicke hat folgendes geschrieben : | Das kann so aber trotzdem keine korrekten Ergebnisse liefern...  |
Ok. Wie würdest Du es besser machen ?
Hochhaus
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 07.06.12 09:05
Ok, das war mir nicht klar: msdn.microsoft.com/e...esktop/bb761609.aspx hat folgendes geschrieben: | If this parameter is –1, EM_LINEFROMCHAR retrieves either the line number of the current line (the line containing the caret) or, if there is a selection, the line number of the line containing the beginning of the selection. |
Aber dann kannst du es auch direkt schreiben: Delphi-Quelltext 1: 2:
| Zeile := Memo1.Perform(EM_LineFromChar, -1, 0) + 1; Column:= Memo1.SelStart - Memo1.Perform(EM_LINEINDEX, Zeile-1, 0) + 1; |
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Do 07.06.12 11:19
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Geht nicht !
--> [DCC Fehler] CHILD.PAS(336): E1012 Konstantenausdruck verletzt untere Grenzen
Deshalb der Trick mit der Zeile ...
|
|
Sybok Factor
      
Beiträge: 50
Erhaltene Danke: 5
Win XP, Win Vista
Delphi 2010 Professional
|
Verfasst: Fr 08.06.12 13:51
Delphi-Quelltext 1: 2:
| Spalte := Memo1.CaretPos.X; Zeile := Memo1.CaretPos.Y; |
Funktioniert das unter XE2 nicht mehr oder habe ich was falsch verstanden?
Viele Grüße
Sybok Factor
_________________ Jetzte michse verstehen dein Problem.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Fr 08.06.12 16:38
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Dies funktioniert für kleine Zeilenzahlen. Wenn ich aber über 100'000 Zeilen in einer Datei habe, funktioniert es nicht mehr. Ich habe es mit meinem Texteditor ausprobiert ...
Gruss,
Hochhaus
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 08.06.12 18:11
Für diesen Beitrag haben gedankt: Hochhaus
|
|