Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
CatsTail
#1

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

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

Найти ответ пока не удается (хотя, вроде бы, вопрос прост). Работаю на VB6.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 14:52
Ответы с готовыми решениями:

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

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

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

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

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

16
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
28.09.2011, 16:05 #2
BorderStyle=0 наверно...
0
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
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. Странно... отображение в таскбаре можно достичь только ценой модальности?!
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
29.09.2011, 10:35 #5
Скорее ценой НЕмодальности, т.е. при вызове Form2 с модальностью в таскбаре останется только Form1, без модальности - обе.
0
Comanche
29.09.2011, 12:56 #6
В общем, предлагаю запускать всё без vbModal, а модальность пробовать реализовать 'обходным' способом (где-то было в Сети).
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
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. В полноэкранном режиме. А потом суетиться: куда делось приложение...
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
02.10.2011, 11:35 #11
Эм....
Может я что-то не понял.... но в чем в данном случае заключается 'модальность' ??? По-моему это только пустая загрузка проца...
0
CatsTail
02.10.2011, 11:40 #12
Модальность в том, что пройти точку программы можно, лишь выполнмив на форме некие действия, после которых форма скрывается. А процессор (я проверял) практически не грузится.
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
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, как и полагается.
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
02.10.2011, 13:31 #16
мда, батенька, да Вы извращенец )))
этож надо было такое придумать )
0
Comanche
02.10.2011, 13:32 #17
Но ведь работает!
И, похоже, это единственный workaround...
02.10.2011, 13:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2011, 13:32

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

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

Функция mail возвращает True, но письма нет
Приветствую всех. Отправляю письмо с помощью PHP. Функция Mail выдаёт True, но...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru