德尔福如何为TFileOpenDialog和TOpenDialog禁用Vcl主题 [英] Delphi. How to disable Vcl Themes for TFileOpenDialog and TOpenDialog

查看:93
本文介绍了德尔福如何为TFileOpenDialog和TOpenDialog禁用Vcl主题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How to disable Vcl Themes for TFileOpenDialog and TOpenDialog ?

我尝试

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.它也不起作用.

but it's not work. I try variation 2. It's not work too.

推荐答案

它不起作用,因为FileOpenDialog是系统窗口对话框,而不是在VCL中实现,因此您需要基于类名添加系统挂钩.另外,您需要在此对话框中的所有Windows控件的类名称中添加钩子.

It does not work because FileOpenDialog is system windows dialog, rather than implemented in VCL, so you'll need add system hook based on class name. Plus you'll need to add hooks to class names of all Windows controls on this dialog.

尝试类似这样的方法.请注意,这将影响所有系统对话框.

Try something like this. Note that this will affect all system dialogs.

  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);

这篇关于德尔福如何为TFileOpenDialog和TOpenDialog禁用Vcl主题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆