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 位平台上都是正确的。
跳出框框思考,也许组件根本不需要名称。如果是这样,请删除此代码,让它无人值守,从而避免您的问题。
我正在 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 位平台上都是正确的。
跳出框框思考,也许组件根本不需要名称。如果是这样,请删除此代码,让它无人值守,从而避免您的问题。