Вернуть ноль после обработки сообщения

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вернуть ноль после обработки сообщения

Сообщение InnI » 30.11.2011 12:46:22

Здравствуйте, уважаемые.
Изучаю Lazarus (пока под Windows). Столкнулся с обработкой сообщений. Сделал так:
Код: Выделить всё
var PrevWndProc: WNDPROC;
...
function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam): LRESULT; stdcall;
begin
  if (uMsg = WM_CLIPBOARDUPDATE)
  then
    begin
      FormViewer.WMDrawClipboard;
      Exit;
    end;
  result := CallWindowProc(PrevWndProc, Ahwnd, uMsg, wParam, lParam);
end;

procedure TFormViewer.FormCreate(Sender: TObject);
begin
  PrevWndProc := Windows.WNDPROC(SetWindowLong(Handle, GWL_WNDPROC, PtrInt(@WndCallback)));
end;

procedure TFormViewer.WMDrawClipboard;
begin
// здесь я работаю с буфером обмена
end;

Вроде работает, но в MSDN написано: If an application processes this message, it should return zero.
Объясните, где и как мне вернуть этот ноль?
И что будет, если этого не сделать?
Спасибо.
InnI
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.11.2011 12:23:30

Re: Вернуть ноль после обработки сообщения

Сообщение alex208210 » 30.11.2011 19:03:38

в функции если условие выполнится, то результата у функции не будет.. перед exit присвойте result какое нить значение
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Вернуть ноль после обработки сообщения

Сообщение InnI » 30.11.2011 19:23:17

alex208210 писал(а):в функции если условие выполнится, то результата у функции не будет.. перед exit присвойте result какое нить значение

Да, действительно... А какое конкретно в данном случае значение нужно присвоить?
InnI
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.11.2011 12:23:30

Re: Вернуть ноль после обработки сообщения

Сообщение Alex333 » 30.11.2011 23:34:12

"If an application processes this message, it should return zero" переводится примерно как "Если приложение обрабатывает это сообщение, оно должно возвратить ноль". Если обработка сообщения заключается у вас в этом:

FormViewer.WMDrawClipboard;

то вероятно перед Exit надо написать Result := 0;

Или может я вопрос не понял...
Alex333
новенький
 
Сообщения: 32
Зарегистрирован: 21.08.2011 19:14:28

Re: Вернуть ноль после обработки сообщения

Сообщение sign » 01.12.2011 06:35:58

В самом начале напишите
Код: Выделить всё
  Result := -1;

По этому результату вы будете знать, что условие не было выполнено и функция не отработала.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Вернуть ноль после обработки сообщения

Сообщение InnI » 01.12.2011 11:42:12

Alex333 писал(а):Или может я вопрос не понял...

Дело в том, что в Delphi можно сделать так:
Код: Выделить всё
procedure WMDrawClipboard(var Msg: TWMCLIPBOARDUPDATE); message WM_CLIPBOARDUPDATE;

procedure WMDrawClipboard(var Msg: TWMCLIPBOARDUPDATE);
begin
// обработка
Msg.Result := 0;
end;

Вероятно, вот этот ноль (Msg.Result := 0;) и должно вернуть приложение.
А в Лазарусе я несколько запутался с колбэк-функциями (уровень знаний ещё не на столько высок). Поэтому и спрашиваю, каким образом через колбэк-функцию этот ноль вернуть.
InnI
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.11.2011 12:23:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 225

Рейтинг@Mail.ru