2013-07-04 44 views
1

函数InvalidateRect(hWnd:HWND; const lpRect:TRect; bErase:BOOL):BOOL;什么时候Windows.InvalidateRect过载

函数InvalidateRect(hWnd:HWND; lpRect:PRect; bErase:BOOL):BOOL;

在XE2的Windows单元中有两个重载的定义。在某些情况下,这需要比以前的Delphi版本更特殊的处理,只有后者才有声明。

问题是:哪个Delphi版本第一次引入了这个重载?

+1

在这种情况下,这*需要特殊处理*?只是总是使用第二次重载,你会没事的。 – TLama

+0

D2007只有第二个版本,所以之后就是这样。不知道为什么它很重要,但;正如@TLama所说,如果你只是使用那个,你就没有问题。 –

+0

所以它在德尔福2009年引入...有提到的超负荷。 – TLama

回答

3

InvalidateRect函数重载:

function InvalidateRect(hWnd: HWND; const lpRect: TRect; bErase: BOOL): BOOL; 

已在2009年德尔福引入虽然,你并不需要做的任何条件函数调用,当你调用函数(过载)与以下(正确)原型:

function InvalidateRect(hWnd: HWND; lpRect: PRect; bErase: BOOL): BOOL; 

这应该存在于所有版本的德尔福(至少那些,与最小的Windows 2k支持)。

+1

好找。 ;)我同意:如果你正在编写D2009 +的代码,你可以使用类似Delphi的'new'声明来隐藏指针,但只要你的代码需要在旧版本中工作,我认为你最好使用那一个,而不是使用定义在它们之间切换。 – GolezTrol

+1

问题在于另一个库声明了两个变体,可能旨在帮助使较旧的Delphi与较新的Delphi进行源代码兼容。然而,在较新的Delphi中,当两个单元(Windows和这个lib)被“使用”时,它们都声明相同的“重载”函数 - 除非函数完全符合单元名称,否则会出现“模糊调用”。后者在某种程度上背离了源代码级别兼容性的想法 –

+0

@GolezTrol对我来说,新的声明不仅仅因为它类似于Pascal--而且因为它是类型安全的。 OTOH我最好只看到Delphi执行了默认的“$ T +”设置,而不是保持Pascal愚蠢的“指针是无类型的”传统。该死的! '数组'和'TArray '是不同的类型,但是'^ string'和'^ integer'是相同的(在docwiki术语中是“赋值兼容”)! –

相关问题