Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WM_GETTEXT, WM_GETTEXT 
:(
    Опции темы
fishca
Дата 13.8.2002, 02:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











var
lpszText : string;

В программе создаю текстовое поле FileNameText := CreateWindowsEx(...);

Потом пытаюсь написать
SendMessage(FileNameText,20,LPARAM(lpszText));

т.е. пытаюсь получить текст текстового поля, врезультате Access Violation, что не так подскажите пожалуйста!
  Вверх
FdX
Дата 13.8.2002, 02:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Если мне не изменяет память, начиная с Дельфи 2.0 string очень похож
на LPSZ, но там ещще хранится гдето длина строки.

Пиши так:

var
  Text:Array[0..MaxLengthOfYourText] of Char;
  lpszText:String;


дальше пишешь примерно так:

SendMessage(FileNameText,20,LPARAM(@Text));
lpzsText:=StrPas(@Text);

@Text представляет из себя PChar
я это не проверял, но должно работать
  Вверх
Fantasist
Дата 13.8.2002, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Что-то у вас в SendMessage параметров мало.  :)
Ну это не главное. String в Delphi это Ansi строка, а ее начало находиться в первом символе этой строки.  :)

SetLength(s,20);
SendMessage(Handle,WM_GETTEXT,20,Longint(@s[1]));


--------------------
Волны гасят ветер...
PM MAIL   Вверх
rhf
Дата 13.8.2002, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.8.2002

Репутация: нет
Всего: нет



а лучше все делать точно, сначала проверить длину текста
setLength(lpszText,sendMessage(h,WM_GETTEXTLENGTH,0,0)+1);
или
setLength(lpszText,getWindowTextLength(handle)+1);
а затем получить текст
sendMessage(h,WM_GETTEXT,wParam(length(lpszText)),lParam(@lpszText[1]));
или
sendMessage(h,WM_GETTEXT,wParam(length(lpszText)),lParam(pChar(lpszText));
PM MAIL   Вверх
skinny
Дата 19.2.2004, 15:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо пацаны
мне вы очень помогли
  Вверх
Guest
  Дата 18.10.2004, 09:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Хм. Если я не ошибаюсь, то у функции SendMessage 4 параметра, здесь ( "SendMessage(FileNameText,20,LPARAM(lpszText));"
) я вижу только 3 :qstn
The SendMessage function sends the specified message to a window or windows. The function calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function, in contrast, posts a message to a thread's message queue and returns immediately.

LRESULT SendMessage(

HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);


Parameters

hWnd

Identifies the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.

Msg

Specifies the message to be sent.

wParam

Specifies additional message-specific information.

lParam

Specifies additional message-specific information.



Return Values

The return value specifies the result of the message processing and depends on the message sent.

Remarks

Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, Windows switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message.

Как говорится "все это и многое другое" Вы найдете в файле "win32.hlp", там описано все, что связано с Win32 API!
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1148 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.