Delphi 当鼠标移动到TButton上时,为什么会多次触发FormPaint事件
为什么表单的Delphi 当鼠标移动到TButton上时,为什么会多次触发FormPaint事件,delphi,windows-10,delphi-xe8,Delphi,Windows 10,Delphi Xe8,为什么表单的OnPaint事件在此应用程序中会触发这么多次 使用两个TButton控件、一个TMemo控件和一个TBitBtn控件创建一个新的VCL表单应用程序 使用此代码: procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Clear; end; procedure TForm1.FormPaint(Sender: TObject); begin Memo1.Lines.Add('FormPaint')
OnPaint
事件在此应用程序中会触发这么多次
TButton
控件、一个TMemo
控件和一个TBitBtn
控件创建一个新的VCL表单应用程序procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Memo1.Lines.Add('FormPaint');
end;
t按钮上时
,会触发OnPaint
事件4次,当鼠标从t按钮移出时
会触发4次
当鼠标移动到TBitBtn
上时,会触发OnPaint
事件3次,当鼠标从TBitBtn
移出时会触发3次
当样式在“项目/选项/应用程序/外观”中更改为例如“Luna”时,我将改为以下行为:
当鼠标移动到TButton
/TBitBtn
上时,会触发OnPaint
事件1次,当鼠标从TButton
/TBitBtn
移出时,会触发2次
为什么不一致
当鼠标移动到t按钮上时,是否可以避免OnPaint
事件
我有XE8订阅更新1(和Windows 10)。按钮的悬停效果是您观察到的结果的原因。当您将鼠标悬停在按钮上时,它会更改外观。将光标移离按钮时,它将恢复其外观。每次外观更改都会触发窗体的OnPaint
事件。这就是底层绘画系统的工作原理。为了绘制子控件,会将WM_PRINTCLIENT
消息传递给控件的父控件,这反过来会导致窗体的OnPaint
事件触发
您可以通过禁用运行时主题看到这种情况。执行此操作时,将光标移动到按钮上不会触发OnPaint
VCL样式和Windows主题导致触发的OnPaint
事件数量不同的原因很简单,就是它们以不同的方式处理绘制。但是VCL样式也有悬停效果,它们还导致触发OnPaint
事件
当光标移动到按钮上时,是否可以避免OnPaint
事件
在VCL样式的应用程序中,您可能会使用没有任何悬停效果的VCL样式。在Windows主题应用程序中,您可以禁用按钮的主题
我怀疑解决您真正问题的方法,即对您未被问到的问题的答案,是停止使用OnPaint
,无论您目前使用它做什么。相反,你可以在更合适的地方做任何事情。按钮的悬停效果对你观察到的情况负责。当您将鼠标悬停在按钮上时,它会更改外观。将光标移离按钮时,它将恢复其外观。每次外观更改都会触发窗体的OnPaint
事件。这就是底层绘画系统的工作原理。为了绘制子控件,会将WM_PRINTCLIENT
消息传递给控件的父控件,这反过来会导致窗体的OnPaint
事件触发
您可以通过禁用运行时主题看到这种情况。执行此操作时,将光标移动到按钮上不会触发OnPaint
VCL样式和Windows主题导致触发的OnPaint
事件数量不同的原因很简单,就是它们以不同的方式处理绘制。但是VCL样式也有悬停效果,它们还导致触发OnPaint
事件
当光标移动到按钮上时,是否可以避免OnPaint
事件
在VCL样式的应用程序中,您可能会使用没有任何悬停效果的VCL样式。在Windows主题应用程序中,您可以禁用按钮的主题
我怀疑解决您真正问题的方法,即对您未被问到的问题的答案,是停止使用OnPaint
,无论您目前使用它做什么。相反,你可以在更合适的地方做任何事情。按钮的悬停效果对你观察到的情况负责。当您将鼠标悬停在按钮上时,它会更改外观。将光标移离按钮时,它将恢复其外观。每次外观更改都会触发窗体的OnPaint
事件。这就是底层绘画系统的工作原理。为了绘制子控件,会将WM_PRINTCLIENT
消息传递给控件的父控件,这反过来会导致窗体的OnPaint
事件触发
您可以通过禁用运行时主题看到这种情况。执行此操作时,将光标移动到按钮上不会触发OnPaint
VCL样式和Windows主题导致触发的OnPaint
事件数量不同的原因很简单,就是它们以不同的方式处理绘制。但是VCL样式也有悬停效果,它们还导致触发OnPaint
事件
当光标移动到按钮上时,是否可以避免OnPaint
事件
在VCL样式的应用程序中,您可能会使用没有任何悬停效果的VCL样式。在Windows主题应用程序中,您可以禁用按钮的主题
我怀疑解决您真正问题的方法,即对您未被问到的问题的答案,是停止使用OnPaint
,无论您目前使用它做什么。相反,你可以在更合适的地方做任何事情。按钮的悬停效果对你观察到的情况负责。当您将鼠标悬停在按钮上时,它会更改外观。当你移动