Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
CatsTail
1

У VB-формы установлено ShowInTaskBar=True, но в TaskBar-e ee нет

28.09.2011, 14:52. Показов 1911. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Найти ответ пока не удается (хотя, вроде бы, вопрос прост). Работаю на VB6.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2011, 14:52
Ответы с готовыми решениями:

все установлено...но звука нет
подскажите в чем здесь причина? установила windovs 7, после, как положено драйвера на устройства...

Как проверить установлено соединение или нет
Здравствуйте! Нужно проверить установлено соединение или нет. Вот функция...

Соединение по wi-fi установлено, но интернета все равно нет. Ubuntu 16.04
Подключаюсь к роутеру и после некоторого ожидания вижу привычное сообщение: >Соединение...

Посчитать сколько установлено разного ПО в организации и у кого оно установлено
Добрый день! Простите за не информативный заголовок, не знаю как кратко сформулировать. Исходные...

16
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
28.09.2011, 16:05 2
BorderStyle=0 наверно...
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
28.09.2011, 16:13 3
Забыл... второй вариант - это когда форма модальная.
Т.е. если в Form1 вызвать Form2.Show 1, то в таскбаре ничего не изменится и будет только Form1.
0
Comanche
28.09.2011, 23:21 4
Попробовал вот что:

Модуль:
Visual Basic
1
2
3
4
Sub Main()
    Form1.Show vbModal
    MsgBox 'Если ты видишь это сообщение на фоне формы - то WS_EX_APPWINDOW убивает vbModal.'
End Sub
Форма:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Declare Function GetWindowLong Lib 'user32' Alias 'GetWindowLongA' (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib 'user32' Alias 'SetWindowLongA' (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_EXSTYLE = (-20)
'
Private Sub Form_Activate()
    Dim currStyle As Long, newStyle As Long
    
    Me.Hide
    
    currStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
    newStyle = currStyle Or WS_EX_APPWINDOW
    
    SetWindowLong Me.hWnd, GWL_EXSTYLE, newStyle
    
    Me.Show
End Sub
Увы, хотя форма и появляется в таскбаре, но сообщение видно прямо на фоне формы - т.е. как будто форму запускали безо всякого vbModal. Странно... отображение в таскбаре можно достичь только ценой модальности?!
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
29.09.2011, 10:35 5
Скорее ценой НЕмодальности, т.е. при вызове Form2 с модальностью в таскбаре останется только Form1, без модальности - обе.
0
Comanche
29.09.2011, 12:56 6
В общем, предлагаю запускать всё без vbModal, а модальность пробовать реализовать 'обходным' способом (где-то было в Сети).
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
29.09.2011, 13:03 7
А есть ли в этом смысл?
Модальное окно обычно дополнительное. Т.е., к примеру, для ввода каких-то параметров при редактировании чего-то большого.
К примеру, диалог вставки картинки в HTMLEdit'e.
Я думаю, нет смысла показывать его название в таскбаре, т.к. все равно, кроме него никакую форму активировать нельзя, а по названию родительской формы будет и так понятно, что происходит.
0
CatsTail
29.09.2011, 13:49 8
Спасибо, коллеги!
Действительно модальность и TaskBar не совмещаются (по крайней мере, у меня не получилось). Пришлось имитировать модальность...
Comanche
29.09.2011, 14:06 9
Поделись способом имитации модальности, уж коль до него дело дошло...
CatsTail
01.10.2011, 23:52 10
Уважаемый Comanche!
Даже немного стыдно Вам такое показывать. Короче говоря:
Visual Basic
1
2
3
4
5
6
        frmMain.hide
        frmMod.Show
        Do
          if not frmMod.Visible Then Exit Do
          DoEvents
        Loop
Сам понимаю, что это не модальность, но нечто близкое. И мою проблему
решает (вроде бы). Проверил в XP, сколько CPU забирает холостой цикл.
Получилось - почти ничего. А моя проблема в том, что клиенты обожают,
вывзвав настоящее модальное окно (невидимое в таскбаре), взять, и запустить FAR. В полноэкранном режиме. А потом суетиться: куда делось приложение...
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
02.10.2011, 11:35 11
Эм....
Может я что-то не понял.... но в чем в данном случае заключается 'модальность' ??? По-моему это только пустая загрузка проца...
0
CatsTail
02.10.2011, 11:40 12
Модальность в том, что пройти точку программы можно, лишь выполнмив на форме некие действия, после которых форма скрывается. А процессор (я проверял) практически не грузится.
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
02.10.2011, 12:04 13
а цикл то тогда зачем нужен?
Если открыта еще одна форма, то с ней можно спокойно работать вне зависимости от твоего цикла.
Если никакая другая форма не открыта, то цикл не нужен...
0
Comanche
02.10.2011, 13:21 14
Усё, победил.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
' Код модуля - проект стартует отсюда:
'
Sub Main()
    Form1.Show vbModal
    MsgBox 'Этот мессадж должен появиться ПОСЛЕ закрытия формы Form1!'
End Sub
'
' Код формы Form1:
'
Private onceActivated As Boolean
'
Private Sub Form_Activate()
    If onceActivated Then Exit Sub
    
    Me.Caption = Me.Caption   ' << обязательно! не спрашивайте, почему :))
    frmInvisible.Show vbModal ' << модально!
    onceActivated = True      ' << чтобы выполнилось только один раз!
    
End Sub
'
' Код формы frmInvisible:
'
Private Sub Form_Load()
    ' Это форма-невидимка, показываемая модально по отношению к Form1.
    ' На ней должен быть размещён таймер Timer1.
    Me.BorderStyle = 0
    Me.Caption = ''
    Me.Width = 0
    Me.Height = 0
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub
'
Private Sub Timer1_Timer()
    Timer1.Enabled = False ' << выполнится единожды!
    Unload Me ' << форма выгружается, не успев даже появиться!
End Sub
Только не спрашивайте, почему оно работает
Comanche
02.10.2011, 13:27 15
PS: если убрать из проекта модуль, а вместо него воткнуть в проект стартовую форму frmStartUp с кнопкой Command1, и в код Command1_Click поместить бывший код процедуры Sub Main, то оно тоже сработает - после нажатия кнопки frmStartUp.Command1 в таскбаре будет ОБЕ формы (frmStartUp и Form1), причём frmStartUp будет модальной по отношению к Form1, как и полагается.
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
02.10.2011, 13:31 16
мда, батенька, да Вы извращенец )))
этож надо было такое придумать )
0
Comanche
02.10.2011, 13:32 17
Но ведь работает!
И, похоже, это единственный workaround...
02.10.2011, 13:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2011, 13:32
Помогаю со студенческими работами здесь

TTrayIcon невозможно настроить так, чтобы при сворачивании формы, значок в TaskBar оставался
Доброго времени суток, уважаемые форумчане. Проблема немного странная. Не могу настроить...

Свойства контрола webbrowser: addressbar:true, statusbar:true, menubar:true
Я чайник, конечно, но... решил и я свой броузер написать :) Беру контрол webbrouser, кидаю его на...

Нет звука: "Выходное аудиоустройство не установлено".
Отдавал компьютер в ремонт (заменили материнскую плату),после этого поставил windows 7 x86. Он...

Убрать программу с нижнего левого угла (ShowInTaskbar)
Здравствуйте! Задача наверно для кого-то проста, но я чего-то совсем не могу понять как можно...

Vb ругается при RunTime изменении свойства SHOWINTASKBAR
Vb ругается при RunTime изменении свойства SHOWINTASKBAR, говорит, что запрещено...

Как true/false преобразовать в есть/нет?
Есть таблица CREATE TABLE nagr (id_nagr INTEGER UNIQUE NOT NULL, _year INTEGER NOT NULL, id_teach...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru