![]() |
AW: Zeichenlänge eines Memo zu klein
Zitat:
|
AW: Zeichenlänge eines Memo zu klein
Du brauchst da nichmal caFree.
Sobald das Ding geschlossen wird (Close oder Free), wird die Messageloop verlassen und dann alle anderen Fenster (welche via CreateForm erstellt wurden) geschlossen. In wie weit dabei alles Andere ordentlich freigegeben wird, hängt davon ab, ob es es irgendwo registriert wurde, was das Freigeben übernimmt, bzw. ob es entsprechende Freigaberoutingen an der richtigen Stelle gibt. ![]() |
AW: Zeichenlänge eines Memo zu klein
Von mir selbst bzw. im Code erzeugte Objekte werden bei mir immer zuverlässig freigegeben. Hab das eben mal mit ReportMemoryLeaksOnShutdown := True in einigen meiner Anwendungen getestet: Kein einziges Speicherleck ... caFree verwende ich praktisch nicht, da ich OnClose bislang ebenfalls nicht einsetzte. Freigaben können also weiterhin in OnCloseQuery der Hauptform stattfinden, da diese Methode ohne Ausnahme immer nach dem Close aufgerufen wird:
Zitat:
|
AW: Zeichenlänge eines Memo zu klein
Der Speicher wird vom Prozess beim System angefordert.
Stirbt der Prozess ist auch der Speicher wieder frei. |
AW: Zeichenlänge eines Memo zu klein
Um nochmals zum eigentlichen Thema zurück zu kommen:
Es wäre in der Tat hier jetzt das wichtigste zu wissen, welche der 3 weiter oben genannten Zeilenumbrüche in der Datei vorliegen. Desweiteren wurde bereits angesprochen, dass ein Memo ggf. nicht die Richtige Wahl ist - das wäre sie bestenfalls dann, wenn der Text wirklich auch dem Benutzer zur Ansicht und Bearbeitung präsentiert werden soll. Ansonsten ist eine TStringList weit günstiger an dieser Stelle. (Die TMemo.Lines Property ist vom Typ TStrings, wie auch TStringList. Sie sind sich sehr ähnlich, jedoch fällt bei TStringList der gesamte Overhead zum Anzeigen raus, was durchaus beachtlich ist.) Zudem meine ich im Hinterkopf zu haben, dass TMemo nur bis zu 64kB Text verträgt (bedingt durch eine Grenze von Windows; TStringList leidet nicht darunter), jedoch kann das u.U. eine veraltete Info sein. Ich weiss nicht, wie sich Delphi >2007 da verhält. Meine Vermutung ist hier ganz stark, dass ein Linux-Linebreak vorliegt, der versucht wurde mit dem Memo.WordWrap zu "reparieren". Das haut einfach nicht hin, da WordWrap sich auf die Breite der visuellen Komponente bezieht, NICHT auf die missverstandenen Linebreaks in dem Original-Text. Und die Notwendigkeit der Anzeige steht überdies zur Debatte. Mein Vorschlag, wie es vermutlich klappen könnte:
Delphi-Quellcode:
var
rawText, line: String; s: TStringList; begin url := 'http://www.xxx.com/daten.txt'; try rawText := IdHTTP1.get(url); except on e: Exception do raise Exception.Create('Fehler beim Download von "'+url+'": '+e.Message); end; s := TStringList.Create; try try s.Text := StringReplace(rawText, #13, #13#10, [rfReplaceAll]); For i := 1 to s.Count - 1 do begin Application.ProcessMessages; line := s[i]; try ... except on e: Exception do raise Exception.Create('Fehler beim Verarbeiten von Zeile '+IntToStr(i)+': '+e.Message); end; end; ... except on e: Exception do raise Exception.Create('Fehler beim verarbeiten der Datei: '+e.Message); finally s.Free; end; end; |
AW: Zeichenlänge eines Memo zu klein
Zitat:
Zitat:
Delphi-Quellcode:
var
s: TStringList; line: String; begin url := 'http://www.xxx.com/daten.txt'; s := TStringList.Create; try try s.Text := IdHTTP1.Get(url); except on e: Exception do raise Exception.CreateFmt('Fehler beim Download von "%s": %s', [url, e.Message]); end; for i := 0 to s.Count - 1 do begin //Application.ProcessMessages; line := s[i]; try ... except on e: Exception do raise Exception.CreateFmt('Fehler beim Verarbeiten von Zeile %d der Datei "%s": %s %s', [i, url, s[i], sLineBreak + e.Message]); end; end; finally s.Free; end; end; |
AW: Zeichenlänge eines Memo zu klein
Zitat:
Zitat:
|
AW: Zeichenlänge eines Memo zu klein
Zitat:
Also nächste Woche dann mal. Zitat:
|
AW: Zeichenlänge eines Memo zu klein
Ein Blick in den Delphi7-Quellcode (TStrings.SetTextStr) sagt mir, daß .Text mit Allem (#13#10, #10 und #13) zurecht kommt.
|
AW: Zeichenlänge eines Memo zu klein
Dann war's nur meine Verwirrtheit :) Danke für die Aufklärung!
Edit: Wenn das schon in TStrings enthalten ist, wirft das natürlich die Frage auf, was nun das Problem beim TE wirklich ist... Weil dann sollte auch das Memo dies berücksichtigen, und das Abstellen von WordWrap zum Ziel führen (wenn auch mit dem Overhead der grafischen Ausgabe bzw. Nutzen eines WinControls für Aufgaben, für die es nicht gedacht ist.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 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