Autor Beitrag
Hochhaus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 03.12.12 19:41 
Hallo allerseits !

für meinen Texteditor habe ich die RichEdit-Komponente verwendet. Soweit, so gut. Normalerweise funktioniert dies problemlos mit Textdateien. Wenn ich nun aber formatierten Text (z.Bsp. Fettdruck) aus dem Web hineinkopiere, kommen die Formatierungen mit hinein in den Text.

Wie kann ich dies ändern ? Ich will nur Text speichern und kein Zugemüse.

Vielen Dank für Eure Hilfe !


Hochhaus


Moderiert von user profile iconNarses: Topic aus VisualCLX (Component Library for Cross Platform) verschoben am So 09.12.2012 um 22:04
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mo 03.12.12 19:55 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Ich will nur Text speichern und kein Zugemüse.


ausblenden Delphi-Quelltext
1:
RichEdit.PlainText := true;					


Oder im Objektinspektor setzen.
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 03.12.12 19:59 
Das habe ich schon probiert ! Dann enthält meine leere Datei plötzlich chinesische Schriftzeichen ( Bug in Delphi)

Gruss,


Hochhaus
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mo 03.12.12 20:23 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Dann enthält meine leere Datei plötzlich chinesische Schriftzeichen ( Bug in Delphi)

Dann halt den Text aus der Zwischenablage mit

ausblenden Delphi-Quelltext
1:
SendMessage(RichEdit1.Handle, EM_PasteSpecial, CF_Text, 0);  // uses RichEdit					


einfügen.

Siehe hierzu auch: mc-computing.com/languages/RichEdit.htm (ziemlich in der Mitte)
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 03.12.12 20:32 
---> [DCC Fehler] CHILD.PAS(212): E2003 Undeklarierter Bezeichner: 'EM_PasteSpecial'

Was nun ?
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mo 03.12.12 20:35 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
---> [DCC Fehler] CHILD.PAS(212): E2003 Undeklarierter Bezeichner: 'EM_PasteSpecial'


"uses RichEdit". Hatte ich aber oben geschrieben.
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 03.12.12 20:50 
Ok ! Super ! Die Formatierungen sind jetzt weg. Aber die Datei ist immer noch nicht ausführbar und grösser als sie sein sollte. Siehe Beilage !

Hochhaus
Einloggen, um Attachments anzusehen!
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mo 03.12.12 21:23 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Aber die Datei ist immer noch nicht ausführbar und grösser als sie sein sollte.

Kein Wunder, wenn man die Datei im RTF-Format abspeichert ...

Versuche es mal so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  Richedit1.PlainText := false;
  RichEdit1.Lines.LoadFromFile('e:\iconx.rtf');
  
  // speichern als normale Textdatei
  Richedit1.PlainText := true;
  RichEdit1.Lines.SaveToFile('e:\iconx.bat');

Für diesen Beitrag haben gedankt: Hochhaus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.12.12 21:33 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Das habe ich schon probiert ! Dann enthält meine leere Datei plötzlich chinesische Schriftzeichen ( Bug in Delphi)
Den hatte ich ja gemeldet:
qc.embarcadero.com/wc/qcmain.aspx?d=105991
Eigentlich sollte es aber gehen, wenn man alles zur Laufzeit setzt, zumindest ging bei mir dann alles.

Und wenn du für den Eintrag votest, wird er vielleicht auch schneller behoben. ;-)

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 03.12.12 21:33 
--> Gerd Kayser

Aber das tue ich ja schon !

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure TFrmChild.SaveToFile(S: String);
Begin
     RichEdit1.Cursor := crHourGlass;
     Try
       RichEdit1.PlainText := True;
       RichEdit1.Lines.SaveToFile(S);
       RichEdit1.Modified := False;
     Finally
       RichEdit1.Cursor := crDefault;
     End;
End{* SaveToFile *}


Hochhaus

P.S. Da sind noch mehr Bugs im RichEdit drin, glaube ich ... ...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.12.12 22:19 
Ich selbst habe in einem Editorprojekt TRichEdit auch ausschließlich für RTF-Texte verwendet. Alles andere läuft da bei mir mit SynEdit. ;-)

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Di 04.12.12 08:11 
Wie ich gesehen habe, ist die estellte Datei exakt doppelt so gross wie eine reine Textdatei. (FED.EXE mit Delphi XE2 erstellt) Falls das Editorprojekt mit Delphi 6 erstell wird, hat die Textdatei die richtige Grösse.

Gruss,

Hochhaus
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 04.12.12 09:18 
UTF-16 = 2 Byte je Zeichen, Ansi = 1 Byte je Zeichen. Delphi ab 2009 verwendet Ersteres, Du musst also konvertieren.

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Di 04.12.12 10:11 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
UTF-16 = 2 Byte je Zeichen, Ansi = 1 Byte je Zeichen. Delphi ab 2009 verwendet Ersteres, Du musst also konvertieren.


Ok. Und wie konvertiere ich von UTF nach ANSI ?

Hochhaus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 04.12.12 10:12 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Wie ich gesehen habe, ist die estellte Datei exakt doppelt so gross wie eine reine Textdatei. (FED.EXE mit Delphi XE2 erstellt) Falls das Editorprojekt mit Delphi 6 erstell wird, hat die Textdatei die richtige Grösse.
Was heißt richtige Größe? Du hast dort wie user profile iconWasWeißDennIch geschrieben hat, Unicode. Bei Delphi 6 kannst du z.B. chinesische Zeichen gar nicht darstellen, deshalb brauchst du da weniger Platz.

user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Ok. Und wie kovertiere ich von UTF nach ANSI ?
Eine Konvertierung in Ansi macht nur Sinn, wenn man auch wirklich dieses Format braucht. Ein Editor sollte dies normalerweise als Option anbieten, siehe Notepad von Windows oder Notepad++...
Aber standardmäßig macht es keinen Sinn auf Unicode zu verzichten...

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Di 04.12.12 10:16 
Von mir aus gesehen macht es schon Sinn: Nur als reiner Text sind .BAT-Dateien auch ausführbar ...! Im Unicode dagegen hagelt es Fehlermeldungen.

Gruss,


Hochhaus

Wie ich gesehen habe, werden nur neu erstellte Dateien im Unicode gespeichert. Bestehende Textdateien (Ansi) behalten ihr Format.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 04.12.12 11:04 
Für Batchdateien ist das natürlich richtig, ja. Wenn es um die geht, müssen die umgewandelt werden. Am einfachsten indem du TStringList nimmst und dort beim Speichern als zweiten Parameter die passende Kodierung angibst.

Für diesen Beitrag haben gedankt: Hochhaus
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 04.12.12 11:09 
Mit einem TStringStream müsste es auch gehen, aber die Stringliste ist weniger Tipparbeit :)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  sl: TStringlist;
begin
  DeinRichEdit.PlainText := true;
  sl := TStringlist.Create;
  try
    sl.Assign(DeinRichEdit.Lines);
    sl.SaveToFile(DeinDateiname, TEncoding.Default);
  finally
    sl.Free;
  end;
end;

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Di 04.12.12 11:12 
Verstehe ich das richtig: Mit einem RichEdit geht das nicht ? Weshalb kann dann das RichEdit bestehende Ansi-Dateien nach einer Änderung im Text wierder als Ansi speichern ? Nur neue Dateien werden als Unicode abgelegt.


Hochhaus

Soeben habe ich das ausprobiert mit einem Richedit: Es funktioniert !

Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure TFrmChild.SaveToFile(S: String);
Begin
     RichEdit1.Cursor := crHourGlass;
     Try
       RichEdit1.PlainText := True;
       RichEdit1.Lines.SaveToFile(S, TEncoding.Default);
       RichEdit1.Modified := False;
     Finally
       RichEdit1.Cursor := crDefault;
     End;
End{* SaveToFile *}


Hochhaus

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Welche Werte kann der Wert "TEncoding" haben ? Wo findet man entsprechende Hinweise ?

Gruss,


Hochhaus
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 04.12.12 14:12 
"TEncoding." eintippen und etwas warten oder CTRL-SPACE drücken ;). Alternativ in der Online-Hilfe nachlesen oder per STRG-linke Maustaste nach SysUtils abspringen (AFAIK nicht in der Starter-Edition).

Für diesen Beitrag haben gedankt: Hochhaus