小编tim*_*11g的帖子

在Delphi 7中设置EXE图标

我正在尝试自定义在Windows资源管理器中显示的图标以及我的Delphi应用程序的桌面快捷方式.

在Delphi 7 IDE中,我在"项目选项"对话框的"应用程序"选项卡中加载了所需的图标.它将我想要的图标显示为图形.

我认为没有必要,但我也将我的图标设置为TMainForm Icon属性.

但是,生成的EXE仍显示默认的D7图标.我错过了什么?

delphi icons delphi-7

10
推荐指数
1
解决办法
2万
查看次数

在Windows命令中处理扩展字符?

我正在调试一个Windows批处理命令文件.在路径或文件名中使用扩展(> 0x7f)字符时失败.问题似乎与将参数传递给从另一个CALLed的命令文件有关.

例如,此命令按预期工作:

xcopy "Pezuñero\1 - 001.wav" \temp
Run Code Online (Sandbox Code Playgroud)

这不是:

call another.cmd "Pezuñero" 
Run Code Online (Sandbox Code Playgroud)

"another.cmd"的内容:

xcopy "%~1\1 - 001.wav"    \temp
Run Code Online (Sandbox Code Playgroud)

%~1语法扩展参数并删除引号.这是必要的,因为在实际命令文件中,调用或被调用命令文件中的路径可能有空格.

第二个例子的结果(从CMD窗口复制)是这样的:

C:\>call another.cmd "Pezu±ero"    

C:\>xcopy "Pezu±ero\1 - 001.wav"    \temp
File not found - 1 - 001.wav
0 File(s) copied
Run Code Online (Sandbox Code Playgroud)

请注意,"ñ"(0xF1)字符已更改为"±"(0xB1).

任何人都可以解释发生了什么,以及如何解决这个问题?

windows delphi batch-file

6
推荐指数
1
解决办法
1367
查看次数

当窗口最小化时,为什么Delphi主窗体WindowState返回为"wsNormal"?

我有一个用Delphi 7编写的监视应用程序,它运行在辅助监视器的一部分上.如果窗口最小化(例如,如果我在主监视器上使用"Windows-D"(查看桌面)命令,我想让它恢复到正常可见性)

我每隔几秒就试过一次计时器激活的代码:

    if (Mainform.WindowState <> wsNormal ) then
        Mainform.WindowState := wsNormal;      {restore main window if minimized}
Run Code Online (Sandbox Code Playgroud)

它不起作用.为了调试它,我更改了代码,以便在程序运行时将Mainform.WindowState的值记录到文件中.即使主窗体的窗口最小化,该值仍然是wsNormal.为什么?

forms windows delphi delphi-7

6
推荐指数
1
解决办法
4145
查看次数

可以在没有 HTTPS 的站点上使用 reCAPTCHA 吗?

我有一个没有电子商务方面的简单信息网站。它有一个我想用 reCAPTCHA 保护的评论提交表单。

有没有办法在不将站点转换为 HTTPS(证书和托管成本增加)的情况下使用 reCAPTCHA?

recaptcha

5
推荐指数
1
解决办法
6598
查看次数

无论程序如何退出,如何确保FormClose过程运行?

在Delphi 7中,我有一个TMainForm.FormClose过程,用于在程序退出时写出一些状态.这在手动关闭程序时工作正常.但是,我发现如果程序被"强制"退出Windows(例如在需要重新启动的Windows Update之后),则不会调用FormClose过程.

编辑 - 我是新来的,看起来我无法删除自己的帖子.经过一番搜索,我找到了解决方案.

delphi

4
推荐指数
2
解决办法
1761
查看次数

如何改善Excel数据连接的刷新?

像许多人一样,我有电子表格从40多个文本文件中提取数据作为数据源.文本文件来自另一个应用程序,需要定期更新到Excel.

需要能够复制数据源文件和电子表格集并在不同系统上运行.这就是Excel无法支持从电子表格文件夹(或相对路径)导入数据的惊人无法成为一个大问题.这个问题提到了这个问题,但没有解决方案.

我在Excel中为这个(IMHO)基本缺陷开发了一个粗略的解决方法.使用SUBST将电子表格文件夹映射到驱动器号.然后从SUBST驱动器号中导入数据.该驱动器号和路径将成为电子表格的一部分,深埋在对话框中,并且非常不方便更新.因此,无论何时复制或移动电子表格,都要将SUBST重新创建到当前文件夹.丑陋但有效.

新问题:使用此技术,当我打开电子表格并单击"刷新"以从数据源刷新时,我必须在40多个对话框中单击"导入" - 每个文件对应一个.我该如何自动化该过程?

excel database-connection file

4
推荐指数
1
解决办法
3727
查看次数

如何在没有范围检查错误的情况下从字节"构建"负32位整数?

我需要将一个21位有符号整数(以三个7位字符提供)转换为32位有符号整数.我正在努力使下面的功能工作.如果我将outval定义为整数,我会在"outval:= outval或$ FFF00000"语句中检查范围.如果我将outval更改为长字,我会在"Val21bit:= outval"上进行范围检查.范围检查仅在值为负时发生.

除了关闭作业周围的范围检查之外,是否有任何"正确"的方法来完成这项工作?

function Val21bit(sx:string):integer;       {Input of 3 character string, Vh, Vm, Vl}
var
  outval : longword; // define as Longword to allow or-ing in high bit
{        valueH : 0scccccc
         valueM : 0bbbbbbb
         valueL : 0aaaaaaa
         int    : ssssssss sssscccc ccbbbbbb baaaaaaa  }

begin
     outval := byte(sx[1]);                             //  00000000 00000000 00000000 0scccccc       highest order first
     outval := (outval shl 7) or ($7F and byte(sx[2])); //  00000000 00000000 00sccccc cbbbbbbb
     outval := (outval shl 7) or ($7F and …
Run Code Online (Sandbox Code Playgroud)

delphi type-conversion delphi-7

4
推荐指数
1
解决办法
470
查看次数

列出所有打开的资源管理器窗口的 Powershell 脚本

这个问题显示了一个 Powershell 脚本来生成一个打开的文件资源管理器窗口及其路径的列表。我的目标是捕获当前打开的一组资源管理器窗口,并使用以下命令写出一个 CMD 文件:C:\WINDOWS\explorer.exe /e, "C:\open\this\folder"

所以我想以普通路径表示法获得完整路径和文件夹名称。这是在资源管理器 Windows 的标题栏中显示的内容:“C:\open\this\Favorite folder”

建议的代码是:

function Get-WindowTitle($handle) {
  Get-Process |
    Where-Object { $_.MainWindowHandle -eq $handle } |
    Select-Object -Expand MainWindowTitle
}

$app = New-Object -COM 'Shell.Application'
$app.Windows() |
  Select-Object LocationURL, @{n='Title';e={Get-WindowTitle $_.HWND}}
Run Code Online (Sandbox Code Playgroud)

如上所示,LocationURL 以转义 URL 样式提供完整路径:

file:///C:/open/this/Favorite%20%folder"
Run Code Online (Sandbox Code Playgroud)

@{n='Title';e={Get-WindowTitle $_.HWND}} 组件生成一个列“Title”,该列被截断为 5 个字符:

C:\...
Run Code Online (Sandbox Code Playgroud)

一个资源管理器窗口的完整输出如下所示:

LocationURL                                                 Title
-----------                                                 -----
file:///C:/open/this/Favorite%20%folder                     C:...
Run Code Online (Sandbox Code Playgroud)

我发现我可以通过用许多空格填充字符串 'Title' 来避免截断。该字符串的宽度似乎决定了输出的最大宽度。尽管如此,我观察到只有大约 60% 的打开的资源管理器窗口列出了路径。其余的只是一个空行。

我尝试了“$app.Windows() | Select-Object LocationName”,但输出仅包含资源管理器文件夹名称,而不包含资源管理器标题中显示的完整路径和文件夹。

另一个谜团是为什么脚本运行如此缓慢。如果我打开了 10 个资源管理器窗口,脚本将运行 30 秒,每条路径大约需要 3 秒。

对于这个脚本:

function Get-WindowTitle($handle) {
  Get-Process | …
Run Code Online (Sandbox Code Playgroud)

windows powershell explorer

4
推荐指数
1
解决办法
1405
查看次数

我应该如何处理 Activestate 从他们的 Perl 中删除 PPM?

我偶尔会在 Windows 和 Linux 上担任 Perl 开发人员。当 Perl 是合适的工具时,我每年都会编写或修改几次 Perl 脚本。偶尔使用,我从来没有成为一个真正的 Perl 专家,但我在这个论坛中得到的巨大帮助下取得了成功。

每当我构建或升级机器时,我都会获得最新的 Perl 版本。在 2020 年,我注意到 Activestate 在下载之前强制使用帐户登录。我就是这么做的,当时并没有想太多。后来我需要添加一些模块,发现PPM已被弃用并删除

这似乎是一件大事——比如安装最新的 Ubuntu 并发现 apt-get 已被淘汰。我的理解是 Perl 用户应该回到 Activestate 并让他们构建一个捆绑所需模块的自定义安装程序,然后在每次更改时重新安装 Perl。这似乎是倒退了一步。这是朝着控制用户群并最终将免费的 Perl 变成“物美价廉的 Perl”迈出的一步吗?

Perl 社区对此有何看法,您有什么建议?我是否误解了状态工具及其工作原理?您是坚持使用 ActiveState、转向 Strawberry Perl 还是其他什么?

perl activestate

4
推荐指数
1
解决办法
435
查看次数

使用SetupDiGetClassDevs在Delphi中进行串行端口枚举

我正在尝试枚举COM端口的"友好名称".随着USB串行设备在运行时连接和断开,端口可能会动态变化.

基于此问题中描述的可能方法,我尝试使用SetupDiGetClassDevs方法.

我找到了这个示例代码,但它是为旧版本的setupapi单元编写的(homepages.borland.com的原始链接当然不起作用).

我尝试使用当前JVCL(JVCL340CompleteJCL221-Build3845)中的setupapi单元,但它似乎与Delphi 7不兼容.我收到编译器错误:

if SetupDiGetDeviceRegistryProperty(DevInfoHandle,DeviceInfoData,
    RegProperty,
    @PropertyRegDataType,
    @S1[1],RequiredSize,@RequiredSize) then begin
Run Code Online (Sandbox Code Playgroud)

在函数SetupDiGetDeviceRegistryProperty的调用中,我在参数@PropertyRegDataType@RequiredSize上得到错误"实际和形式参数的类型必须相同" .

Delphi3000站点说该代码是在2004年编写的,适用于Delphi 7,所以我不知道为什么它现在不适用于Delphi 7,除非setupapi已经改变.是否有人熟悉setupapi可能导致这些问题的更改?

我正在测试一个简单的控制台程序.uses语句是"windows,sysutils,classes,setupAPI,Registry;"

主要计划是:

  begin
  ComPortStringList := SetupEnumAvailableComPorts;
  for Index := 0 to ComPortStringList.Count - 1 do
      writeln(ComPortStringList[Index]);
  end;
  end.
Run Code Online (Sandbox Code Playgroud)

delphi serial-port enumerate

3
推荐指数
2
解决办法
1万
查看次数