标签: delphi-2007

如何获取有关计算机的信息?[32位或64位]

如何获取有关Windows操作系统类型的信息?是32位还是64位?我如何以编程方式获取此信息?

delphi delphi-2007 32bit-64bit

7
推荐指数
2
解决办法
7661
查看次数

儿童形式始终保持在主要形式之上

我正在使用delphi 2007,每次使用这样的代码创建一个新表单

var
  Child : TFrmChild;
begin
  Child:=TFrmChild.Create(Self);
  Child.Show();
end;
Run Code Online (Sandbox Code Playgroud)

窗体显示,并出现上述所有其他形式,这是确定的,但在主窗体点击子窗体保持高于主窗体的.所以我有两个问题

  1. 为什么即使在主表单中点击,表单仍然保持在主表单之上?
  2. 当我点击它时,我如何能够使主要形式保留在所有其他形式上?

谢谢

UPDATE

这是儿童形式的dfm

object FrmChild: TFrmChild
  Left = 549
  Top = 308
  Caption = 'FrmChild'
  ClientHeight = 228
  ClientWidth = 213
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
end
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007

7
推荐指数
1
解决办法
3156
查看次数

将图片保存为各种文件格式

我有一个例程procedure DrawStuff(ACanvas: TCanvas; const ARect: TRect),它在TCanvas上绘制一个指定的矩形.目前我DrawStuff用PaintBox的画布调用.现在我添加了一个Save as选项,用户可以从各种文件格式(bmp,wmf,jpg,... - 最好尽可能多的TGraphic后代)中选择以保存结果DrawStuff.

绘制到a TMetafile并将其保存为"bla.bmp"或将Assign其保存为a TPicture无法正常工作 - 例如,它会生成扩展名为".bmp" 且不是位图的文件.现在我无法找到一个不涉及特殊套管的解决方案:

  • bmp - 使用TBitmap.Canvas.
  • wmf/emf:使用TMetafileCanvas.
  • 等等

你知道对我有什么想法吗?

delphi canvas image save delphi-2007

7
推荐指数
1
解决办法
7084
查看次数

即使文件存在,FileExists()也会返回false

我想检查System32目录(Windows 7)中是否存在dll.但即使它存在,FileExists()也会返回false.LoadLibrary返回一个有效的句柄.在这种情况下,我只想检查文件是否存在并可视化此信息.你有任何解决方法吗?

delphi delphi-2007 windows-7

7
推荐指数
2
解决办法
9370
查看次数

Delphi 2007 IMAGE_FILE_LARGE_ADDRESS_AWARE

我希望我的应用程序能够使用超过2GB的内存,我用Google搜索并发现IMAGE_FILE_LARGE_ADDRESS_AWARE命令允许我这样做.

所以我补充道

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
Run Code Online (Sandbox Code Playgroud)

在我的程序的.dpr文件中,在所有用途和{$ R*.res}行之后,

但是当我编译时,我收到错误:

E2003 Undeclared identifier: 'IMAGE_FILE_LARGE_ADDRESS_AWARE'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

此外,在Windows 7 64位上,我是否需要使用此命令的引导设置来处理,或者只是使用该命令编译32位应用程序,它将自动执行其他所有操作?

谢谢

memory delphi delphi-2007

7
推荐指数
2
解决办法
1872
查看次数

ImageList向我承诺Alphablending,但我如何启用它?

我希望我的按钮上有alphablending图像.
按照指示,我TXPManifest在我的mainform中包含了一个组件.
下面是我加载到项目中的一些图像.

图像列表编辑器

然而,我BitBtn通过ActionList链接到图像列表仍然看起来.

BitBtn已关闭 << - 在运行时看起来像这样,Yikes!

如何在我的Windows 7笔记本电脑上运行Delphi 2007来实际使用ImageList不断取笑我的alpha通道

为响应@RRUZ,以下是imagelist属性:
在此输入图像描述
(注意没有colordepth财产)

编辑
alpha混合确实与TMS一起使用AdvGlowButton:AdvGlowButton与alphablending正确
因此它可能不是ImageList问题,因为它是BitBtn问题.

更新2
下载并安装PngComponents.把一个TPNGImageList空白表格上瞬间崩溃D2007.(也许在设置/路径/等等中,但我离原始问题太远了,所以我放弃了png追求).
所以这不起作用.

delphi alphablending delphi-2007

7
推荐指数
1
解决办法
729
查看次数

保护田地是个好主意吗?

代码示例:

unit Foo;

  TFoo = class
  protected
    FList: TList; // Lifetime is managed by constructor and destructor
  public
    property List: TList read FList;
    constructor Create;
    destructor Destroy; override;
  end;

unit Bar;

  TBar = class(TFoo)
    procedure MyMethod;
  end;

procedure TBar.MyMethod;
begin
  // Access of FList goes here
end;
Run Code Online (Sandbox Code Playgroud)

TBar类能够直接修改FList的值,但这并不是绝对必要的,因为它只需调用其方法/使用其属性.

我应该将FList设为私有并使用该属性从TBar访问它吗?

你如何处理这样的案件?还有任何性能方面的考虑吗?

delphi oop delphi-2007

7
推荐指数
1
解决办法
285
查看次数

Delphi 2007:如何设置TSAWARE?

在Delphi 2009及更高版本中,您可以将此行添加到项目.dpr中,以在应用程序可执行文件中设置TSAWARE PE标志:

{$SetPEOptFlags  IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
Run Code Online (Sandbox Code Playgroud)

我认为(错误地)Delphi 2007不支持这种语法.我有一个应用程序,我无法从2007年移植到更新的Delphi版本(任务正在进行中,但未来几个月内不会完成) .

更新它只是必须将Windows添加到项目.dpr中.

delphi delphi-2007 terminal-services

7
推荐指数
1
解决办法
1637
查看次数

涉及枚举类型的对象继承

Delphi 2007,明年转向Delphi XE.

我们的产品广泛使用第三方组件.我们不直接使用该组件,而是使用它的自定义后代,我们已经添加了相当多的额外行为(自定义后代组件是几年前由已经退休的开发人员开发的).

在第三方Parent类的源单元中,声明了一些枚举类型,它们控制组件的各种操作:

TSpecialKind = (skAlpha, skBeta, skGamma);
TSpecialKinds = set of TSpecialKind;
Run Code Online (Sandbox Code Playgroud)

在我们的后代类中,我们想要添加新行为,这需要扩展枚举类型的选择.基本上,我们想要这个:

TSpecialKind = (skAlpha, skBeta, skGamma, skDelta, skEpsilon);
TSpecialKinds = set of TSpecialKind;
Run Code Online (Sandbox Code Playgroud)

显然,我们希望避免编辑第三方代码.简单地重新声明枚举类型,重复原始值并在我们自己的后代单元中添加新值是否有效?它会对现有代码产生任何影响吗?

编辑:示例场景(希望)澄清.假设您有一个(父)组件用于订购车辆零件.父单元具有用于车辆类型的枚举类型Tvkind,其值为vkCar和vkCycle.除其他外,这些值用于表示车辆有多少车轮,4或2.

现在,在您的后代组件中,您也希望能够处理三轮车辆.扩展Tvkind枚举类型以包含新值vkTrike似乎是一种显而易见的方法.但是,如果您无权访问或不想修改父组件代码,该怎么办?

delphi delphi-2007

7
推荐指数
1
解决办法
630
查看次数

异常消息来自哪里?

当一个像例外EZeroDivide,EOverflow,EMathError...复活,他们似乎有一个默认的消息.

例如,以下代码EZeroDivide使用以下消息引发:

浮点除以零

procedure TForm1.Button1Click(Sender: TObject);
var
  N : Extended;
  D : Extended;
begin
  N := 100;
  D := 0;
  Caption := FloatToStr(N/D);
end;
Run Code Online (Sandbox Code Playgroud)

EZeroDivide浮点除以零

当我EZeroDivide通过代码"手动"引发异常时,我必须将Msg参数传递给构造函数,并将其作为EZeroDivide异常引发,该异常具有空字符串消息:

procedure TForm1.Button2Click(Sender: TObject);
begin
  raise EZeroDivide.Create('');
end;
Run Code Online (Sandbox Code Playgroud)

EZeroDivide没有消息

默认异常消息来自哪里?

delphi exception delphi-2007

7
推荐指数
1
解决办法
154
查看次数