AGB  ·  Datenschutz  ·  Impressum  







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

Zeichenlänge eines Memo zu klein

Ein Thema von Hansi · begonnen am 18. Okt 2013 · letzter Beitrag vom 20. Okt 2013
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 15:24
mit Wordwrap funzt nicht, da die Zeile ja zu lang ist. Immer noch der gleiche "Fehler", dass die Anzahl Zeilen = 1 ist.
Da ich nicht über eine Glaskugel verfüge, wären weitere Infos äußerst hilfreich:

1. Welche Delphi-Version? Die Frage gilt der Unicode-Unterstützung: Ab Delphi 2009 sind Strings unicodefähig und nicht mehr auf 256 Zeichen begrenzt.

2. Wo hast du FehlerListe deklariert? Doch hoffentlich als globale Variable, wie im Beispielcode vorgeschlagen, und nicht in der Procedure Runterladen.

3. Zeig uns doch bitte mal deinen Code, inkl. FormCreate, ButtonKlick und Runterladen.

Kann es sein, dass er den String als eine Zeile einliest?
Eine Zeile in einer Stringliste wird immer durch einen String repräsentiert. Im Grunde gibt es in einer Stringlist keine "Zeilen", weil die Stringlist sich nicht selbst zeilenmäßig darstellt wie z.B. ein TMemo.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 16:09
TFormMain.FormCloseQuery ist etwas "ungünstig" zum Speichern, aber vorallem zum Freigeben.

Das Gegenstück zum OnCreate ist OnDestroy, also was man im OnCreate erstellt, gibt man es im OnDestroy frei.

Denn eine Form die geschlossen wird, kann auch wieder angezeigt werden, ohne sie neu zu erstellen.
Und OnCloseQuery wird nicht immer aufgerufen, denn z.B. die Freigabe via Free schließt die Form direkt, ohne Nachfrage.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 16:15
TFormMain.FormCloseQuery ist etwas "ungünstig" zum Speichern, aber vorallem zum Freigeben.
Und OnCloseQuery wird nicht immer aufgerufen, denn z.B. die Freigabe via Free schließt die Form direkt, ohne Nachfrage.
Danke, Himitsu, das wußte ich noch nicht

In meinen Anwendungen wird jedoch niemals eine Form via Free geschlossen, sondern immer durch vom Anwender ausgelöste Aktionen wie Button- oder Menüklick oder Alt-F4 usw. Insofern muß ich jetzt wohl nich alle meine Projekte durchgehen und eine Ereignisbehandlung für OnDestroy hinzufügen

Ich dachte immer, wenn ich Close in der Hauptunit aufrufe, wird das Programm beendet. Gilt natürlich nicht für Close in weiteren Forms, die mit Show oder ShowModal angezeigt werden. Aber du hast natürlich recht: besser sind Freigaben und Ähnliches in OnDestroy aufgehoben.

Geändert von Perlsau (18. Okt 2013 um 16:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 16:35
Strings sind übrigens seit Delphi 2(!!) nicht mehr auf 256 Zeichen begrenzt. Wieso die Stringliste nur eine Zeile enthält, könnte in der Tat mit nicht erkannten Zeilenumbrüchen zu tun haben. Unter Windows ist der Zeilenumbruch #13#10, unter Unix #13 und AFAIK unter MacOS #10. Was passiert denn, wenn Du den empfangenen String mal in einer Datei speicherst und diese mit Notepad (nicht Wordpad) öffnest? Ist das dort auch nur eine Zeile (ggf. mit "komischen Zeichen" drin)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 16:42
Strings sind übrigens seit Delphi 2(!!) nicht mehr auf 256 Zeichen begrenzt.
Danke, DeddyH Ich erinnere mich, schon mal darauf hingewiesen worden zu sein, hab' aber wohl wieder vergessen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 16:49
Strings sind übrigens seit Delphi 2(!!) nicht mehr auf 256 Zeichen begrenzt.
Danke, DeddyH Ich erinnere mich, schon mal darauf hingewiesen worden zu sein, hab' aber wohl wieder vergessen
255 Zeichen, da es die Länge 0 auch gibt. (ingesammt aber 256 Byte, inkl. Längenbyte)

Und den "alten" Delphi-Referenz durchsuchenShortString gibt es immernoch.

Seit mindestens D2 ist "String" kein generischer Typ, sondern leitet nur an die "aktuelle" String-Definition weiter.
Also AnsiString und seit D2009 den UnicodeString.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 16:46
TForm.Close schließt grundsätzlich erstmal nur die Form (quasi Hide/Visible), aber gibt sie nicht frei (außer man gibt z.B. im OnClose das caFree an).

Bei der MainForm ist da aber noch eine Besonderheit, denn wird diese geschlossen, dann wird der Schliessenbefehl an Application weitergegeben, genauso wie Minimieren da auch an Application durchgeht.

MainForm ist die Form, welche bei Application.MainForm registriert ist.
Und standardmäßig wird die erste TForm, welche über CreateForm erstellt wird, automatisch als MainForm registriert.

MDI-Forms werden beim Schließen (Close) ohne einen OnCloseQuery-Aufruf direkt mit caFree dichtgemacht.


Ach ja, als Gegenstück von OnClose könnte man OnShow ansehen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 16:51
Bei der MainForm ist da aber noch eine Besonderheit, denn wird diese geschlossen, dann wird der Schliessenbefehl an Application weitergegeben, genauso wie Minimieren da auch an Application durchgeht.
Ergo wird in meinen Anwendungen, in denen ich in der Hauptform (bei mir immer FormMain bzw. UnitMain) in OnCloseQuery CanClose auf True setze, immer zuverlässig das Programm beendet und alle damit zusammenhängenden Freigaben veranlaßt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 17:22
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.


Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Zeichenlänge eines Memo zu klein

  Alt 18. Okt 2013, 17:47
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:
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.
Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown
Wie das läuft, wenn ich einen Prozeß via TaskManager abschieße, weiß ich jetzt aber echt nicht. Aber wir kommen wohl schon eine Weile vom Thema ab ...
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:52 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