Возрождая старую тему ...
После поиска решения в интернете и ничего не нашел, я заглянул в код TCustomButton.
Бывает, что, внутри, кнопкаэлемент управления в Windows имеет список изображений с 6 изображениями, как показано ниже:
индекс 0: нормальное изображение
индекс 1: горячее изображение (при наведении мыши на кнопку)
индекс 2: нажатое изображение (во времяВы держите кнопку мыши d собственной)
индекс 3: отключенное изображение
индекс 4: выбранное изображение (когда кнопка имеет фокус, но не нажата и не наведена на нее мышью)
индекс 5: (тот,что нам нужно и не может быть указано в элементе управления TButton; мы поговорим об этом)
В элементе управления TButton в Delphi вы можете установить для ImageList свойство «Images» и установить «ImageIndex "," HotImageIndex "," PressedImageIndex "," DisabledImageIndex "и" SelectedImageIndex ".
Если эти свойства установлены, элемент управления TButton создает ДРУГОЙ список изображений и копирует индексы, указанные в пропеИз списка изображений в свойстве «Изображения» этого нового списка изображений в порядке, указанном выше.
Проблема в том, что при фокусировке элемента управления Win 7 Aero приводит к тому, что он исчезаети выделите цвет подсветки (небольшая анимация), и он использовал 6-е изображение из своего внутреннего списка изображений для увеличения и уменьшения изображения, но НЕВОЗМОЖНО предоставить этот индекс изображения «FADE» для управления TButton, поэтому я имеюсоздал простое решение, которое работает для меня, но я должен позвонить в RunTime.(Вы можете получить новый класс из TCustomButton и создать новый элемент управления, например, установить новый SelectedFadeImageIndex, но я этого не сделал).
Я создал эту процедуру:
procedure MakeButtonImageStopBlinking(AButton: TCustomButton);
var
ButtonImageList: TButtonImageList;
Icon: HICON;
begin
SendMessage(AButton.Handle, BCM_GETIMAGELIST, 0, LPARAM(@ButtonImageList));
Icon := ImageList_GetIcon(ButtonImageList.himl, 0, ILD_NORMAL);
ImageList_AddIcon(ButtonImageLIst.himl, Icon);
DestroyIcon(Icon);
end;
поэтому, когда окно создано (по событию OnCreate), я просто вызываю MakeButtonImageStopBlinking, заменяя каждую кнопку с изображением в качестве параметра, и все это теперь работает.
Прошу прощения за ревингтакая старая тема, но, похоже, ничего подобного не получится (или я не смог найти должным образом).
Редактировать: Установка DoubleBufferd в True будет работать, но остановит небольшую анимацию изкнопка с фокусом.Используя приведенное выше решение, вы можете оставить DoubleBuffered в False, и вы получите все это (анимация из аэро и без затухания изображения).