Создание пользовательской панели с выпадающим списком и кнопками
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание пользовательской панели с выпадающим списком и кнопками

Создание пользовательской панели с выпадающим списком и кнопками

Ответ
Поиск в этой теме
Непрочитано 10.02.2025, 09:07 #1
Создание пользовательской панели с выпадающим списком и кнопками
posetitel
 
Регистрация: 16.10.2013
Сообщений: 395

Приветствую коллеги!
Помнится раньше в СПДС GraphiCS была панелька, на которой можно было устанавливать масштаб размеров, т.е. выбрал масштаб, выделил размеры на чертеже и у этих размеров глобальным масштаб стал в соответствии с выбранным. Может и сейчас такое есть, я давно уже не пользовался СПДСом.
Так вот запилил я себе такую же панельку с помощью форм VBA, в свойствах формы свойство ShowModal установил в False. Скрин получившейся формы прилагаю.
Без этого свойства форма блокирует возможность работы в автокаде пока не произведу действия с формой, а вот со свойством ShowModal можно работать. Но складывается ощущение, что автокад постоянно обращается к форме и опрашивает ее из-за чего возникают небольшие тормоза при черчении.
Корректна ли моя реализация отдельной панельки для установки масштаба? (Может все эти подтормаживания никак не связаны с формой?) Или можно стандартными средствами автокада выполнить панельку? На просторах форума нашел только как сувои кнопки создавать, а как выпадающий список делать, а уж тем более как далее считывать из него информацию в программах не нашел.

Миниатюры
Нажмите на изображение для увеличения
Название: Форма.png
Просмотров: 42
Размер:	5.2 Кб
ID:	266698  

Просмотров: 692
 
Непрочитано 10.02.2025, 09:55
1 | #2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


VBA самим своим наличием дико тормозил ACAD (на adn-cis.org даж статья по этому поводу была). И без кода / проекта вряд ли кто-то поможет. Offtop: Лично я даже не возьмусь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.02.2025, 10:01
1 | #3
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от posetitel Посмотреть сообщение
Помнится раньше в СПДС GraphiCS была панелька, на которой можно было устанавливать масштаб размеров,
СПДС на ObjectARX написан) А VBA и дружественный интерфейс - это эксюморон в настоящее время.

На .Net это стандартными средствами языка делается - палитры, модальные и немодальные окна. Можно сделать, например, плавающую панель у курсора для команды пользователя.

----- добавлено через ~4 мин. -----
p.s. Если перешли от стадии "лишь бы как-нибудь работало" к стадии "как сделать чтобы было удобно работать" - с VBA придется попрощаться.
Сергей812 вне форума  
 
Автор темы   Непрочитано 10.02.2025, 10:47
#4
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Почему не выложил код сразу, так просто потому, что считаю, что дело вовсе не в коде, а в принципе применения форм. Тормозит то не из-за выполнения кода, я его даже не всегда запускаю из формы, а тормозит наличие самой формы на чертеже, которая по ощущениям стягивает на себя какие-то ресурсы (как будто идет постоянное опрашивание этой формы. Но опять же это чисто субъективные ощущения, замерить нет возможности, да и тормоза эти весьма незначительные на небольших чертежах, а на большом чертеже тормоза могут быть и по другим причинам).
Собственно, ожидания и подтверждаются (ссылка на публикацию adn-cis.org, отзывы).
Свойство, на которое грешу, обвел красным на картинке
Вот код. На чистом автокаде можно выполнить форму с выпадающим списком? Я уже понял, что .Net намного лучше для реализации автоматизации черчения, но и порог входа туда довольно высокий.
Код:
[Выделить все]
Private Sub UserForm_Initialize()
    'cmbOptions.Style = fmStyleDropDown
    ' Добавляем элементы в выпадающий список
    cmbOptions.AddItem "Иное_значение"
    cmbOptions.AddItem "100:1"
    cmbOptions.AddItem "50:1"
    cmbOptions.AddItem "40:1"
    cmbOptions.AddItem "20:1"
    cmbOptions.AddItem "10:1"
    cmbOptions.AddItem "5:1"
    cmbOptions.AddItem "4:1"
    cmbOptions.AddItem "2.5:1"
    cmbOptions.AddItem "2:1"
    cmbOptions.AddItem "Иное_значение"
    cmbOptions.AddItem "1:1"
    cmbOptions.AddItem "1:2"
    cmbOptions.AddItem "1:2.5"
    cmbOptions.AddItem "1:4"
    cmbOptions.AddItem "1:5"
    cmbOptions.AddItem "1:10"
    cmbOptions.AddItem "1:15"
    cmbOptions.AddItem "1:20"
    cmbOptions.AddItem "1:25"
    cmbOptions.AddItem "1:40"
    cmbOptions.AddItem "1:50"
    cmbOptions.AddItem "1:75"
    cmbOptions.AddItem "1:100"
    cmbOptions.AddItem "1:200"
    cmbOptions.AddItem "1:400"
    cmbOptions.AddItem "1:500"
    cmbOptions.AddItem "1:800"
    cmbOptions.AddItem "1:1000"
    cmbOptions.AddItem "Иное_значение"
    
    ' Устанавливаем значение по умолчанию
    cmbOptions.Value = "1:100"
End Sub

Private Sub btnAction1_Click()
    Dim selectedOption As String
    Dim parts() As String
    Dim numerator As Double
    Dim denominator As Double
    Dim result As Double
    
    If cmbOptions.Value = "Иное_значение" Then
        selectedOption = cmbOptions.Value
    Else
        ' Разбиваем строку на две части по символу ":"
        parts = Split(cmbOptions.Value, ":")
        ' Преобразуем обе части в числа
        numerator = CDbl(Replace(parts(1), ".", ",")) ' если код не воспринимает число через точку, меняем на запятую
        denominator = CDbl(Replace(parts(0), ".", ",")) ' если код не воспринимает число через точку, меняем на запятую
        ' Выполняем деление
        result = numerator / denominator
        
        selectedOption = result
    End If
    Call ChangeDimensionScale(selectedOption)

End Sub

Private Sub btnAction2_Click()
    Dim selectedOption As String
    Dim parts() As String
    Dim numerator As Double
    Dim denominator As Double
    Dim result As Double
    
    If cmbOptions.Value = "Иное_значение" Then
        selectedOption = cmbOptions.Value
    Else
        ' Разбиваем строку на две части по символу ":"
        parts = Split(cmbOptions.Value, ":")
        ' Преобразуем обе части в числа
        numerator = CDbl(Replace(parts(1), ".", ",")) ' если код не воспринимает число через точку, меняем на запятую
        denominator = CDbl(Replace(parts(0), ".", ",")) ' если код не воспринимает число через точку, меняем на запятую
        ' Выполняем деление
        result = numerator / denominator
        
        selectedOption = result
    End If
    Call SetDimensionAndMLeaderScale(selectedOption)

End Sub
Миниатюры
Нажмите на изображение для увеличения
Название: Форма1.png
Просмотров: 33
Размер:	24.8 Кб
ID:	266700  

Последний раз редактировалось posetitel, 10.02.2025 в 10:54.
posetitel вне форума  
 
Непрочитано 10.02.2025, 12:03
1 | #5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от posetitel Посмотреть сообщение
На чистом автокаде можно выполнить форму с выпадающим списком?
нет

Цитата:
Сообщение от posetitel Посмотреть сообщение
Я уже понял, что .Net намного лучше для реализации автоматизации черчения, но и порог входа туда довольно высокий.
с каждой новой сделанной надстройкой на VBA переход будет еще сложнее - из-за жабы)
Сергей812 вне форума  
 
Непрочитано 10.02.2025, 12:53
1 | #6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Цитата:
Сообщение от posetitel Посмотреть сообщение
порог входа туда довольно высокий
Я тоже так когда-то думал. На самом деле все не настолько страшно )))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание пользовательской панели с выпадающим списком и кнопками

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание пользовательской команды непрерывного копирования с изменением динамических свойств Icumrjunkie AutoCAD 2 16.09.2020 14:50
Как изменить (увеличить) размер окон с выпадающим меню в панели инструментов? Джаз AutoCAD 5 12.12.2014 15:30
Создание панели инструментов из палитры Trisoyd AutoCAD 12 06.02.2011 17:04
Создание собственной панели инструментов к AutoCAD-у Supermax Программирование 43 18.11.2009 12:01
Ввод цифр мышью, создание панели с удобными кнопками jerdik AutoCAD 3 16.08.2007 16:48