Hallo,
ich habe mir dass noch mal genauer angesehen.
Folgender Test in D2007 (
win32):
Mit folgender Procedure erzeuge ich etwas Quellcode:
Delphi-Quellcode:
...
var
z: shortstring = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890ßäöüÄÖÜ!"§$%&/()=?+*#-_.:,;@€~<>|^°[]\';
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
s: string;
begin
Memo1.Lines.BeginUpdate;
Memo1.Lines.Add(' Result := TStringList.Create;');
for i := 1 to 2000 do
begin
s := '';
for j := 1 to 50 do
begin
s := s + z[Random(100)+1];
end;
Memo1.Lines.Add(' Result.Add('''+s+''');');
// Memo1.Lines.Add(' Result.Add(''12345678901234567890123456789012345678901234567890'');');
end;
Memo1.Lines.EndUpdate;
end;
...
Unter Delphi 2007 gibt es diese Fehlermeldung auch !!!
Es lassen sich 1093 Zeilen kompilieren. Bei 1094 Zeilen gibt es diese Fehlermeldung.
Delphi-Quellcode:
...
procedure TForm1.Button2Click(Sender: TObject);
begin
with GetMyText do
try
Memo1.Lines.Text := Text;
finally
Free;
end;
end;
function TForm1.GetMyText: TStrings;
begin
Result := TStringList.Create;
Result.Add('gsWS!\ß!3J&OX;§r]PDSAlnkItyuÖ*5Zl7,9Z!4,kkß=tU!-/€');
Result.Add('S)ad"t°SBW@g:(°bn-CYFyqAP"fn3aPdH"h=ü5@CZ;ÜDPPppOA');
Result.Add('1(6X:GwHkÄU+1pD\QEFK+^LV(]xD8+<zÄ\(§@\%=BkfH=a.~E@');
Result.Add('<wÜlq&!ißy°K\C0jzö*ä^xw\XTrÜ/D0+uQäH°=,rAW6;Fv>:.$');
Result.Add(']VPÄ#SB*5urO?,J8?Vvoy"=fD9dFuVIü.iev~$pI+ZDi;:rZqk');
Result.Add('üqä/*t20eYo$üR°Dg@uz,Öp7O[vPf0*wNuOhÄ#.PR&biYD€ÜIÄ');
Result.Add('B07)T@*öw=&Tl€1,$d8Kijq6~Ö%\jJob<XmI1z2WTp°y6ll=~Ü');
Result.Add('61<WC[x[U#JrG\m":#nüb:SkpI°ASKGäb+L!ow1K>g^b?.qyc$');
Result.Add('hqr[k7"wRgpwjuGS\4t@#8pd_6cö;ZßEv#:W[Ä"a€Xvj+9CpWx');
Result.Add('zZ49h6("Q<s§43z%@39_qC|D%€Zö>=FJj;U|7]?mCC9=uy%>bQ');
...
end;
Was ich Interesannt finde ist das aber 2000 Zeilen möglich sind, wenn man folgende Funktion kompiliert:
Delphi-Quellcode:
...
function TForm1.GetMyText: TStrings;
begin
Result := TStringList.Create;
Result.Add('12345678901234567890123456789012345678901234567890');
Result.Add('12345678901234567890123456789012345678901234567890');
Result.Add('12345678901234567890123456789012345678901234567890');
Result.Add('12345678901234567890123456789012345678901234567890');
Result.Add('12345678901234567890123456789012345678901234567890');
...
end;
Es sind auch 2000 Zeilen mit folgender Funktion möglich:
Delphi-Quellcode:
...
function TForm1.GetMyText: TStrings;
begin
Result := TStringList.Create;
Result.Add('AD:UbÖfQlqIvH_Fd~k)g');
Result.Add('kkß=tU!-/€S)ad"t°SBW');
Result.Add('@g:(°bn-CYFyqAP"fn3a');
Result.Add('PdH"h=ü5@CZ;ÜDPPppOA');
Result.Add('1(6X:GwHkÄU+1pD\QEFK');
Result.Add('+^LV(]xD8+<zÄ\(§@\%=');
Result.Add('BkfH=a.~E@<wÜlq&!ißy');
Result.Add('°K\C0jzö*ä^xw\XTrÜ/D');
Result.Add('0+uQäH°=,rAW6;Fv>:.$');
Result.Add(']VPÄ#SB*5urO?,J8?Vvo');
...
end;
Evtl wird der String im Speicher komprimiert abgelegt. Und der komprimierte String darf eine gewisse Größe nicht überschreiten.
Was noch selsam ist:
Eine Umwandlung von den Add()'s ind ein 'bla' + #13#10 + 'bla'... hat bei mir funktioniert.
Der String wurde aber eigentlich nicht kürzer.