Я работаю в пользовательском элементе управления, который смешивает два элемента управления окна (просмотр списка и просмотр дерева). В какой-то момент мне нужно нарисовать изображение, которое использует windows 7 (с включенными темами) для идентификации родительских узлов, я использую функцию DrawThemeBackground
с частью TVP_GLYPH
и GLPS_CLOSED
состояние (я попытался со всеми частями и состояниями, связанными с классом TREEVIEW
без удачи), но в результате изображение всегда будет старым (+) или (-).
Это изображение показывает проблему
Я хочу нарисовать изображение Arrow (внутри черного круга) вместо знака (+) (внутри оранжевого круга).
Это пример кода, который я использую для рисования изображения.
uses
UxTheme;
procedure TForm40.Button1Click(Sender: TObject);
var
iPartId : integer;
iStateId: integer;
hTheme : THandle;
begin
hTheme := OpenThemeData(Handle, VSCLASS_TREEVIEW);
iPartId := TVP_GLYPH;
iStateId:= GLPS_CLOSED;
//iPartId := TVP_TREEITEM;
//iStateId:= TREIS_NORMAL;
if hTheme <> 0 then
try
//if (IsThemeBackgroundPartiallyTransparent(hTheme, iPartId, iStateId)) then
// DrawThemeParentBackground(Handle, PaintBox1.Canvas.Handle, nil);
DrawThemeBackground(hTheme, PaintBox1.Canvas.Handle, iPartId, iStateId, Rect(0, 0, 31, 31), nil);
finally
CloseThemeData(hTheme);
end;
end;
Я проверяю несколько инструментов, таких как приложение от Andreas Rejbrand и , это тоже , но я не могу найти нужное изображение.
Мой вопрос: как мне получить изображение arrow ?
UPDATE
Благодаря ответу на вопрос Стигма я нашел дополнительные ресурсы для значений частей и состояний класса Explorer::Treeview
.