我有一个非常简单的表格,上面有一个TOpenDialog和一个按钮.当我按下按钮时,它会在对话框上调用Execute.如果我在调试器中观察,打开对话框的行为会产生类似于14个线程的行为,当我关闭对话框时它们也不会消失.
任何人都知道这是怎么回事?
我正在尝试修改Delphi 7 Dialogs.pas以访问较新的Windows 7打开/保存对话框(请参阅使用Delphi创建Windows Vista Ready应用程序).我可以使用建议的修改显示对话框; 但是,诸如OnFolderChange和OnCanClose之类的事件不再起作用.
这似乎与将Flags:= OFN_ENABLEHOOK更改为Flags:= 0有关.当Flags设置为0时,将绕过TOpenDialog.Wndproc,并且不会捕获相应的CDN_xxxxxxx消息.
任何人都可以建议对D7 Dialogs.pas进行进一步的代码修改,既可以显示更新的常用对话框,又可以维护原始控件的事件功能?
谢谢...
请参阅以下步骤以重现.适用于XE2,但不适用于XE8.
TButton和一个TOpenDialogOnClick事件调用中OpenDialog1.Execute使用XE8订阅更新1(Windows从8.1升级到10)进行测试
尽管通过TOpenDialog提供了文件选择对话框,但在Delphi 2009中似乎没有可用于创建文件夹选择对话框的简单组件.
使用Delphi创建现代文件夹选择对话框的最常用方法是什么?
我需要在Windows 7/Vista的文件打开对话框中预览多种CAD格式.在过去,我使用了Delphi Preview Open Dialog,我可以注册并实现我必须预览的CAD格式.我发现了一些关于如何在Vista中创建预览处理程序的文章,遗憾的是这对我不起作用.我想知道是否有一种方法可以抓住我创建的对话框的IPreviewHandler接口
我在Windows 10上使用Delphi Berlin.我需要在基于tStringGrid的tForm上使用tOpenDialog.
当我双击一个与打开的对话框上的固定列或行重叠的文件onFixedCellClick事件在打开对话框消失后立即自动触发.在下图中,文件位于第一行的固定行的相同位置.
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
OpenDialog1: TOpenDialog;
procedure FormClick(Sender: TObject);
procedure StringGrid1FixedCellClick(Sender: TObject; ACol, ARow: Integer);
procedure FormCreate(Sender: TObject);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Options := StringGrid1.Options + [goFixedColClick, goFixedRowClick];
end;
procedure TForm1.FormClick(Sender: TObject);
begin
OpenDialog1.Execute;
end;
procedure TForm1.StringGrid1FixedCellClick(Sender: TObject; ACol, ARow: Integer);
begin
Caption := '';
end;
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,我可以通过移动对话框窗口或单击文件一次并单击打开按钮来处理此问题,但我无法保证将使用此功能的其他人会这样做.
是什么原因以及如何解决这个问题?
我有一个由Delphi 7编写的应用程序,这个应用程序在Windows XP中运行良好.
现在我已经将我的电脑升级到Windows 7,并且除了当我点击执行TOpenDialog和TSaveDialog然后挂起的按钮时,每个都可以正常使用这个应用程序.
在Windows 7中使用delphi 7时有人有这个问题吗?
有谁知道是否可以在自己的表单中嵌入文件打开对话框?
我们有一个选项卡式对话框,在其中一个选项卡上,我们希望用户能够浏览具有与标准打开对话框相同功能的文件,例如'查找'组合框,放置栏,shell文件列表,文件名组合名称完成等
我已经看过用一些第三方组件重新创建对话框,即Jam Shell Browser Components
我可以通过这种方式获得大部分功能,但我遗漏了一些东西,比如地方栏和文件名自动完成\建议
我试图在新线程中使用openDialog,但它做了如此奇怪的行为..
如果我把if opendialog.execute然后放在create构造函数中,如下所示:
constructor TChatMemberThread.Create(Name: string);
begin
inherited Create(True);
FName := Name;
FreeOnTerminate := True;
Opendialog := TOpenDialog.create(nil);
if opendialog.execute then
for 0 to opendialog.filescount do
somecodeishere
end;
end;
Run Code Online (Sandbox Code Playgroud)
opendialog正常打开但是当我把它放在线程的执行生成器中时它根本没有打开!!
我是线程的初学者,所以任何人都可以向我解释发生了什么?
提前致谢 .
[编辑]
unit Unit1;
interface
uses
Classes,Dialogs,ComCtrls,SysUtils,DCPcrypt2, DCPmd5;
type
TOpenThread = class(TThread)
private
{ Private declarations }
OpenDlG : TOpenDialog;
LI : TListItem;
Procedure Openit;
Function MD5it(Const filename : string ):String;
protected
procedure Execute; override;
Public
Constructor Create;
Destructor Destroy;Override;
end;
implementation
uses Main;
{ TOpenThread }
Constructor …Run Code Online (Sandbox Code Playgroud) delphi multithreading delphi-2009 fileopendialog topendialog
我希望我的打开和保存对话框显示XML文件.我有这个定义:
// The save dialog
dlg := TSaveDialog.Create(nil);
dlg.Options := [ofOverwritePrompt];
dlg.Title := 'Seleccione la ubicación del archivo';
dlg.Filter := 'Xml | *.xml | Todo | *.*';
dlg.DefaultExt := 'xml';
dlg.Execute();
// The open dialog
dlg := TOpenDialog.Create(self);
dlg.Title := 'Seleccione la ubicación del archivo';
dlg.Filter := 'Xml | *.xml | Todo | *.*';
dlg.DefaultExt := 'xml';
dlg.Execute();
Run Code Online (Sandbox Code Playgroud)
但它不显示XML文件.要在路径中显示任何XML文件,我需要选择"Todo"(*.*)过滤器.选择XML过滤器时为什么不显示文件?
delphi ×10
topendialog ×10
delphi-7 ×3
delphi-2009 ×2
tsavedialog ×2
delphi-xe8 ×1
filter ×1
opendialog ×1
pane ×1
preview ×1
tstringgrid ×1
vcl-styles ×1
windows ×1
windows-10 ×1
windows-7 ×1