Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2013, 16:38   #1
Ангелина1989
Пользователь
 
Аватар для Ангелина1989
 
Регистрация: 22.11.2013
Сообщений: 22
Радость Обработка сообщений потоком

Здравствуйте! Возникла необходимость обработки сообщения WM_COPYDATA в цикле потока. В Google искала, но не нашла. Подскажите пожалуйста как реализовать обработку. Заранее благодарна.
Ангелина1989 вне форума Ответить с цитированием
Старый 22.11.2013, 16:50   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

1) Создаете поток
2) В этом потоке запускаете процедуру обработки
Код:
procedure ProcessCopyData();
begin
  while(true) do // Это цикл
  begin
    // Вот здесь можете обрабатывать ваши сообщения.
  end;  
end;
3) Плохо искали.
http://pro.dtn.ru/delphi-net/1-obmen.html
http://www.firststeps.ru/mfc/winapi/win/r.php?126
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 22.11.2013, 16:58   #3
Ангелина1989
Пользователь
 
Аватар для Ангелина1989
 
Регистрация: 22.11.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
1) Создаете поток
2) В этом потоке запускаете процедуру обработки
Код:
procedure ProcessCopyData();
begin
  while(true) do // Это цикл
  begin
    // Вот здесь можете обрабатывать ваши сообщения.
  end;  
end;
3) Плохо искали.
http://pro.dtn.ru/delphi-net/1-obmen.html
http://www.firststeps.ru/mfc/winapi/win/r.php?126
Спасибо, но http://pro.dtn.ru/delphi-net/1-obmen.html это я находила но эти сообщения как я понимаю получает и обрабатывает форма, а мне нужно что
б это же сообщение обрабатывал поток. У меня около 10 потоков и получать данные с другого приложения через форму появляется ошибка, а хотелось бы чтоб внешнее приложение передавало данные напрямую в поток. Вот нашла еще код, заменила сообщение на WM_COPYDATA, но он не работает как нужно
Код:
const
  WM_Answer = WM_User;

type
  TGetLogsClass = class(TThread)
  private
    FMsgWindow : HWND;
    procedure WndProc(var Message: TMessage);
    procedure WMAnswer(var Msg: TMessage); message WM_Answer;
  protected
    procedure Execute; override;
  public
    property MsgWindow: HWND read FMsgWindow;
  end;

implementation

procedure TGetLogsClass.Execute;
var
  msg: TMsg;
begin
  FMsgWindow := Classes.AllocateHWnd(WndProc); // создаем окно которое будет получать сообшения
  try
    while not Terminated do begin
      if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then begin
        DispatchMessage(msg); // отдаем вызов нашему окну
      end;
    end;
  finally
    Classes.DeallocateHWnd(FMsgWindow);
  end;
end;

procedure TGetLogsClass.WMAnswer(var Msg: TMessage);
begin
end;

procedure TGetLogsClass.WndProc(var Message: TMessage);
begin
  Dispatch(Message); // здесь VCL сделает все необходимое для вызова TGetLogsClass.WMAnswer
  if (Message.Msg < WM_USER) then
    DefWindowProc(FMsgWindow, Message.Msg, Message.WParam, Message.LParam); // думаю надо :)
end;
Ангелина1989 вне форума Ответить с цитированием
Старый 23.11.2013, 11:57   #4
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Поток никогда не мог получать и обрабатывать сообщения. Этим занимается форма. В ней есть метод WndProc(), в котором описаны все необходимые типы сообщения Windows. Чтобы поток обрабатывал сообщения, вы можете поступить так:
1. в потоке создать метод с параметром, который получается из сообщения.
2. в главной форме описать событийную процедуру для обработки вашего сообщения и в ней вызывать метод потока с передачей полученных данных.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка E-mail Сообщений Mag-Dark_Elf C# (си шарп) 1 21.09.2012 22:19
обработка сообщений pproger Общие вопросы C/C++ 8 02.07.2011 01:25
Обработка сообщений приложением Zemelya Общие вопросы C/C++ 1 12.02.2011 21:49
обработка сообщений из файла fiascko Общие вопросы Delphi 18 30.03.2010 09:44