![]() |
Höhe von TMemo an Textlänge anpassen
Hallo Leute,
Weiß jemand Rat? ich hab auf einem Form ein memofeld -die linke obere Ecke ist fix -die breite ist fix -wordWrap=true -scrollbars=false wenn ich nun einige Zeilen Text hineinschreib via memo1.Lines.Append(); würd ich gerne die Höhe des memofeldes dynamisch an den textinhalt anpassen. Vielen Dank Erich |
Re: Höhe von TMemo an Textlänge anpassen
So ungefähr:
Delphi-Quellcode:
Geht aber bestimmt auch anders.
Var
c : TControlCanvas; begin c := TControlCanvas.Create; Try c.Control := MyMemo; MyMemo.Height := 10+c.TextHeight('|Gg')* MyMemo.lines.count; Finally c.Free; End; end; |
Re: Höhe von TMemo an Textlänge anpassen
Hallo,
Probier mal das:
Delphi-Quellcode:
procedure TForm1.AdjustMemoHeight(Memo: TMemo);
var Rect1, Rect2: TRect; S: string; Begin with Memo do begin s := Text; Perform(EM_GETRECT, 0, Longint(@Rect1)); Rect2 := Rect1; Self.Canvas.font := Font; DrawTextEx(Canvas.Handle, PChar(S), Length(S), Rect2, DT_CALCRECT or DT_EDITCONTROL or DT_WORDBREAK or DT_NOPREFIX, nil); Height := Height + Rect2.Bottom - Rect1.Bottom; end; end; |
Re: Höhe von TMemo an Textlänge anpassen
Moin, Moin.
Die dynamische Höhenanpassung sollte aber mit Bedacht verwendet werden. Wenn der Text sehr lang ist, wird das Memo höher als das Form?! |
Re: Höhe von TMemo an Textlänge anpassen
AdjustMemoHeight !! that´s it !
Super... Vielen Dank Erich |
AW: Höhe von TMemo an Textlänge anpassen
Ich schließe hier mal an, da ich genau das gleiche Problem habe, nur leicht anders:
Ich weise der Text-Property einen Wert zu, und das Memo steht auf WordWrap=true. Daher bin ich nicht so sicher, ob MyMemo.Lines.Count die tatsächliche Anzahl Zeilen wiederspiegelt. Viel schlimmer ist aber, dass das Memo dynamisch erstellt wird, und zu dem Zeitpunkt zwar bereits einen Text hat, aber noch kein übergeordnetes Fenster! (Es liegt auf ein paar frei schwebenden Panels, die erst nachher in ein Fenster gebunden werden.) Daher schlagen sämliche Funktionen wie DrawText() oder TextHeight() fehl, auch wenn ich versuche mir ein DC zu besorgen. Meldung: "Element '' hat kein übergeordnetes Fenster." EDIT: Hab es dank einer Idee, die ich in einem anderen Thread aufgeschnappt habe jetzt (mit toms' Ansatz) so gelöst:
Delphi-Quellcode:
Der Trick war das Bitmap, und EM_GETRECT hat für das unsichtbare Memo auch nur Quark geliefert. Einziger Schönheitsfehler: Eventuelle Borders und/oder Margins müssen deswegen da noch von Hand zugerechnet werden. Ein kleiner Preis :)
procedure AdjustMemoHeight(Memo: TMemo);
var Rect: TRect; S: string; b: TBitmap; Begin with Memo do begin s := Text; b := TBitmap.Create; b.Width := ExplicitWidth; b.Height := 600; b.Canvas.Font.Assign(Font); DrawTextEx(b.Canvas.Handle, PChar(S), Length(S), Rect, DT_CALCRECT or DT_EDITCONTROL or DT_WORDBREAK or DT_NOPREFIX, nil); Height := Rect.Bottom; b.Free; end; end; |
AW: Höhe von TMemo an Textlänge anpassen
Warum nimmst du nicht gleich die Bitmap? Oder soll das editierbar sein?
MfG Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 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