我认为GExperts中有一些东西可以做到这一点,但如果有的话,我看不到它.
我必须在包含大约100种不同表单的项目中的每个表单中更改SCALED属性(从默认值TRUE变为FALSE).因为SCALED的默认值为TRUE,所以它实际上并不显示为.DFM文件中的一行(当作为文本查看时),因此没有任何我可以"获得"GREP(等)的东西.
任何人都可以建议以所有这些形式设置此属性的快速方法吗?表单是各种不同类的子类,我真的不想做一些覆盖SCALED属性的中间TForm后代 - 部分是因为我尝试(简要地)这样做并发现将SCALED属性设置为false 继承的create 之后对表单没有任何区别,并在继承的create 之前设置它会导致异常.:-)
有人有什么建议吗?如果我能帮助它,我真的想避免一个接一个地打开所有这些形式,只因为我一定会错过一个!
我正在使用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应用程序中定义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 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 2007和Indy 9时,可以加载哪些最新的OpenSSL库以及它们在哪里可用?
我有一个包含三个主要组件的表单:
一切都开始看起来很棒.但是与底部对齐的FlowPanel也设置为AutoSize.它包含一个可以自行折叠的面板.内部面板包含用户可以决定隐藏的摘要信息.这会将FlowPanel的大小降低到非常小的尺寸但不会完全消失.仍然有一个按钮,用户可以在其中重新展开摘要面板.
面板重新展开导致FlowPanel增长时出现问题.那时状态栏和FlowPanel的顺序相反.它们仍然设置为对齐底部,但现在状态栏位于我的FlowPanel之上.
我可以在没有折叠面板的测试应用程序中复制它,只需在表单上放置按钮即可查看底部流量面板的高度.如果高度增加,则订单会发生变化.如果它减少了,那么一切都保持相同的顺序.我的测试表单中唯一的代码是:
FlowPanel2.Height := FlowPanel2.Height * 2;
Run Code Online (Sandbox Code Playgroud)
我也测试了这个,底部面板是常规TPanel而不是FlowPanel,结果相同.
关于为什么会发生这种情况以及如何预防的任何想法?

我已经成功注册了IDE通知程序(IOTAIDENotifier80),因此我收到了AfterCompile通知.
是否有可能找出项目是否构建而不仅仅是编译/制作?
我已经找到了关于实现a的答案,IOTAProjectCompileNotifier但这在D2007中不可用.
还有其他方法吗?我没有办法,因为这只适用于内部专家.
更新:我需要使用包含版本信息资源的外部.rc文件复制"AutoInc内部版本号"功能.也许这可以通过BuildEvents完成?虽然我喜欢在IDE中记录消息的能力,但显示更新的版本号...
我最近在项目选项中更改了"启用运行时主题"值,我想知道它的值是否会影响应用程序的性能,以及以何种方式影响应用程序的性能?希望有人能够澄清这一点.

我正在编写一个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 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无效的类型转换
为什么会发生这种情况,我该如何避免呢?
delphi ×10
delphi-2007 ×10
arrays ×1
bold-delphi ×1
casting ×1
delphi-2009 ×1
icons ×1
indy-9 ×1
ssl ×1
themes ×1
toolsapi ×1
vcl ×1
winapi ×1
windows-7 ×1