powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Форма в ВБА и ВБ не одно и тоже
18 сообщений из 18, страница 1 из 1
Форма в ВБА и ВБ не одно и тоже
    #37231053
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как в форме на ВБА прикурутить рядом с крестиком кнопку свернуть как на форме в ВБ с тем же функционалом. Спасибо
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37231058
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё забыл сказать, чтобы потом когда мы свернём форму с помощью этой кнопки, чтобы на панели задач она отображалась вкладкой, например с именем "SQL"
Правда может это и решать не придётся - произойдёт само собой
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37231078
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
•Для того, чтобы убрать кнопку Закрыть, представляющую собой небольшой крестик, расположенный в правом углу заголовка формы, достаточно скопировать весь нижеприведённый код в модуль нужной формы
Кусок ниже вставлять вверху формы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Declare Function FindWindow _ 
        Lib "user32.dll" Alias "FindWindowA" ( _ 
        ByVal lpClassName As String, _ 
        ByVal lpWindowName As String) As Long 
Private Declare Function GetWindowLong _ 
        Lib "user32.dll" Alias "GetWindowLongA" ( _ 
        ByVal hWnd As Long, _ 
        ByVal nIndex As Long) As Long 
Private Declare Function SetWindowLong _ 
        Lib "user32.dll" Alias "SetWindowLongA" ( _ 
        ByVal hWnd As Long, _ 
        ByVal nIndex As Long, _ 
        ByVal dwNewLong As Long) As Long 
Кусок ниже вставлять в раздел Initialize
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub UserForm_Initialize() 
    Dim ihWnd As Long, iStyle As Long 

    ihWnd = FindWindow(vbNullString, Me.Caption) 
    iStyle = GetWindowLong(ihWnd, - 16 &) 
    SetWindowLong ihWnd, - 16 &, iStyle And Not &H80000 
End Sub
Неужели убрать кнопку Закрыть можно, а добавить кнопку Свернуть нельзя???
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37231111
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форму нужно загружать в немодальном режиме:

Код вызова формы:
Код: plaintext
1.
2.
3.
' Отобразить форму в немодальном режиме
Sub FormLoad()
  UserForm1.Show  [b]0 [/b][color=red][/color]
End Sub

Код модуля формы:
Код: plaintext
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.
' Дективировать кнопку "Закрыть" (крестик) формы, активировать кн. "Свернуть"
' Код в модуле формы
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
       (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 Declare Function GetSystemMenu Lib "user32" _
       (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _
       (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) _
        As Long

Private Const GWL_STYLE As Long = - 16 
Private Const WS_SYSMENU As Long = &H80000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const SC_CLOSE As Long = &HF060

' Код кнопки выхода
Private Sub CommandButton1_Click()
  Unload Me
End Sub

' Установка стиля меню формы
Private Sub UserForm_Initialize()
  Dim lngFrmHndl As Long, lngStyle As Long
  lngFrmHndl = FindWindow(vbNullString, Me.Caption)
  ' Задать стиль
  lngStyle = GetWindowLong(lngFrmHndl, GWL_STYLE) Or WS_SYSMENU Or WS_MINIMIZEBOX  ' Or WS_MAXIMIZEBOX
  ' Установить стиль
  SetWindowLong lngFrmHndl, GWL_STYLE, lngStyle
  ' Деактивировать кн. "Закрыть"
  DeleteMenu GetSystemMenu(lngFrmHndl,  0 &), SC_CLOSE,  0 &
End Sub
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37231112
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
пробуйте, неутомимый Вы наш
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Const GWL_STYLE&= - 16 &
Const WS_MINIMIZEBOX& = &H20000&

Private Sub UserForm_Initialize()
    Dim ihWnd As Long, iStyle As Long 

    ihWnd = FindWindow(vbNullString, Me.Caption) 
    iStyle = GetWindowLong(ihWnd, GWL_STYLE)
    SetWindowLong ihWnd, GWL_STYLE, iStyle + WS_MINIMIZEBOX 
End Sub
ЗЫ: не знаешь как, - спроси сначала у MS
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37231130
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но сворачивание VBA формы, будет в левый нижний угол, а не в панель задач :-)
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37231330
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
'Пример добавляет иконку в заголовок формы, кнопку свернуть и
'отображает форму на панель задач.
'
'Для работы примера поместите на Лист1 рисунок Image1 с подходящей
'картинкой для иконки формы.

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 Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
                ByVal hWndInsertAfter As Long, _
                ByVal X As Long, ByVal Y As Long, _
                ByVal cx As Long, ByVal cy As Long, _
                ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                (ByVal lpClassName As String, _
                ByVal lpWindowName As String) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                (ByVal hWnd As Long, ByVal wMsg As Long, _
                ByVal wParam As Long, _
                lParam As Any) As Long
Private Declare Function DrawMenuBar Lib "user32" _
                (ByVal hWnd As Long) As Long

Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const GWL_EXSTYLE = (- 20 )
Private Const HWND_TOP =  0 
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40
Private Const WS_EX_APPWINDOW = &H40000
Private Const GWL_STYLE = (- 16 )
Private Const WS_MINIMIZEBOX = &H20000
Private Const SWP_FRAMECHANGED = &H20
Private Const WM_SETICON = &H80
Private Const ICON_SMALL =  0 &
Private Const ICON_BIG =  1 &

Private Sub UserForm_Activate()
    AddIcon
    AddMinimiseButton
    AppTasklist Me
End Sub
'--------------------------------------------------------------------------------------
Private Sub AddIcon()
'добавляет иконку в заголовок формы
    Dim hWnd As Long
    Dim lngRet As Long
    Dim hIcon As Long
    hIcon = Лист1.Image1.Picture.Handle
    hWnd = FindWindow(vbNullString, Me.Caption)
    lngRet = SendMessage(hWnd, WM_SETICON, ICON_SMALL, ByVal hIcon)
    lngRet = SendMessage(hWnd, WM_SETICON, ICON_BIG, ByVal hIcon)
    lngRet = DrawMenuBar(hWnd)
End Sub
'--------------------------------------------------------------------------------------
Private Sub AddMinimiseButton()
'добавляет кнопку свернуть в заголовок формы
    Dim hWnd As Long
    hWnd = GetActiveWindow
    Call SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) Or WS_MINIMIZEBOX)
    Call SetWindowPos(hWnd,  0 ,  0 ,  0 ,  0 ,  0 , SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE)
End Sub
'--------------------------------------------------------------------------------------
Private Sub AppTasklist(myForm)
'отображает форму на панели задач
    Dim WStyle As Long
    Dim Result As Long
    Dim hWnd As Long

    hWnd = FindWindow(vbNullString, myForm.Caption)
    WStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
    WStyle = WStyle Or WS_EX_APPWINDOW
    Result = SetWindowPos(hWnd, HWND_TOP,  0 ,  0 ,  0 ,  0 , SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_HIDEWINDOW)
    Result = SetWindowLong(hWnd, GWL_EXSTYLE, WStyle)
    Result = SetWindowPos(hWnd, HWND_TOP,  0 ,  0 ,  0 ,  0 , SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW)
End Sub
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37232286
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмит, спасибо за ответ, Ваш код ещё не тестил, сейчас посмотрю
по коду ZVI, опробовал, спасибо
всё же буду запускать в модальном режиме, тогда форма не является помехой для осуществления других действий, в немодальном режиме она мне даром не нужна
Форма.Show 0.1
'дективировать кнопку "Закрыть" - крестик в углу формы, активировать кнопку "Свернуть"
'код в модуль формы
Код: plaintext
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.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
       (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 Declare Function GetSystemMenu Lib "user32" _
       (ByVal hWnd As Long, ByVal bRevert As Long) As Long
       
'относится к деактивации кнопки "Закрыть" - крестик в углу формы
'Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

Private Const GWL_STYLE As Long = - 16 
Private Const WS_SYSMENU As Long = &H80000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
'относится к деактивации кнопки "Закрыть" - крестик в углу формы
'Private Const SC_CLOSE As Long = &HF060

Private Sub UserForm_Initialize()

Dim lngFrmHndl As Long, lngStyle As Long
  lngFrmHndl = FindWindow(vbNullString, Me.Caption)
  'задать стиль
  'Or WS_MAXIMIZEBOX - появление на форме кнопки "Свернуть в окно"
  lngStyle = GetWindowLong(lngFrmHndl, GWL_STYLE) Or WS_SYSMENU Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
  'установить стиль
  SetWindowLong lngFrmHndl, GWL_STYLE, lngStyle
  'относится к деактивации кнопки "Закрыть" - крестик в углу формы
  'DeleteMenu GetSystemMenu(lngFrmHndl,  0 &), SC_CLOSE,  0 &
'я в шоколаде, вот что мне нужно, вот что получилось, могли бы Вы разъяснить в строках
'задать стиль

'установить стиль
'что там можно изменять???
'можно ли убрать кнопку свернуть окно, то есть среднюю между закрыть и свернуть вообще???


по коду Скукотищи, опробовал, спасибо
в строке
ihWnd = FindWindow(vbNullString, Me.Caption)
выделяет FindWindow и сообщение функция не определена
?????



Возможно в коде Дмитрия уже есть ответы, посмотрю
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37232519
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел Вариант Дмитрия, понравился, больше всех
но вопросы остались
как сделать если я хочу вставить пиктограмму с номером FaceId = 5???
почему UserForm_Activate, а не инициализация??
и опять же с кнопкой средней между закрыть и свернуть, то есть Свернуть в окно или убрать, или если уж на неё нажал, чтобы она разворачивала форму в масштабе, но лучше нафиг её
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37236747
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где хоть можно прочесть про всевозмижные константы, может в них всё кроется:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const GWL_EXSTYLE = (- 20 )
Private Const HWND_TOP =  0 
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40
Private Const WS_EX_APPWINDOW = &H40000
Private Const GWL_STYLE = (- 16 )
Private Const WS_MINIMIZEBOX = &H20000
Private Const SWP_FRAMECHANGED = &H20
Private Const WM_SETICON = &H80
Private Const ICON_SMALL =  0 &
Private Const ICON_BIG =  1 &

Private Const GWL_STYLE As Long = - 16 
Private Const WS_SYSMENU As Long = &H80000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37236824
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полностью убрать кнопку развернуть (без свернуть) - не знаю, а активировать -

Код: plaintext
1.
2.
Private Const WS_MAXIMIZEBOX = &H10000
'................
Call SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37236830
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надёюсь поняли, теги [b] уберите ;)
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37236852
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмит,

спасибо, не ответили:
как сделать если я хочу вставить пиктограмму с номером FaceId = 1, которую вставляем когда создаём меню???


ну тогда уж, как сделать чтобы кнопка Развернуть - средняя кнопка, в случае того когда форма маленькая разворачивала её как могла, сделала просто чуть больше. Бывают случаи, разворачивает форму на весь экран, но часть формы ввиду её малого размера выглядит просто серым прямоугольником. Спасибо
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37240822
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,
'Что действительно на Label нельзя ставить фокус??
Установив на Label фокус получаем сообщение
Cant move focus to the control because it is invisible, not enabled or of a type that does not accept the focus
Гугл перевёл -
Не удается переместить фокус на контроль, потому что это невидимый, не включен или тип, который не принимает в центре внимания
Форма как форма за исключением того, что она сделана по слвету в топике:
имеет в углу три кнопки свернуть, свернуть в окно, закрыть, а также сворачивается в файл
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37242186
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запарился Эндрю )))

ну а по FaceId посмотри метод CopyFace, может поможет.
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37242310
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмит, по FaceId посмотреиь метод CopyFace
посмотрел мне кажется не то, мне не копировать нужно, Вы же как пишите hIcon = Лист1.Image1.Picture.Handle
То есть присваиваете "="
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37301294
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нынче на ВБ перешёл с ВБА, перешёл потому что возможностей больше. Ну смотрю про БордерСтиль, есть там 5 штук, есть 1 и 3 кнопки, а чтобы две было задача века??
...
Рейтинг: 0 / 0
Форма в ВБА и ВБ не одно и тоже
    #37310689
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрюгде хоть можно прочесть про всевозможные константы, может в них всё кроется:
[/src]при установке VB устанавливается так-же какая-то программа (название не помню, а VB под рукой нет, что-то навроде WinAPI32, ну вот с помощью неё и можно глянуть список различных констант использующихся в dll-ках Windows.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Форма в ВБА и ВБ не одно и тоже
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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