Это дефект в переводах заголовков Delphi 7, один из многих. Этот тип documented on MSDN так:
WPARAM
Параметр сообщения. Этот тип объявлен в WinDef.h следующим образом:
typedef UINT_PTR WPARAM;
В свою очередь, UINT_PTR
это беззнаковое интегральный тип, размер которого совпадает с указателем платформы.
Во время внедрения 64-битного компилятора этот дефект был исправлен, и объявление Delphi этого типа стало неподписанным, чтобы соответствовать базовому API-интерфейсу платформы.
Если вы хотите передать отрицательное значение, вы должны бросить его. Как это:
WPARAM(-1)
Такие забросы являются необходимым злом причина по SendMessage
API, который представляет общий интерфейс для всех типов сообщений. Иногда вам просто нужно, чтобы ваша полезная нагрузка вашего сообщения соответствовала доступным типам. Я также хотел бы прокомментировать, что аргумент lParam
имеет тип LPARAM
, который представляет собой целое число со знаком указателя. Это означает, что, когда решено, как передавать дополнительные данные вместе с сообщением, вы можете выбрать между подписанными (lParam
) и неподписанными (wParam
) типами. Конечно, если вы хотите передать два значащих знака или два значения без знака, то вам нужно выполнить бросок.
В случае EM_LINEFROMCHAR
вы можете заметить, что lParam
не используется. Вы можете спросить, почему дизайнеры не передали индекс символов в подписанном аргументе lParam
вместо аргумента unsigned wParam
. Одна из возможных причин заключается в том, что -1
является контрольным значением. Используя беззнаковый аргумент, индекс символов может быть любым значением между 0
и $ffffffff - 1
(предполагая 32-битные целые числа). Это означает, что допустимый диапазон символьного индекса в два раза больше, чем при использовании знакового значения. Теперь, если использовалось значение со знаком, оно может быть снова выбрано для значений, превышающих $7fffffff
, но имеет смысл требовать кастинг только для специального значения дозорного.
Вы можете использовать отрицательные значения. TControl.Perform (.., WPARAM (-1), ...) – RBA