Трей и ...

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

Трей и ...

Сообщение Max! » 22.11.2004 (Пн) 15:55

Вот собствынно и вопрос , есть Picture1 и надо стоб в нём отабразились все иконки находящиеся на данный момент в трей и при клике на одну из иконку в нашем Picture происходилоп то же самое что и в настоящем трей (У каждой проги сидящеё в треё поразному , может откр. сама прога или настройка её ) Вот только я незнаю как это реализовать ? И нужен ли вообще PictureBox сдесь я имею ввиду можно ли через него такое реализовать ?
:wink:
Max!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 22.11.2004 (Пн) 18:53

Находи сие окно и bitblt из него...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 22.11.2004 (Пн) 22:55

ANDLL писал(а):Находи сие окно и bitblt из него...

А события тогда как обрабатывать? Нет, тут что-то другое нужно. Как вариант, можно сделать SetParent, но так ты просто "перенесёшь" трей в своё окно...
А вообще, меня эта задача тоже интересует, давайте общими усилиями развивать этот вопрос :wink:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 23.11.2004 (Вт) 11:11

А можно сделать его сабклассинг?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 23.11.2004 (Вт) 13:36

Tarik
А события тогда как обрабатывать? Нет, тут что-то другое нужно. Как вариант, можно сделать SetParent, но так ты просто "перенесёшь" трей в своё окно...


А если копировать неким мокаром ? Кстати Tarik немог бы ты пример кинуть , а то у меня невыходит точне я немагу найти hwnd трея ! Вот кнопку "Start" магу перенести на форму , саму панель тоже а вот трей немагу hwnd найти !
:wink:
Max!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 23.11.2004 (Вт) 15:24

Примера под рукой, к сожалению, нет :( А трэй надо искать по "TrayNotifyWnd".
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 23.11.2004 (Вт) 16:13

Вообще принцип такой:
Находим окно TrayNotifyWnd -> (+ на XP - SysPager) -> ToolbarWindow32.
Посылаем ему сообщение TB_BUTTONCOUNT - узнаём количество иконок.
Затем для каждой кнопки TB_GETBUTTONINFO - получаем NOTYFYICONDATA(это надо в контесте Explorer.exe делать, разумеется)
Из NOTYFYICONDATA вытаскиваем hIcon и передаём OleCreatePictureIndirect...

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

Сообщение alibek » 23.11.2004 (Вт) 16:23

Gloom, совет классный :)
Вот только он в данном случае бесполезен. Есть у меня такое предчувствие.
Lasciate ogni speranza, voi ch'entrate.

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 23.11.2004 (Вт) 17:40

Да совет неплохой но у меня вапиант легче
Код: Выделить всё
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Dim a As Long
Dim b As Long
Dim hw As Long

Private Sub Command1_Click()
  hw = FindWindow("Shell_traywnd", vbNullString)
  a = FindWindowEx(hw, 0, "TrayNotifyWnd", vbNullString)
  b = SetParent(a, Form1.hwnd)
End Sub


Всё работает , только сам трей помещается в правом верхнем углу если развернуть форму на весь экран ! Есть идея , если треё помещять в пиктуребокс и сделать чтоб его тоскать по форме можно было ! Или сразу какимто макаром ставить координаты куда будем размещять трей, посаветуйте как лудше сделать или можно както ещё упераясь в мой вариант !
:wink:
Max!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 23.11.2004 (Вт) 18:51

Ну, с SetParent всё ясно, а вот если я, скажем, хочу свой shell написать (т. е. заменить стандартный explorer на свою прогу)? Тогда как быть? В принципе, эту проблему можно разложить по нескольким вопросам:
1. Как узнать, что какая-то программа хочет добавить/удалить значок
2. Как узнать, что эта программа сворачивается в трэй, а не в таскбар
3. И как обрабатывать события этого значка (т. е. клики мышью)?
Буду очень благодарен, если кто-нибудь хотя бы подскажет направление, в котором нужно пилить :) А ещё лучше - линк на какую-нибудь доку по этой теме...
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 23.11.2004 (Вт) 19:06

Так с SentParent всё есть и клик мышью работает и добаляются иконки и тд...
Tarik пиши обрезанную версию explorerа вот и всё ! Только исходники достать надо ! :wink:
:wink:
Max!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 23.11.2004 (Вт) 19:36

Так с SentParent всё есть и клик мышью работает и добаляются иконки и тд

Дык если я explorer заменю, трэя вообще не будет. Вот мне и надо "написать свой трэй"...
Tarik пиши обрезанную версию explorerа вот и всё ! Только исходники достать надо !

Ага, точняк, пойду письмо Биллу Гейтсу сочинять :wink:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 24.11.2004 (Ср) 1:12

Вот ещё вопросик есть , на форме имеется один Пиктуребокс и в него загружена картинка , сам пиктуребокс небольшого размера и вся кортинка невлезает , вот и мне надо чтобы он показал определённый участок по координатам , всмысле он будет показывать определённое место кортинки. Как это сделать?
:wink:
Max!

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

Сообщение alibek » 24.11.2004 (Ср) 11:28

Tarik, теоретически, это несложно.
Создаешь свое окно с классом "Shell_traywnd", в нем создаешь окно с классом "TrayNotifyWnd". В оконной процедуре ловишь обращения к нему (NotifyIconMessages) и обрабатываешь. Кроме того, обрабатываешь клики мышкой на значках и уведомляешь об этих кликах "владельца" значка (как MOUSE_MOVE).
Сложности будут в реализации.
Lasciate ogni speranza, voi ch'entrate.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 24.11.2004 (Ср) 11:33

достаточно одного окна
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 24.11.2004 (Ср) 13:01

Как насчёт моего вопроса? :wink:
Max!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 24.11.2004 (Ср) 13:52

Я думаю это невозможно, так как нужно узнать хендл окна свзанного с иконкой.

конечно ты можешь отслеживать их при добавлении, если перехватить сообщение окну трея. Но это уже и есть свой трей.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 24.11.2004 (Ср) 14:51

Нет я не об этом , вот мой вопрос
Вот ещё вопросик есть , на форме имеется один Пиктуребокс и в него загружена картинка , сам пиктуребокс небольшого размера и вся кортинка невлезает , вот и мне надо чтобы он показал определённый участок по координатам , всмысле он будет показывать определённое место кортинки. Как это сделать?
:wink:


:wink:
Max!

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

Сообщение tyomitch » 24.11.2004 (Ср) 15:20

Max, просто задай пикчербоксу нужные Left и Top (отрицательные)
Изображение

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 24.11.2004 (Ср) 15:33

Так это позиция пиктуребокса на форме , нет мне надо чтоб он стаял на одном месте , всммысле там где я его поставил на той позиций !
Max!

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

Сообщение tyomitch » 24.11.2004 (Ср) 15:44

Какая тебе разница, где он, если его всё равно целиком не видно?
Изображение

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 24.11.2004 (Ср) 16:54

Не всёже . пытаюсь разместить трей на форме , у меня получается только трей размещается в правом верхнем углу формы и то её надо растянуть до упора или развернуть на весь экран , а какже поместить на любое место формы ??? Я пробовал с пиктуребоксом но трей виден только если растянуть пиктрбкс. до упора в право (До тех пор пока он перестанет растягиваться ) Но как этого избежать ? (Я предерживаюсь сваему варианту с SetParent)

:wink:
Max!

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

Сообщение tyomitch » 24.11.2004 (Ср) 17:14

Да просто задай ему Left=-600, и всё! :evil:
Ну какая тебе разница, где он стоит?
Изображение

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 24.11.2004 (Ср) 17:24

Тогда трея невидно ! tyomitch ты не нервничаяй разница есть так-как я нехачу растягивать форму на весь экран и пиктрбкс. нехачу грамодский делать , а трей видно если только развернуть форму на весь экран (Если трей на форму помещать) и пиктуребокс преходится растягивать (Если на пиктуребокс помещять)
:wink:
Max!

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

Сообщение tyomitch » 24.11.2004 (Ср) 18:39

У меня нет слов - одни буквы... :roll:
При чём здесь растянутая форма? При чём здесь пикчербокс на весь экран? Ты что ли не понял, о чём я тебе говорю?
Изображение

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

Сообщение alibek » 25.11.2004 (Чт) 10:32

alibek хихикает... "И тебя вылечим"... :)
Lasciate ogni speranza, voi ch'entrate.


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

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

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 122

    TopList