德尔福。如何禁用TFileOpenDialog和TOpenDialog的Vcl主题

时间:2017-01-15 01:33:25

标签: delphi styles themes vcl

如何禁用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.它也不起作用。

2 个答案:

答案 0 :(得分:12)

禁用常用对话框样式的正确方法是删除WordPress gettext filter hook function属性的 shDialogs 元素。

TStyleManager.SystemHooks := [shMenus, shToolTips];

答案 1 :(得分: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);