AGB  ·  Datenschutz  ·  Impressum  







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

TStringList erzeugt Zeilenumbruch am Ende?

Ein Thema von NoGAD · begonnen am 19. Jan 2022 · letzter Beitrag vom 27. Jun 2022
 
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
344 Beiträge
 
Delphi 10.4 Sydney
 
#1

TStringList erzeugt Zeilenumbruch am Ende?

  Alt 19. Jan 2022, 16: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.
  Mit Zitat antworten Zitat
 


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 23:30 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