Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-05-23 12:58:05 ЛС | профиль | цитата
Все-таки, методы TControl.GetItems "штатного" и "правильного" Kol-ов -- немного отличаются.
И их asm-исполнении (что соответствует установкам "штатного" компилятора delphi).
Паскаль-коды -- идентичны.

Паскаль вариант, отправляя сообщение EM_GETLINE, в wParam подставляет индекс строки, а в lParam -- адрес буфера для приема текста этой строки.
MSDN по этому поводу писал(а):
lParam -- A pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line.

Так вот, паскаль-версия туда устанавливает fist DWORD значением Length+1 (Length получен с помощью EM_LINELENGTH).
А asm-версия "штатного" Kol (в отличие от паскаль-версии) туда устанавливает fist WORD значением Length.
Вот такие вот две "небольшие разницы"...
Причем, MSDN оно как бы и не противоречит. Да и, как утверждают коллеги, не познавшие счастья работы под Windows-8 -- работает же все.

А asm-версия "правильного" Kol -- функционально эквивалентна паскаль-версии.
Вроде как, кроме меня - эту "синхронизацию" сделать было некому. Но -- не помню ничего... От слова "совсем".

Видимо, были какие-то артефакты под условным названием "Под FPC работает, а под Дельфи - глючит"
Тогда - ДА. Первый - это паскаль, второй - это asm. Гляжу - не совпадают. Исправил, и забыл.
карма: 9

1
Голосовали:miver
Редактировалось 7 раз(а), последний 2017-05-23 14:37:45