Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi “打开/保存文件”对话框将焦点设置为文件列表视图_Delphi_Focus_Topendialog_Filelist - Fatal编程技术网

Delphi “打开/保存文件”对话框将焦点设置为文件列表视图

Delphi “打开/保存文件”对话框将焦点设置为文件列表视图,delphi,focus,topendialog,filelist,Delphi,Focus,Topendialog,Filelist,是否可以打开TopEndDialog、TSaveDialog,并将焦点设置为“文件列表”视图而不是“文件名”编辑框 非常感谢 关于您可以将焦点放在您喜欢的控件上,但这样做时对话框应该准备好了。“OnShow”活动还为时过早。例如,您可以将“OnFolderChange”事件与标志一起使用,以避免每次更改文件夹时都更改焦点: type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; pr

是否可以打开TopEndDialog、TSaveDialog,并将焦点设置为“文件列表”视图而不是“文件名”编辑框

非常感谢


关于

您可以将焦点放在您喜欢的控件上,但这样做时对话框应该准备好了。“OnShow”活动还为时过早。例如,您可以将“OnFolderChange”事件与标志一起使用,以避免每次更改文件夹时都更改焦点:

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure OpenDialog1FolderChange(Sender: TObject);
  private
    FDlgSetFocus: Boolean;

uses
  dlgs;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FDlgSetFocus := False;
  OpenDialog1.Execute;
end;

procedure TForm1.OpenDialog1FolderChange(Sender: TObject);
begin
  if not FDlgSetFocus then
    windows.SetFocus(GetDlgItem(GetParent((Sender as TOpenDialog).Handle), lst2));
  FDlgSetFocus := True;
end;

像往常一样,对于这类问题:你有什么特别的原因想改变默认行为吗?你可能需要一个黑客。你最好像Cosmin所暗示的那样使用标准行为。我现在编写的应用程序的GUI已经不常见了,因为用户大多会浏览文件(而不是输入文件名),所以我更喜欢这个功能。然后关闭对话框。发送信息以更改焦点。确保您能够处理XP和Vista/7具有不同对话框的事实,这些对话框无疑需要不同的破解。您可以自己调用,这样您就可以使用自己的设置
lpfnHook
参数。不确定它是否有效,没有时间测试这个(因此这是一个评论,不是答案)+1;我刚刚开始编写一个小演示,介绍如何钩住
TFileOpenDialog.CreateFileDialog:IFileDialog
以注册自己的
IFileDialogEvents
,从而响应
OnFolderChange
事件。我从来没有想过VCL会出现同样的事件本身!但很明显它会。。。此外,OnFolderChange看起来正是执行此操作的地方(即:并非不雅),因为它在对话框显示在屏幕上之前被调用过一次。@Cosmin-Heh!,我曾经在一次失败的事件中也有过同样的感受。。根据您的评估,我删除了最后一段,谢谢!如果人们想要在Vista/7和XP上运行的代码,他们会怎么做?是否每个人都围绕这两个对话框编写自己的包装,并根据底层操作系统在它们之间切换?@David-VCL会这样做,因此在这个案例中不需要这样做。我在2K和W7中测试了上面的测试,似乎效果不错。但我想在某些情况下这可能是必要的。@Sertac好的,我现在明白了,
TFileDialogWrapper
。我不熟悉它,因为我有自己的包装器,它更通用(并且比VCL包装器更早)。