如何获取有关Windows操作系统类型的信息?是32位还是64位?我如何以编程方式获取此信息?
我正在使用delphi 2007,每次使用这样的代码创建一个新表单
var
Child : TFrmChild;
begin
Child:=TFrmChild.Create(Self);
Child.Show();
end;
Run Code Online (Sandbox Code Playgroud)
该子窗体显示,并出现上述所有其他形式,这是确定的,但在主窗体点击子窗体保持高于主窗体的.所以我有两个问题
谢谢
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) 我有一个例程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" 且不是位图的文件.现在我无法找到一个不涉及特殊套管的解决方案:
TBitmap.Canvas.TMetafileCanvas.你知道对我有什么想法吗?
我想检查System32目录(Windows 7)中是否存在dll.但即使它存在,FileExists()也会返回false.LoadLibrary返回一个有效的句柄.在这种情况下,我只想检查文件是否存在并可视化此信息.你有任何解决方法吗?
我希望我的应用程序能够使用超过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位应用程序,它将自动执行其他所有操作?
谢谢
我希望我的按钮上有alphablending图像.
按照指示,我TXPManifest在我的mainform中包含了一个组件.
下面是我加载到项目中的一些图像.

然而,我BitBtn通过ActionList链接到图像列表仍然看起来.
<< - 在运行时看起来像这样,Yikes!
如何在我的Windows 7笔记本电脑上运行Delphi 2007来实际使用ImageList不断取笑我的alpha通道?
为响应@RRUZ,以下是imagelist属性:

(注意没有colordepth财产)
编辑
alpha混合确实与TMS一起使用AdvGlowButton:
因此它可能不是ImageList问题,因为它是BitBtn问题.
更新2
下载并安装PngComponents.把一个TPNGImageList空白表格上瞬间崩溃D2007.(也许在设置/路径/等等中,但我离原始问题太远了,所以我放弃了png追求).
所以这不起作用.
代码示例:
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 2009及更高版本中,您可以将此行添加到项目.dpr中,以在应用程序可执行文件中设置TSAWARE PE标志:
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
Run Code Online (Sandbox Code Playgroud)
我认为(错误地)Delphi 2007不支持这种语法.我有一个应用程序,我无法从2007年移植到更新的Delphi版本(任务正在进行中,但未来几个月内不会完成) .
更新它只是必须将Windows添加到项目.dpr中.
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似乎是一种显而易见的方法.但是,如果您无权访问或不想修改父组件代码,该怎么办?
当一个像例外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通过代码"手动"引发异常时,我必须将Msg参数传递给构造函数,并将其作为EZeroDivide异常引发,该异常具有空字符串消息:
procedure TForm1.Button2Click(Sender: TObject);
begin
raise EZeroDivide.Create('');
end;
Run Code Online (Sandbox Code Playgroud)
默认异常消息来自哪里?
delphi ×10
delphi-2007 ×10
32bit-64bit ×1
canvas ×1
exception ×1
image ×1
memory ×1
oop ×1
save ×1
windows-7 ×1