Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск немодальной формы с кнопкой свернуть / 4 сообщений из 4, страница 1 из 1
28.04.2012, 14:44
    #37775983
v4mp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск немодальной формы с кнопкой свернуть
Возник вопрос.
запускаю немодальную форму с кнопкой свернуть.
Модуль и функция открытия формы
Код: vbnet
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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Option Explicit 
Option Private Module 
 
Public hwndMain As Long 
 
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _ 
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _ 
    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal WindowStyles As Long) As Long 
Private Declare Function ShowWindow Lib "user32.dll" _ 
    (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long 
Enum WindowStyles 
    WS_OVERLAPPED = &H0 
    WS_POPUP = &H80000000 
    WS_CHILD = &H40000000 
    WS_MINIMIZE = &H20000000 
    WS_VISIBLE = &H10000000 
    WS_DISABLED = &H8000000 
    WS_CLIPSIBLINGS = &H4000000 
    WS_CLIPCHILDREN = &H2000000 
    WS_MAXIMIZE = &H1000000 
    WS_BORDER = &H800000 
    WS_DLGFRAME = &H400000 
    WS_VSCROLL = &H200000 
    WS_HSCROLL = &H100000 
    WS_SYSMENU = &H80000 
    WS_THICKFRAME = &H40000 
    WS_GROUP = &H20000 
    WS_TABSTOP = &H10000 
    WS_MINIMIZEBOX = &H20000 
    WS_MAXIMIZEBOX = &H10000 
    WS_CAPTION = WS_BORDER Or WS_DLGFRAME 
    WS_TILED = WS_OVERLAPPED 
    WS_ICONIC = WS_MINIMIZE 
    WS_SIZEBOX = WS_THICKFRAME 
    WS_OVERLAPPEDWINDOW = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX 
    WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW 
    WS_POPUPWINDOW = WS_POPUP Or WS_BORDER Or WS_SYSMENU 
    WS_CHILDWINDOW = WS_CHILD 
End Enum 
 
Public Sub FormStart(fForm As MSForms.UserForm, bMax As Boolean) 
Application.EnableCancelKey = xlDisabled 
hwndMain = FindWindow("ThunderDFrame", fForm.Caption) 
Do While hwndMain = 0 
    hwndMain = FindWindow("ThunderDFrame", fForm.Caption) 
    DoEvents 
Loop 
If bMax = True Then 
    SetWindowLong hwndMain, -16, WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX + WS_MAXIMIZEBOX '+ WS_SIZEBOX 
    Else 
    SetWindowLong hwndMain, -16, WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX '+ WS_MAXIMIZEBOX '+ WS_SIZEBOX 
End If 
DoEvents 
ShowWindow hwndMain, 1 
End Sub 



Вопрос №1. При сворачивании формы она сворачивается в таскбар внизу, как и надо. Однако при сворачивании самого эксэля элемент формы пропадает из таскбара внизу и остается только элемент эксэля. При повторном разворачивания эксэля элемент формы опять появляется в таскбаре.
Подскажите, как можно сделать, чтобы и при сворачивании эксэля в таскбаре внизу оставалось два элемента - сам эксэль и запущенная форма?
Вопрос №2. При выводе сообщений с такой формы все сообщения (например, msgbox) естественно становятся модальными по отношению к application. Возможно ли переназначить их модальность по отношению не к application, а именно к открытой форме. В принципе, msgbox и inputbox можно заменить на свои формочки и использовать именно так, но может есть красивое решение?
...
Рейтинг: 0 / 0
28.04.2012, 15:57
    #37776137
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск немодальной формы с кнопкой свернуть
1) WS_CAPTION + WS_SYSMENU ...
Нужно or, а не плюс. Хотя вряд ли поможет.

2) Свои формочки все равно будут модальны к application
...
Рейтинг: 0 / 0
28.04.2012, 16:51
    #37776221
v4mp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск немодальной формы с кнопкой свернуть
1)не помогло(

2)имел ввиду, чтобы сделать новые формы не модальными. Но тогда они станут не модальными и по отношению к первой форме, что опять возвращает меня к вопросу о переназначении модальности(
...
Рейтинг: 0 / 0
28.04.2012, 17:51
    #37776279
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск немодальной формы с кнопкой свернуть
Назначить окно модальным тому или другому можно только если эти окна в разных потоках. Если в одном — поток будет занят модальным окном, значит оно будет модально всему приложению.
В экселе один поток.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск немодальной формы с кнопкой свернуть / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]