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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2008, 15:43   #1
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию Отправка\Приём сообщения. Прозрачная форма.

Помогите принять сообщение прозрачной формой. (TransparentColor := true
Пробовал 2 способа:
Код:
const WM_MYMESSAGE = WM_USER + 666;
...
procedure GetMsg(var Msg: TMsg); message WM_MYMESSAGE;
...
procedure Tform1.GetMsg(var Msg: TMsg);
begin
if Msg.message = WM_MYMESSAGE then
begin
  SnowBlow;
end;
end;
И
Код:
procedure GetMsg(var Msg: TMsg; Handled: boolean);
...
procedure Tform1.GetMsg(var Msg: TMsg; Handled: boolean);
begin
if Msg.message = WM_MYMESSAGE then
begin
  SnowBlow;
  Handled := true;
end;
end;
...
Application.OnMessage := GetMsg;
В обоих случаях процедуру пробовал объявлять везде. Либо я неправильно посылаю сообщение форме либо неправильно принимаю, потому что если поставить TransparentColor := false; то всё работает.
Вот как отсылаю сообщение:
Код:
library Mouse;

uses
  Windows, Messages;

var
HookH : thandle;
const WM_MYMESSAGE = WM_USER + 666;

function GetMouseClick(Code, wParam, lParam : integer): LResult; stdcall;
begin
if Code = HC_ACTION then
  if wParam = WM_LBUTTONUP then
  Windows.Beep(900,100);
  PostMessage(HWND_BROADCAST,WM_MYMESSAGE,0,0);
Result := CallNextHookEx(HookH, Code, wParam, lParam);
end;

function SetHook(): LResult; stdcall;
begin
HookH := SetWindowsHookEx(WH_MOUSE,@GetMouseClick,HInstance,0);
end;

procedure UnHook(); stdcall;
begin
UnhookWindowsHookEx(HookH);
end;

exports
SetHook, UnHook;

end.
Свойства формы:
BorderStyle = bsNone;
FormStyle = FsStayOnTop;
TransparentColor = true;

Последний раз редактировалось Zeraim; 20.12.2008 в 15:46.
Zeraim вне форума Ответить с цитированием
Старый 22.12.2008, 00:06   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

У меня этот код нормально работает при любом значении TransparentColor
Somebody вне форума Ответить с цитированием
Старый 22.12.2008, 01:34   #3
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Можете проэкт выложить ?
Zeraim вне форума Ответить с цитированием
Старый 22.12.2008, 11:02   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Я, похоже, перепутал beep из dll со своим из обработчика сообщения - код не работает. А ошибка в том, что в Delphi везде используется не винапишная структура TMsg, а TMessage.
Somebody вне форума Ответить с цитированием
Старый 24.12.2008, 23:10   #5
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Что-то исправление с TMsg на TMessage нечего не дало, как срабатывало только при нажатии на форме так и осталось =\\ Есть еще какие-то способы уведомить мою форму что произошло нажатие мышкой ?
Zeraim вне форума Ответить с цитированием
Старый 25.12.2008, 22:29   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

В общем, я думал, это ни при чём, оказалось, что очень при чём. PostMessage с HWND_BROADCAST из dll'ки почему-то (интересно почему? хотя это правильно: если при каждом нажатии кнопки посылать сообщение всем потокам...) не работает, надо передавать хэндл формы и посылать сообщение ей.
BadProject - с TMsg - не работает
GoodProject - с TMessage - работает
Mouse.dll посылает сообщение только своей форме.
Вложения
Тип файла: rar Hooks.rar (3.0 Кб, 17 просмотров)
Somebody вне форума Ответить с цитированием
Старый 26.12.2008, 20:02   #7
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Наверное у меня какие-то косяки с системой, но у меня работает только при нажатии на форме =\\ Но спасибо за пример, узнал новые вещи 8)
Zeraim вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка сообщения с компьютера без оутлука Rusl92 Общие вопросы Delphi 3 28.11.2008 08:28
Приём данных с com порта kyc0k Помощь студентам 3 28.03.2008 15:04
Как разрешить Форме1 приём данных? Rahim1993 Общие вопросы Delphi 12 19.01.2008 09:57
Приём изображений Terran Работа с сетью в Delphi 2 15.12.2007 15:03