Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

MouseMove   Найти похожие ветки 

 
Gizza ©   (2006-06-20 11:42) [0]

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


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

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


 
StriderMan ©   (2006-06-20 11:47) [2]

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

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


 
Джо ©   (2006-06-20 11:47) [3]

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

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


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

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


 
sniknik ©   (2006-06-20 12:04) [5]

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


 
Джо ©   (2006-06-20 12:08) [6]

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

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


 
Gizza ©   (2006-06-20 12:24) [7]


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

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

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

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


 
Gizza ©   (2006-06-20 12:33) [8]

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


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


> А чего такое 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. Хотя он самый трудоемкий, ненадежный и "велосипедный"


 
sniknik ©   (2006-06-20 12:36) [10]

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


 
Джо ©   (2006-06-20 12:40) [11]


> [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;


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


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

а ведь прав !


> Джо ©

можно и так


 
begin...end ©   (2006-06-20 17:24) [13]

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

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

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


 
UMU ©   (2006-06-20 19:56) [14]


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


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


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

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

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


 
sniknik ©   (2006-06-21 08:25) [16]

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


 
Leonid Troyanovsky ©   (2006-06-21 09:06) [17]


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

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


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

--
Regards, LVT.


 
UMU ©   (2006-06-21 09:34) [18]

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


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


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


 
sniknik ©   (2006-06-21 11:11) [19]

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


 
Gizza ©   (2006-07-01 21:05) [20]

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
15-1150798694
Иксик
2006-06-20 14:18
2006.07.23
Интересная статья про горячую линию между Москвой и Вашингтоном


15-1151058784
Tab
2006-06-23 14:33
2006.07.23
компонент загружающий .mht файлы из потока


15-1150823390
Alx2
2006-06-20 21:09
2006.07.23
Ителлектуальная собственность


9-1132311190
Keeperr
2005-11-18 13:53
2006.07.23
CGShaders в GLScene


2-1151954112
UMU
2006-07-03 23:15
2006.07.23
Узнать количество пикселей