Отрисовка иконок в VTV

_Vasilisk_
Дата: 23.09.2019 18:20:00
Кто-нибудь может объяснить, в чем смысл этого кода?
procedure DrawImage(ImageList: TCustomImageList; Index: Integer; Canvas: TCanvas; X, Y: Integer; Style: Cardinal; Enabled: Boolean);

  procedure DrawDisabledImage(ImageList: TCustomImageList; Canvas: TCanvas; X, Y, Index: Integer);
  {$if CompilerVersion >= 21}
  var
    Params: TImageListDrawParams;
  begin
    FillChar(Params, SizeOf(Params), 0);
    Params.cbSize := SizeOf(Params);
    Params.himl := ImageList.Handle;
    Params.i := Index;
    Params.hdcDst := Canvas.Handle;
    Params.x := X;
    Params.y := Y;
    Params.fState := ILS_SATURATE;
    ImageList_DrawIndirect(@Params);
  {$else}
  begin
    TCustomImageListCast(ImageList).DoDraw(Index, Canvas, X, Y, Style, False);
  {$ifend}
  end;

begin
  if Enabled then
    TCustomImageListCast(ImageList).DoDraw(Index, Canvas, X, Y, Style, Enabled)
  else
    DrawDisabledImage(ImageList, Canvas, X, Y, Index);
end;


С какой целью вызывается ImageList_DrawIndirect вместо стандартного ImageList.DoDraw?


С уважением, Vasilisk
Василий 2
Дата: 23.09.2019 19:27:15
Посмотри в репо, когда это было добавлено, может, в коммит мессаге что-то полезное будет
ёёёёё
Дата: 23.09.2019 19:50:03
_Vasilisk_,

в моем VTV такого нет... :(
_Vasilisk_
Дата: 23.09.2019 20:49:26
Василий 2
Посмотри в репо, когда это было добавлено, может, в коммит мессаге что-то полезное будет
Нашел. Говорят эмбаркадеро поломало отрисовку неактивных сообщений. По истории изменений стабильно увеличивали CompilerVersion

ёёёёё
в моем VTV такого нет... :(
И это хорошо. Ибо оно не работает. Флаг ILS_SATURATE можно устанавливать только для 32-битных рисунков. Для обычных получается треш.