Delphi 负处理

Delphi Handle in negative

我正在 delphi XE5 中开发一个项目。 使用相同的函数在 运行 时间创建了不同的弹出菜单。 每次使用 Tcomponent class.

中的 "Handle" 弹出名称
popupname := 'XYZ' + IntToStr(handle);

在某些系统上,我得到的 "Handle" 值为负数,当我尝试为组件指定带有“-”符号的名称时,我收到错误消息 "XYZ-5645 not a valid component name"

你能告诉我一条出路吗?

与接受有符号整数的 IntToStr 不同,您可以将句柄视为指针,因此将数值表示为十六进制:

popupname := Format('XYZ%p', [Pointer(Handle)]);

这是有道理的,因为 Windows 中的句柄是在头文件中定义的无类型指针 void*

作为一个额外的好处,您的代码现在在 32 位和 64 位平台上都是正确的。

跳出框框思考,也许组件根本不需要名称。如果是这样,请删除此代码,让它无人值守,从而避免您的问题。