![]() |
TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo #,
das angehängte Projekt soll ein StringGrd wordwrap-fähig machen. Klappt soweit ganz gut (Button wordwrap). Ist die Spalte aber gross genug, soll sie genauso aussehen, wie nicht wordwrap-Zeilen. Dort wird die Zeile durch den entsprechenden DrawText-Parameter vertikal zentiert. Das klappt mit dt_wordbreak aber nicht (sagt auch das SDK). Was ich bräuchte, wäre eine Möglichkeit, festzustellen, ob DrawText mehr als 1 Zeile erzeugt, also ein wordbreak erfolgt. Wie mache ich das ? Heiko |
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Hallo,
DrawText mit Parameter DT_CALCRECT kann man zur Berechnung des Ausgaberechtecks verwenden. Aus der zurückgegebenen Höhe kann man erforderlichen Umbruch ableiten. |
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Hallo,
mache ich ja, aber wie stelle ch fest, dass umgebrochen wird ?
Delphi-Quellcode:
siehe der Screenshot
if (DrawRect.Bottom - DrawRect.Top) > RowHeights[R] then
begin { cell word-wraps; increase row height } RowHeights[R]:= DrawRect.Bottom - DrawRect.Top; SetGridHeight(AGrid); end; if RowHeights[R]<=AGrid.DefaultRowHeight then begin // hierher kommt er , es passiert aber nichts Heiko |
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Musst Du nicht mit >= vergleichen?
|
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Hallo,
Delphi-Quellcode:
<= ist richtig, ich will in diesem Fall ja per dt_singleline
if RowHeights[R]<=AGrid.DefaultRowHeight then
begin DrawText(Handle, PChar(S2), length(S2), DrawRect, dt_singleline or dt_vcenter or iAlign); end else begin DrawText(Handle, PChar(S2), length(S2), DrawRect, dt_wordbreak or iAlign); end; und vor allem dt_vcenter das Standard-Verhalten malen, also vertikal zentriert, so als ob es keinen Umbruch gibt. Heiko |
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Achso, dann hab ich das falsch verstanden. Was ist denn nun noch das Probem?
|
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Hallo,
an Posting 1 ist ein Screenshot. Die Spalte 3 sieht einfach blöd aus. Das dt_vcenter funktioniert irgendwie nicht richtig. Heiko |
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Du willst eine Multiline-Zelle vertikal zentrieren, hab ich das richtig verstanden?
|
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Hallo,
nein, das war ein Versuch. Geht ja nicht (laut SDK). Ich habe Posting #5 geändert. Noch mal:
Delphi-Quellcode:
Lade doch mal das Projekt runter und klicke auf den rechten Button.
if RowHeights[R]<=AGrid.DefaultRowHeight then
begin // hier kommt er rein, aber siehe Screenshot DrawText(Handle, PChar(S2), length(S2), DrawRect, dt_singleline or iAlign); end else begin DrawText(Handle, PChar(S2), length(S2), DrawRect, dt_wordbreak or dt_vcenter // klappt nicht, steht auch so im SDK or iAlign); end; Heiko |
Re: TStringGrid, wordwrap, 1zeilig sieht es blöd aus
Nützt nix, da ich gerade kein Delphi verfügbar habe. Mit DT_VCENTER geht das nur in Verbindung mit DT_SINGLELINE, wie Du ja bereits bemerkt hast. Vielleicht kommt man aber mit
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 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