Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Memo, je nach Bedarf 1-3 Zeilen groß. Wie? [VCL] (https://www.delphipraxis.net/189407-memo-je-nach-bedarf-1-3-zeilen-gross-wie-%5Bvcl%5D.html)

Der schöne Günther 9. Jun 2016 13:43

Memo, je nach Bedarf 1-3 Zeilen groß. Wie? [VCL]
 
Total dumme Frage, aber ich stehe auf dem Schlauch.

Ich habe etwas Text. Vielleicht sind es zwei Zeilen, vielleicht eine, vielleicht zehn. Ich möchte den Text anzeigen, z.B. mit einem TLabel oder TMemo. Die Komponente soll
  • so groß wie nötig sein ("AutoSize")
  • Aber nicht größer als z.B. drei Zeilen
  • Danach möchte ich Scrollbalken

Ich habe keinen Ansatz wie man das umsetzen könnte. :oops: Wer kann helfen?

Uwe Raabe 9. Jun 2016 14:21

AW: Memo, je nach Bedarf 1-3 Zeilen groß. Wie? [VCL]
 
Vielleicht so (sicher noch optimierbar):

Delphi-Quellcode:
type
  TMemoHelper = class helper for TMemo
  public
    procedure AdjustHeight(MaxLines: Integer);
  end;

procedure TMemoHelper.AdjustHeight(MaxLines: Integer);
var
  border: Integer;
  DC: HDC;
  metrics: TTextMetric;
  S: string;
  saveFont: HFont;
  size: TSize;
  sysMetrics: TTextMetric;
  W: Integer;
begin
  WordWrap := false;

  DC := GetDC(0);
  try
    GetTextMetrics(DC, sysMetrics);
    saveFont := SelectObject(DC, Font.Handle);
    GetTextMetrics(DC, metrics);
    W := 0;
    for S in Lines do begin
      GetTextExtentPoint32(DC, S, Length(S), size);
      W := Max(W, size.cx);
    end;
    SelectObject(DC, saveFont);
  finally
    ReleaseDC(0, DC);
  end;
  if NewStyleControls then begin
    border := GetSystemMetrics(SM_CYBORDER) * IfThen(Ctl3D, 8, 6);
  end
  else begin
    border := Min(sysMetrics.tmHeight, metrics.tmHeight) div 4 + GetSystemMetrics(SM_CYBORDER) * 4;
  end;

  if Lines.Count > MaxLines then begin
    ScrollBars := ssVertical;
    W := W + GetSystemMetrics(SM_CXVSCROLL);
  end
  else begin
    ScrollBars := ssNone;
  end;
  Height := MaxLines * metrics.tmHeight + border;
  Width := W + border;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz