AGB  ·  Datenschutz  ·  Impressum  







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

Wordwrap umbruch

Ein Thema von EWeiss · begonnen am 19. Nov 2018 · letzter Beitrag vom 20. Nov 2018
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Wordwrap umbruch

  Alt 19. Nov 2018, 22:11
Du möchtest also alle Leerzeichen in einem String mit einem Zeilenumbruch austauschen?

http://docwiki.embarcadero.com/Libra...Utils.WrapText
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Wordwrap umbruch

  Alt 19. Nov 2018, 22:16
Du möchtest also alle Leerzeichen in einem String mit einem Zeilenumbruch austauschen?

http://docwiki.embarcadero.com/Libra...Utils.WrapText
Nein.. sorry wenn das so rübergekommen ist.

Ich möchte den gesamten Text umbrechen und wenn die Zeilenanzahl 2 erreicht ist Ellipsis Character anhängen.
Danach darf kein weiterer Umbruch mehr stattfinden.

gruss

Geändert von EWeiss (19. Nov 2018 um 22:31 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Wordwrap umbruch

  Alt 20. Nov 2018, 10:35
Delphi-Quellcode:
program WrapTextProject;

{$APPTYPE CONSOLE}

{$R *.res}


uses
  System.SysUtils,
  System.StrUtils;

const
  cText = 'The rain in Spain falls mainly on the plain.';

var
  MyWrapedText, MyWrapedWithEllipsisText: string;
  I, SplitPoints: Integer;

begin
  try
    Writeln('Org: ' + sLineBreak, cText, sLineBreak);

    MyWrapedText := WrapText(cText, sLineBreak, [' '], 15);
    Writeln('Wraped: ' + sLineBreak, MyWrapedText, sLineBreak);

    MyWrapedWithEllipsisText := '';
    SplitPoints := 0;
    for I := 1 to Length(MyWrapedText) do
    begin
      if IsDelimiter(sLineBreak, MyWrapedText, I) then
      begin
        Inc(SplitPoints);

        if SplitPoints > 2 then
        begin
          MyWrapedWithEllipsisText := MyWrapedText;
          SetLength(MyWrapedWithEllipsisText, I + 1);
          MyWrapedWithEllipsisText := MyWrapedWithEllipsisText + '...';
          Break;
        end;

      end;
    end;

    Writeln('Wraped with Ellipsis: ' + sLineBreak, MyWrapedWithEllipsisText, sLineBreak);

    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
Ausgabe:

Code:
Org:
The rain in Spain falls mainly on the plain.

Wraped:
The rain in
Spain falls
mainly on the
plain.

Wraped with Ellipsis:
The rain in
Spain falls
...
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: Wordwrap umbruch

  Alt 20. Nov 2018, 10:37
Ich weiß nicht ob ich das richtig verstanden habe.
Wenn ja dann muss AutoSize auf False, WordWrap auf True und dann ziehst du das Label so groß wie du es brauchst.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Wordwrap umbruch

  Alt 20. Nov 2018, 10:57
Hallo,
Zitat:
Auf Deutsch.. Der Zeilenumbruch hat keinerlei Effekt auf den zurückgegebenen String "FAudioSessionInfo.DisplayName"
Das ist richtig. Wäre auch schlimm (unschön), wenn in das Label was reingeschrieben wird
und beim Auslesen es eine Rolle spielt, wo groß das Label ist.
Bei einem Memo ist das auch auch so.
Heiko
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Wordwrap umbruch

  Alt 20. Nov 2018, 13:24
Ich weis was WrapText ist aber diese API ist nicht die Lösung.
Ich sagte ja schon die Anzahl der Zeilen "2" darf nicht überschritten werden
außerdem wird bei WrapText die gesamte breite des Textes zur weite des Controls nicht berücksichtig.
Ellipsis macht nur sinn wenn der String in der 2 Zeile die weite des Controls überschreitet.

Meine Frage!
Zitat:
Bei einer Zuweisung von Wordwrap an einem Label wird der gesamte string umgebrochen abhängig von der weite des Controls.
Wie kann ich jetzt verhindern das er auf mehr wie 2 Zeilen umbricht?
Wenn mehr wie 2 Zeilen dann soll ein Ellipsis angefügt werden.
Zitat:
Wenn ja dann muss AutoSize auf False, WordWrap auf True und dann ziehst du das Label so groß wie du es brauchst.
Nein die weite des Control ist fix da ist nix mit ziehen und AutoSize muss true sein.

Zitat:
Das ist richtig. Wäre auch schlimm (unschön), wenn in das Label was reingeschrieben wird
Es soll ja nichts reingeschrieben sondern der Label umgebrochen werden.

Siehe..
 Umbruch := 'Emil''s' + 13#10 + 'MediaPlayer';
Zitat:
und beim Auslesen es eine Rolle spielt, wo groß das Label ist.
Was geschieht hier bei der Berechnung wenn AutoSize nicht True ist?
Lbl.Caption := Copy(Lbl.Caption, 1, Length(Lbl.Caption) - Lbl.Font.Size) + '...';

Werde den String splitten und die länge sowie den Umbruch von Hand berechnen.
Der Label hat sich dann erledigt.

gruss

Geändert von EWeiss (20. Nov 2018 um 13:44 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#7

AW: Wordwrap umbruch

  Alt 20. Nov 2018, 13:50
Nur so 'ne Idee zum Weiterforschen:

Ein TMemo nehmen, dessen Breite so angepasst wird, dass es die für die Label.Caption benötigte Breite bekommt. Schrifttyp, -größe ... dem Label anpassen. WordWrap = True.

Nun Label.Caption Memo.Text zuweisen.

Das Memo bricht nun den Text selbst um. Wenn Memo.Lines.Count nun größer 2 wird, dann die ersten beiden Zeilen aus dem Memo nehmen und Ellipsis Character dranhängen, Label.Caption zuweisen.

Dadurch wird dann auch die (je nach Schrifttyp) unterschiedliche Breite einzelner Buchstaben berücksichtigt und man muss da keine eigene Berechnungsroutine finden / entwickeln.

Das Memo muss / kann ja "irgendwo unsichtbar" im Programm "rumhängen".

Zugegeben: Elegant scheint mir das erstmal so noch nicht, aber eventuell kannst Du dadraus ja was machen.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Wordwrap umbruch

  Alt 20. Nov 2018, 14:36
Du versuchst also wieder auf Biegen und Brechen irgendetwas zu nutzen, weil du denkst, es passt zu deinem Problem und lässt andere Lösungsvorschläge gar nicht zu?

Erstens mal ist das temporäre Erzeugung von einen VCL-TLabel in der von dir gezeigten Methode Quatsch.
Das Label weiß nichts über den Kontext bzw. Parent, auf den du später selber mit der Hand per GDI+ zeichnest.
So hat das Label überhaupt keine Informationen über die verwendete Schrift und nimmt irgendeinen Default für die Font-Property an (wahrscheinlich Tahoma in Größe 8).

Des Weiteren veränderst du so den FAudioSessionInfo.DisplayName.
Das sind aber deine Originaldaten und das ganze umbrechen und kürzen sollte erst an der Stelle erfolgen, wo du deine Textausgabe machst.

Der von mir gezeigte Quelltext ließe sich problemlos auf dein Problem anwenden.
Probiere das Konsolenprojekt doch aus und spiele ein bisschen mit den Funktionsargumenten von WrapText.
  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 18:09 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