On-line: Мирослав, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост 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 ....

Что не так ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 12 [только новые]


moderator




Пост N: 647
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.09.14 13:27. Заголовок: Softlog86 пишет: Чт..


Softlog86 пишет:

 цитата:
Что не так ?


Дело в том, что при использовании события ON MOUSEHOVER картинка перехватывает на себя нажатие мышки.

Решение:
используйте для закрытия окна действие ACTION самой картинки, а вместо вывода кнопки 'Закрыть' при наведении на фото используйте вывод подсказки TOOLTIP с текстом типа "Нажмите на фото для закрытия окна"

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 166
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 15.09.14 13:41. Заголовок: Спасибо за совет .....


Спасибо за совет .... Но мне нужно несколько иное . Кнопка была для примера - на картинке их будет несколько (Закрыть/Увеличить/и т д ) ..... поэтому обрабатывать всё-же придётся каким-то другим способом ....



Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 648
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.09.14 13:47. Заголовок: Softlog86 пишет: Кн..


Softlog86 пишет:

 цитата:
Кнопка была для примера - на картинке их будет несколько


В таком случае бывает удобно использовать на этой форме элемент управления TOOLBAR

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 417
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.09.14 14:01. Заголовок: Softlog86 а если ис..


Softlog86
а если использовать ButtonEx со своим ON MOUSEHOVER , ON MOUSELEAVE
по идее должен сработать

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 167
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 15.09.14 14:09. Заголовок: В обычном состоянии ..


В обычном состоянии ( мышка не в регионе картинки) - никаких кнопок поверх картинки (IMAGE) не выводится ....
Кнопки проявляются только при наведении мыши на картинку .

Мне нужно выводить кнопки(надписи) только при наведении и прятать при снятии мыши ..... (например на некоторых сайтах при просмотре товара - так реализовано - появляются кнопки вправо-влево .)

ТООЛБАР - не совсем правильно , так как кнопки будут не всегда в верхней части .


Спасибо: 0 
ПрофильЦитата Ответить
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


Спасибо: 1 
ПрофильЦитата Ответить



Пост 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 ....



Спасибо: 0 
ПрофильЦитата Ответить
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
....

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 169
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 15.09.14 16:03. Заголовок: Всё -равно - програм..


Всё -равно - программа вылетает :( (видно что 'включает' кнопку [Закрыть]
(Убираем функцию восcтановления перехвата - программа не вылетает )

Может быть не нравится , что окно FOTO_WINDOW = CHILD ?


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 651
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.09.14 16:10. Заголовок: Softlog86 пишет: Вс..


Softlog86 пишет:

 цитата:
Всё -равно - программа вылетает


Тогда попробуйте восстанавливать перехват в обработчике нажатия кнопки BTNCLOSE

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 170
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 15.09.14 16:13. Заголовок: А что толку ? Курс..


А что толку ? Курсор покинул область - значит кнопка [ЗАКРЫТЬ] должна быть невидимая (.HIDE) ...
то есть никаких нажатий не происходит . соответственно и обработчик не включается .

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 652
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.09.14 16:53. Заголовок: Softlog86 пишет: Ку..


Softlog86 пишет:

 цитата:
Курсор покинул область - значит кнопка [ЗАКРЫТЬ] должна быть невидимая (.HIDE) ...
то есть никаких нажатий не происходит . соответственно и обработчик не включается


Согласен. В таком случае можно по таймеру проверять видимость кнопки и восстанавливать перехват, если кнопка невидимая

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 498
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет