Автор | Сообщение |
|
| |
Пост N: 165
Зарегистрирован: 03.12.08
|
|
Отправлено: 15.09.14 13:04. Заголовок: Не могу понять , почему не срабатывает ?
Ситуация : Define window FOTO_WINDOW AT 10 , 10 WIDTH 100 HEIGHT 100 TITLE 'Изображение товара' nosysmenu ON INTERACTIVECLOSE .F. NOSHOW child // В это окно выводим картинку товара (cPictureName) // При наведении мышки на картинку - включаем (выводим поверх картинки) кнопку [ЗАКРЫТЬ] и делаем в фокусе // При снятии мыши с картинки - убираем кнопку [ЗАКРЫТЬ] @ 20,0 image TOVAR_PICTURE picture cPICTUREName ; ON MOUSEHOVER (FOTO_WINDOW.BTNCLOSE.SHOW , FOTO_WINDOW.BTNCLOSE.SETFOCUS ); ON MOUSELEAVE (FOTO_WINDOW.BTNCLOSE.HIDE ) // Собственно - кнопочка [ЗАКРЫТЬ] : // Если кликаем мышкой на неё - должно выполнить то что написано по OnClick (ACTION) - то есть сделать 'невидимым' это окно @ 40,10 BUTTON BTNCLOSE CAPTION 'Закрыть ' ; OnClick ( FOTO_VISIBLE:=.F. , FOTO_WINDOW.HIDE ) End Window По задумке - при наведении мыши на картинку - должна открыть кнопку [Закрыть] и собтcветсвенно при клике на неё - сделать всё , что указано По факту - при наведении мыши - кнопка действительно появляется (.SHOW) но клик по ней - не обрабатывается (мышкой) . Работает только если мышка на кнопке и нажимаем на клаве ENTER .... Что не так ?
|
|
|
Новых ответов нет
[см. все]
|
|
|
| moderator
|
Пост N: 647
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.09.14 13:27. Заголовок: Softlog86 пишет: Чт..
Softlog86 пишет: Дело в том, что при использовании события ON MOUSEHOVER картинка перехватывает на себя нажатие мышки. Решение: используйте для закрытия окна действие ACTION самой картинки, а вместо вывода кнопки 'Закрыть' при наведении на фото используйте вывод подсказки TOOLTIP с текстом типа "Нажмите на фото для закрытия окна"
|
|
|
|
| |
Пост N: 166
Зарегистрирован: 03.12.08
|
|
Отправлено: 15.09.14 13:41. Заголовок: Спасибо за совет .....
Спасибо за совет .... Но мне нужно несколько иное . Кнопка была для примера - на картинке их будет несколько (Закрыть/Увеличить/и т д ) ..... поэтому обрабатывать всё-же придётся каким-то другим способом ....
|
|
|
|
| moderator
|
Пост N: 648
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.09.14 13:47. Заголовок: Softlog86 пишет: Кн..
Softlog86 пишет: цитата: | Кнопка была для примера - на картинке их будет несколько |
| В таком случае бывает удобно использовать на этой форме элемент управления TOOLBAR
|
|
|
|
| постоянный участник
|
Пост N: 417
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.09.14 14:01. Заголовок: Softlog86 а если ис..
Softlog86 а если использовать ButtonEx со своим ON MOUSEHOVER , ON MOUSELEAVE по идее должен сработать
|
|
|
|
| |
Пост N: 167
Зарегистрирован: 03.12.08
|
|
Отправлено: 15.09.14 14:09. Заголовок: В обычном состоянии ..
В обычном состоянии ( мышка не в регионе картинки) - никаких кнопок поверх картинки (IMAGE) не выводится .... Кнопки проявляются только при наведении мыши на картинку . Мне нужно выводить кнопки(надписи) только при наведении и прятать при снятии мыши ..... (например на некоторых сайтах при просмотре товара - так реализовано - появляются кнопки вправо-влево .) ТООЛБАР - не совсем правильно , так как кнопки будут не всегда в верхней части .
|
|
|
|
| moderator
|
Пост N: 649
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.09.14 14:48. Заголовок: Softlog86 пишет: Мн..
Softlog86 пишет: цитата: | Мне нужно выводить кнопки(надписи) только при наведении и прятать при снятии мыши |
| Понятно. Тогда добавьте в обработчики картинки следующий код @ 20,0 image TOVAR_PICTURE picture cPICTUREName ; ON MOUSEHOVER (ChangeStyle ( GetControlHandle ('TOVAR_PICTURE','FOTO_WINDOW') , , SS_NOTIFY ),; FOTO_WINDOW.BTNCLOSE.SHOW , FOTO_WINDOW.BTNCLOSE.SETFOCUS ); ON MOUSELEAVE (ChangeStyle ( GetControlHandle ('TOVAR_PICTURE','FOTO_WINDOW') , SS_NOTIFY ),FOTO_WINDOW.BTNCLOSE.HIDE ) и определите #define SS_NOTIFY 256
|
|
|
|
| |
Пост N: 168
Зарегистрирован: 03.12.08
|
|
Отправлено: 15.09.14 15:21. Заголовок: При наведении: ON MO..
При наведении: ON MOUSEHOVER (ChangeStyle ( GetControlHandle ('TOVAR_PICTURE','FOTO_WINDOW') , , SS_NOTIFY ), .... Внимание на : " , , SS_NOTIFY)" При покидании зоны : ON MOUSELEAVE (ChangeStyle ( GetControlHandle ('TOVAR_PICTURE','FOTO_WINDOW') , SS_NOTIFY ) Внимание на : " , SS_NOTIFY) " В первом случае и во втором параметр SS_NOTIFY в разных местах . Так и нужно ? - вылетает программа при наведении на картинку .... Проблема во второй строчке - там где MOUSELEAVE ....
|
|
|
|
| moderator
|
Пост N: 650
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.09.14 15:50. Заголовок: Softlog86 пишет: В ..
Softlog86 пишет: цитата: | В первом случае и во втором параметр SS_NOTIFY в разных местах . Так и нужно ? |
| Да, в первом случае убираем перехват действий на фото, а во втором - восстанавливаем. Softlog86 пишет: цитата: | Проблема во второй строчке - там где MOUSELEAVE |
| Значит, надо использовать флажок, для того, чтобы эта функция срабатывала только один раз. Static lDone:=.f. func onmousehover if ! lDone ChangeStyle ( GetControlHandle ('TOVAR_PICTURE','FOTO_WINDOW') , , SS_NOTIFY ) // убираем перехват lDone:=.t. endif .... func onmouseleave if lDone ChangeStyle ( GetControlHandle ('TOVAR_PICTURE','FOTO_WINDOW') , SS_NOTIFY ) // восстанавливаем перехват lDone:=.f. endif ....
|
|
|
|
| |
Пост N: 169
Зарегистрирован: 03.12.08
|
|
Отправлено: 15.09.14 16:03. Заголовок: Всё -равно - програм..
Всё -равно - программа вылетает :( (видно что 'включает' кнопку [Закрыть] (Убираем функцию восcтановления перехвата - программа не вылетает ) Может быть не нравится , что окно FOTO_WINDOW = CHILD ?
|
|
|
|
| moderator
|
Пост N: 651
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.09.14 16:10. Заголовок: Softlog86 пишет: Вс..
Softlog86 пишет: цитата: | Всё -равно - программа вылетает |
| Тогда попробуйте восстанавливать перехват в обработчике нажатия кнопки BTNCLOSE
|
|
|
|
| |
Пост N: 170
Зарегистрирован: 03.12.08
|
|
Отправлено: 15.09.14 16:13. Заголовок: А что толку ? Курс..
А что толку ? Курсор покинул область - значит кнопка [ЗАКРЫТЬ] должна быть невидимая (.HIDE) ... то есть никаких нажатий не происходит . соответственно и обработчик не включается .
|
|
|
|
|
| moderator
|
Пост N: 652
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.09.14 16:53. Заголовок: Softlog86 пишет: Ку..
Softlog86 пишет: цитата: | Курсор покинул область - значит кнопка [ЗАКРЫТЬ] должна быть невидимая (.HIDE) ... то есть никаких нажатий не происходит . соответственно и обработчик не включается |
| Согласен. В таком случае можно по таймеру проверять видимость кнопки и восстанавливать перехват, если кнопка невидимая
|
|
|
|