Moin Moin Oki,
ich bin auch schon ziemlich groggy, aber hier mal mein aktueller Status.
Das mit dem Rahmen passt nun, auch wenn ich NOCH nicht mit FrameRect gemacht habe. Kommt noch.
Dann habe ich mich mal an die Ausrichtung gewagt und siehe da, es gibt einen teilweisen Erfolg.
Folgenden Code habe ich benutzt, um die Ausrichtung zur vollziehen. Dabei hatte ich dass Problem, dass ich eigentlich die bekannte Eigenschaft Layout benutzen wollte, wie sie beim TLabel zum Einsatz kommt, aber dazu war leider nichts in der Hilfe zu finden.
Delphi-Quellcode:
var
...
myFirstAlignment,mySecondAlignment : Cardinal;
//init
myFirstAlignment := DT_CENTER;
mySecondAlignment:= DT_VCENTER;
case TextAlign of
taCenter : myFirstAlignment := DT_CENTER;
taLeftJustify : myFirstAlignment := DT_LEFT;
taRightJustify : myFirstAlignment := DT_RIGHT;
end; //bis hierher ist alles super
case Layout of
tlTop : mySecondAlignment := DT_TOP;
tlCenter : mySecondAlignment := DT_VCENTER;
tlBottom : mySecondAlignment := DT_BOTTOM;
end; //das hier funzt noch nicht
DrawText(self.Canvas.Handle, PChar(FText), -1, TextRect,
myFirstAlignment or mySecondAlignment or DT_WORDBREAK);
Folgenden Code benutze ich für das Layout:
Delphi-Quellcode:
type
TLayout = (tlTop, tlCenter, tlBottom);
private
FLayout:TLayout;
procedure SetTextLayout(Layout : TLayout);
published
property Layout : TLayout read FLayout write SetTextLayout;
procedure TmyPanel.SetTextLayout(Layout:TLayout);
begin
If Layout = FLayout then Exit; // wenn gleicher Status nichts tun
FLayout := Layout; // Status abspeichern
Invalidate; // Control neu zeichnen
end;
Findest Du da einen Fehler? Am liebsten wäre mir ja, wenn ich die originale Eigenschaft LAYOUT nutzen könnte, wie beim Alignment...