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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2011, 20:29   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Покидание пределов формы

Представим себе ситуацию - у нас есть форма 50х50 без бордера. На OnMove у нас сделано так, что Form.Color := $FF0000; Нужно сделать так, чтобы по выходу курсора из формы цвет менялся на, скажем $00FF00;.

Кроме таймера есть варианты?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2011, 20:37   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Есть. Хук на мышь.
_SERGEYX_ вне форума Ответить с цитированием
Старый 30.01.2011, 20:44   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Хук на мышь.
Это как бомбардировка сельского туалета с помощью BlackBird.

А сообщений такого типа нет?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2011, 20:57   #4
majikku
Заблокирован
 
Регистрация: 21.01.2011
Сообщений: 134
По умолчанию

может с этим что нить сэмпровизировать получиться :D
http://delphiexpert.ru/view_lesson.php?id=74

-----------
кто минус поставил Т.т
я текст просто не тот написал, а удалять сообщение нельзя
вот и исправил , чтоб потом норм текст вставить когда ссылку найду
ехъ...

Последний раз редактировалось majikku; 30.01.2011 в 21:21.
majikku вне форума Ответить с цитированием
Старый 30.01.2011, 21:41   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

По теме. Я бы сделал так:
Берем нормальную панель, у которой есть свойства OnMouseEnter и OnMouseExit.
(таких полно... перечислять не буду). Растягиваем эту панель на всю форму (чтобы надежней было при быстром перемещении мыши можно оставить по краям по 1-2 пикселя.) и обрабатываем вышеуказанные события.

Можно, конечно, сделать так
Код:
    procedure CMMouseEnter (var message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave (var message: TMessage); message CM_MOUSELEAVE;
... пробовал когда-то, но что-то работает дерьмово.
_SERGEYX_ вне форума Ответить с цитированием
Старый 30.01.2011, 21:44   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
CM_MOUSELEAVE
Уже интересней. CM_MOUSELEAVE это виндовая WM_MOUSELEAVE?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 30.01.2011 в 21:46.
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2011, 21:50   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Посмотри примеры
http://delphiworld.narod.ru/base/is_...component.html
http://www.delphisources.ru/pages/fa...ouseleave.html
Там, правда для панели и т.п., но можно переделать и для формы
_SERGEYX_ вне форума Ответить с цитированием
Старый 30.01.2011, 21:55   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Мде... Там не объясняется, что именно происходит "внутри". Мне нужна не конкретная реализация, а абстрактный способ. Делаю реализацию для GF.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2011, 22:14   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.FormMouseLeave(Sender: TObject);
begin
form1.Color:=clred;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
form1.Color:=clgreen;
end;
а так ещё проще
Код:
procedure TForm1.FormMouseLeave(Sender: TObject);
begin
if form1.Color=clred then form1.Color:=clgreen else form1.Color:=clred
end;

Последний раз редактировалось SERG1980; 30.01.2011 в 22:23.
SERG1980 вне форума Ответить с цитированием
Старый 31.01.2011, 02:35   #10
GreyScall
Пользователь
 
Аватар для GreyScall
 
Регистрация: 01.01.2011
Сообщений: 29
Лампочка

Цитата:
CM_MOUSELEAVE это виндовая WM_MOUSELEAVE?
Нет.
VCL'ское "message CM_MOUSEENTER / CM_MOUSELEAVE" вообще работает не корректно (во всяком случае в Делфи7)...

Начиная с Win2000 можно пользоваться TrackMouseEvent, на более старых версиях ОС придётся всё-таки таймером...
При WM_MOUSEMOVE или WM_NCMOUSEMOVE вызываем TrackMouseEvent с соответствующими параметрами - и тогда окну будут приходить сообщения WM_MOUSELEAVE или WM_NCMOUSELEAVE...
Только нужно ещё дочерние контролы предусмотреть...

MSDN >> TRACKMOUSEEVENT Structure
RSDN >> Как узнать, что мышь вышла за пределы окна?
Regards, GreyScall.
GreyScall вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать прогу для вычисления пределов kuler9 Помощь студентам 4 23.03.2010 21:43
прога для вычисления пределов на С# kuler9 Общие вопросы .NET 3 23.03.2010 21:42
Заголовок Child формы имеет цвет неактивной формы, хотя форма активна? PrimaryPro Общие вопросы Delphi 0 12.03.2010 11:12
как привязать размеры содержимого формы к размерам самой формы acid_bmstu Общие вопросы Delphi 4 05.02.2010 05:02
Как сделать границы формы другого цвета,формы?? Дима я Общие вопросы Delphi 3 22.06.2009 07:24