使用 FMX 在 TsaveDialog 中未触发的一些事件

Some events not fired in TsaveDialog with FMX

我正在将项目移植到 FMX(从 VCL)。我使用带有过滤器的 TSaveDialog 作为文件扩展名,但是当我更改扩展名时,'OnTypeChange' 事件不会触发,但 'OnShow' 事件会触发!

我试过 TOpenDialog 遇到同样的问题。

一些信息:

有什么想法吗?有什么我错过的选择吗?还是一个已知的错误? 我的测试代码:只是一个带有 TButton 和 TSaveDialog 的表单,事件中有一些代码显示它们是否被触发。

unit Unit1;

interface

uses
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Controls.Presentation,
  FMX.StdCtrls, System.Classes;

type
  TForm1 = class(TForm)
    SaveDialog1: TSaveDialog;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure SaveDialog1FolderChange(Sender: TObject);
    procedure SaveDialog1TypeChange(Sender: TObject);
    procedure SaveDialog1Close(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.SaveDialog1Close(Sender: TObject);
begin
  Self.Caption := Self.Caption + ', Close';
end;

procedure TForm1.SaveDialog1FolderChange(Sender: TObject);
begin
  Self.Caption := Self.Caption + ', Folder';
end;

procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
begin
  Self.Caption := Self.Caption + ', Change';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.Caption := 'Start';
  SaveDialog1.Filter := 'Applications (*.exe)|*.EXE|Text files (*.txt)|*.TXT';
  SaveDialog1.Execute;
end;

end.

感谢

尽管 OnFolderChangeOnTypeChange 事件已在 TSaveDialog 的对象检查器中发布和分配,但它们根本不执行任何操作。

通过将源文件 FMX.Dialogs.Win.pas 复制到您的项目文件夹并从 Vcl.Dialogs.pas 源文件中添加相关缺失位,可以使这些事件像在 VCL 中一样工作,其中包括但不限于:

  • TCustomFileDialog class 中引用 FolderChangeTypeChange
  • 程序 OnFolderChangeEventOnTypeChangeEvent TFileDialogWrapper class。
  • 整个TFileDialogEventsclass.

虽然这些更改是用 Delphi 10.3.3 测试的,但解决方案应该与 Delphi 10.3.1 甚至更新的版本相似,因为这个单元随着时间的推移没有太大变化。