标签: delphi-2007

在Delphi项目中更改多个表单属性的快速方法?

我认为GExperts中有一些东西可以做到这一点,但如果有的话,我看不到它.

我必须在包含大约100种不同表单的项目中的每个表单中更改SCALED属性(从默认值TRUE变为FALSE).因为SCALED的默认值为TRUE,所以它实际上并不显示为.DFM文件中的一行(当作为文本查看时),因此没有任何我可以"获得"GREP(等)的东西.

任何人都可以建议以所有这些形式设置此属性的快速方法吗?表单是各种不同类的子类,我真的不想做一些覆盖SCALED属性的中间TForm后代 - 部分是因为我尝试(简要地)这样做并发现将SCALED属性设置为false 继承的create 之后对表单没有任何区别,并在继承的create 之前设置它会导致异常.:-)

有人有什么建议吗?如果我能帮助它,我真的想避免一个接一个地打开所有这些形式,只因为我一定会错过一个!

delphi delphi-2007

5
推荐指数
2
解决办法
2524
查看次数

fmShareDenyWrite模式似乎不起作用

我正在使用TFileSteam打开日志文件.我希望能够从其他进程读取此日志文件.我认为fmShareDenyWrite模式允许这样做.

但是,如果我尝试从其他进程打开该文件,我会收到错误.例如,如果我尝试从命令行键入文件,我会得到"进程无法访问该文件,因为它正被另一个进程使用".

这是文件初始化代码:

if FileExists(AutoLogFileName) then
   _ActivityLogStream := TFileStream.Create(AutoLogFileName, 
          fmOpenReadWrite or fmShareDenyWrite)
else
   _ActivityLogStream := TFileStream.Create(AutoLogFileName, 
          fmCreate or fmShareDenyWrite);
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是Delphi版本6.

delphi delphi-2009 delphi-2007

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

Delphi 2007应用程序中设置的Windows 7兼容图标

在Delphi应用程序中定义win7兼容图标集的正确方法是什么?(桌面上的可变大小)

我设计了256*256图标,然后制作了16*16,24*24,48*48变体.(在Microsoft UX指南中,他们似乎说应该包含这些大小以便在桌面上正确显示).

我已将所有图标变体放在Gimp中的多层文档中,并将整个内容导出为ico.然后我将它作为项目选项中的应用程序图标,按照向应用程序分配图标的直接方式.

最后我在Win桌面(win7)上放了一个shorcut,但在桌面(Win 7)上制作"Ctrl + Wheel"(调整桌面图标的大小,如果你还不知道......)时,正确的图标是没有显示,48*48之后它保持相同的大小(我怀疑只使用了48*48版本).

delphi icons delphi-2007 windows-7

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

Delphi VCL中的Bug拖放?

我使用Delphi 2007编译的应用程序在网格之间拖放,并且它在大多数情况下都能正常工作.但有时我会随机获得Access违规.我在VCL中将它调试为Controls.pas方法DragTo.

它开始是这样的:

begin
  if (ActiveDrag <> dopNone) or (Abs(DragStartPos.X - Pos.X) >= DragThreshold) or
    (Abs(DragStartPos.Y - Pos.Y) >= DragThreshold) then
  begin
    Target := DragFindTarget(Pos, TargetHandle, DragControl.DragKind, DragControl);
Run Code Online (Sandbox Code Playgroud)

异常发生在最后一行,因为DragControl为零.DragControl是TControl类型的全局变量.我尝试使用assigncheck修补此方法,如果DragControl = nil则调用CancelDrag,但这也失败,因为DragObject也是nil.

procedure CancelDrag;
begin
 if DragObject <> nil then DragDone(False);
 DragControl := nil;
end;
Run Code Online (Sandbox Code Playgroud)

为了找出为什么DragControl为零,我检查了DragInitControl.如果DragControl为零,则有两行刚刚退出.

procedure DragInitControl(Control: TControl; Immediate: Boolean; Threshold: Integer);
var
  DragObject: TDragObject;
  StartPos: TPoint;
begin
  DragControl := Control;
  try
    DragObject := nil;
    DragInternalObject := False;    
    if Control.FDragKind = dkDrag then
    begin
      Control.DoStartDrag(DragObject);
      if DragControl = nil then …
Run Code Online (Sandbox Code Playgroud)

delphi drag-and-drop delphi-2007 bold-delphi

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

Indy 9 + Delphi 2007最新的SSL库可用吗?

当使用Delphi 2007和Indy 9时,可以加载哪些最新的OpenSSL库以及它们在哪里可用?

delphi ssl delphi-2007 indy-9

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

如何防止两个对齐底部控件与反转顺序?

我有一个包含三个主要组件的表单:

  1. 设置为与客户端对齐的FlowPanel
  2. 第二个FlowPanel设置为Align to Bottom
  3. StatusBar设置为Align to Bottom.

一切都开始看起来很棒.但是与底部对齐的FlowPanel也设置为AutoSize.它包含一个可以自行折叠的面板.内部面板包含用户可以决定隐藏的摘要信息.这会将FlowPanel的大小降低到非常小的尺寸但不会完全消失.仍然有一个按钮,用户可以在其中重新展开摘要面板.

面板重新展开导致FlowPanel增长时出现问题.那时状态栏和FlowPanel的顺序相反.它们仍然设置为对齐底部,但现在状态栏位于我的FlowPanel之上.

我可以在没有折叠面板的测试应用程序中复制它,只需在表单上放置按钮即可查看底部流量面板的高度.如果高度增加,则订单会发生变化.如果它减少了,那么一切都保持相同的顺序.我的测试表单中唯一的代码是:

FlowPanel2.Height := FlowPanel2.Height * 2;
Run Code Online (Sandbox Code Playgroud)

我也测试了这个,底部面板是常规TPanel而不是FlowPanel,结果相同.

关于为什么会发生这种情况以及如何预防的任何想法?

移动状态栏图像

delphi vcl delphi-2007

5
推荐指数
2
解决办法
2269
查看次数

如何用D2007区分编译和构建?

我已经成功注册了IDE通知程序(IOTAIDENotifier80),因此我收到了AfterCompile通知.

是否有可能找出项目是否构建而不仅仅是编译/制作?

我已经找到了关于实现a的答案,IOTAProjectCompileNotifier但这在D2007中不可用.

还有其他方法吗?我没有办法,因为这只适用于内部专家.

更新:我需要使用包含版本信息资源的外部.rc文件复制"AutoInc内部版本号"功能.也许这可以通过BuildEvents完成?虽然我喜欢在IDE中记录消息的能力,但显示更新的版本号...

delphi delphi-2007 toolsapi

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

"启用运行时主题"会影响性能吗?

我最近在项目选项中更改了"启用运行时主题"值,我想知道它的值是否会影响应用程序的性能,以及以何种方式影响应用程序的性能?希望有人能够澄清这一点. 在此输入图像描述

delphi themes delphi-2007

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

如果加载DLL无法找到依赖项,有没有办法捕获错误?

我正在编写一个Windows 32位程序,可以使用多个可能的dll之一.因此它尝试依次加载每个dll SysUtils.SafeLoadLibrary,如果加载成功,则使用该dll.

不幸的是,其中一些dll与其他dll静态相关.这些dll可能在计算机中丢失.在那种情况下,我得到对话告诉我

[myprogram]:[myprogram.exe]系统错误

程序无法启动,因为您的计算机缺少[某些DLL名称].尝试重新安装该程序以解决此问题."

按下该对话框上的OK按钮后,程序将获取错误代码并尝试其他一个dll然后工作正常.

而不是向用户显示该对话框,我希望我的程序默默地忽略它.

我怎么能做到这一点?

如果重要:我的程序是用Delphi 2007编写的.Windows版本是Windows 8.1,但该程序也适用于其他Windows版本> = Windows XP.

我尝试过,SetErrorMode(SEM_FAILCRITICALERRORS)但没有任何区别.

delphi winapi delphi-2007

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

为什么将开放数组参数转换为数组类型会导致E2089无效的类型转换?

我正在使用Delphi 2007(Pre generics),我已经定义了许多可以用于所有TObject后代数组的函数,例如:

function IndexOf(AArray : array of TObject; AItem : TObject) : integer;
begin
  //...
end;
Run Code Online (Sandbox Code Playgroud)

为了传递它们TObject后代的动态数组,我已经定义了一个数组类型TObjectArray = array of TObject.通过这种方式,我可以投射动态数组并将它们传递给我的函数而不会出现任何问题

type
  TChild = class(TObject);

...

procedure Test();
var
  Items : array of TChild;
  Item : TChild;
begin
  //...
  IndexOf(TObjectArray(Items), Item);
end;
Run Code Online (Sandbox Code Playgroud)

当我尝试传递它们打开数组参数时出现问题:

procedure  Test(AItems : array of TChild);
var
  Item : TChild;
begin
  //...
  IndexOf(TObjectArray(AItems), Item);
end;
Run Code Online (Sandbox Code Playgroud)

在这些情况下,编译器会引发以下错误消息:

E2089无效的类型转换

为什么会发生这种情况,我该如何避免呢?

arrays delphi casting delphi-2007 open-array-parameters

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