![]() |
AW: Wordwrap umbruch
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. |
AW: Wordwrap umbruch
Jo wäre eine alternative. Danke.
Wenn es mit den Berechnungen zu kompliziert wird genau das wollte ich mir mit dem Label ersparen das ganze hin und her Splitten, RightTrim, Umbrechen, Font zuweisen usw.. gruss |
AW: Wordwrap umbruch
Ließe sich da nichts mit DrawText und den entsprechenden Formaten machen?
|
AW: Wordwrap umbruch
Zitat:
Delphi-Quellcode:
Ich möchte aber diese Funktion nicht auf WordWrap erweitern deshalb muss der String vorbereitet werden.
gSprSession.GD_DrawTextToCtrlEx(HSprSession, PWideChar(Trim(MainClass.DeviceName)), x, y,
ParentWidth, bh, gSprSession.GD_ARGB(255, 255, 255, 255), PWideChar(FontName), nil, 13, ID, GS_VISIBLE, 0, Ord(StringAlignmentCenter)); Er wird dann nach setzen aller benötigten Formate mit GdipDrawString gezeichnet. gruss |
AW: Wordwrap umbruch
*nix*
|
AW: Wordwrap umbruch
Zitat:
Zitat:
Oder warum glaubst du habe ich extra ein Format dafür addiert?
Delphi-Quellcode:
gruss
else if UseStrFormat = GD_Ellipsis then
begin GdipCheck(GdipCreateStringFormat(0, 0, strformat)); GdipCheck(GdipSetStringFormatFlags(strformat, StringFormatFlagsNoWrap)); GdipCheck(GdipSetStringFormatAlign(strformat, StringAlignmentNear)); GdipCheck(GdipSetStringFormatLineAlign(strformat, StringAlignmentNear)); GdipCheck(GdipSetStringFormatTrimming(strformat, StringTrimmingEllipsisCharacter)); end |
AW: Wordwrap umbruch
*nix*
|
AW: Wordwrap umbruch
Zitat:
Zitat:
Ich habe mehr als 50 Anwendungen mit meiner Library geschrieben und möchte jetzt nicht nur wegen dieser einzigen Konstellation die Library anpassen und alle Programme daraufhin umschreiben müssen. Wenn ich den String vorbereite sollte es auch so ohne jegliche Änderung meiner Funktion möglich sein. gruss |
AW: Wordwrap umbruch
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. |
AW: Wordwrap umbruch
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Da du keine Ahnung hast welche nachfolgende Probleme dadurch entstehen können. Zum Beispiel meine ganzen anderen Programme deshalb umzuschreiben. Zitat:
Ich werde den String auf meine weise Splitten und weiter bearbeiten. Aber vielleicht hilft dein Vorschlag jemand andern. Habe ja schon 3 Beiträge vorher geschrieben das ich das mit dem Label verwerfen werde da es nicht den zweck erfüllt den ich mir erhofft habe. Zitat:
OK! Danke Thema ist erledigt werde die für mich praktikable Lösung erarbeiten ohne meine Library zu verändern. Mit dem Label geht es nicht wenn mehr als 2 Zeilen ins Spiel kommen und das war meine Frage. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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