有时,当 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;