Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MouseMove [D7, XP]


Gizza ©   (2006-06-20 11:42:00) 

Доброго...
Объясню свой вопрос на примере:
Есть форма, не очень большого размера, в правом нижнем углу у него есть маленькая кнопочка... По умолчанию ее не видно, а при наведении курсора мыши на место (на форме) расположения этой кнопки (повторюсь, ее не видно) она должна появляется...
Вот собственно вопрос:
Как отслеживать координа мыши на форме?
Заранее спасибо.


Gizza   (2006-07-01 21:05:00) [1]

Вообще вариант Джо, меня полностью устроил, всем большоее спасибо.

А если кому еще интересно, то форма одного цвета ;)


sniknik   (2006-06-21 11:11:00) [2]

> А чего, сложно битмапку скопировать на кнопку?
не сложно, а сложнее, разница. или совсем ничего не делать или рисунок при каждом передвижении кнопки по форме (при дизане) подбирать, вставлять, или код писать чтобы это автоматом делалось.


UMU   (2006-06-21 09:34:00) [3]

Если кнопка должна располагаться на однотонном фоне, то этот вопрос


> а при наведении курсора мыши на место... она должна появляется


довольно легко решается


Leonid Troyanovsky   (2006-06-21 09:06:00) [4]


> sniknik ©   (21.06.06 08:25) [16]

> нормальный вопрос, по делу... на однотонном поле кнопку
> легче спрятать


А чего, сложно битмапку скопировать на кнопку?
В любом случае, это уж после "она должна появляется..."

--
Regards, LVT.


sniknik   (2006-06-21 08:25:00) [5]

нормальный вопрос, по делу... на однотонном поле кнопку легче спрятать без Visible:= false


Джо   (2006-06-21 00:51:00) [6]

> [14] UMU ©   (20.06.06 19:56)
> А фон формы какой? Рисунок или обыкновенная заливка?

Вот уж вопрос вопросов.


UMU   (2006-06-20 19:56:00) [7]


> Gizza ©   (20.06.06 11:42)  
> Доброго...
> Объясню свой вопрос на примере:
> Есть форма


А фон формы какой? Рисунок или обыкновенная заливка?


begin...end   (2006-06-20 17:24:00) [8]

> StriderMan ©   (20.06.06 12:36) [9]

> Подменить у кнопки WindowProc, в котором разруливать сообщение
> WM_MOUSELEAVE

И при этом учесть, что до вызова TrackMouseEvent разруливать будет нечего.


StriderMan   (2006-06-20 12:45:00) [9]


> Если кнопку не видно, то и событие MouseMove у кнопки выполняться
> не будет...

а ведь прав !


> Джо ©

можно и так


Джо   (2006-06-20 12:40:00) [10]


> [8] Gizza ©   (20.06.06 12:33)
> Слушайте... Всмысле, читайте...
> Если кнопку не видно, то и событие MouseMove у кнопки выполняться
> не будет...

Зачем проверять OnMouseMove у кнопки? См. пост [3] Джо ©.

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var
 Pt: TPoint;
 Rct: TRect;
begin
 Pt.X := X;
 Pt.Y := Y;

 Rct.Left := Button1.Left;
 Rct.Top := Button1.Top;
 Rct.Right := Button1.Left + Button1.Width;
 Rct.Bottom := Button1.Top + Button1.Height;

 Button1.Visible := PtInRect(Rct,Pt);
end;


sniknik   (2006-06-20 12:36:00) [11]

> Если кнопку не видно ...
то ее не обязательно не видно потому, что у нее Visible false, а может еще и потому, что она "маскируется", сливается с фоном. ([5] Flat у TSpeedButton)


StriderMan   (2006-06-20 12:36:00) [12]


> А чего такое message WM_MOUSELEAVE?

начинающим неплохо бы почитать что такое сообщения (MESSAGE) в операционной системе WINDOWS.

Вобщем вариантов несколько:
1. В MouseMove отслеживать, что координаты находятся в неком диапаозне, и есть граница (область в несколько пикселей по периметру), в которой Visible должен быть равен false, а в остальном - true;
2. Написать компонент-наследник от TButton, в котором будет процедура типа
  procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
3. Подменить у кнопки WindowProc, в котором разруливать сообщение WM_MOUSELEAVE, при этом ни в коем случае не забытьсохранить старый WindowsProc и вызывать его после своего

с учетом

> Ээээ... Это же раздел для начинающих... вроде...

подходит вариант номер 1. Хотя он самый трудоемкий, ненадежный и "велосипедный"


Gizza   (2006-06-20 12:33:00) [13]

Слушайте... Всмысле, читайте...
Если кнопку не видно, то и событие MouseMove у кнопки выполняться не будет...


Gizza   (2006-06-20 12:24:00) [14]


> а на message WM_MOUSELEAVE делаешь обратно Visible := false;

Ээээ... Это же раздел для начинающих... вроде...

на MouseMove включаешь Visible у кнопки
это понятно.

А чего такое message WM_MOUSELEAVE?


Джо   (2006-06-20 12:08:00) [15]

> [4] Gizza ©   (20.06.06 12:00)
> Уважаемый, а можно конкретнее написать, на что сделать,
> а как. Спасибо.

Уважаемый, не имею желания разжевывать и класть в ротик. Примите и проч.


sniknik   (2006-06-20 12:04:00) [16]

ничего не отслеживать, а заменить кнопку на TSpeedButton и поставить Flat  в true.
у нее уже все отслежено (можно даже посмотреть как, при желании...)


Gizza   (2006-06-20 12:00:00) [17]

Уважаемый, а можно конкретнее написать, на что сделать, а как. Спасибо.


Джо   (2006-06-20 11:47:00) [18]

> Как отслеживать координа мыши на форме?

Обрабатывать событие формы OnMouseMove.


StriderMan   (2006-06-20 11:47:00) [19]

не на форме надо, а у кнопки

на MouseMove включаешь Visible у кнопки,
а на message WM_MOUSELEAVE делаешь обратно Visible := false;


Gizza   (2006-06-20 11:46:00) [20]

И... забыл... Добавить к кнопке события InMouse OutMouse, или что-то вроде того.


Наверх

Титульная страница Поиск, карта сайта Написать письмо