![]() |
max Länge von TMemo.Text und String
Hallo mal wieder!
Mein Prog schreibt aus einem TBitmap verschiedene Sachen in ein Memo, das ganze geschieht per Insert:
Delphi-Quellcode:
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:
Insert(Irgendwas, S, Length(S)+1);
Delphi-Quellcode:
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? |
Re: max Länge von TMemo.Text und String
1, Guckst Du
![]() 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. |
Re: max Länge von TMemo.Text und String
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 |
Re: max Länge von TMemo.Text und String
Zitat:
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)])); |
Re: max Länge von TMemo.Text und String
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 -.- |
Re: max Länge von TMemo.Text und String
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:
Heißt das ich könnte theoretisch mit Pos(...) nach '#00' suchen?
//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); |
Re: max Länge von TMemo.Text und String
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:
Um die #00 zu umgehen kannst du ja auf Hexadezimal umstellen
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); Chr(Zahl) > IntToHex(Zahl, 2) ************************************************** * Aber ich vermute mal du meinst es wohl eher so
Code:
da kann man aber auch mit IntToHex gleich alle Farbwerte zusammen behandeln
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);
Delphi-Quellcode:
Insert(IntToHex(Farbe{TColor}, 6), T, Length(T)+1);
|
Re: max Länge von TMemo.Text und String
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?
Delphi-Quellcode:
^ So ^ ?
if Pos('#00', S) ...
|
Re: max Länge von TMemo.Text und String
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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