Из иконки в окно

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Из иконки в окно

Сообщение Sun07 » 09.11.2006 (Чт) 16:33

Люди, посмотрите, пожалуйста, код. Щёлкаю на иконке, окно выводится на передний план, но получается какая-то ерунда!
Вложения
FromIconToWindow.rar
(4.14 Кб) Скачиваний: 203
Последний раз редактировалось Sun07 10.11.2006 (Пт) 0:36, всего редактировалось 2 раз(а).

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 09.11.2006 (Чт) 16:40

Называй файлы только латинскими буквами :evil: не могу открыть, винда немецкая

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 09.11.2006 (Чт) 20:06

Sun07
Если ты про курсор в виде часов то:
Код: Выделить всё
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
....
ReleaseCapture
EndSub
Если всё делать своими ручками, они скоро отвалятся !

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 10.11.2006 (Пт) 0:23

Что такое ReleaseCapture? Всё должно работать и без ReleaseCapture!

Как вы заметили, форма становится активной при щелчке на ней левой мыши (если после активации окна сразу щёлкнуть на кнопке MinButton - ничего не произойдёт), иногда появляется указатель в виде песочных часов, при активации формы её заголовок остаётся серым, подсвечивается синим лишь область под кнопками MinButton и т.д.

Для тех, кто не смог по какой-либо причине открыть проект, вложение заменено

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 10.11.2006 (Пт) 11:37

Это такая АПИшка,
MSDN писал(а):The ReleaseCapture function releases the mouse capture from a window in the current thread and restores normal mouse input processing. A window that has captured the mouse receives all mouse input, regardless of the position of the cursor, except when a mouse button is clicked while the cursor hot spot is in the window of another thread.


Проверь, с ней работает всё нормально :)
Если всё делать своими ручками, они скоро отвалятся !

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 10.11.2006 (Пт) 14:35

почему же эта ф-я ReleaseCapture нигде в примерах вывода окна на передний план не используется авторами статей, даже не используется при простом скрытии-показе окна (Me.Visble=Not Me.Visible)? Чтоже происходит на самом деле, откуда берутся песочные часы и остальные глюки?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.11.2006 (Пт) 15:43

Она служит для "отпускания" кнопки мышки.
Lasciate ogni speranza, voi ch'entrate.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 11.11.2006 (Сб) 2:15

А что эксперты скажут насчёт ф-й SetWindowPos, SetActiveWindow, BringWindowToTop?

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 11.11.2006 (Сб) 2:19

эксперты скажут RTFM

а почему так много спрашиваешь и не пробуешь что тебе подсказали ?

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 11.11.2006 (Сб) 10:44

Оказывается, не надо никаких дополнительный функций вывода окна на передний план! Вместо Me.Visible = Not Me.Visible использовал If Me.Visible = True Then Me.Hide Else Me.Show и всё работает прекрасно! Неужели никто не знал этого, или зажали? Мда... Я в шоке от экспертов!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.11.2006 (Сб) 12:48

Какой ужас... Ты всех раскрыл, теперь остается только покончить с собой.
Lasciate ogni speranza, voi ch'entrate.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 11.11.2006 (Сб) 16:10

Шутить изволите? Я всегда подозревал, что здесь нехорошие и коварные люди! :)

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 12.11.2006 (Вс) 2:06

интересно, чем Me.Hide отличается от Me.Visible=False?

yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Сообщение yaklit » 12.11.2006 (Вс) 18:00

интересно, чем отличается метод от свойства? :D

yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Сообщение yaklit » 12.11.2006 (Вс) 18:01

и почему не использовать ЭУ systray

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.11.2006 (Вс) 19:11

Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 12.11.2006 (Вс) 22:51

Sun07
Не знаю как у тебя а у меня и с Me.Show иногда форма реагирует только со второго клика.
Если всё делать своими ручками, они скоро отвалятся !

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 12.11.2006 (Вс) 23:05

а ты используешь свою функцию ReleaseCapture? Используй, и всё будет ok :)

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 13.11.2006 (Пн) 0:28

Я имел ввиду без неё :)
А то после твоего поста создалось впечатление что ты её не используешь.
Если всё делать своими ручками, они скоро отвалятся !

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 13.11.2006 (Пн) 20:40

Спасибо за молчание. Как много я узнал о методах Show и Hide :)

Проблема номер 2 - при старте программы выводится диалоговое окно и иконка в трей. Если навести указатель мыши на иконку, диалоговое окно начинает мерцать, т.к. программа постоянно обращается то к форме, то к диалоговому окну. Что делать (хочется выводить иконку вместе с диалоговым окном)? Например, у ICQ при старте и авторизации таких проблем нет.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 18.11.2006 (Сб) 1:57

Я сейчас сойду с ума. Вставил приведённый код в 2 проекта. В одном работает, в другом - при наведении мыши на иконку вообще не вызывается Form_MouseDown! Проверил все свойства формы - совпадают с первым проектом. Me.Enabled=True всегда. Никак не могу понять, в чём причина! Может, из-за того, что проблемный проект разрабатывался в русифицированном VB, а теперь я работаю в аглицком VB с обновлениями (но не должно же быть из-за этого!)

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 18.11.2006 (Сб) 22:25

Хм... Точно сойти с ума можно. На всю форму был натянут SSTab. Ставлю SSTab1.visible=false - обработчик Form_MouseDown вызывается, SSTab1.visible=True - обработчик Form_MouseDown не вызывается!!! Интересно, почему?

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 19.11.2006 (Вс) 23:13

Sun07
Ты наверно номер паспорта на проговариваешь когда щелкаешь форме. А надо бы...

П.С. Ну а если серьезно подумать? Как по твоему вызовется обработчик формы если, ты кликаешь не по форме а по контейнеру на этой форме?

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 19.11.2006 (Вс) 23:57

я кликаю по иконке, которая должна передавать сообщение окну, хендл которого ей указан

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 20.11.2006 (Пн) 16:21

Может SSTab перехватывает оконные сообщения когда видим? :wink:
А я все практикую лечение травами...

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 20.11.2006 (Пн) 18:21

Я не знаю, что перехватывает сообщения. На SSTab ещё куча контролов. Обработчик не срабатывает никогда, когда форма показана и когда скрыта :(

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 25.11.2006 (Сб) 22:10

оказывается, если SSTab1.Width >7702 твипа, обработчик MouseDown формы не вызывается, это как-то связано с передаваемым ему параметром X для WM_LBUTTONDOWN X=7695, для WM_RBUTTONDOWN X=7740, я так думаю. Значит, SSTab перехватывает клик на иконке, если SSTab1.Width >7702. Но почему тогда не вызывается его обработчик MouseDown?

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 27.11.2006 (Пн) 22:00

Вообщем, я так понимаю, что ответа мне не дождаться. Хотел сделать без ф-и перехвата сообщений, но видать не судьба упростить код. Но ведь, господа профессионалы, можно же сказать, что с данным кодом ничего нельзя придумать и без каллбэка не обойтись? Слышал, что есть готовый контрол для работы с иконкой. Смотрел на http://www.vb.kiev.ua, но не нашёл. Может, хоть кто подскажет, где контрол лежит? И ещё - если в этом контроле нет возможности восстанавливать иконку после сбоя эксплорера и обновления трея, он мне не нужен. Буду делать сам :(. Итак, мне кто поможет?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 9

    TopList