* draw themed header item according to position. Issue 17467

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2200 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
blikblum
2011-12-25 19:38:58 +00:00
parent a8d77986c0
commit dbb82e587b

View File

@ -8489,6 +8489,9 @@ end;
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
type
THeaderItemPosition = (thpLeft, thpCenter, thpRight);
procedure TVirtualTreeColumns.PaintHeader(DC: HDC; const R: TRect; HOffset: Integer); procedure TVirtualTreeColumns.PaintHeader(DC: HDC; const R: TRect; HOffset: Integer);
// Main paint method to draw the header. // Main paint method to draw the header.
@ -8498,6 +8501,9 @@ const
(3, 5) {ascending}, (2, 4) {descending} (3, 5) {ascending}, (2, 4) {descending}
); );
HotThemedHeaders: array[THeaderItemPosition] of TThemedHeader = (thHeaderItemLeftHot, thHeaderItemHot, thHeaderItemRightHot);
PressedThemedHeaders: array[THeaderItemPosition] of TThemedHeader = (thHeaderItemLeftPressed, thHeaderItemPressed, thHeaderItemRightPressed);
NormalThemedHeaders: array[THeaderItemPosition] of TThemedHeader = (thHeaderItemLeftNormal, thHeaderItemNormal, thHeaderItemRightNormal);
var var
I, Y, I, Y,
SortIndex: Integer; SortIndex: Integer;
@ -8517,6 +8523,7 @@ var
AdvancedOwnerDraw: Boolean; AdvancedOwnerDraw: Boolean;
{$ifdef ThemeSupport} {$ifdef ThemeSupport}
Details: TThemedElementDetails; Details: TThemedElementDetails;
HeaderItemPosition: THeaderItemPosition;
{$endif ThemeSupport} {$endif ThemeSupport}
PaintInfo: THeaderPaintInfo; PaintInfo: THeaderPaintInfo;
@ -8708,13 +8715,18 @@ begin
{$ifdef ThemeSupport} {$ifdef ThemeSupport}
if tsUseThemes in FHeader.Treeview.FStates then if tsUseThemes in FHeader.Treeview.FStates then
begin begin
if I = GetFirstVisibleColumn then
HeaderItemPosition := thpLeft
else
HeaderItemPosition := thpCenter;
//todo?: handle autoresize header. LastColumn.HeaderItemPosition := thpRight
if IsDownIndex then if IsDownIndex then
Details := ThemeServices.GetElementDetails(thHeaderItemPressed) Details := ThemeServices.GetElementDetails(PressedThemedHeaders[HeaderItemPosition])
else else
if IsHoverIndex then if IsHoverIndex then
Details := ThemeServices.GetElementDetails(thHeaderItemHot) Details := ThemeServices.GetElementDetails(HotThemedHeaders[HeaderItemPosition])
else else
Details := ThemeServices.GetElementDetails(thHeaderItemNormal); Details := ThemeServices.GetElementDetails(NormalThemedHeaders[HeaderItemPosition]);
ThemeServices.DrawElement(Handle, Details, PaintRectangle, @PaintRectangle); ThemeServices.DrawElement(Handle, Details, PaintRectangle, @PaintRectangle);
end end
else else