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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2009, 20:25   #1
Mercurium
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 10
По умолчанию Ловушка для мышки

И снова привет!!! На этот раз я хотел бы спросить у вас вот что.:
Я установил хук на отлов положения мышки.И при нахождении мышки в определённом месте в приложении PictureEditor (на компоненте Image) он должен срабатывать.Это место - прямоугольник размером примерно 150-300 пикселей, от левого края он в 200-х пикселей, а от нижнего в 50 пикс.Я так понял, что нужно сначала в проге назначить хэндл окна, в к-ром находится эта обасть 150-300 пикс. и от левого и нижнего края а потом в программе написать эти параметры. И при запуске PictureEditor'a должен стартовать мой хук, арабатыать хук должен при нахождении мыши в области 150-300 пикс.Как это сделать???.Извините, что всё так сумбурно расписано - эта мышь меня уже сёдня достала!
Help!!!
Mercurium вне форума Ответить с цитированием
Старый 31.08.2009, 20:34   #2
havok
Пользователь
 
Аватар для havok
 
Регистрация: 24.08.2009
Сообщений: 42
По умолчанию

вот пример с панелью сделайте тоже самое для Image Delphiworld 6.0
Цитата:
Для того, чтобы определить когда мышь над компонентом, в данном примере это будет панель, мы создадим новый класс, который будет являться потомком класса TPanel, и будет обрабатывать некоторые необходимые нам для данной задачи сообщения Windows.

Для этого определим следующим образом новый тип:



type
TMyPanel=class(TPanel)
public
procedure CMMouseEnter (var message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave (var message: TMessage); message CM_MOUSELEAVE;
end;




Называться наш новый класс будет TMyPanel. Определить его можете до определение класса формы, т.е. сразу после директивы uses.

После объявления экземпляра формы нужно объявить экземпляр нашего нового класса:



var
Form1: TForm1;
MyPanel1: TMyPanel;




В разделе implemetation обрабатываем несколько сообщения, именно этими обработчиками наш класс и будет отличаться от класса стандартной панели.



procedure TMyPanel.CMMouseEnter (var message: TMessage);
begin
Form1.Label1.Caption:='Мышь на панели';
end;

procedure TMyPanel.CMMouseLEAVE (var message: TMessage);
begin
Form1.Label1.Caption:='Мышь вне панели';
end;




По созданию окна создаём экземпляр нашего класса:



procedure TForm1.FormCreate(Sender: TObject);
begin
MyPanel1 := TMyPanel.Create(self);
with MyPanel1 do
begin
Parent := Form1;
Visible := True;
Left := 100;
Top := 100;
end;
end;




По уничтожению окна, соответственно, - уничтожаем:



procedure TForm1.FormDestroy(Sender: TObject);
begin
MyPanel1.Destroy;
end;
icq 580047636 You're WELCOME!!!
havok вне форума Ответить с цитированием
Старый 01.09.2009, 06:55   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

CM_MOUSEENTER и CM_MOUSELEAVE - сообщения, которые генерирует VCL, в windows такого нет.

WindowFromPoint() - получить хендл окна прд курсором;
GetClassName() - что бы определить имя класса;
ScreenToClient() - если будешь переводить координаты;
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 01.09.2009, 10:40   #4
Mercurium
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 10
По умолчанию

Havok, пасиб, но ты привел код для своей проги, а у меня установлен хук на запуск чужой.То есть запускается Picture Manager( это не моя прога!) и устанавливается мой хук.Как это сделать?А в ней хук должен срабатывать в определённой области.Как это сделать?
0nni, мне не нужно получать хендл под курсором, он должен быть залит в программе.Жду помощи!
Mercurium вне форума Ответить с цитированием
Старый 01.09.2009, 10:43   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Используйте функцию GetCursorPos(p), где p : TPoint
Функция возвращает значения p.x - координата Х и p.y - координата Y курсора мыши .
Проверяете попадание p.x и p.y в нужную область и создаете необходимый обработчик события.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 01.09.2009, 14:12   #6
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
     ct:Trect;
begin
      ct:=rect(0,0,100,100);
     clipcursor(@ct);
end;
end.
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 01.09.2009, 14:19   #7
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

юзайте FindWindow и FindWindowEx и потом сравнивайте позицию мыши с позицией нужного компонента
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 01.09.2009, 18:14   #8
Mercurium
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 10
По умолчанию

Я себе представляю эту прогу так:
if Запускается приложение(Picture Manager)
then begin
устанавливается хук
end;
if Курсор над областью приложения(150,300) then begin
срабатывает хук
end;
А теперь как это реализовать???
Пробовал так:
if FindWindow(nil,'Picture Manager')<> 0 then
start hook// это экспорт хука из уже написанной мною библиотеки;
Но ничего не получается, при запуске Picture Manager'a ничего не происходит.(((
Mercurium вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование мышки Vistar Паскаль, Turbo Pascal, PascalABC.NET 1 26.04.2009 18:06
Скроллинг мышки Dmitriy Общие вопросы Delphi 1 26.10.2008 23:23
Ловушка на клаву(нужно немного улутшить ее) xshStasX Win Api 2 11.08.2008 15:50
колЁсико мышки Experementator Общие вопросы Delphi 3 05.05.2008 16:31
Программа для работы с мышкой!Информация о координатах, кнопках мышки!!! metamfetamin Помощь студентам 7 09.12.2007 12:01