Форум: "WinAPI";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
ВнизWM_GETTEXT Найти похожие ветки
← →
fishca (2002-08-12 19:32) [0]var
lpszText : string;
В программе создаю текстовое поле FileNameText := CreateWindowsEx(...);
Потом пытаюсь написать
SendMessage(FileNameText,20,LPARAM(lpszText));
т.е. пытаюсь получить текст текстового поля, врезультате Access Violation, что не так подскажите пожалуйста!
← →
ZrenBy (2002-08-12 19:37) [1]Посчитай число параметров в SendMessage
← →
Ученик (2002-08-12 19:43) [2]SetLength(lpszText, 1000);
← →
fishca (2002-08-12 19:44) [3]Было
SendMessage(FileNameText,20,LPARAM(lpszText));
Должно быть
SendMessage(FileNameText,WM_GETTEXT,20,LPARAM(lpszText));
← →
fishca (2002-08-12 19:48) [4]SetLength(lpszText, 1000); Это про что?
← →
watcher (2002-08-12 19:50) [5]до SendMessage вызови
SetLength(lpszText, 1000);
потом (после SendMessage)
SetLength(lpszText, length(pchar(lpszText)));
← →
fishca (2002-08-12 19:57) [6]watcher, спасибо у меня получилось, но хотелось по-подробней узнать что я делал не так!
← →
watcher (2002-08-13 12:43) [7]> watcher, спасибо у меня получилось
fishca первый заметил...его тоже благодари :)
> но хотелось по-подробней узнать что я делал не так!
дело в том что для string память выделяеться при присвоении.
Тоесть сначала размер буфера равный нулю, а этот буфер ти пробуешь передать функции SendMessage. В результате может
возникнуть AV, а может произойти просто порча даних.
Функция SetLength(lpszText, 1000) выделяет буфер из 1000 байт, куда и запишеться результат.
Второй Setlength() устанавливает настояшую длину string,
перещитывая ее с помощью length()
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c