Почему событие формы OnPaint
запускается так много раз в этом приложении?
Создайте новое приложение VCL Forms с двумя элементами управления
TButton
, одним элементом управленияTMemo
и одним элементом управленияTBitBtn
.Используйте этот код:
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Clear; end; procedure TForm1.FormPaint(Sender: TObject); begin Memo1.Lines.Add('FormPaint'); end;
Запустите приложение.
Когда мышь перемещается на TButton
, событие OnPaint
запускается 4 раза, и 4 раза, когда мышь перемещается из TButton
.
Когда мышь перемещается на TBitBtn
, событие OnPaint
запускается 3 раза, и 3 раза, когда мышь перемещается от TBitBtn
.
Когда стиль изменяется в «Проект/Параметры/Приложение/Внешний вид», например, на «Луна», вместо этого я получу такое поведение:
Когда мышь перемещается на TButton
/TBitBtn
, событие OnPaint
запускается 1 раз, и 2 раза, когда мышь перемещается из TButton
/TBitBtn
.
Почему несоответствие?
Можно ли избежать события OnPaint
при наведении мыши на TButton
?
У меня есть обновление подписки XE8 1 (и Windows 10).
OnPaint
. Получили бы вы такой же результат на C#? Это зависит от того, какой UI-фреймворк вы использовали и как этот фреймворк реализует свои элементы управления. WPF не использует оконные элементы управления, а WinForms не использует элемент управления Win32BUTTON
. - person David Heffernan   schedule 16.09.2015