Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Schreiben von Textdatei / TMemoryStream (https://www.delphipraxis.net/201057-schreiben-von-textdatei-tmemorystream.html)

holger_barntrup 19. Jun 2019 10:22

Delphi-Version: XE7

Schreiben von Textdatei / TMemoryStream
 
Ich habe ein Problemchen an dem ich schon länger herum grübele.
Und zwar speichere einen Text aus einem RichEdit per IdFTP auf eine CNC -Steuerung.
Das funktioniert seit Jahren ohne Probleme.
In Letzter Zeit ist es vermehrt vorgekommen das nach jeder Zeile eine Leerzeile eingefügt wird. Wie auch immer das passiert. Das einzig auffällige an der Sache ist das es nur auf den neueren Rechnern mit Win7 auftritt, die alten XP Rechner betrifft das nicht.
Momentan lässt sich der Fehler NICHT reproduziern.
Hat vielleicht einer von euch schon mal ein ähnliches Problem gehabt oder eine Idee wo ich ansetzen kann?

Delphi-Quellcode:
procedure TForm20.Speichern1Click(Sender: TObject);
var Stream : TMemoryStream;
    ms    : Integer;
begin
  Stream := TMemoryStream.Create;
  try
    IdFTP1.Host    :=Host;
    IdFtp1.Username :=Username;
    IdFTP1.Password :=Passwort;
    IdFTP1.Connect();
    IdFTP1.ChangeDir(Sm800Zielverzeichnis);
    RichEdit1.Lines.SaveToStream(Stream);
    Stream.Position := 0;    //Ausleseposition des Streams auf Anfang
    IDFTP1.Put(Stream,'kontur.cnc');
    IdFTP1.Disconnect;
    progammstatus:=0;
    Speichermodus:=true;
  finally
    Stream.Free;         // Stream aus dem Speicher entfernen
  end;
end;
Ist das von der Syntax so korrekt oder fehlt da etwas wichtiges?
Ich hab das Projekt von einem Kollegen geerbt den ich leider nicht mehr fragen kann.

Schokohase 19. Jun 2019 10:32

AW: Schreiben von Textdatei / TMemoryStream
 
Die Syntax hat damit erst einmal gar nichts zu tun. Wenn die falsch wäre, dann würde sich das noch kompilieren lassen oder du würdest niemals irgendeinen Text herausbekommen.

Aber: Das RichEdit-Control ist ein Wrapper für das RichEdit des Betriebssystems. Und hier könnten auch je nach Update-Status des Betriebssystems durchaus Unterschiede vorliegen.

Prüfe die Werte, die du von dem RichEdit bekommst auf diese überflüssigen Leerzeichen und entferne diese oder werfe eine Exception, oder Loggen, oder ...

dummzeuch 19. Jun 2019 10:43

AW: Schreiben von Textdatei / TMemoryStream
 
Wie Schokohase schon schreibt: TRichEdit könnte das Problem sein.

Warum benutzt Du das überhaupt? Täte es da nicht ein TMemo? Es geht ja sicherlich nicht darum RTF-Text auf eine CNC-Maschine zu übertragen.

holger_barntrup 19. Jun 2019 10:49

AW: Schreiben von Textdatei / TMemoryStream
 
Zitat:

Zitat von Schokohase (Beitrag 1435009)

Aber: Das RichEdit-Control ist ein Wrapper für das RichEdit des Betriebssystems. Und hier könnten auch je nach Update-Status des Betriebssystems durchaus Unterschiede vorliegen.

Ein guter Ansatz, ich schau mir das sofort mal an ob es da Unterschiede gibt.

Jasocul 19. Jun 2019 10:50

AW: Schreiben von Textdatei / TMemoryStream
 
Warum überhaupt ein RichEdit?

Abgesehen von den Anmerkungen von Schokohase, besteht dort auch das Risiko, versehentlich Formatierungszeichen im Text zu haben. Allein ein Copy&Paste aus einem Textverarbeitungsprogramm kann da schon Chaos verursachen.

Ich weiß, dass du das Programm nur übernommen hast. Aber ich würde solche Dinge dringend umstellen.

ergeka 19. Jun 2019 10:52

AW: Schreiben von Textdatei / TMemoryStream
 
Evtl. hilft die Eigenschaft TRichEdit.PlainText weiter.

holger_barntrup 19. Jun 2019 12:16

AW: Schreiben von Textdatei / TMemoryStream
 
Es wird die Riched20.dll bei beiden Betriebssystemen verwendet, die File Version ist identisch aber die Produktversion auf den XP Rechnern 3.0 und auf den Win7 Rechnern 3.1.
Wenn das wieder passiert werde ich dort wohl ansetzen.

holger_barntrup 19. Jun 2019 12:19

AW: Schreiben von Textdatei / TMemoryStream
 
Zitat:

Zitat von dummzeuch (Beitrag 1435010)
Wie Schokohase schon schreibt: TRichEdit könnte das Problem sein.

Warum benutzt Du das überhaupt? Täte es da nicht ein TMemo? Es geht ja sicherlich nicht darum RTF-Text auf eine CNC-Maschine zu übertragen.

Ich hab es geerbt, kann mich aber noch ganz schwach erinnern das es zu beginn mal ein Memo war was dann aber, aus mir nicht mehr bekannten Gründen, in das RichEdit geändert wurde.
Nee RTF Text wird nicht übertragen. Die Steuerung würde sich freuen.

holger_barntrup 19. Jun 2019 12:34

AW: Schreiben von Textdatei / TMemoryStream
 
Zitat:

Zitat von ergeka (Beitrag 1435014)
Evtl. hilft die Eigenschaft TRichEdit.PlainText weiter.

Danke, ich probiere das mal.

dummzeuch 19. Jun 2019 12:35

AW: Schreiben von Textdatei / TMemoryStream
 
Zitat:

Zitat von holger_barntrup (Beitrag 1435024)
Zitat:

Zitat von dummzeuch (Beitrag 1435010)
Wie Schokohase schon schreibt: TRichEdit könnte das Problem sein.

Warum benutzt Du das überhaupt? Täte es da nicht ein TMemo? Es geht ja sicherlich nicht darum RTF-Text auf eine CNC-Maschine zu übertragen.

Ich hab es geerbt, kann mich aber noch ganz schwach erinnern das es zu beginn mal ein Memo war was dann aber, aus mir nicht mehr bekannten Gründen, in das RichEdit geändert wurde.
Nee RTF Text wird nicht übertragen. Die Steuerung würde sich freuen.

Und was ist mit Unicode-Text? Bei XE7 ist der Standard-String ein UnicodeString, also auch TRichEdit.Lines.Text. Das könnte auch eine Menge Spaß bedeuten. Wobei ich zugeben muss, dass ich nicht weiß, was
Delphi-Quellcode:
RichEdit1.Lines.SaveToStream(Stream);
genau macht. Vielleicht schreibt es ja AnsiStrings.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr.
Seite 1 von 2  1 2      

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