函数InvalidateRect(hWnd:HWND; const lpRect:TRect; bErase:BOOL):BOOL;什么时候Windows.InvalidateRect过载
函数InvalidateRect(hWnd:HWND; lpRect:PRect; bErase:BOOL):BOOL;
在XE2的Windows单元中有两个重载的定义。在某些情况下,这需要比以前的Delphi版本更特殊的处理,只有后者才有声明。
问题是:哪个Delphi版本第一次引入了这个重载?
函数InvalidateRect(hWnd:HWND; const lpRect:TRect; bErase:BOOL):BOOL;什么时候Windows.InvalidateRect过载
函数InvalidateRect(hWnd:HWND; lpRect:PRect; bErase:BOOL):BOOL;
在XE2的Windows单元中有两个重载的定义。在某些情况下,这需要比以前的Delphi版本更特殊的处理,只有后者才有声明。
问题是:哪个Delphi版本第一次引入了这个重载?
下InvalidateRect
函数重载:
function InvalidateRect(hWnd: HWND; const lpRect: TRect; bErase: BOOL): BOOL;
已在2009年德尔福引入虽然,你并不需要做的任何条件函数调用,当你调用函数(过载)与以下(正确)原型:
function InvalidateRect(hWnd: HWND; lpRect: PRect; bErase: BOOL): BOOL;
这应该存在于所有版本的德尔福(至少那些,与最小的Windows 2k支持)。
好找。 ;)我同意:如果你正在编写D2009 +的代码,你可以使用类似Delphi的'new'声明来隐藏指针,但只要你的代码需要在旧版本中工作,我认为你最好使用那一个,而不是使用定义在它们之间切换。 – GolezTrol
问题在于另一个库声明了两个变体,可能旨在帮助使较旧的Delphi与较新的Delphi进行源代码兼容。然而,在较新的Delphi中,当两个单元(Windows和这个lib)被“使用”时,它们都声明相同的“重载”函数 - 除非函数完全符合单元名称,否则会出现“模糊调用”。后者在某种程度上背离了源代码级别兼容性的想法 –
@GolezTrol对我来说,新的声明不仅仅因为它类似于Pascal--而且因为它是类型安全的。 OTOH我最好只看到Delphi执行了默认的“$ T +”设置,而不是保持Pascal愚蠢的“指针是无类型的”传统。该死的! '数组'和'TArray
在这种情况下,这*需要特殊处理*?只是总是使用第二次重载,你会没事的。 – TLama
D2007只有第二个版本,所以之后就是这样。不知道为什么它很重要,但;正如@TLama所说,如果你只是使用那个,你就没有问题。 –
所以它在德尔福2009年引入...有提到的超负荷。 – TLama