Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
3 / 3 / 0
Регистрация: 17.11.2014
Сообщений: 118
1

Как сделать кнопку "Свернуть" рядом с крестиком?

24.11.2014, 16:01. Показов 10828. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Vba макрос создаю USerForm , в вверху правом углу есть крестик , что бы закрыт форму, а как туда добавить сворачивание ? Что бы форма сворачивалась вместе с активной книгой в которой идут изменения ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2014, 16:01
Ответы с готовыми решениями:

Как сделать модальную так, чтоб она оставляла активную кнопку Свернуть?
C++ Builder 2009 С основной формы открывается модальное окно, через ShowModal(). При это не...

Как сделать кнопку рядом с названием на форме?
Интересует вопрос, как сделать дополнительные кнопки (кроме свернуть, закрыть, развернуть),...

Как добавить кнопку с крестиком для закрытия в QToolBar во время его плавания ?
Ну собственно сабж. Есть QToolBar на QMainWindow, этот тулбар конечно же moveable, так вот я его...

Как сделать Закрытие/Открытие элемента, с крестиком?
https://codepen.io/bogdanmaslyanik/pen/MPydzm <div class="alblackover"> <h6 id="form_show"...

11
6082 / 1326 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
24.11.2014, 18:12 2
Здравствуйте, Fiot,
Например, можно поступить так:
  1. Нарисовать под крестиком обычную кнопку (CommandButton).
  2. Присвоить ей текст вроде "_" или "Свернуть".
  3. В обработчике нажатия на кнопку написать следующий код:
    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    #If VBA7 Then
        Private Declare PtrSafe Function ShowWindow Lib "User32.dll" (ByVal hWnd As LongPtr, ByVal nCmdShow As Long) As Boolean
    #Else
        Private Declare Function ShowWindow Lib "User32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Boolean
    #End If
     
    Private Sub CommandButton1_Click()
        ShowWindow Application.hWnd, 6
    End Sub
С уважением,
Аксима
1
3 / 3 / 0
Регистрация: 17.11.2014
Сообщений: 118
25.11.2014, 00:13  [ТС] 3
Не получается, выдает ошибку....
Можно посмотреть пример?
0
Заблокирован
25.11.2014, 07:48 4
Лучший ответ Сообщение было отмечено Fiot как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow 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 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 DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Const GWL_STYLE As Long = (-16)
Const WS_SYSMENU As Long = &H80000
Const WS_MINIMIZEBOX As Long = &H20000
Const WS_MAXIMIZEBOX As Long = &H10000
Const SW_SHOWMAXIMIZED As Long = 3
Const SW_SHOWMINIMIZED As Long = 2
Const SW_SHOWNORMAL As Long = 1
 
Private Sub UserForm_Activate()
'добавляет на форму значки минимизировать форму и значок развернуть окно на полный экран
Dim lngFrmHndl As Long
Dim 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)
    DrawMenuBar lngFrmHndl
End Sub
Правда, как быть с VBA7 - не знаю
1
3 / 3 / 0
Регистрация: 17.11.2014
Сообщений: 118
25.11.2014, 09:31  [ТС] 5
Куда вот это вставить ?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow 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 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 DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Const GWL_STYLE As Long = (-16)
Const WS_SYSMENU As Long = &H80000
Const WS_MINIMIZEBOX As Long = &H20000
Const WS_MAXIMIZEBOX As Long = &H10000
Const SW_SHOWMAXIMIZED As Long = 3
Const SW_SHOWMINIMIZED As Long = 2
Const SW_SHOWNORMAL As Long = 1
Это все идет без программы sub ..... я не совсем понимаю
0
Заблокирован
25.11.2014, 09:33 6
Цитата Сообщение от Fiot Посмотреть сообщение
Куда вот это вставить ?
В самый верх модуля формы.
1
3 / 3 / 0
Регистрация: 17.11.2014
Сообщений: 118
25.11.2014, 10:22  [ТС] 7
ААА все разобрался ))) Спасибо ) и он добавил , это то что надо было ) спасибо ))

Добавлено через 42 минуты
А можно ли этот скрипт привязать к активной странице в которой идут изменения, что бы он сворачивал и форму и саму книгу?
или я так понимаю это как то делается через vba7 ??

Добавлено через 3 минуты
Хотя сделав просто вот это код, он начал сворачивать
Visual Basic
1
2
3
Private Sub CommandButton1_Click()
    ShowWindow Application.hWnd, 6
End Sub
Добавлено через 3 минуты
Совместив его конечно с этим скриптом
Visual Basic
1
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
0
1261 / 147 / 32
Регистрация: 11.02.2011
Сообщений: 418
25.11.2014, 16:36 8
Лучший ответ Сообщение было отмечено Fiot как решение

Решение

В своё время отыскал очень простой и вкусный класс на эту тему. Вот пример.
Вложения
Тип файла: xls СвободнаяФорма.xls (73.0 Кб, 265 просмотров)
0
3 / 3 / 0
Регистрация: 17.11.2014
Сообщений: 118
25.11.2014, 16:49  [ТС] 9
Да , но там нужно еще какой то стиль формы прописывать полностью ?
так как сама программа в userform не работает , если только заданы все скрипты в Стиле, я правильно понял ?
0
1261 / 147 / 32
Регистрация: 11.02.2011
Сообщений: 418
25.11.2014, 17:58 10
Не понял вопрос. Класс CFormChanger подгружаем, на этапе инициализации формы встявляем код, удаляя не нужные опции.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub UserForm_Initialize()
    Set mclsFormChanger = New CFormChanger
    'можно менять размер
    mclsFormChanger.Sizeable = True
    'показать кнопку максимизировать
    mclsFormChanger.ShowMaximizeBtn = True
    'показать кнопку мимимизировать
    mclsFormChanger.ShowMinimizeBtn = True
    'показать заголовок
    mclsFormChanger.ShowCaption = True
    'показать кнопку закрыть
    mclsFormChanger.ShowCloseBtn = True
    'показать иконку
    mclsFormChanger.ShowTaskBarIcon = True
    Set mclsFormChanger.Form = Me
End Sub
Только если разрешаете ресайз, надо ещё прописывать изменение положения элементов в форме, в зависимости от размеров.
1
3 / 3 / 0
Регистрация: 17.11.2014
Сообщений: 118
25.11.2014, 18:43  [ТС] 11
Как пристально подгрузить cformchanger ?? Просто прим создание формы идет только модуль ...
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
26.11.2014, 07:06 12
Цитата Сообщение от Fiot Посмотреть сообщение
Как пристально подгрузить cformchanger ??
Экспортировать одноименный модуль класса из примера в файл с расширением .cls, а затем импортировать его в свой проект. Делается через нажатие ПКМ в дереве проекта (Project Explorer).
1
26.11.2014, 07:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2014, 07:06
Помогаю со студенческими работами здесь

Как поставить на форме кнопку свернуть?
Как поставить на форме кнопку свернуть??? Искал свойства, что то не нашёл помогите!!!

Как на кнопку свернуть назначить свое действие?
Подскажите мне надо сделать так, чтобы при нажатии на кнопку свернуть, форма не сворачивалась, а...

Сделать так, чтобы объект UserForm отображался панели задач и рядом с кнопкой [X] имел кнопку [-] (скрыть)
Нужно, что я мог скрывать свой объект userform, чтобы он не мешался, но по необходимости нажимал на...

Вот есть кнопочки: свернуть, развернуть, закрыть. Как скрыть кнопку развернуть?
Вот есть кнопочки: свернуть, развернуть, закрыть. Как скрыть кнопку развернуть? Что кнопки свирнуть...

Как по нажатию на кнопку можно открыть папку, которая находится рядом с экзешником проекта
Здравствуйте. У меня вот такой вопрос. Как по нажатию на кнопку можно открыть папку, которая...

Создать кнопку свернуть
Здравствуйте! Подскажите по такому вопросу. Можно ли создать кнопку свернуть рядом с кнопкой...


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

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