Registriert seit: 19. Apr 2003
1.291 Beiträge
Delphi 2005 Professional
|
Re: Text im TMemo vertikal ausrichten...
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.
|
|
Zitat
|