Здравствуйте.
Мне нужно на моей форме заменить все системные кнопки в заголовке окна своими. Т.е. сделав BorderIcons := [], мне нужно добавить свои.
До добавления пока не дошел. В версиях Windows до 10 все нормально, а вот в Windows 10 не получается получить данные кнопок из текущей темы (тема стандартная).
Код:
uses Vcl.Themes;
..
procedure TForm18.Button1Click(Sender: TObject);
var
Details: TThemedElementDetails;
begin
Details := StyleServices.GetElementDetails(twSmallCloseButtonNormal);
{ Special state for buttons drawn on a not active caption }
if (GetForegroundWindow <> Handle)
and (Details.State = 1) then
Details.State := 5;
StyleServices.DrawElement(Image1.Canvas.Handle, Details, Rect(0, 0, 32, 32))
end;
Пробую получить изображение кнопки Close. Получаю не совсем то, что надо. Видно на рисунке.
Переписал на API. Результат тот же.
Код:
uses Winapi.UxTheme;
...
procedure TForm18.Button1Click(Sender: TObject);
var
Details: TThemedElementDetails;
hTheme: THandle;
RRect: TRect;
ClipRect: PRect;
begin
hTheme := OpenThemeData(Handle, 'Window');
Details.State := 1;
Details.Part := 19;
RRect := Rect(0, 0, 32, 32);
ClipRect := @RRect;
Image1.Canvas.FillRect(RRect);
DrawThemeBackground(hTheme, Image1.Canvas.Handle, Details.Part,
Details.State, RRect, ClipRect);
CloseThemeData (hTheme);
end;
Остальные кнопки тоже какие-то из старый версий Windows. Вопрос, как получить правильные изображения кнопок и их расположение?