Einzelnen Beitrag anzeigen

Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Text im TMemo vertikal ausrichten...

  Alt 11. Dez 2006, 03:24
Ich hab jetzt eine Lösung gebastelt
Delphi-Quellcode:
procedure VerticalAlignMemo(MyMemo: TMemo);
var
  R: Trect;
  LineHeight, LineTop: integer;
  TmpLabel: TLabel;
  TmpString: string;
  TmpCnt: integer;
  TmpControl: TWinControl;
begin
  TmpLabel := TLabel.Create(Texte);
  TmpLabel.Parent := Texte;
  TmpLabel.Visible := False;
  TmpLabel.Font.Assign(MyMemo.Font);
  LineHeight := TmpLabel.Canvas.TextHeight('T');
  TmpLabel.Free;

  TmpString := MyMemo.Text;
  LineTop := Trunc(((MyMemo.Height - 4) / 2) - (LineHeight / 2));
  TmpCnt := 1;
  while pos(#13, TmpString) > 0 do
  begin
    TmpString := Copy(TmpString, pos(#13, TmpString) + 1, Length(TmpString));
    TmpCnt := TmpCnt + 1;
    if (TmpCnt * (LineHeight / 2)) <= (MyMemo.Height / 2) then
      LineTop := Trunc(((MyMemo.Height - 4) / 2) - (TmpCnt * (LineHeight / 2)));
  end;

  R := Rect(1, LineTop, MyMemo.Width - 2, MyMemo.Height);

  SendMessage(MyMemo.Handle, EM_SETRECTNP, 0, LongInt(@R));
  SendMessage(MyMemo.Handle, EM_SCROLLCARET, 0, 0);

  TmpControl := MyMemo.Parent;
  while TmpControl.HasParent = True do
    TmpControl := TmpControl.Parent;
  if TmpControl.Visible = True then
    MyMemo.Repaint;
end;
Der Nachteil an der Sache ist, dass man es immer onChange aufrufen muss, weil das Memo sonst "normal" gezeichnet werden würde.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat