Форум: "WinAPI";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизWM_SETTEXT Найти похожие ветки
← →
Lexa1900 (2002-11-03 00:48) [0]var h:hwnd;
txt:string;
begin
txt:="Hello, World!";
//допустим h - это уже handle какого-нибудь Edit"a
SendMessage(h,WM_SETTEXT,0,Longint(PChar(txt)));
end;
Почему не получается осуществить данную процедуру, если в поле ввода той программы, которой передаём команду, нельзя вставлять что-либо из буфера. Как вообще действует эта sw_settext?
Спасибо, что после прочтения собрались ответить.
← →
Ihor Osov'yak (2002-11-03 02:56) [1]Ой леха, с тебя сегодня пиво.
SendMessage(h,WM_SETTEXT,0,Longint(PChar(txt))) будет успешным тогда, когда оконная процедура соотв. окошка обрабатывает WM_SETTEXT, и обрабатывает так, как ты этого хочешь, то есть принимает текст. А это уже в руках разработчика соответствующего
контрола (а в общем случае и не только в его руках). То есть - хочу - обрабатываю, а не хочу - ну и нет.
А вообще возьми почитай про обработку и маршрутизацию сообщений в какой-то толковой книжке ....
← →
Ich Hasse (2002-11-03 10:43) [2]Функция SetWindowText(hWindow,PChar(text)); вроде должно работать
← →
Ihor Osov'yak (2002-11-03 11:25) [3]
2 Ich Hasse © (03.11.02 10:43)
Смотрим MSDN:
- An application sends a WM_SETTEXT message to set the text of a window.
- The SetWindowText function changes the text of the specified window"s title bar (if it has one). If the specified window is a control, the text of the control is changed. However, SetWindowText cannot change the text of a control in another application.
То есть SetWindowText - для установки "title bar", SendMessage(h,WM_SETTEXT - для установки текста. То есть, это несколько разные вещи. Кроме того - SetWindowText cannot change the text of a control in another application. - хотя, если мне не изменяет память, Юрий Зотов здесь примерно месяц назад утверждал, что SetWindowText все же работает и для чужого приложения. Я этого не проверял, так что ни подтвердить, ни опровергнуть не могу. Не проверял по той причине, что раз написано "не работает", а на самом деле работает - то может после очередного сервиспака или в очередной версии винды перестать работать....
Но еще раз повторюсь - реакция на WM_SETTEXT в руках автора "другого" приложения, а не наших, и не всегда эта реакция будет такой, как нам нужно/мы ожидаем. SetWindowText - в общем случае устанавливает не видимый текст, а заголовок окна. Хотя и есть контролы, в которых заголовок окна интерпритируется как видимый текст.
PS. Cорри перед Юрием Зотовым, если меня память подвела. Такой вариант также не исключен.
← →
Song (2002-11-03 11:47) [4]WM_SETTEXT работает для всех визуальных контролов, которые были созданы из соответствующих АПИ контролов (CreateWindow). Поэтому например, для контролов, которые были созданы через Java, сообщение работать не будет.
Для едита эта преемственность сохраняется в любом случае т.к. это обычное edit окно АПИ.
← →
Ihor Osov'yak (2002-11-03 14:28) [5]2 Song © (03.11.02 11:47)
> WM_SETTEXT работает для всех визуальных контролов, которые
> были созданы из соответствующих АПИ контролов (CreateWindow).
Не совсем корректное высказывание. Вы, возможно, имеете ввиду
стандартные делфийские контролы. Но никто не мешает автору программы или контрола применить сабклассинг, в котором будет перехватыватся WM_SETTEXT с последующим игнором.
Или что значительно более вероятно в соотв. оконной процедуре для "не АПИ контролов" напрочь игнорировать тот же WM_SETTEXT.
Зы. Недельки две назад имел очень долгий акт с некоторыми mfc контролами в "чужой" порограмме, которые напрочь игнорировали всякие SetWindowText/GetWindowText, WM_SETTEXT/WM_GETTEXT ...
Поверте мне, очень было увлекательним занятие на предмет получения текста с этих контролов...
← →
Song (2002-11-03 22:25) [6]Я не имел ввиду те контролы, у которых принудительно перехватывается оконный обработчик и сообщение вырезается хирурически.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c