Как отправлять сообщения Windows в неосновные формы - PullRequest
1 голос
/ 19 мая 2010

Как мне отправить сообщение Windows в форму в моем приложении, которая не является MainForm? Использование кода ниже дает мне нарушение прав доступа.

procedure TMainForm.SendMessageToAnotherForm;
begin
  SendMessage(MyForm.Handle,WM_MY_MESSAGE,0,0);
end;

MyForm уже создан и является самым верхним окном.

Редактировать: я также пробовал PostMessage, но получаю то же нарушение прав доступа, и я уверен, что WM_MY_MESSAGE действителен, потому что я использую его для связи с MainForm где-то еще.

Ответы [ 2 ]

8 голосов
/ 19 мая 2010

Наиболее вероятной причиной получения нарушения прав доступа с помощью приведенного выше кода является MyForm = nil или дикий указатель.Установите точку останова на строке кода с помощью вызова SendMessage и проверьте его.Если MyForm является допустимой ссылкой, то нарушение доступа вызвано обработкой сообщений в MyForm.

2 голосов
/ 19 мая 2010

Знаете ли вы, что SendMessage ожидает обработки сообщения? Это означает, что очередь сообщений целевого окна должна обрабатывать сообщения.

Если вы вызываете этот метод внутри обработчика событий (например, ButtonClick), вам лучше использовать PostMessage.

...