이것은 많은 델파이 7 헤더 번역의 결함입니다. 이 유형과 같이 documented on MSDN입니다 :
WPARAM
메시지 매개 변수입니다. 다음과 같이이 유형은 WinDef.h에 선언 :
typedef UINT_PTR WPARAM;
은 차례로, UINT_PTR
는 크기가 플랫폼 포인터와 동일한 부호없는 정수형이다.
64 비트 컴파일러가 출시 된 시점 즈음에이 결함이 수정되었으며 유형의 델파이 선언이 기본 플랫폼 API와 일치하도록 서명되지 않았습니다.
음수 값을 전달하려면 캐스팅해야합니다. 이처럼 :
WPARAM(-1)
이러한 캐스트는 모든 메시지 유형에 대한 공통 인터페이스를 제시 SendMessage
API에 의해 필요악 원인이다. 때로는 사용 가능한 유형에 맞는 메시지 페이로드를 작성해야합니다. 또한 lParam
인수에는 포인터 크기의 부호있는 정수인 LPARAM
유형이 있다고 설명합니다. 즉, 메시지 옆에 추가 데이터를 전달하는 방법을 결정할 때 부호가있는 유형 (lParam
)과 서명되지 않은 유형 (wParam
)을 선택할 수 있습니다. 물론 서명 된 두 개의 값 또는 서명되지 않은 두 개의 값을 전달하려면 캐스팅해야합니다.
EM_LINEFROMCHAR
의 경우 lParam
은 사용되지 않을 수도 있습니다. 설계자가 서명되지 않은 wParam
인수 대신 부호가있는 lParam
인수에서 문자 인덱스를 전달하지 않은 이유를 묻습니다. 한 가지 가능한 이유는 -1
이 감시 가치라는 것입니다. 부호없는 인수를 사용하면 문자 색인은 0
과 $ffffffff - 1
사이의 값이 될 수 있습니다 (32 비트 정수라고 가정). 즉, 문자 색인의 유효한 범위는 부호가있는 값이 사용 된 경우의 두 배입니다. 이제 서명 된 값이 사용 된 경우 $7fffffff
보다 큰 값으로 다시 캐스팅 할 수 있지만 특수한 센티널 값에 대해서만 캐스팅을 요구하는 것이 좋습니다.
음수 값을 변환 할 수 있습니다. TControl.Perform (.., WPARAM (-1), ...) – RBA