Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
Delphi 10.4 Sydney
|
TStringList erzeugt Zeilenumbruch am Ende?
19. Jan 2022, 17:46
Hallo,
meine TStringList erzeugt einen Zeilenumbruch am Ende, obwohl ich diesen ausgeschlossen habe.
Hier ist der Code:
Delphi-Quellcode:
unit Unit_Funktionen_Strings;
interface
uses
SysUtils, Classes, Graphics, Windows, Registry, ShellApi, TypInfo, Messages;
function CreateLoremipsum( var Stringlist: TStringList; Anzahl: Integer;
Absatz: Integer = 1; DoppeltAbsatz: Boolean = True): Boolean;
const
{ Lorem Ipsum }
LorenIpsum_Pre = ' Lorem ipsum ';
LoremIspum: array [0 .. 177] of string = (' lorem', ' ipsum', ' dolor', ' sit',
' amet', ' consectetur', ' adipiscing', ' elit', ' curabitur', ' vel',
' hendrerit', ' libero', ' eleifend', ' blandit', ' nunc', ' ornare', ' odio',
' ut', ' orci', ' gravida', ' imperdiet', ' nullam', ' purus', ' lacinia', ' a',
' pretium', ' quis', ' congue', ' praesent', ' sagittis', ' laoreet', ' auctor',
' mauris', ' non', ' velit', ' eros', ' dictum', ' proin', ' accumsan', ' sapien',
' nec', ' massa', ' volutpat', ' venenatis', ' sed', ' eu', ' molestie', ' lacus',
' quisque', ' porttitor', ' ligula', ' dui', ' mollis', ' tempus', ' at', ' magna',
' vestibulum', ' turpis', ' ac', ' diam', ' tincidunt', ' id', ' condimentum',
' enim', ' sodales', ' in', ' hac', ' habitasse', ' platea', ' dictumst', ' aenean',
' neque', ' fusce', ' augue', ' leo', ' eget', ' semper', ' mattis', ' tortor',
' scelerisque', ' nulla', ' interdum', ' tellus', ' malesuada', ' rhoncus',
' porta', ' sem', ' aliquet', ' et', ' nam', ' suspendisse', ' potenti', ' vivamus',
' luctus', ' fringilla', ' erat', ' donec', ' justo', ' vehicula', ' ultricies',
' varius', ' ante', ' primis', ' faucibus', ' ultrices', ' posuere', ' cubilia',
' curae', ' etiam', ' cursus', ' aliquam', ' quam', ' dapibus', ' nisl', ' feugiat',
' egestas', ' class', ' aptent', ' taciti', ' sociosqu', ' ad', ' litora',
' torquent', ' per', ' conubia', ' nostra', ' inceptos', ' himenaeos',
' phasellus', ' nibh', ' pulvinar', ' vitae', ' urna', ' iaculis', ' lobortis',
' nisi', ' viverra', ' arcu', ' morbi', ' pellentesque', ' metus', ' commodo',
' ut', ' facilisis', ' felis', ' tristique', ' ullamcorper', ' placerat',
' aenean', ' convallis', ' sollicitudin', ' integer', ' rutrum', ' duis', ' est',
' etiam', ' bibendum', ' donec', ' pharetra', ' vulputate', ' maecenas', ' mi',
' fermentum', ' consequat', ' suscipit', ' aliquam', ' habitant', ' senectus',
' netus', ' fames', ' quisque', ' euismod', ' curabitur', ' lectus', ' elementum',
' tempor', ' risus', ' cras');
implementation
function CreateLoremipsum( var Stringlist: TStringList; Anzahl: Integer;
Absatz: Integer = 1; DoppeltAbsatz: Boolean = True): Boolean;
var
x, y, z: Integer;
s, t: string;
begin
Randomize;
z := 0;
y := 0;
if Absatz > 1 then
begin
y := Anzahl div Absatz;
z := 1;
end;
Result := True;
try
s := LorenIpsum_Pre;
Anzahl := Anzahl - 2;
for x := 1 to Anzahl do
begin
t := LoremIspum[Random(High(LoremIspum))];
if (Length(s) > 0) and (s[Length(Trim(s))] = ' .') then
t[1] := UpCase(t[1]);
if x mod (Random(9) + (Random(2) + 1)) = 0 then
case x mod (Random(9) + (Random(3) + 1)) of
0:
t := t + ' ,';
3, 5:
t := t + ' .';
end;
if x mod (Random(9) + (Random(3) + 1)) = 0 then
t[1] := UpCase(t[1]);
s := s + t;
case ((y > 0) and (z > 0)) and ((x) = (y * z)) of
True:
begin
if s[Length(s)] = ' ,' then
s[Length(s)] := ' .'
else
s := s + ' .';
inc(z, 1);
s := Trim(s);
s[1] := UpCase(s[1]);
Stringlist.Add(s);
if DoppeltAbsatz then
Stringlist.Add(sLineBreak);
s := ' ';
end;
False:
s := s + #32;
end;
end;
if Stringlist.Count > 0 then
if (Stringlist.Strings[Stringlist.Count - 1] = sLineBreak ) or (Stringlist.Strings[Stringlist.Count - 1] = ' ') then
Stringlist.Delete(Stringlist.Count - 1);
except
Result := False;
end;
end;
end.
Aufruf:
Delphi-Quellcode:
var
DummySL: TStringList;
begin
randomize;
DummySL := TStringList.Create;
CreateLoremipsum(DummySL, random(225) + 2, random(5) + 2);
Label1.Caption := DummySL.Text;
DummySL.Free;
Das Label hat:
Autosize := True
WordWrap := False;
Und trotz if Stringlist.Count > 0 then
if (Stringlist.Strings[Stringlist.Count - 1] = sLineBreak )or (Stringlist.Strings[Stringlist.Count - 1] = '')then
Stringlist.Delete(Stringlist.Count - 1);
wird im Label immer eine Leerzeile am Ende erzeugt. Wo liegt mein Denkfehler?
LG Mathias
Mathias Ich vergesse einfach zu viel.
|