![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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, или что-то вроде того.