有时,当 D7 exe 具有清单文件时,形式 运行-time(Tbutton、Radio、checkbox 等)中缺少 Common-Controls
Sometimes Common-Controls are missing from the form run-time (Tbutton, Radio, checkbox, etc) when D7 exe has the manifest file
当我将鼠标移到屏幕上或通过代码 invalidate/repaint 整个表单时,丢失的按钮会重新出现在屏幕上。我做了一个修复,如果按下 ALT 键(显示快捷方式),这些会被重新绘制,但是当 ALT 没有按下时,问题甚至会随机出现。
当我删除下面的清单文件时,按钮显示正常。
需要清单,以便旧样式按钮看起来是圆形的。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="xxxx"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Delphi7 不回复WM_UPDATEUISTATE
消息
您可以通过使用以下代码修补 TWinControl
来解决此问题。
TWinControl = class(TControl)
private
procedure WMUpdateUIState(var Message: TMessage); message WM_UPDATEUISTATE;
...
end;
procedure TWinControl.WMUpdateUIState(var Message: TMessage);
begin
DefWindowProc(Handle, Message.Msg, Message.WParam, Message.LParam);
Invalidate;
end;
当我将鼠标移到屏幕上或通过代码 invalidate/repaint 整个表单时,丢失的按钮会重新出现在屏幕上。我做了一个修复,如果按下 ALT 键(显示快捷方式),这些会被重新绘制,但是当 ALT 没有按下时,问题甚至会随机出现。
当我删除下面的清单文件时,按钮显示正常。 需要清单,以便旧样式按钮看起来是圆形的。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="xxxx"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Delphi7 不回复WM_UPDATEUISTATE
消息
您可以通过使用以下代码修补 TWinControl
来解决此问题。
TWinControl = class(TControl)
private
procedure WMUpdateUIState(var Message: TMessage); message WM_UPDATEUISTATE;
...
end;
procedure TWinControl.WMUpdateUIState(var Message: TMessage);
begin
DefWindowProc(Handle, Message.Msg, Message.WParam, Message.LParam);
Invalidate;
end;