【问题标题】:Delphi. How to disable Vcl Themes for TFileOpenDialog and TOpenDialog德尔福。如何禁用 TFileOpenDialog 和 TOpenDialog 的 Vcl 主题
【发布时间】:2017-05-30 03:24:50
【问题描述】:

如何禁用 TFileOpenDialog 和 TOpenDialog 的 Vcl 主题?

我试试

procedure TForm1.FormCreate(Sender: TObject);
var
  chosenDirectory: String;
  openDialog : TFileOpenDialog;
begin

  TStyleManager.Engine.RegisterStyleHook(TFileOpenDialog, TStyleHook);

  chosenDirectory:='';

  try
    openDialog:=TFileOpenDialog.Create(Self);
    openDialog.Options := [fdoPickFolders];
    // var 2
    // Not works
    //TStyleManager.Engine.RegisterStyleHook(TFileOpenDialog, TStyleHook);

    if openDialog.Execute then
      chosenDirectory:=openDialog.FileName;
  finally
    openDialog.Free;
  end;
end;

但它不起作用。 我尝试了变体 2。它也不起作用。

【问题讨论】:

  • 尝试资源获取之后,而不是之前。

标签: delphi styles themes vcl


【解决方案1】:

禁用常用对话框样式的正确方法是删除 TStyleManager.SystemHooks 属性的 shDialogs 元素。

TStyleManager.SystemHooks := [shMenus, shToolTips];

【讨论】:

  • 嗯...这不是未来兼容的,你知道的。应该类似于with TStyleManager do SystemHooks := SystemHooks - [shDialogs];
【解决方案2】:

它不起作用,因为 FileOpenDialog 是系统窗口对话框,而不是在 VCL 中实现,所以你需要根据类名添加系统挂钩。此外,您还需要在此对话框中为所有 Windows 控件的类名添加挂钩。

试试这样的。请注意,这将影响所有系统对话框。

  TStyleManager.Engine.RegisterSysStyleHook('#32770', TSysStyleHook);
  TStyleManager.Engine.RegisterSysStyleHook('ReBarWindow32', TSysStyleHook);
  TStyleManager.Engine.RegisterSysStyleHook('Static', TSysStyleHook);
  TStyleManager.Engine.RegisterSysStyleHook('Edit', TSysStyleHook);
  TStyleManager.Engine.RegisterSysStyleHook('ScrollBar', TSysStyleHook);
  TStyleManager.Engine.RegisterSysStyleHook('ToolbarWindow32', TSysStyleHook);
  TStyleManager.Engine.RegisterSysStyleHook('ComboBox', TSysStyleHook);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2011-01-23
    相关资源
    最近更新 更多