Несворачивоемое окошко

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

Несворачивоемое окошко

Сообщение Alprog » 17.07.2008 (Чт) 16:56

Хочу сделать окошко, которое будет игнорировать кнопку "свернуть все окна" (сворачиваться оно будет собственной кнопкой).

Суть проблемы.

Во-первых, я не могу узнать момент, когда его свернули (следить за WindowState бесполезно, так как я использую окно BorderStyle = ToolWindow).

Во-вторых, даже используя обычное окно и зная момент сворачивания, я не могу его восстановить.
Show, Visible, SetFocus ни к чему хорошему не приводят.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 17.07.2008 (Чт) 23:00

Это делается через API - SetParent (замена родителя на другого)... :wink:

Вот делал когда-то давно... Посмотри... переделай...
Вложения
NoDisplace.rar
Несворачиваемое окно по Win+M, Win+D и прочее...
(4.15 Кб) Скачиваний: 61
Последний раз редактировалось awl100Alex 17.07.2008 (Чт) 23:10, всего редактировалось 1 раз.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 17.07.2008 (Чт) 23:10

Мне интересно, а зачем?) Мне бы не понравилось, если б я жмыкнул Win + M и что-то не свернулось. Только заменителю рабочего стола (одно из окошек шелов всяких) простительно. Даже квип за это не люблю.
Follow the white rabbit.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Несворачивоемое окошко

Сообщение awl100Alex » 18.07.2008 (Пт) 0:52

Немного усовершенствовал... :D

Код: Выделить всё
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (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
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Dim MyParent As Long

Private Sub Form_Load()
Dim dw As Long
MyParent = GetParent(Me.hwnd) 'Сначала узнаем, кто родитель нашей формы?..
dw = FindWindow("progman", vbNullString) 'Находим нового родителя "несчастному" ребенку... :)
SetParent Me.hwnd, dw 'Меняем родителей...
End Sub

Private Sub Command1_Click()
'Свернуть форму...
SetParent Me.hwnd, MyParent  'Возврашаем детей законным родителям!.. :)
Me.WindowState = vbMinimized 'Сворачиваем нашу форму...
Timer1.Enabled = True        'Включаем таймер...
End Sub

Private Sub Timer1_Timer()
'Отслеживаем, когда наша форма будет развернута...
If Me.WindowState = vbNormal Then
Timer1.Enabled = False
Form_Load 'Повторяем процедуру обмена родителями... :)
End If
End Sub
Вложения
NoDisplace_New.rar
Доработка...
(5.18 Кб) Скачиваний: 58

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 18.07.2008 (Пт) 1:09

Вообщем, смысл понятен... Оптимизируй уже сам... :)

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 18.07.2008 (Пт) 5:27

awl100Alex
О, то что нужно. Благодарю :)
Только сворачивать я буду в трей, но не суть.

Proxy
Мне очень понравилась идея бокового меню в WinVista.
Я очистил весь рабочий стол от значков, а всё что нужно понапихал на панель.
Но боковое меню доканало меня тем, что свернув все окна, оно тоже сворачивается. И лезть к нему приходится в 2 клика.
Такчто я пишу свою панельку, заодно она будет быстрее грузиться, я смогу засунуть на панель всё, что угодно, и вся эта фигнота будет у меня не только под вистой, но и под xp.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 18.07.2008 (Пт) 9:42

Alprog
а гугловская панель так же себя ведет? (щас просто под рукой нету, чтоб самому глянуть...)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 18.07.2008 (Пт) 14:29

Я с такой панелью не сталкивался.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 26.07.2008 (Сб) 19:14

Сегодня сел снова поковырять прогу и кое-как решил траблу.

Проблема была в том, что запрос выполняется n-ое время, несколько долей секунд. Но приложение ведёт себя так, как если бы всё это время выполнялся большой цикл без DoEvents. То есть попросту на эту долю секунду приложение вырубается. А так как такие "вырубы" в программе шли регулярно, то они проявлялись в качестве задержки реакции программы при наборе текста или клике мыши.

Вообще, я так понимаю, такие вещи решаются выделением отдельного потока, но как-то у меня не заладилось ни с потоками, ни с фиберами, в итоге, я пошёл другим путём.

Я запускаю невидимое приложение, которое затем открывает видимое. Невидимое выполняет все запросы WMI, а видимое просто соединяется с невидимым через DDE и считывает данные.
Получается, что все "тормоза" происходят в невидимом приложении, а пользователь наслаждается быстрым откликом программы.

Перед закрытием видимой проги, она, разумеется, убивает невидимое приложение, и вся эта галиматья почти не жрёт оперативу и процессорное время, так что, несмотря на корявость реализации, способ вполне приемлимый :lol:

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 26.07.2008 (Сб) 23:15

Ты, наверное, перепутал топики... :shock:
То, что ты написал здесь, больше подходит к твоему топику "Наблюдение за параметром в WMI"??? :roll:

Кстати, может знаешь...
Я вот тоже пытаюсь осилить WMI, но у меня все время идут спотыкания вот в этом месте...

Код: Выделить всё
For Each objItem In colItems


Пишет - "Автоматическая ошибка"... :( Ты случайно не знаешь почему и как исправить???

P.S.
К Модераторам...
Знаю, что вопрос не в тему, но мои попытки отправить сообщение в личку автора сопроводились какими-то DEBUG-ERROR-ами. Так что извините... :(

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.07.2008 (Сб) 23:48

Пишет - "Автоматическая ошибка"... Ты случайно не знаешь почему и как исправить???


Потому что переводчиков, переводивших твой VB, надо казнить в очень жестокой форме.

"Автоматическая ошибка" -- это что-то сказачное. Можно даже не стараться спровоцировать её, она сама возникнет автоматически :lol:

На самом деле, там Automation error (переводчикам опять же, надо на лбу сделать татуировку "[Automation] is not [Automatic], [Automation] is noun, but [Automatic] is adjective").

Она там потому, что, когда код пытается получить у объекта colItems энумератор, внутри метода объекта colItems, возвращающего энумератор, почему-то происходит ошибка.

Знаю, что вопрос не в тему, но мои попытки отправить сообщение в личку автора сопроводились какими-то DEBUG-ERROR-ами. Так что извините...

Так это Mail.ru виноваты, их сервера шлют, всякую, извините, лажу, на вполне нормальные запросы об отправке почты. Причём, почты отправляется, а серверы всё равно шлют лажу, что мол, Try again later.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 27.07.2008 (Вс) 0:48

awl100Alex
Ой, и правду не та тема.
Наделал тем - сам себя запутал. Каюс :oops:

Пишет - "Автоматическая ошибка"... Ты случайно не знаешь почему и как исправить???

У меня такой проблемы не было.
Попробуй сгенерить код на WMICodeCreator, его можно там же и запустить/протестить.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 27.07.2008 (Вс) 1:15

...почему-то происходит ошибка


Понятно... :( Хотелось бы знать почему?..

Попробуй сгенерить код на WMICodeCreator, его можно там же и запустить/протестить.


Спасибо за подсказку, попробую... :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.07.2008 (Вс) 1:29

Хотелось бы знать почему?..

По приведённому кусочку кода (по одной строчке) определить это невозможно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 27.07.2008 (Вс) 1:32

Спасибо за подсказку, попробую...

Там выбирай, чтобы генериловало на VBScript.

А потом чтобы перевести на VB6 достаточно "Wscript.Echo" заменить на что-нибудь вроде "me.caption =". Остальные команды на ура работают и в VB6.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 27.07.2008 (Вс) 1:42

Alprog
Да, я знаю... Спасибо! :)

Хакер
По приведённому кусочку кода (по одной строчке) определить это невозможно.


Это из кода Alprog темы "Наблюдение за параметром в WMI"...
http://bbs.vbstreets.ru/viewtopic.php?t=37111
У меня он не работает, как и подобные... Вот и интересуюсь...

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 27.07.2008 (Вс) 7:57

awl100Alex
Ну там же у меня тоже вырвано из контекста.
Вот держи весь проект:
http://www.sendspace.com/file/e9ka4x
Если и он не заработает, то это от машины зависит, наверное.

з.ы. Мне пришло аж 5 личных сообщений от тебя :shock:
Я тут тоже новичок, да и хожу на форум не регулярно,
не освоился ещё со всем функционалом форума :)

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 27.07.2008 (Вс) 9:50

Проект скачал, попробовал... проблема таже... :(

Вообщем, открою я лучше новую тему - так будет правильно... может кто сталкивался с нечто подобным, подскажут. Тема такая «WMI – ошибка в получении энумератора...»
http://bbs.vbstreets.ru/viewtopic.php?p=6698697#6698697

Мне пришло аж 5 личных сообщений от тебя

Извини, за спам... Хакер видимо прав - что-то там с почтой не то было.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

    TopList