Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Форма в ВБА и ВБ не одно и тоже / 18 сообщений из 18, страница 1 из 1
24.04.2011, 20:42
    #37231053
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма в ВБА и ВБ не одно и тоже
Подскажите как в форме на ВБА прикурутить рядом с крестиком кнопку свернуть как на форме в ВБ с тем же функционалом. Спасибо
...
Рейтинг: 0 / 0
24.04.2011, 20:46
    #37231058
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма в ВБА и ВБ не одно и тоже
и ещё забыл сказать, чтобы потом когда мы свернём форму с помощью этой кнопки, чтобы на панели задач она отображалась вкладкой, например с именем "SQL"
Правда может это и решать не придётся - произойдёт само собой
...
Рейтинг: 0 / 0
24.04.2011, 21:12
    #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
24.04.2011, 21:55
    #37231111
ZVI
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
24.04.2011, 21:56
    #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
24.04.2011, 22:16
    #37231130
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма в ВБА и ВБ не одно и тоже
Но сворачивание VBA формы, будет в левый нижний угол, а не в панель задач :-)
...
Рейтинг: 0 / 0
25.04.2011, 08:23
    #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
25.04.2011, 16:14
    #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
25.04.2011, 18:08
    #37232519
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма в ВБА и ВБ не одно и тоже
Посмотрел Вариант Дмитрия, понравился, больше всех
но вопросы остались
как сделать если я хочу вставить пиктограмму с номером FaceId = 5???
почему UserForm_Activate, а не инициализация??
и опять же с кнопкой средней между закрыть и свернуть, то есть Свернуть в окно или убрать, или если уж на неё нажал, чтобы она разворачивала форму в масштабе, но лучше нафиг её
...
Рейтинг: 0 / 0
27.04.2011, 19:34
    #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
27.04.2011, 20:40
    #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
27.04.2011, 20:43
    #37236830
Дмит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма в ВБА и ВБ не одно и тоже
надёюсь поняли, теги [b] уберите ;)
...
Рейтинг: 0 / 0
27.04.2011, 21:08
    #37236852
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма в ВБА и ВБ не одно и тоже
Дмит,

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


ну тогда уж, как сделать чтобы кнопка Развернуть - средняя кнопка, в случае того когда форма маленькая разворачивала её как могла, сделала просто чуть больше. Бывают случаи, разворачивает форму на весь экран, но часть формы ввиду её малого размера выглядит просто серым прямоугольником. Спасибо
...
Рейтинг: 0 / 0
29.04.2011, 18:35
    #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
01.05.2011, 23:11
    #37242186
Дмит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма в ВБА и ВБ не одно и тоже
Запарился Эндрю )))

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


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