AGB  ·  Datenschutz  ·  Impressum  







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

WordBreak innerhalb eines Wortes

Ein Thema von SittingDuck · begonnen am 14. Nov 2012 · letzter Beitrag vom 17. Nov 2012
 
Popov
(Gast)

n/a Beiträge
 
#3

AW: WordBreak innerhalb eines Wortes

  Alt 14. Nov 2012, 16:01
Ich hab mal was geschrieben, ist aber schon lange her, so dass ich es dir nicht erklären kann. Gedacht ist es so, dass ein beliebiger Text einer StringList so umbrochen wird, dass er von der Breite in eine von der Breite vordefinierte Bitmap passt. Die Höhe der Bitmap sollte dann auch noch neu definiert werden bevor gezeichnet wird:

Delphi-Quellcode:
//Bricht die Textzeilen eines Textes in StringList so, dass sie in einer
//Bitmap passen. Diese Prozedur bricht nur die Zeilen, zeichnet nicht.
//Der Bitmap-Parameter dient nur zur Größenbestimmungen: Font, Width, usw.
//List enthällt den Text der umbrochen werden soll.
procedure TextToBitmap2(AList: TStrings; ATarget: TBitmap);
var
  i, k, LastSpace: Integer;
  Line, s: String;
begin
  if AList.Count = 0 then Exit;
  if ATarget.Width = 0 then Exit;

  i := 0;

  repeat
    LastSpace := 0;

    for k := 1 to Length(AList[i]) do
    begin
      Line := AList[i];

      if (ATarget.Canvas.TextWidth(Copy(Line, 1, k))) <= (ATarget.Width) then
      begin
        if {Line[k]} Copy(Line, k, 1) = ' then LastSpace := k;
      end
        else
      begin
        if LastSpace = 0 then
        begin
          if k > 0 then
          begin
            s := Copy(Line, k, Length(Line));
              //Schneidet ab letzten gültigen Zeichen ab
            System.Delete(Line, k, Length(Line));
          end;
        end
          else
        begin
            //Mit +1 wird das Leerzeichen nicht übernommen, da es sonst als
            //erstes Zeichen in der Zeile vorkommt
          s := Copy(Line, LastSpace+1, Length(Line));
            //Mit +1 bleibt das Leerzeichen an der aktuellen Zeile,
            //was bei Übertragung in Grafik nicht wichtig ist.
            //Mit +0 (oder Nichts) wird auch das Leerzeichen gelöscht
          System.Delete(Line, LastSpace+1, Length(Line));
        end;

        AList[i] := Line;
        AList.Insert(i + 1, s);
      end;
    end;

    Inc(i);
  until i > (AList.Count - 1);
end;
  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 11:07 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