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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2008, 12:42   #11
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от st01en Посмотреть сообщение
Мои ответы (насколько я понял):
1. PostMessage - отправляет сообщение окну и забывает про это, программа дальше занимается своими делами.
SendMessage - Отправляет сообщение окну и ждет ответа\результата
Плюс к этому:
SendNotifyMessage: ждет ответа только если окно принадлежит текущему потоку, иначе ведет себя как PostMessage.
SendMessageTimeout: ведет себя аналогично SendMessage, но с возможностью указать максимальное время ожидания.
SendMessageCallback: ведет себя как PostMessage, но позволяет задать функцию, которая будет вызвана, когда окно-получатель обработает сообщение.
SendDlgItemMessage: упрощает отправку сообщений дочерним элементам диалоговых окон (вообще говоря - любых окон, у которых могут быть дочерние) по их идентификатору.
Цитата:
Сообщение от st01en Посмотреть сообщение
читаю МСДН:
И это правильно!

Последний раз редактировалось B_N; 27.02.2008 в 12:44.
B_N вне форума Ответить с цитированием
Старый 27.02.2008, 13:04   #12
st01en
Пользователь
 
Регистрация: 06.02.2008
Сообщений: 33
По умолчанию

Спасибо.
С вашей поддержкой гораздо проще разбиратся.

Если я правильно понял то приблизительно такой код должен поставить точку в Paint'е:

Код:
var
  wnd: HWND;
begin
  wnd := FindWindow(nil, 'Безымянный - Paint');
  if wnd <> 0 then
    PostMessage(wnd, WM_LBUTTONDOWN, 0, MakeLParam(150, 100));
end;
или мне нужно искать иммено то дочернее окно на котором рисуется (ну этот белый лист Paint'a, не знаю как его назвать правильно )

Цитата:
Сообщение от B_N Посмотреть сообщение
И это правильно!
На самом деле я пробовал заглядывать в него раньше, однако там требуется определенный уровень знания английского, благодаря текущей работе я его приобрел и теперь вроде бы там ориентируюсь
st01en вне форума Ответить с цитированием
Старый 27.02.2008, 13:42   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
приблизительно такой код должен поставить точку в Paint'е:
А попробовать?

Вот пример взятый в котором показано как можно рисовать линию:
Код:
procedure TForm1.Button1Click(Sender: TObject); 
begin 
SendMessage(<Хендл канвы>, WM_LBUTTONDOWN, 0,MakeLparam(10,10)); 
SendMessage(<Хендл канвы>, WM_MOUSEMOVE , 0,MakeLparam(100,200)); 
SendMessage(<Хендл канвы>, WM_LBUTTONUP , 0,MakeLparam(100,200)); 
end;
I'm learning to live...

Последний раз редактировалось Stilet; 27.02.2008 в 13:50.
Stilet вне форума Ответить с цитированием
Старый 27.02.2008, 13:48   #14
st01en
Пользователь
 
Регистрация: 06.02.2008
Сообщений: 33
По умолчанию

нету делфи под рукой, а домой аж ночью попаду, нетерпится
st01en вне форума Ответить с цитированием
Старый 27.02.2008, 14:19   #15
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Извиняюсь, насколько я понял, если открыть Paint и запустить
этот код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := FindWindow(nil, 'Безымянный - Paint');
  if wnd <> 0 then begin


    sendMessage(wnd, WM_LBUTTONDOWN, 0,MakeLparam(10,10));
    sendMessage(wnd, WM_MOUSEMOVE , 0,MakeLparam(100,200));
    sendMessage(wnd, WM_LBUTTONUP , 0,MakeLparam(100,200));

    end;
    end;
Дожна рисоваться линия а почему у меня ничего не рисует?
Иллидан вне форума Ответить с цитированием
Старый 27.02.2008, 14:44   #16
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Иллидан Посмотреть сообщение
..........а почему у меня ничего не рисует?
Потому, что данный код пытается рисовать в главном окне Paint'а, которое рисовать не умеет. Попробуйте заменить
Код:
wnd := FindWindow(nil, 'Безымянный - Paint');
на
Код:
wnd := GetDlgItem(FindWindow(nil, 'Безымянный - Paint'), 0);
B_N вне форума Ответить с цитированием
Старый 27.02.2008, 14:49   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А потому что ты не нашел хендл канвы )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2008, 18:02   #18
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Потому, что данный код пытается рисовать в главном окне Paint'а, которое рисовать не умеет. Попробуйте заменить
Код:
wnd := FindWindow(nil, 'Безымянный - Paint');
на
Код:
wnd := GetDlgItem(FindWindow(nil, 'Безымянный - Paint'), 0);
Бесполезно все равно не рисует
Иллидан вне форума Ответить с цитированием
Старый 27.02.2008, 18:11   #19
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Иллидан Посмотреть сообщение
Бесполезно все равно не рисует
Код:
wnd := GetDlgItem(GetDlgItem(FindWindow(nil, 'Безымянный - Paint'), $0E900), 0);
B_N вне форума Ответить с цитированием
Старый 27.02.2008, 19:12   #20
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Вот тут ещё есть много всего про оконные сообщения
http://rosigma.com/100.aspx
И ещё:
Цитата:
SendNotifyMessage: ждет ответа только если окно принадлежит текущему потоку, иначе ведет себя как PostMessage
SendNotifyMessage непосредственно вызывает оконную процедуру, а PostMessage помещает сообщение в очередь.

Последний раз редактировалось Somebody; 27.02.2008 в 19:34.
Somebody вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с другими программами через Delphi slon Общие вопросы Delphi 8 10.10.2008 11:58
Работа с другими программами kurazh77 Общие вопросы Delphi 6 09.10.2007 22:07
Глюки с программами для БД ГОСЕАН БД в Delphi 2 06.07.2007 17:27
перехват отправления чужими программами отправки на печать документов Nat Win Api 7 20.04.2007 16:07
работа с "чужими" окнами zetrix Безопасность, Шифрование 1 29.10.2006 11:28