Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#13

AW: Tmemo height dynamisch an text anpassen

  Alt 4. Aug 2010, 09:55
Delphi-Quellcode:
//Memo1.ScrollBars := ssNone; // im OI
//Memo1.WordWrap := True;

procedure TForm5.Memo1Change(Sender: TObject);
var
  S: String;
  i: Integer;
begin
  S := Memo1.Text;
  if (S = '') or (Copy(S, Length(S))[1] in [#13, #10]) then i := 1 else i := 0;
  Memo1.ClientHeight := Canvas.TextHeight('X') * (Memo1.Lines.Count + i) + 3;
end;
oder
Delphi-Quellcode:
procedure TForm5.Memo1Change(Sender: TObject);
var
  S: String;
  i: Integer;
begin
  S := Memo1.Text;
  if (S <> '') and (Copy(S, Length(S))[1] in [#13, #10]) then i := 1 else i := 0;
  Memo1.ClientHeight := Canvas.TextHeight('X') * Max(Memo1.Lines.Count + i, 1) + 3;
end;
+3 = irgendein krummer und nicht näher beschreibbarer Erfahrungswert
i = da in .Lines eine leere Zeile am Ende nicht mitgezählt wird
.Lines enthält auch die virtuellen Zeilenumbrüche (blöderweise, aber hier isses mal praktisch)

das Form.Canvas hatte ich jetzt nur genommen, da ich ja irgendein Canvas brauchte und meine Testform zufällig die selbe Schriftart hatte, wie das Memo (das kann auch irgendein anderes Canvas sein und notfalls auch ein selbsterstelltes, welchem der Font des Memos zugewiesen wurde)

bei so vielen Memos würde ich statt Memo1 eher TMemo(Sender) verwenden und allen Memos die selbe Ereignisprozedur spendieren.

Die Höhe ( Canvas.TextHeight('X') ) könnte man auch nur einmal am Anfang berechnen und in einer Variable speichern.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Aug 2010 um 10:01 Uhr)
  Mit Zitat antworten Zitat