AGB  ·  Datenschutz  ·  Impressum  







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

max Länge von TMemo.Text und String

Ein Thema von F.W. · begonnen am 20. Apr 2004 · letzter Beitrag vom 21. Apr 2004
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

max Länge von TMemo.Text und String

  Alt 20. Apr 2004, 17:53
Hallo mal wieder!

Mein Prog schreibt aus einem TBitmap verschiedene Sachen in ein Memo, das ganze geschieht per Insert:
 Insert(Irgendwas, S, Length(S)+1); Ich nehme erst noch einen String dazu, da Memo.Text nicht geht, weil: "[Fehler] ... Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden". Nachher findet sich also folgende Zeile:
 Memo.Text := S;
So, jetzt zu meiner Frage: Bei rund Length(Memo.Text) = 10000 hört er auf, egal, ob er mit dem Bild fertig ist, oder nicht.

Warum?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: max Länge von TMemo.Text und String

  Alt 20. Apr 2004, 18:02
1, Guckst Du hier bzw. kannst mal probieren MaxLength hochzusetzen. Aber vermutlich wirst Du auch (mit Tricks) nicht über 64k Zeichen hinauskommen

2, Falls Du ein Bitmap (welcher sinn hat dies) einem String und anschließend eine Win32-Control (und TMemo kapselt ein solches) zuweißt ist es problematisch wenn im String irgendwo #$00 steht (was ja evtl. bei dir vorkommen kann). #$00 ist für die Win32-API ein kennzeichner das ein String zu Ende ist (kommt von ANSI-C). Im gegensatz dazu wird bei Delphi die Länge eines Strings als Eintrag im Längenfeld gespeichert. Delphi-Strings können deshalb auch #$00 im String enthalten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: max Länge von TMemo.Text und String

  Alt 20. Apr 2004, 18:06
in einen String sollten bis zu 2 GB reingehn.


wenn MaxLength auf 0 ist, dann gibt es keine Größenbegrenzung

PS: ich hab gerade 100.000 Byte reinbekommen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: max Länge von TMemo.Text und String

  Alt 20. Apr 2004, 18:15
Zitat:
in einen String sollten bis zu 2 GB reingehn.
wenn MaxLength auf 0 ist, dann gibt es keine Größenbegrenzung
PS: ich hab gerade 100.000 Byte reinbekommen
OK. Dann ist evtl. NT - 2003 dieses Problem nicht mehr gegeben (oder hast Du den Test unter 95/98 gemacht?)

Probier mal folgenden Text (und das Problem mit #$00 zu sehen):
Code:
var
  S: String;
begin
  S := 'Test mit #$00 ' + #$00 + ' und weiterer Text';
  Memo1.Text := S;
  ShowMessage(Format('Länge S = %d, Länge Memo = %d', [Length(S), Length(Memo1.Text)]));
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: max Länge von TMemo.Text und String

  Alt 20. Apr 2004, 18:27
Nee, ich hatte keine #00 drin - stimmt, Memo arbeitet ja intern mit PChar und stoppt bei #00

@F.W. versuch es mal so

Delphi-Quellcode:
... := Length(S); // die Länge des Srings irgendwo anzeigen
Memo.Text := S;
... := memo1.Lines.Count; // und eventuell nochmal den Text im Memo, zum Vergleich

[edit]
ups, das hatte ja Bernhard Geyer schon gesagt -.-
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#6

Re: max Länge von TMemo.Text und String

  Alt 20. Apr 2004, 19:25
So, die Länge betrug bei dem letzten Versuch 10148 im Memo und 201483. Die Zeilenzahl betrug 108, gezählt habe ich aber nur so um die 60/70 rum.

Das heißt das Memo zeigt nicht alles an. Das heißt ich muss nach diesem Zeichen #00 Ausschau haltn?!

Der Text des Memo setzt sich so zusammen:

Delphi-Quellcode:
 //folgenden 4 Zeilen sind in einer Schleife:
            St := '';
            Insert(Chr(Zahl), St, Length(St)+1);
            Insert(Chr(Zahl), St, Length(St)+1);
            Insert(Chr(Zahl), St, Length(St)+1);
            Insert(St, T, Length(T)+1);
Heißt das ich könnte theoretisch mit Pos(...) nach '#00' suchen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: max Länge von TMemo.Text und String

  Alt 21. Apr 2004, 04:33
Wäre 'ne Idee. (wobei die #00 mit größter Wahrscheinlichkeit der Grund ist)

Und seh ich das richtig und du hängst wirklich die gleiche Zahl 3-mal an?

Delphi-Quellcode:
St := '';
Insert(Chr(Zahl), St, Length(St)+1);
Insert(Chr(Zahl), St, Length(St)+1);
Insert(Chr(Zahl), St, Length(St)+1);

{ vvv }

St := Chr(Zahl) + Chr(Zahl) + Chr(Zahl);
Delphi-Quellcode:
St := Chr(Zahl) + Chr(Zahl) + Chr(Zahl);
Insert(St, T, Length(T)+1);

{ vvv }

Insert(Chr(Zahl) + Chr(Zahl) + Chr(Zahl), T, Length(T)+1);
Um die #00 zu umgehen kannst du ja auf Hexadezimal umstellen

Chr(Zahl) > IntToHex(Zahl, 2)


************************************************** *

Aber ich vermute mal du meinst es wohl eher so

Code:
Insert(Chr(Zahl[color=red]1[/color]) + Chr(Zahl[color=red]2[/color]) + Chr(Zahl[color=red]3[/color]), T, Length(T)+1);
{bzw}
Insert(Chr([color=red]R[/color]) + Chr([color=red]G[/color]) + Chr([color=red]B[/color]), T, Length(T)+1);
da kann man aber auch mit IntToHex gleich alle Farbwerte zusammen behandelnInsert(IntToHex(Farbe{TColor}, 6), T, Length(T)+1);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#8

Re: max Länge von TMemo.Text und String

  Alt 21. Apr 2004, 13:56
Ja, ich hätte vielleicht dazuschreiben sollen, das die Zahlen unterschiedl. sind.

Ich würd gerne bei dieser Methode bleiben, nach welchem String muss ich denn suchen, wirklich nach #00?
 if Pos('#00', S) ... ^ So ^ ?
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#9

Re: max Länge von TMemo.Text und String

  Alt 21. Apr 2004, 14:49
Hi,

ein 64k Größenbeschränkugsproblem gibt es IMHO nur bei Win95 (da mit Sicherheit), der Grund liegt bei Windows, ich meine bei Win98 sei das bereits nicht mehr da.

Grüsse
Woki
  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 22:20 Uhr.
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