Und die Zeichenroutinen beim ThemeManager ähneln stark den normalen, wie z.B.
rawEdge, nur dass die Parameter verständlicher sind und man nicht so viel zeichnen muss, wie bei den oldscool 3d effekten.
Im Endeffekt ists weniger code.
Hier mal ein Bleistift:
Delphi-Quellcode:
Procedure DrawBtn( _sText: String;
_bDown: Boolean);
Var
oEleDet: TThemedElementDetails;
Begin
If ThemeServices.ThemesEnabled //hier mit Themes
Then Begin
// ab her wird das Element ermittelt
If _bDown
Then oEleDet:=ThemeServices.GetElementDetails(tbPushButtonPressed)
Else Begin
If _iIndex=iMouseOver
Then oEleDet:=ThemeServices.GetElementDetails(tbPushButtonHot)
Else oEleDet:=ThemeServices.GetElementDetails(tbPushButtonNormal);
End;
//hier ist dann das Zeichnen
ThemeServices.DrawElement(Canvas.Handle,oEleDet,oRect);
ThemeServices.DrawText(Canvas.Handle,oEleDet,
_sText,oRect,DT_CENTER Or DT_VCENTER,0);
End Else Begin //Hier ohne
If _bDown
Then DrawEdge(Canvas.Handle,oRect,BDR_SUNKEN,
BF_RECT Or BF_SOFT Or BF_ADJUST Or BF_MIDDLE)
Else DrawEdge(Canvas.Handle,oRect,BDR_RAISED,
BF_RECT Or BF_SOFT Or BF_ADJUST Or BF_MIDDLE);
Canvas.Brush.Color:=clBtnFace;
If _iIndex=iMouseOver
Then Canvas.Font.Color:=clHighlightText
Else Canvas.Font.Color:=clWindowText;
DrawText(Canvas.Handle,@_sText[1],1,oRect,DT_CENTER Or DT_VCENTER);
End;
End;
Wobei diese Prozedur in eine andere eingebettet ist und oRect ist ne variable der äusseren...
die tbXXX Konstanten findest Du auch in der
Unit Themes ...
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>