Окно программы из трея на экран

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

Окно программы из трея на экран

Сообщение Sun07 » 04.11.2006 (Сб) 23:58

У меня по клику левой кнопой мыши по иконке в трее окно программы приобретает статус Me.Visible=True. Но при отображении заголовок окна подсвечивается серым (как бы окно не доступно), указатель мыши на окне принимает форму песочных часов, при перемещении указателя за пределы окна он принимает обычный вид указателя, песочные часы не снимаются до клика на форме (после клика указатель принимает обычный вид и заголовок окна подсвечивается как активного). У меня на форме есть WebBrowser, если поставить WebBrowser.Visible = False, то указатель принимает нормальный вид при показе окна из трея, но заголовок остаётся неактивным. Также в
дизайнере при выполнении программы в WebBrowser отображается "невозможно отобразить страницу", а при
выполнении exe WebBrowser остаётся абсолютно пустым. Ещё у меня после выхода из программы и удаления иконки из трея, иконка продолжает отображаться в нём, возможно, чтобы она исчезла, надо ещё обновить трей, как? Как от этих всех глюков избавиться? Активация происходит в:


Код: Выделить всё
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Y = 0 Then ' Y = 0
   Select Case X
      Case 513 * Screen.TwipsPerPixelX '513 - LeftButtonDown
    Me.Visible = Not Me.Visible
   End Select
End If

End Sub

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

Сообщение Sun07 » 05.11.2006 (Вс) 2:33

Кроме всего прочего, оказывается, что WB.Navigate ("http://www.google.ru") не рабатает при Me.Visible = False! Т.е. страница начинает грузиться при Me.Visible = True. Самое интересное, что прога останавливается на WB.Navigate и возобновляет работу при показе главного окна! А мне надо, чтобы сайт грузился при свёрнутой в трей проге, что делать?

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

Сообщение Sun07 » 05.11.2006 (Вс) 16:38

Интересно, зачем иконке nid.uID, когда есть nid.hIcon?

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

Сообщение tyomitch » 05.11.2006 (Вс) 16:46

Для NIM_DELETE и NIM_MODIFY.
Изображение

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

Сообщение Kovu » 05.11.2006 (Вс) 17:07

Sun07
Попробуй вызывать ReleaseCapture после восстановления окна.
Если всё делать своими ручками, они скоро отвалятся !

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

Сообщение Sun07 » 06.11.2006 (Пн) 0:36

tyomitch, разве nid.hIcon однозначно не определяет иконку?
Дело в том, что я nid.uID для всех иконок беру один и тот же, иконки из ImageList - hIcon = ImageList1.ListImages("wait").Picture и всё работает хорошо (траблы с удалением иконки я нашёл).

Люди, вы мне скажите, разве это нормально, когда окно не подсвечивается как активное при щелчке на иконке в трее и показе окна Me.Visible=True или нет (надо ли применять доп. функции)?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 06.11.2006 (Пн) 1:44

MSDN писал(а):uID
Application-defined identifier of the taskbar icon. The Shell uses hWnd and uID to identify which icon to operate on when Shell_NotifyIcon is invoked. You can have multiple icons associated with a single hWnd by assigning each a different uID.


Sun07 писал(а):надо ли применять доп. функции


SetForegroundWindow
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

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

Сообщение tyomitch » 06.11.2006 (Пн) 5:11

Sun07 писал(а):tyomitch, разве nid.hIcon однозначно не определяет иконку?

Нет, если есть несколько одинаковых иконок.
Изображение

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

Сообщение Sun07 » 06.11.2006 (Пн) 9:20

BV, ну и дела. Как это несколько иконок могут ассоциироваться с одним хэндлом? Насколько я понимаю, хэндл - уникальное число. Хотя кто его знает, этот Микрософт :)

tyomitch, что подразумевается под понятием несколько одинаковых иконок? Иконки с одинаковым хэндлом? А, понял, приложение может отображать несколько одинаковых иконок в трее, но зачем приложению отображать несколько одинаковых иконок, т.е. одну и ту же иконку, добавленную в трей несколько раз?

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

Сообщение tyomitch » 06.11.2006 (Пн) 9:31

Sun07 писал(а):tyomitch, что подразумевается под понятием несколько одинаковых иконок? Иконки с одинаковым хэндлом? А, понял, приложение может отображать несколько одинаковых иконок в трее, но зачем приложению отображать несколько одинаковых иконок, т.е. одну и ту же иконку, добавленную в трей несколько раз?

Пример из жизни: если на компе две сетевухи, в трее окажутся две одинаковые иконки сетевого соединения.
Убедительно?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 06.11.2006 (Пн) 13:05

Sun07 писал(а):BV, ну и дела. Как это несколько иконок могут ассоциироваться с одним хэндлом? Насколько я понимаю, хэндл - уникальное число. Хотя кто его знает, этот Микрософт :)


Очень просто могут. Наглядный тому пример - Avast!.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


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

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

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

    TopList