Einzelnen Beitrag anzeigen

Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#17

Re: TTabControl, XP-Style, OwnerDraw

  Alt 11. Okt 2006, 19:30
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>
  Mit Zitat antworten Zitat