更改Delphi OpenDialog的目录

2023-11-25

该计划的一些背景:
该程序使用选项卡式界面同时处理多个文件。
我正在尝试更改 OpenDialog 的目录,因此每次调用打开文件时都会显示我当前正在处理的文件的目录,但即使我设置InitialDir对于文件的路径,它始终显示最后打开的文件目录,而不是我设置的目录。
我尝试了以下方法:

if Length(CurrentFileName) > 0 then
begin
  OpenFileDialog.InitialDir :='';
  SetCurrentDirectory(PChar(CurrentFileName));
  OpenFileDialog.InitialDir := ExtractFileDir(CurrentFileName);
end;
if OpenFileDialog.Execute then
...

Where CurrentFileName是当前选项卡打开的文件的文件名的完整路径。但没有运气。

有什么办法可以实现这一点吗?

例如:

tab1 has c:\mydir\file.txt opened
tab2 has d:\someotherdir\somefile.txt opened

如果我搬到tab1并调用 open 函数 IOpenDialog应该向我显示以下内容c:\mydir\

我正在使用 Delphi 7。感谢任何帮助。


这里有规则对于 Windows Vista 及更早版本:

  1. 如果 lpstrFile 包含路径,则该路径是初始目录。
  2. 否则,lpstrInitialDir 指定初始目录。
  3. 否则,如果应用程序过去使用过“打开”或“另存为”对话框,则选择最近使用的路径作为初始目录。但是,如果应用程序长时间未运行,则其保存的选择路径将被丢弃。
  4. 如果 lpstrInitialDir 为 NULL 并且当前目录包含指定过滤器类型的任何文件,则初始目录为当前目录。
  5. 否则,初始目录为当前用户的个人文件目录。
  6. 否则,初始目录是桌面文件夹。

所以,如果当前FileName属性非空,那么InitialDir属性被忽略,应用程序的当前目录也是如此。这与您所观察到的情况相符,因此请确保您正在清除FileName对话框的使用之间的属性。

(从 Windows 7 开始,规则有所不同,它们可能会破坏您的计划。如果您从第一个选项卡打开文件,然后从第二个选项卡打开文件,则在选择第一个选项卡时再次尝试打开文件可能会失败不再显示第一个选项卡的目录。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改Delphi OpenDialog的目录 的相关文章

  • Delphi 返回 TList 时出错

    我做了一个非常简单的应用程序 但我有一个我真的无法理解的问题 看一下这个基本代码 unit Unit1 interface uses Winapi Windows Winapi Messages System SysUtils System
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 如何在调试器中显示 TStringList 的内容?

    我想在调试应用程序时显示 TStringList 的全部内容 相反 我只是得到指示 Flist 仅显示地址 如果您使用的是 Delphi 2010 或更高版本 调试器允许使用调试可视化工具 http docwiki embarcadero
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 以编程方式重新启动 Delphi 应用程序

    应该不可能运行我的应用程序的多个实例 因此项目源码包含 CreateMutex nil False PChar ID if GetLastError ERROR ALREADY EXISTS then Halt 现在我想以编程方式重新启动我
  • 在 Delphi 中使用 XML(将特定数据返回到变量)

    过去几天我一直在尝试使用 Delphi 2010 和 MSXML 我是一个极端的新手 需要一点指导 var MemoryStream TMemoryStream XMLPath String sName String XMLDoc vari
  • 每次 TDbGrid 的选定位置更改时都会触发什么事件?

    我的项目中有一个 TDbGrid 每次更改所选行时我都试图触发一个事件 行中的任何更改都已经更新了链接到同一数据源的所有数据感知控件 但还需要进行其他更改 我需要一个事件处理程序 我认为 OnColEnter 会起作用 根据帮助文件 它在以
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • Delphi 6 命令行编译:无 DCU

    当对 dpr 文件使用 dcc32 时 它会生成一个 dll 但不会生成 dcu 项目级别 cfg 使用 N 开关设置路径 但指定的目录中没有任何内容 当 E 开关正在工作时 它必须看到 cfg 我尝试在调用 dcc32 之前对 dpr 文
  • 所见即所得与 Unicode

    我在 Delphi 中编写了一个 Windows 程序 该程序使用 GetCharWidth 和 Em Square 将文本非常精确地放置并换行到屏幕和打印机 这对于 ANSI 文本效果很好 您只需要检索和计算 255 个字符的宽度 但当您
  • 命名管道性能问题

    我使用命名管道进行 C 和 Delphi 之间的过程间通信 C 使用System IO Pipes包 而 Delphi 使用Libby s pipes pas 不幸的是 通信几乎是高性能的 分析显示通信占用了整个运行时间的 72 其余的用于
  • 将 [字节数组] 分配给没有 Unicode 转换的 Variant

    考虑以下代码片段 在 Delphi XE2 中 function PrepData StrVal string Base64Val AnsiString OleVariant begin Result VarArrayCreate 0 1
  • TThread.resume 在 Delphi-2010 中已弃用,应该在什么地方使用?

    在我的多线程应用程序中 I use TThread 挂起 and TThread resume 自从将我的应用程序移至 Delphi 2010 后 我收到以下警告消息 DCC 警告 xxx pas 277 W1000 符号 Resume 已
  • Indy 10 和 sslvTLSv1_2

    我发布的网站目前支持 TLS v1 1 和 TLS 1 2 他们很快将只允许 TLS 1 2 版连接 为此我将 Delphi 5 升级到了 Indy 10 目前 我在代码中创建组件 并且一次运行 3 个线程一切都运行良好 HTTp TIdH
  • 从 C++ .dll 到 Delphi Forms 应用程序的 PostMessage 问题

    我有用 Delphi 7 编写的 Windows 窗体应用程序和使用 MFC 编写的 C dll 目前 我正在尝试实现从 dll 到主可执行文件的基本消息发布 以在进度条上显示用户计算过程 但遇到了几个问题 让我先描述一下我的方法 我在 D
  • 如何改变TDateTimePicker的颜色?

    如何更改 a 的颜色TDateTimePicker A 日期和时间选择器可以有一种颜色 通常这是通过设置来完成的Color procedure TForm1 FormCreate Sender TObject begin DateTimeP
  • 如何隐藏主窗体而不是关闭它?

    如果用户点击X在我的主窗体上 我希望窗体隐藏 而不是关闭 这听起来像是一份工作OnClose表单事件 http docs embarcadero com products rad studio delphiAndcpp2009 HelpUp
  • 如何在 iOS 和 Android 上获取应用程序恢复状态?

    当应用程序恢复时 是否可以从代码角度检查某些内容iOS and Android 例如当应用程序最小化并恢复时 应用程序仍在设备后台运行 你需要使用IFMX应用程序事件服务 http docwiki embarcadero com Libra
  • 如何使用 DSPACK 将自定义音频缓冲区注入 DirectX 过滤器图表?

    我使用 Delphi 6 和 DSPACK 来执行一些涉及音频和 DirectX 的操作 我在 输入 方面找到了将枚举的音频输入设备之一分配给 TFilter 对象并将该过滤器连接到 TSampleGrabber 对象的位置 这为我提供了将
  • 就 ADO 而言,nvarchar(max) 有多大?

    我正在尝试使用针对 ADO 的参数化查询 http msdn microsoft com en us library windows desktop ms677209 28v vs 85 29 aspx INSERT INTO Foo 名称

随机推荐

  • Android Studio - 如何使用 ARM 而不是 HAXM 制作 AVD?

    我是 Android Studio 的新手 我的计算机不支持 HAXM 因此不允许我安装它来用于虚拟化 在该网站上的一些类似问题中 人们提到使用 ARM 而不是 HAXM 设置虚拟设备 我怎样才能做到这一点 在 AVD 管理器中 所有预制硬
  • TListView:如果添加列,VCL 会丢失列的顺序

    我正在尝试在 TListView 中的现有列之间添加一列 因此 我在末尾添加新列 并通过将其索引设置为指定值来移动它 这是有效的 直到添加另一个新列 我做了什么 在最后一个位置添加列 Columns Add 并在最后一个位置添加子项 Sub
  • android - 我如何使用“android:layoutDirection”?

    看来android 4提供了 机器人 布局方向 对于线性布局和 机器人 文本方向 对于 textView 但是当我选择它们时 我收到一个编译错误 它无法识别它们 error No resource identifier found for
  • 为什么当我按 Enter 键时,

    我只是添加一个click我的事件处理程序
  • 如何获取字符串 C# 中某个索引之后的所有内容

    假设我有字符串 MyNamespace SubNameSpace MyClassName 如何提取最后一个句点 MyClassName 之后的所有内容 Use 字符串 子字符串 and String LastIndexOf方法 string
  • Switch 语句和数字范围

    如何在 as3 中编写 switch 语句以使 case 适用于整个数字范围 if mcPaddle visible true switch score case 10 10 to 100 myColor color 0x111111 br
  • 使用 React Native Google Maps Directions 包自动启动导航

    我有一个要求 在加载谷歌地图应用程序时 必须自动启动导航 当前场景 它显示路线 但用户必须单击start开始导航 我找不到与之相关的任何标志 找到这篇文章 其中显示了谷歌地图中使用的标志 谷歌地图官方文档显示将其用作dir action n
  • 如何删除R中的空列?

    我有一个 CSV 文件 Identity Number Data Result Add 1 4 55 92 62 3 7 43 12 74 7 3 58 52 64 0 6 10 22 96 3 8 13 92 22 如何删除R中的空列 所
  • 修补 Magento 1.7.1 Hunk #1 时出错

    我看到最后一个Critical Reminder我的 Magento 仪表板 v 1 7 0 2 中的通知 2 important security patches SUPEE 5344 and SUPEE 1533 因此 我在其他 Mag
  • 错误 ::0 找不到引用的切入点注释

    我正在尝试创建一个方面来监视某些方法的时间执行 当我尝试运行测试时 出现以下错误 Caused by java lang IllegalArgumentException error at 0 can t find referenced p
  • 选择不同的 mongodb C#

    我必须从简单的 mongo db 数据库中选择不同的记录 我有很多简单的记录 这些记录如下所示 word some text 我的代码很简单 const string connectionString mongodb localhost v
  • Java 8 - 如何访问封装为 lambda 的对象和方法

    在 Java 中 您可以 捕获 对象上的方法调用 作为 Runnable 如下例所示 稍后 访问 Runnable 的这个实例 是否可以实际访问 捕获的 对象和被调用方法的方法参数 如果可能 这可能需要通过反射来完成 例如 class So
  • 是否存在具有编程语言本地化版本的编译器?

    我经常想知道为什么非英语程序员在编程时被迫使用不同的语言 而提供一个可以用本地化版本替换关键字的 IDE 似乎很容易 为什么德国人不能使用 w hrend macht 循环 日本 德国 法国 西班牙 博茨瓦纳的程序员只是广泛使用宏 定义语句
  • 根据另一个向量对点向量进行排序

    我正在开发一个 C 应用程序 我有 2 个点向量 vector
  • 显示:表格与使用表格

    我想知道使用 CSS 显示属性来模拟一个非常简单的论坛系统的表格是否是一个好主意 我知道这不是一件好事 就像 2 年前那样 当时 IE 和其他浏览器可能不支持 display table table cell 等 但我认为现在所有浏览器都支
  • Keycloak 管理控制台无限期加载

    我有一个在 EKS 集群中运行的 Keycloak 服务器 我尝试将其配置为生产模式而不是开发模式 我已经设法让 SSL 与反向代理一起使用 但是当我进入管理控制台的登录页面时 它只是无限期地加载 这是我的配置 Dockerfile FRO
  • PHP 特征的 UML 表示

    我正在使用 Symfony2 Doctrine 创建项目并尝试实现特征 到目前为止 小型试用没有问题 但我通常在深入复杂项目之前先绘制 UML 类和序列图 据我所知 用于象征 PHP 特征 可以视为行为 的 UML 设计对象是什么 有什么干
  • Java Webservice 客户端 UsernameToken 相当于 PHP

    我有一个 PHP 构建的 Web 服务 它使用 UsernameToken 作为身份验证机制 我有可以访问此 Web 服务的 PHP 客户端代码 现在我需要在 Java 中执行此操作 也许你可以帮助我 可以使用以下 php 代码访问该服务
  • 静态方法是否共享其局部变量以及不同线程并发使用时会发生什么?

    C 问题 我试图确定是否可以使用静态方法 在该方法内它确实使用了一些局部变量 局部变量是否在该方法的使用中 共享 例如 如果从不同线程同时调用 使用静态方法会发生什么 一个线程是否会阻塞 直到另一个线程完成等 也许普遍的问题是 在线程应用程
  • 更改Delphi OpenDialog的目录

    该计划的一些背景 该程序使用选项卡式界面同时处理多个文件 我正在尝试更改 OpenDialog 的目录 因此每次调用打开文件时都会显示我当前正在处理的文件的目录 但即使我设置InitialDir对于文件的路径 它始终显示最后打开的文件目录