Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для Zeus_0x01
150 / 8 / 0
Регистрация: 23.09.2025
Сообщений: 24

Изоляция приложений с UserForm (как скрыть Excel и показать только UserForm без костылей с отслеживанием книг)

11.04.2026, 08:08. Показов 3228. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Когда я начал делать UserForm-ы в VBA, у меня возник очевидный вопрос: а как скрыть сам Excel и оставить на экране только форму? Чтобы визуально получилось что-то похожее на обычное десктопное приложение с GUI, а не на "макрос в таблице".

На различных сайтах и форумах все решения которые попадались, крутились вокруг Application.Visible = False плюс какие-то схемы отслеживания открытых книг. В теории звучит как-бы интуитивно понятно, но как только начинаешь такую схему рассматривать, то понимаешь, что всё держится на костылях и догадках: "если пользователь откроет вторую книгу — сделаем то-то, если закроет — то-то". Проще говоря, все возможные сценарии просто невозможно обработать.

И отдельно неочевидный момент: запуск более одной такой книги с UserForm — это уже сам по себе потенциальный конфликт, потому что они "дерутся" за один и тот же Application.Visible. То есть решение не масштабируемое + есть ещё момент, который в форумных разборах почему-то вообще не упоминают: пока в книге или в UserForm работает какой-то макрос, всё остальное блокируется или конфликтует. Даже если мы говорим про самый простой сценарий — одна книга, одна форма — схема с отслеживанием уже ломается. То есть задачу пытались решить в лоб, без рассмотрения возможных проблем и потенциала для масштабируемости! Не архитектурный подход (объективно)!

Тогда я начал думать, что с этим вообще можно сделать и разбираясь с задачей, я задумался о том, что нужно всю логику изолировать каким-то образом, потому что запуск нескольких макросов просто будет невозможен (например, макрос в одной книге и активная UserForm со своими макросами - конфликт).

И я как раз наткнулся на метод New Application или CreateObject("Excel.Application"). До этого момента я про него просто не знал, ведь на тот момент я увлекался IT всего три года, и далеко не всё успевал узнавать, но осознав, что он делает, интуитивно сразу пришла мысль о том, что надо просто его вызвать и уже в нём запускать книгу с UserForm! Из этой же идеи и одной строчки кода потом и вырос весь VBD_Kit_Interface_SDI.

После нескольких дней обдумывания и реализации (~3-4 дня), всё получилось. Оказалось не всё так просто, но всё же реализуемо!

С точки зрения пользователя происходящее выглядит абсолютно обычно: он кликает по файлу — видит форму. Поведение ровно такое, как при простом Application.Visible = False + UserForm.Show True. Но под капотом книга "мигрирует" из основного Excel пользователя в свой собственный изолированный процесс и живёт уже там. Именно поэтому решение масштабируется: сколько бы таких файлов пользователь ни открыл, каждый оказывается в своём Application и ни с кем не конфликтует. А обычные таблицы, которые параллельно открыты у пользователя в его основном Excel или будут открыты, вообще никак не затрагиваются — они физически в другом процессе. Всё лишь упирается в ресурсы ОС Windows.

Критика приветствуется.


P.S. Если у кого-то была похожая задача и своё решение — интересно было бы сравнить подходы, т.к. мы видим то, что лежит в открытом доступе, далеко не всегда отражает то, что реально придумано.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2026, 08:08
Ответы с готовыми решениями:

Отслеживание событий в userform и запись в теблицу
Всем доброго времени суток! Помогите пожалуйста в решении задачи. Eсть UserForm с набором...

Как вместе с заданной (и только с ней) книгой Екселя открывались еще несколько скрытых книг
Чей-то не могу с екселем 2000 разобраться - можно ли сделать так , чтобы вместе с данной книгой...

Защита листа Excel, чтобы все изменения в файле осуществлялись только с UserForm
Подскажите пожалуйста, как в коде прописать защитить лист, чтобы все изменения в файле...

39
 Аватар для Zeus_0x01
150 / 8 / 0
Регистрация: 23.09.2025
Сообщений: 24
13.04.2026, 04:19  [ТС]
Студворк — интернет-сервис помощи студентам
Ну чтож, начинаем:

Цитата Сообщение от Jamaica Посмотреть сообщение
Для этого придуманы надстройки.
Нет?
Jamaica, Вы концептуально не понимаете о чём речь, но при этом стремитесь высказать своё мнение! Поэтому Ваше мнение невалидно в данном случае (это факт). Но я помогу Вам разобраться!

Представьте 3 файла .exe на Delphi с GUI (на VCL). Если Вы все три запустите, то у Вас получится 3 независимых процесса в Windows, каждый который не конфликтует с друг другом (изоляция на уровне процессов OS). Теперь представьте 3 файла Excel с GUI на UserForm. Если Вы все 3 запустите, то они все будут открыты в одном процессе Excel и если хоть в одной форме запустите макрос (нажмёте кнопку), то все остальные формы заблокируются, так как VBA в Excel - однопоточный! Моё решение делает так, что каждая книга Excel запускается в отдельном процессе и работает "из-коробки", то есть пользователю ничего устанавливать не нужно и он может скидывать файл другому человеку и ему также ничего устанавливать не нужно! Всё! Решение портабельно и не ломает основную сессию Excel, в которой у пользователя открыты его книги или могут быть открыты (это кстати одна из самых главных проблем, которую нужно было решить)!

Если у Вас до сих пор стоит вопрос, а зачем это нужно, значит скорее всего Вы живете в стереотипном мире, где C++ это база, где чтобы что-то "ломать", нужно знать Assembler и прочее. В мире каждый день с использованием Excel и VBA решается множество задач и если Вы этого не делаете, то это не значит, что никто это не делает! Также работает и в обратную сторону, но в конце концов мы в 2026 году обсуждаем технологию, которая официально мертва более 10 лет! Это как бы что-то должно значить...

Добавлено через 22 минуты
000d60, каким образом моё решение нарушает лицензию? Используется только встроенный функционал! Вы о чём вообще?

----

Цитата Сообщение от markiza-inc Посмотреть сообщение
Но это только из-за того что для ТС такие общеизвестные вещи как
Вы код смотрели? Там далеко дело не в этих двух операциях! Интересный момент в том, что данную проблему пытались решить многие (и на зарубежных форумах тоже) и они явно знали про Application и CreateObject, но решить её удалось человеку за 3-4 дня, который по сути был новичком! И здесь 2 интересных вывода! Либо я гений (что скорее всего нет), либо вся сфера IT состоит на 90-95% людей, которые сидели на форумах, осознано не понимали, о чём говорят и делают вид, что шарят (вызывают функции, библиотеки, собирают логику, копируют код и тратят время на изучение готовой технологии, но до конца не понимают принципы работы)! И второй вариант всё больше подтверждается с каждым днём моего нахождения в IT. Я уже в другом технологическом стеке (~ 6 месяцев) и вижу тоже самое! Многие не шарят, а делают вид и говорят, что разбираются в вопросе, прикрываясь только опытом и потраченным временем, но когда требуется нестандартное решение, то идут в Google за ответом! Это печально, но почему-то это так! Осознано программируют и разбираются единицы! Остальные пользуются тем, что эти единицы сделали, ну и критикуют, не предлагая ничего взамен! Это только моё мнение и я не претендую на истину, но я так вижу в данный момент (хотя с другой стороны тема "Когнитивных искажений" по большей части подтвердит моё мнение)!

markiza-inc, Вот на вашем примере, Вы сказали, что:
Цитата Сообщение от markiza-inc Посмотреть сообщение
Можно как-то простить начинающему, по моему скромному мнению.
Вы сделали Вывод о человеке, но можете показать свой код или решения, которые Вы разрабатывали? Так сказать убедиться, что Вы реальный программист, который осознано подходит к задачам и имеет реальные кейсы или человек, который что-то изучил, но только благодаря потраченному времени называет себя программистом, а не потому, что он что-то новое принёс, разработал и прочее? Вы не обязаны это делать, но мне бы был интересен итог, а если Вы сказали с шуткой, или с целью подколоть тогда вопросов нет)

Добавлено через 1 минуту
И попрошу заметить, я опубликовал решение и описал, как было всё на самом деле! Поднялась дискуссия, и эти сообщения - это ответы на заданный тон дискуссии! Я был готов к критике решения в плане работы механизма и предложенные альтернативы, но Вы сами увели в сторону: "а зачем это нужно и прочее", тем самым обесценив чужую работу и показав, что не особо то и понимаете о чём речь! Это Ваше мнение и я не в обиде, но не стоит обижаться на моё (даже если Вы увидите в 90-95% этих теоретиков себя)!

Как говориться, фактам плевать на чувства!
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
13.04.2026, 10:18
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Если у Вас до сих пор стоит вопрос, а зачем это нужно
Товарисч "писатель", но не "читатель"?
Вернитесь в начало темы и прочтите, наконец, мой вопрос.
0
 Аватар для Zeus_0x01
150 / 8 / 0
Регистрация: 23.09.2025
Сообщений: 24
13.04.2026, 11:06  [ТС]
Jamaica, вы цитируете:

Цитата Сообщение от Jamaica Посмотреть сообщение
Сообщение от Zeus_0x01
... у меня возник очевидный вопрос: а как скрыть сам Excel и оставить на экране только форму?...
Встречный очевидный вопрос: Зачем?
Зачем скрывать Excel и оставлять форму? Чтобы создать GUI приложение на Excel в отдельном процессе с собственными макросами, которые не конфликтуют ни с чем, потому что архитектурно "из-коробки" решений нет и не было!

В чём вопрос то?
Можем попробовать так (используем принцип "Пяти вопросов?")

1) Зачем скрывать Excel и показать форму? Потому что есть задачи, которые требуют только UserForm и не требуют открытый Excel.

2) Почему есть такие задачи? Потому что людям не всегда удобно работать с таблицей и иногда в GUI удобнее навигация для определенного рода задач и на фоне Excel будет только мешать (пример проекта в видео приводил на Rutube).

3) Зачем парится, если можно взять язык с GUI? 1. Потому что во многих конторах безопасники просто не позволят сделать так, чтобы ты смог запустить сторонний .exe. 2. Не все задачи решаемы через сторонние языки и если данные условно хранят в Excel, то зачем костыли, если есть VBA! Использование других языков и будет костылём! Этого кстати многие не могут понять! В идеальном мире с неограниченным количеством времени на решение задачи может быть и использование стороннего языка было бы выгоднее, но не в нашем мире, где от тебя требуют сделать сегодня то, что должно было быть сделано 2 дня назад!

4) Зачем тогда создавать отдельный процесс, почему нельзя держать формы в одном процессе и работать с ними? Потому что архитектурно такая работа не предполагалась и в реальности всё сломается при малейшем чихе!

5) Зачем я всё это объясняю? Потому что искренне хочу помочь человеку разобраться, и перейти к более технической части, а не "Зачем это и прочее"!

Я могу чего-то не понимать, направьте меня и дайте более развёрнутый вопрос! Искренне не понимаю, что Вы хотите узнать, т.к. на Ваш вопрос я считаю что ответил! Интересует конкретные задачи???
0
dive
 Аватар для I can
4990 / 4743 / 850
Регистрация: 13.04.2015
Сообщений: 9,977
13.04.2026, 12:03
Понятно. Найди себя на картинке. Кстати, это не шутка.Видипекия
Миниатюры
Изоляция приложений с UserForm (как скрыть Excel и показать только UserForm без костылей с отслеживанием книг)  
1
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
13.04.2026, 12:11
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Чтобы создать GUI приложение на Excel в отдельном процессе с собственными макросами, которые не конфликтуют ни с чем
А без сокрытия EXCEL окна цитированное не получится?
0
 Аватар для markiza-inc
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
13.04.2026, 13:58
Zeus_0x01, я не планировал Вас обидеть или оскорбить чем-либо.
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Вы код смотрели?
Нет, мне это не нужно. У меня свои наработки есть в этом плане, и я давно уже использую Excel как отдельные независимые процессы.
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Либо я гений (что скорее всего нет), либо вся сфера IT состоит на 90-95% людей, которые сидели на форумах, осознано не понимали, о чём говорят и делают вид, что шарят
Это и есть подтверждение что Вы новичок!

Спецы с хорошим опытом не прыгают от восторга, хлопая в ладошки, и крича "Я, Гений!". А просто переходят к решению новой задачи.
Я не критикую Вашу работу, другие форумчане уже её посмотрели и оценили. Мне этого достаточно. Вы просто как-то слишком эмоционально отреагировали на то, что я назвал Вас новичком. Странно, при том, что Вы сами написали что занимаетесь программированием не очень давно, в этой теме или в другой, не важно.

Я первым своим постом в этой теме поддержал Вашу идею, и немного прояснил в чём её суть. Сам пользуюсь формами Excel часто, поэтому прекрасно понимаю эту тему. Поверьте, я уже давным-давно не теоретик из Ваших 90-95 %, а Вы пока ещё там, и об этом говорят Ваши эмоции и восторги, приведенные выше в этом посте. Но это не умаляет Ваши способности, не нужно так реагировать но чужое мнение.

Ещё раз посмотрите пость №24 и найдите себя !
2
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
13.04.2026, 16:27
Цитата Сообщение от markiza-inc Посмотреть сообщение
Сам пользуюсь формами Excel часто,
Подскажите, в каких практических кейсах, приходилось сталкиваться,
что одна UserForm напрочь глушит другую?
Мне на ум приходит только выполнение какого-то длительного цикла.
0
 Аватар для Zeus_0x01
150 / 8 / 0
Регистрация: 23.09.2025
Сообщений: 24
13.04.2026, 16:57  [ТС]
Jamaica, можно и не скрывать, но просто представьте, у Вас есть GUI приложение и оно общается с БД, а теперь представьте, что Вы эту БД будете видеть на заднем плане GUI. Также и с Excel. Зачем он на заднем плане, если логику настроили на кнопках и лазить в Excel не требуется в ручном режиме! То есть скрытие не обязательное

markiza-inc, приношу извинения, за то что неправильно понял Вашу позицию.
Также поясню по поводу своей позиции. Там нет эмоций, просто высказал своё мнение и делал выводы на основании ситуаций и жизненного опыта. Сразу написал, что без обид и не претендую на истину!

По поводу новичка я же в качестве примера привёл и сейчас к нему вернёмся, но интересный момент что Вы как и многие не смотрите код, но делаете выводы. Это странно, но перейдём к картинке.

I can, markiza-inc, я не отрицаю что я на этой картинке могу быть там, где Вам удобно! Когнитивные искажения работают и в мою сторону тоже. Но отбросим всё сказанное и оставим только контекст, ведь он важнее всего сказанного. Что мы имеем:

Какой-то чувак вкатился в IT через самый неперспективный способ (Desktop + VBA). За три года осознал, что на этом языке есть то, что можно решить, т.к. сообщество не предоставили решения (с той же Userform, если Вы все знали как данный момент решить, и всё это легко и просто, то почему не подсказали в ранее похожих темах хотя бы направление, ведь Вы далеко не теоретики (без эмоций, чисто на основании слов)?). Далее много споров про распаралеливание вычислений, как итог - готовый VBD_Kit_Interface_SDI (технически довольно непростой проект). И чисто парочку архитектурных моментов (чисто для понимания, ведь код не читаете, придётся объяснять всё, но к счастью у меня была заготовка):

1. VBD_Kit_Interface_SDI — Процессная изоляция для Excel.
Реализует возможность запускать изолированные процессы Excel, управлять ими, передавать команды и динамически собирать VBA-код в дочерних процессах.

Зачем это нужно?
Excel — однопоточное приложение. Длительная операция блокирует весь UI. Параллельное выполнение VBA-кода в рамках одного процесса невозможно (при попытке запустить несколько потоков через WinAPI – вылет приложения). А создание отдельных процессов Excel «вручную» — это костыли без контроля.
VBD_Kit_Interface_SDI это первый в мире публичный компонент (можете проверить самостоятельно), который решает эту проблему системно. Несколько дней или даже неделю я потратил чисто на проектирование всей системы (ручка, листы А4, размышления) и вот что получилось:

Публичный API
Управление процессами:

• Process_Create — создание одного или нескольких изолированных процессов Excel. Принимает исполняемый компонент (.bas), дополнительные компоненты, количество процессов, тип (фоновый/приложение). Автоматически собирает ядро потока (modKernel_Thread) в дочернем процессе, копирует компоненты, устанавливает свойства документа для межпроцессного взаимодействия.

• Process_Terminate — завершение процессов. Два режима: «мягкий» (через контроллер потока) и «аварийный» (через WinAPI TerminateProcess). Работает как для конкретного PID, так и для всех процессов в снимке.

• Process_Kill — «аварийное» WinAPI завершение по PID или имени процесса. С опциональной проверкой — является ли процесс экземпляром Excel.

• Process_Save — сохранение состояния процесса в файл (.xlsx).

• Process_Get_State — чтение актуального состояния процесса: выполняется, приостановлен, завершён, не отвечает, в режиме отладки, остановлен вручную.

• Process_Get_Snapshot — снимок всех запущенных SDI-процессов Excel в системе. Перебирает окна, получает PID, проверяет отзывчивость, читает метаданные через COM. Реализован оптимизированный механизм получения снимков с минимально возможными накладными расходами!

• Process_ExecuteCommand — универсальная точка входа для отправки команд процессу: Initialize, Terminate, Run, Halt, Save, Resume, Suspended, AbortExecution, ChangePriority, EfficiencyMode, ProcessAffinity, а также добавление/удаление/обновление VBA-компонентов в рантайме.


Управление потоками:

• Threads_Change_State — приостановка и возобновление потоков процесса через SuspendThread/ResumeThread.

• Threads_Change_Priority — изменение приоритета процесса (от Idle до RealTime).

• Threads_Get_ProcessAffinity / Threads_Set_ProcessAffinity — чтение и установка маски привязки процесса к логическим ядрам процессора. Бинарная строка: "11001100" — первое и второе логические ядра активны, третье и четвёртое — нет.

• Threads_EfficiencyMode — перевод процесса в режим энергоэффективности через SetProcessInformation с PROCESS_POWER_THROTTLING_EXECUTION_SPEED .

Архитектурная особенность: при создании процесса компонент динамически извлекает нужные функции из собственного модуля (контроллер потока, вспомогательные процедуры) и инжектирует их в дочерний процесс без участия файловой системы (операции происходят чисто в RAM). Дочерний процесс получает автономное ядро, способное принимать команды от родителя. Одновременно инженерно-продуманный и в тоже время «опасненький» подход! Но это было ключевое требование при разработке компонента!

Ключевая структура данных

Visual Basic
1
2
3
4
5
6
Public Type Process_Snapshot
    Init_Structure  As Boolean
    Count_Process   As Long
    List_PID()      As Long
    Processes_SDI() As Process_Information
End Type
Снимок содержит полную информацию: PID, Handle, состояние, приоритет, маску сходства, исполняемый и дополнительные компоненты.
В общем и целом – это не просто какой-то модуль, это полноценный менеджер процессов Excel с полным контролем жизненного цикла без привлечения сторонних библиотек и языков!


2. VBD_Kit_Cryptography — Криптография

Криптография на VBA имеется в открытом доступе, но на мой взгляд, она недостаточно продумана и архитектурно ничего нового, и интересного не приносит! То есть, по сути, криптография на VBA – это обёртки над функциями без инженерной мысли (опять без эмоций, это чисто моё мнение)!

Базовый уровень
• Crypt_Protect_Data / Crypt_Unprotect_Data — шифрование и дешифрование строк. Четыре алгоритма:
o XOR (VBA-реализация)
o AES-256 (VBA-реализация)
o AES-128 через CNG (Windows Cryptography Next Generation)
o AES-256 через CryptoAPI
Опциональный Base64 на выходе.

Расширенный уровень
• CryptEx_Protect_Data / CryptEx_Unprotect_Data — универсальная точка входа. Принимает «любой» тип данных:
o Строки, числа, даты, булевы значения
o Range (диапазон ячеек) — поячеечное шифрование
o Массивы до 3 измерений
o Файлы (бинарное шифрование с сохранением расширения)
o Папки (пакетная обработка)
o VBA-компоненты (шифрование исходного кода в модуле)
o VBA-проекты (шифрование всех компонентов)
o Процедуры (шифрование отдельной процедуры внутри модуля)

Функция автоматически определяет тип входных данных через семантический анализ (Get_SemanticDataType). Параметр Explicit_DataType позволяет указать тип явно, если требуется.

Дополнительная привязка к окружению:
o Use_OS_Data — добавляет идентификатор ОС к ключу;
o Use_Hardware_Data — добавляет идентификатор оборудования (материнская плата, процессор и т.д.).
RSA
• modRSA_PoolFunctions — работа с RSA:
o Генерация RSA-ключей (2048, 3072, 4096, 8192 бит) через BCrypt
o Генерация случайных AES-ключей (256, 512 бит)
o Шифрование AES-ключа публичным RSA-ключом
o Дешифрование AES-ключа приватным RSA-ключом

Архитектурная идея
Шифрование реализовано только для строк — это единственная атомарная операция. Расширенная функция (CryptEx_*) не занимается шифрованием, а превращает любые данные в строковое представление через пользовательскую сериализацию. Это даёт две оси расширения:
• Добавляешь новый алгоритм → он автоматически работает со всеми типами данных
• Добавляешь новый тип данных → к нему применяются все алгоритмы шифрования
Ноль дублирования кода (этот и другие компоненты — это как раз пример того, что этап проектирования и размышлений перед написанием кода очень важен, если Вы хотите получить на выходе что-то действительно стоящее)!

3. VBD_Kit_Hashing — Хеширование
• Get_HashSumm_Data — единая функция хеширования. Алгоритмы: MD5, SHA-1, SHA-256, SHA-384, SHA-512. Три провайдера: WinAPI (BCrypt), .NET Framework, нативный VBA-код.

Типы входных данных (с автоопределением):
• Строки и числа
• Диапазоны и массивы
• Файлы и папки (рекурсивный хеш)
• VBA-компоненты и проекты
Для папок — сначала хешируются все файлы, затем конкатенация хешей хешируется повторно — получается единый хеш директории.
Для VBA-компонентов — модуль выгружается во временный файл, хешируется, файл удаляется. Для проектов — хешируются все компоненты, результаты объединяются.

Архитектурная идея
Как и в VBD_Kit_Cryptography, не нужно указывать явно, что хешируется! Функция автоматически определит на уровне семантики то, что нужно прохешировать! Максимально простой вызов и простейшее добавление новых типов данных!


4. VBD_Kit_Security — Безопасность MS Office
Работает с реестром Windows, XML-структурой файлов Office, WinAPI.

Аудит (снятие защит)
• Audit_ExcelObjectModel — снятие защиты книг и листов Excel (xlsm, xlsb, xlsx). Работает через распаковку файла как ZIP, удаление XML-узлов, обратную сборку. Поддержка пакетной обработки файлов и папок. Автоматическая генерация и уничтожение GUI с прогресс-баром во время работы алгоритма.

• Audit_Unviewable — снятие защиты просмотра VBA-проекта. Работает почти для всех форматов Office (xlsm, xlsb, xlam, docm, dotm, pptm...). Для современных форматов — модификация vbaProject.bin. Для старых форматов (xls, doc, ppt) — конвертация в новый формат, обработка, возврат.

• Audit_VBAProject — runtime-перехват диалога ввода пароля VBA-проекта через стандартную технику WinAPI hooking (DialogBoxParam). Инжектирует модуль с перехватчиком в дочерний процесс, открывает файл в этом изолированном процессе — пароль не запрашивается.

Защита
• MacroProtection_Unviewable — установка защиты VBA-проекта от просмотра.
• MacroProtection_VBAProject — установка пароля на VBAProject.

Управление параметрами безопасности:

• MacroSecurity_MacroParameters_Assign / _Fetch — управление уровнем доверия макросам и доступом к объектной модели VBA. Для Excel, Word, PowerPoint, Access, Outlook.

• MacroSecurity_ProtectedView_Assign / _Fetch — управление защищённым просмотром (вложения, интернет-файлы, небезопасные расположения).

• MacroSecurity_ExternalContent_Assign / _Fetch — управление подключениями к данным и обновлением связей в MS Excel.

• MacroSecurity_TrustedLocations_Add / _Fetch / _Remove / _Reset — полное управление доверенными расположениями.

• MacroSecurity_TrustRecords_Fetch / _Remove / _Reset — чтение и очистка записей доверия (какие файлы пользователь уже разрешил).

• MRU_ViewableItems_Fetch_Files / _Fetch_Folders — извлечение истории последних открытых файлов и папок из реестра.


Архитектурные принципы
Несколько вещей, которые объединяют все компоненты:

1. Семантическое определение типов. Функция Get_SemanticDataType анализирует входные данные и определяет — это строка, файл, папка, VBA-компонент, проект, диапазон, массив или что-то другое. Это позволяет писать единые точки входа вместо десятков перегрузок (которые VBA не поддерживает, что ещё больше усложняет семантику). Идея данного механизма мне пришла в голову как раз на этапе проектирования;
2. Конфигурация сборки. Каждый компонент начинается с блока #Const, который определяет целевую платформу (Windows/Mac), разрядность (x32/x64), режим сборки (Release/Debug), валидацию. Этот придуманный подход я ещё не полностью обкатал, но сама идея мне показалась неплохой.
3. WinAPI как фундамент. Kernel32, User32, Advapi32, Psapi, Bcrypt, Shell32 — Управление процессами, реестром, криптографией и прочее — всё через прямые вызовы Windows API.
4. Принцип единого модуля. Каждый компонент — самостоятельный .bas-файл с GUID-идентификатором. Не россыпь модулей, не класс-модули с зависимостями, а самодостаточная единица. Компоненты могут использоваться независимо или вместе. Без конфликтов между собой.
5. Нулевая зависимость. Ни одной внешней библиотеки, ни одной DLL, ни одного COM-объекта за пределами стандартной Windows и Office. Всё, что нужно — VBA и WinAPI. Компонент работает на Windows с MS Office без предварительной настройки (скопировал файл — компонент работает).
6. Работа без доверенного доступа к объектной модели. Компоненты спроектированы так, чтобы функционировать даже при снятой галочке «Доверять доступ к объектной модели проектов VBA».
7. Осознанное использование GoTo/GoSub. Вместо десятков мелких Private-функций используется паттерн GoTo/GoSub внутри основных процедур. Это осознанный выбор: большинство логики функций остаётся в одном месте, без прыжков по модулю. Снижает когнитивную нагрузку при чтении — ты видишь полный контекст, не переключаясь между процедурами.
8. Централизованная обработка ошибок. Все компоненты используют единую функцию Show_ErrorMessage_Immediate для вывода ошибок. Не MsgBox в случайных местах, не Debug.Print россыпью, а одна точка, через которую проходят все сообщения об ошибках.
9. Единый шаблон входа в функцию. Каждая публичная функция начинается с одинаковой последовательности: декларирование всех переменных (идентификаторов), проверка платформы (#If Not Windows_NT), инициализация модуля (Call Init_VBD_Kit_*), проверка совместимости сборки, валидация входных параметров — и только потом основная логика. Единая структура снижает порог входа при чтении кода.



И вот тут нюанс! Если у меня действительно эффект ДК и всё что я сделал ничего не стоит и ценности никакой нет, так как работа проведена, но все всё знали и это всё достаточно примитивно, то у Вас должны быть даже более крупные проекты? Было бы их интересно посмотреть) Если нет ни кода, ни проектов, то получается относительно картинки Ваши координаты следующие: (-100, 0).

Что скажите?
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,672
Записей в блоге: 2
13.04.2026, 17:43
Цитата Сообщение от markiza-inc Посмотреть сообщение
Сам пользуюсь формами Excel часто
Добавлю две копейки к формам VBA. Вот, допустим скрипт в AkelPad, показывающий простенькое окно.
Кликните здесь для просмотра всего текста
JavaScript
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// SimpleFolderDialog.js
// Простой диалог выбора папки с фиксированным размером
// При создании логики  окна и управляющих элементов был использован код скрипта FindReplaceFiles.js от KDJ
AkelPad.Include("log.js")
var oSys        = AkelPad.SystemFunction()
var hMainWnd    = AkelPad.GetMainWnd()
var hInstDLL    = AkelPad.GetInstanceDll()
var hGuiFont    = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/)
var sClass      = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL
var hDlg
 
// Проверка на уже запущенный экземпляр
if (hDlg = oSys.Call("User32::FindWindowExW", 0, 0, sClass, 0)){
    SetForegroundWindow(hDlg)
    WScript.Quit()
}
 
// Размеры окна (фиксированные, в пикселях)
var nWndWidth  = 400
var nWndHeight = 150
 
// Идентификаторы элементов
var IDDIRG     = 2000
var IDDIRCB    = 2001
var IDBROWSEB  = 2002
var IDOKB      = 2003
var IDCANCELB  = 2004
 
// Массив описания элементов
var aDlg = []
aDlg[IDDIRG]    = {S:0x50000007, C:"BUTTON",   T:"Выберите папку"}
aDlg[IDDIRCB]   = {S:0x50210042, C:"COMBOBOX", T:""}
aDlg[IDBROWSEB] = {S:0x50010000, C:"BUTTON",   T:"Обзор..."}
aDlg[IDOKB]     = {S:0x50010000, C:"BUTTON",   T:"OK"}
aDlg[IDCANCELB] = {S:0x50010000, C:"BUTTON",   T:"Отмена"}
 
// Регистрация класса окна
AkelPad.WindowRegisterClass(sClass)
 
// Создание окна
hDlg = oSys.Call("User32::CreateWindowExW",
        0,               // dwExStyle
        sClass,          // lpClassName
        "Выбор папки",   // lpWindowName
        0x80CA0000,      // dwStyle: WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
        200,             // x (позиция по центру экрана будет в ShowWindow)
        200,             // y
        nWndWidth,       // nWidth
        nWndHeight,      // nHeight
        hMainWnd,        // hWndParent
        0,               // hMenu
        hInstDLL,        // hInstance
        DialogCallback) // lpParam
 
// Показываем окно и запускаем цикл сообщений
oSys.Call("User32::ShowWindow", hDlg, 1 /*SW_SHOWNORMAL*/)
SetForegroundWindow(hDlg)
AkelPad.WindowGetMessage()
 
// Завершение скрипта после остановки обработки сообщений
AkelPad.WindowUnregisterClass(sClass)
 
// ------------------------------------------------------------
// Функция обработки сообщений
// ------------------------------------------------------------
function DialogCallback(hWnd, uMsg, wParam, lParam) {
    var nID, nCode
    var nX = 10, nY = 30, nW, nH
 
    switch(uMsg){
    case 1: // WM_CREATE
        // Создание всех элементов
        for (var i = 2000; i < aDlg.length; ++i){
            aDlg[i].HWND = oSys.Call("User32::CreateWindowExW",
                aDlg[i].ES, aDlg[i].C, aDlg[i].T, aDlg[i].S,
                0, 0, 0, 0, hWnd, i, hInstDLL, 0)
 
            SendMessage(aDlg[i].HWND, 48 /*WM_SETFONT*/, hGuiFont, true)
        }
 
        // Настройка комбобокса
        SendMessage(aDlg[IDDIRCB].HWND, 0x0141 /*CB_LIMITTEXT*/, 256, 0)
        SendMessage(aDlg[IDDIRCB].HWND, 0x0143 /*CB_ADDSTRING*/, 0, "C:\\")
        SendMessage(aDlg[IDDIRCB].HWND, 0x0143 /*CB_ADDSTRING*/, 0, "D:\\")
        SendMessage(aDlg[IDDIRCB].HWND, 0x014E /*CB_SETCURSEL*/, 0, 0)
        
        // Установка начального текста
        SetWindowText(aDlg[IDDIRCB].HWND, "C:\\")
        
        oSys.Call("User32::SetWindowPos", aDlg[IDDIRG].HWND, 0,
            10, 10, 380, 60, 0x0114 /*SWP_NOCOPYBITS|SWP_NOACTIVATE|SWP_NOZORDER*/)
 
        oSys.Call("User32::SetWindowPos", aDlg[IDDIRCB].HWND, 0,
            20, 30, 250, 200, 0x0114)
 
        oSys.Call("User32::SetWindowPos", aDlg[IDBROWSEB].HWND, 0,
            280, 30, 100, 23, 0x0114)
 
        oSys.Call("User32::SetWindowPos", aDlg[IDOKB].HWND, 0,
            200, 80, 80, 23, 0x0114)
 
        oSys.Call("User32::SetWindowPos", aDlg[IDCANCELB].HWND, 0,
            290, 80, 80, 23, 0x0114)
        break
 
    case 273: // WM_COMMAND
        nID   = LoWord(wParam)
        //nCode = HiWord(wParam)
 
        switch(nID){
        case IDBROWSEB:
            // Здесь можно вызвать BrowseForFolder
            AkelPad.MessageBox(hWnd, "Будет открыт диалог выбора папки", "Info", 0)
            break
        case IDOKB:
            var sPath = GetWindowText(aDlg[IDDIRCB].HWND)
            AkelPad.MessageBox(hWnd, "Выбрано: " + sPath, "Результат", 0)
            PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0)
            break
        case IDCANCELB:
            PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0)
            break
        case 2: //IDCANCEL
            PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0)
            break
        }
        break
 
    case 16: // WM_CLOSE
        oSys.Call("User32::DestroyWindow", hWnd)
        break
 
    case 2: // WM_DESTROY
        oSys.Call("User32::PostQuitMessage", 0)
        break
    }
    
    return 0
}
 
// ------------------------------------------------------------
// Вспомогательные функции
// ------------------------------------------------------------
function LoWord(nParam) {
    return (nParam & 0xFFFF)
}
function HiWord(nParam) {
    return ((nParam >> 16) & 0xFFFF)
}
function SendMessage(hWnd, uMsg, wParam, lParam) {
    return AkelPad.SendMessage(hWnd, uMsg, wParam, lParam)
}
function PostMessage(hWnd, uMsg, wParam, lParam) {
    return oSys.Call("User32::PostMessageW", hWnd, uMsg, wParam, lParam)
}
function SetForegroundWindow(hWnd) {
    if (oSys.Call("User32::IsIconic", hWnd))
        oSys.Call("User32::ShowWindow", hWnd, 9 /*SW_RESTORE*/)
    oSys.Call("User32::SetForegroundWindow", hWnd)
}
//function GetWindowText(hWnd) {
//    var lpBuffer = AkelPad.MemAlloc(512)
//    oSys.Call("User32::GetWindowTextW", hWnd, lpBuffer, 256)
//    var sText = AkelPad.MemRead(lpBuffer, 1 /*DT_UNICODE*/)
//    AkelPad.MemFree(lpBuffer)
//    return sText
//}
// 
function GetWindowText(hWnd) {
    var sBuf = Array(257).join('\0') 
    var pBuf = AkelPad.MemStrPtr(sBuf)
    return (GetWindowText = function(hWnd){
        oSys.Call("User32::GetWindowTextW", hWnd, pBuf, 256)
        return AkelPad.MemRead(pBuf, 1 /*DT_UNICODE*/)
    })(hWnd)
}
function SetWindowText(hWnd, sText) {
    oSys.Call("User32::SetWindowTextW", hWnd, sText)
}
А так вообще там прикольно (хотя, тоже старье по сути - WSH, использующий спецификацию JS 96 года), шустро все работает, скрипты в своих потоках (или процессах точно не знаю, там как-то по хакерски все устроено) и не влияют на основное окно.
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
13.04.2026, 18:31
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
, а теперь представьте, что Вы эту БД будете видеть на заднем плане GUI.
Мне то (как ACCESS-нику), конечно, оно не надо.
А вот народ (на ютубе видел) продвигает тему EXCEL дэшбордов, скрывая листы данных.
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
То есть скрытие не обязательное
Понятно.
0
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,731
13.04.2026, 21:34
А не проще было бы, если так надо, запускать один эксель тычком по xlsm, а второй как "excel.exe macro2.xlsm" ? И будут независимые окна. И того более, если загрузиться со флешки Sergei Strelec, то там и тык по файлу два отдельных экселя запускает. То есть дело в настройках ОС.

Подставлять же палки, чтобы из однопоточного приложения сделать многопоточное - ну это так себе, мне кажется.
1
 Аватар для markiza-inc
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
13.04.2026, 22:24
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Что скажите?
Ну что Вам сказать:

Во-первых,
"Что скажете?" пишется через "е", но это ерунда, здесь многие путают наклонения глаголов, пишете и пишите, скажете и скажите, и т.д. Как говорится "Да и хрен бы с ним".

Во-вторых,
Вы написали неплохой пост, пояснили что у Вас там есть, как называется и т.д. И даже написали:
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
markiza-inc, приношу извинения, за то что неправильно понял Вашу позицию.
Интересно было читать Ваш пост до тех пор пока ... Предпоследним предложением:
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Если нет ни кода, ни проектов, то получается относительно картинки Ваши координаты следующие: (-100, 0).
Вы всё вышесказанное не перечеркнули.

В-третьих,
Если Вы чего-то не видели, то не значит что этого не существует!
Может в файлах есть информация, которую Вы видеть не должны, или люди не хотят выставлять это, т.к. может быть коммерческая информация, а "колупаться" чтобы убрать её из файлов нет ни желания, ни времени; или люди считают что Вы этого просто не достойны. Да, и вообще, мало ли других причин для этого.

В-четвёртых,
Когда в 6-ом классе я увлёкся электроникой, то по картинке находился в "яме страданий". Кроме Закона Ома ничего, можно сказать, и не знал. Пэтому выписывал и читал журналы, заказывал книги в книжном магазине по каталогу. Изучал много, одним словом. Потом институт, тоже учёба, и т.д.
Окончив институт пришёл на предприятие - Самолётный завод (если кратко).

Но после одного случая, а именно:
Сидим в лаборатории, работаем, вдруг забегают наши мужики (нач. лаборатории и три ведущих инженера) и прыгают от радости, обнимаются, прямо как сейчас в конце американских боевиков, президент с министром обороны и ешё 100-ей чиновников хлопают в ладошки, обнимаются, целуются. Радуются что один "ихний" супер-чудик всех победил.
Спрашиваю, мол, что случилось? Они в ответ: "Мы с самолётом связь установили, с пилотами поговорили". И всё, подумал я. Т.е. кто-то в каком-то НИИ разработал прибор связи, на каком-то заводе его сделали, конструкторы нашего завода (совсем другой отдел) расчитали антену, какие-то сварщики её сварили и привезли нам, наши два слесаря установили её на крыше, другие слесари провели кабель, ковыряя стены и потолки.

А вы:
  1. поприсутствовали как устанавливают антенну
  2. вставили вилку прибора в розетку
  3. включили тумблером прибор
  4. ручкой настроили частоту, отслеживая её на цифровом индикаторе
и Ура, мы герои ! ???

Вот тут я понял, ну их всех нахрен и переместился по рисунку вправо, где два чудика с фразой: "Да, забей". Там сейчас и пребываю.

В-пятых,
Ну, а влево по картинке я перемещусь (не дай, Бог, конечно) только если выживу из ума.
Как-то так:
Просыпаюсь утром, смотрю в окно - ух ты, классно (тучи, дождь, слякоть). Гляжу вокруг на всё, что у меня есть. И говорю: "Да, я ГЕНИЙ". Подхожу к зеркалу, смотрюсь, да я ещё и красавчик. И только голос жены с кухни прерывает мои созерцания: "Эй гениальный красавчик, жрать иди. Да трусняк поправь, а то гения своего поцарапаешь об дверные косяки". Надеюсь такая ситуация и такое состояние меня не настигнут, хотя в жизни такое видел, к сожалению.

Веду правильный образ жизни, просто для себя и по своему выбору. Никого не оскорбляю. Чего и Вам, Zeus_0x01, желаю.
1
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
13.04.2026, 22:49
Цитата Сообщение от markiza-inc Посмотреть сообщение
Веду правильный образ жизни,

Не по теме:

Ведя правильный образ жизни в молодости,
вы продлеваете свою неухоженную старость.
(с)

0
13.04.2026, 22:54

Не по теме:

"Велосипедист - бедствие для экономики. Он не покупает автомобиль и не берет под него кредит. Не покупает бензин. Не пользуется услугами ремонтных мастерских. Не страхует "гражданскую ответственность". Не пользуется платными стоянками. Не страдает от ожирения. Да он еще и здоров, черт возьми! Здоровые люди не нужны для экономики. Они не покупают лекарства. Они не ходят к частным врачам. Они не увеличивают ВВП." (Dmitriy Mikhalap)

0
 Аватар для markiza-inc
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
14.04.2026, 00:42
Jamaica,

Не по теме:

Фраза «Ведя правильный образ жизни в молодости, вы продлеваете свою неухоженную старость» не является точной с точки зрения современной науки. Старение — это биологический процесс, который зависит не только от образа жизни в молодости, но и от множества других факторов: генетики, окружающей среды, хронических заболеваний и др. Однако правильный образ жизни в молодости действительно может замедлить старение и улучшить качество жизни в пожилом возрасте.


Zeag,

Не по теме:

Как Вы правильно привели цитату, нашему "теневому правительству" нормальные и здоровые люди, к сожалению, "не нужны". Но это является верным только с использованием кавычек. Не будь нормальных людей, цивилизация давно бы сгинула ...

0
 Аватар для Zeus_0x01
150 / 8 / 0
Регистрация: 23.09.2025
Сообщений: 24
14.04.2026, 04:28  [ТС]
markiza-inc, указание на орфографические ошибки, истории из жизни, атакующие примеры и прочее... Та же песня! Просто прочитайте свой пост про антенну и мой про описание API и попробуйте найти себя на картинке ещё раз (без негатива).

Поймите меня правильно, и Вот Вам пример:
Человек утверждает, что он шарит. Хорошо, его право и мнение.
Я спрашиваю, есть ли код, чтобы посмотреть, насколько ты "мощный тип"?
Он говорит, что код не покажу (опять его право, но в большинстве случаев кода просто нет).
Я говорю хорошо, есть ли проекты или интересные задачи, которые ты решил или в которых ты участвовал?
Он начинает юлить...

Вопрос? Как мне не зная человека, относится к его словам и компетентности, если он в своём технологическом стеке ничего интересного и не делал и поделиться даже идеями не может?

Интересный парадокс в том, что когда спрашиваешь про подобное, люди начинают говорить, что это их секретные наработки и я не готов показать их миру, т.к. они не для пользователей, а чисто хобби и прочее! Но когда начинаешь публиковать что-то своё, то эти же люди утверждают, а зачем это пользователям))).

Реальность такова, что спрашивать про проекты это стало оскорблением для тех, кто 10-20 лет чем то занимается, но по итогу, после саморефлексии понимает, что ничего интересного он и не сделал и всё это время стоит на месте! Будем честны!

Любите примеры, вот Вам пример с машиной! Есть 2 человека. Один катается 1 год на машине, другой 10 лет. Тот кто катается 10 лет, узнал за это время что такое дрифт, экстремальное вождение и прочее (всё на теоретическом уровне), но по факту навыками не отличается от годовалого водителя, т.к. они оба ездили по одним дорогам!
Человек устроен так, что если он что-то узнает, ему уже автоматически кажется, что он шарит в этой теме! И сейчас я это докажу! Никого не хочу обидеть, просто пример и без негатива!

Zeag пишет:
Цитата Сообщение от Zeag Посмотреть сообщение
А не проще было бы, если так надо, запускать один эксель тычком по xlsm, а второй как "excel.exe macro2.xlsm" ? И будут независимые окна. И того более, если загрузиться со флешки Sergei Strelec, то там и тык по файлу два отдельных экселя запускает. То есть дело в настройках ОС.
Подставлять же палки, чтобы из однопоточного приложения сделать многопоточное - ну это так себе, мне кажется.
Логично вроде всё звучит, зачем усложнять, но за 6 лет в программировании я понял, что логика не равно истина и только с практикой всё логичное рушится:
1) Ни о какой многопоточности речи и не идёт! Здесь происходит изоляция UI! Это разные вещи и в VBA многопоточности нет! Создание отдельного процесса - это не многопоточность в привычном понимании, а цель решения - это изоляция, а не параллелизм!
2) Зависимость от настроек ОС влечёт за собой то, что каким-то образом надо гарантировать одинаковое поведение у всех пользователей на разных сборках ОС!
3) "запускать один эксель тычком по xlsm, а второй как "excel.exe macro2.xlsm"" - как этот механизм представляете с точки зрения удобства и пользования? Нужен ещё файл-лаунчер для запуска конкретных книг с UI? Эта альтернатива решает другую задачу: "как получить два независимых окна Excel", но моё решение это "как из двойного клика по одному xlsm(b)-файлу автоматически получить изолированный процесс с скрытым Excel и видимой формой, не трогая остальные книги пользователя и не завися от настроек".

Предложенная альтернатива не эквивалентна решаемой задаче и в общем случае не сработает!
Zeag, Вы правильно чувствуете, что решение не простое, но предлагаете решение, которое не покрывает исходные требования.

Вот в чём и проблема! Только через практику можно действительно понять все нюансы! А если человек практически ничего не делает, то как я могу быть уверен, что ему можно доверять и верить???

Zeag, никакого негатива, просто мы все в этой ловушки живем и думаем, что шарим лучше, до момента практики и реализации!

Вот такие выводы делают большинство, кто сами практически подобное не реализовывали и не знают всей кухни и думают что всё изучено по сей день и можно всё найти в сети интернет! При этом делают выводы и даже код не смотрят:

VBUtil_XFormExcel - так это же фигня, можно же через простой CreateObject сделать тоже самое, да чуть покопаться, но по любому решения есть в интернете на все вопросы;
VBD_Kit_Interface_SDI - да что сложного, распараллеливание вычислений - это не новая тема и данный компонент ничего не приносит нового. CreateObject - это известная всем тема.
VBD_Kit_Cryptography - да это просто обёртки над алгоритмами и не более...



Цитата Сообщение от markiza-inc Посмотреть сообщение
В-третьих,
Если Вы чего-то не видели, то не значит что этого не существует!
Полностью согласен, но перед тем, как я такое утверждал, я перелопатил интернет и ничего не нашел! А такие разработки в VBA были бы на поверхности ввиду своей экзотичности! Плюс никто по сей день не пришёл и не сказал, что я не прав и вот аналогичное решение! Ваша позиция валидна, но и моя тоже, плюс я же указал, что:
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
это первый в мире публичный компонент
Абсолютно доказать уникальность невозможно, но если у вас есть ссылка на аналог — покажите и я сразу признаю, что был не прав. Если нет — то моё утверждение остаётся наиболее обоснованным из имеющихся, т.к. разница в том, что перед высказыванием я провёл анализ открытых решений, а Вы нет!
0
 Аватар для markiza-inc
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
14.04.2026, 07:05
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Просто прочитайте свой пост про антенну и мой про описание API и попробуйте найти себя на картинке ещё раз (без негатива).
Если честно, то мне пофиг Ваше мнение про меня.
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Я спрашиваю, ... ты "мощный тип"?
... которые ты ...
Я с Вами на брудершафт не пил, и детей не крестил ... (если Вы, конечно, понимаете о чём я говорю).
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Как мне не зная человека, относится к его словам и компетентности ...
Да пофиг.
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
... что такое дрифт, экстремальное вождение и прочее ...
Дрифтовать запрещают ПДД! Перечитайте ПДД, это Вам будет полезней. Хотя, зачем это Вам? Точно. Да забей!
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
что логика не равно истина и только с практикой всё логичное рушится ...
Вам, батенька, механикой надо заниматься. Там вся наука построена на экспериментах, и потом уже под результат подгоняется теория.
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Создание отдельного процесса - это не многопоточность ..., а цель решения - это изоляция, а не параллелизм!
Изоляция чего от чего, и что в это понятие Вы вкладываете при программировании?
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
если человек ... , то как я могу быть уверен, что ему можно доверять и верить???
Круто! Но разве кто-то на форуме нуждается в Вашем доверии?
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
просто мы все в этой ловушки живем и думаем, что шарим лучше, до момента практики и реализации!
Говорите за себя, за всех не надо ...
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
... я провёл анализ открытых решений, а Вы нет!
А мне это и нахрен не нужно!
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
это первый в мире публичный
Это Вам не на форум надо, а в Нобелевский комитет.
Цитата Сообщение от Zeus_0x01 Посмотреть сообщение
Полностью согласен, но перед тем, как я такое утверждал, я перелопатил интернет и ничего не нашел!
Вы даже не поняли о чём я написал. А всё потому, что читаете невнимательно и на амбициях.

Да не переживайте Вы так, всё у Вас будет хорошо. Мы Вами ещё гордиться будем (наверно, а может и нет).
1
 Аватар для Zeus_0x01
150 / 8 / 0
Регистрация: 23.09.2025
Сообщений: 24
14.04.2026, 07:59  [ТС]
Как говорится, «Кнута знаешь? Это markiza-inc не читал, но осуждал!».

По самому решению вроде по существу вопросов не осталось, дальше дискуссия уходит не туда.
Если появятся замечания или кто-то покажет аналогичный компонент и прочее — с интересом посмотрю. Спасибо всем, кто участвовал и проявил интерес.

markiza-inc, без негатива!
0
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,731
15.04.2026, 21:48
Интересно, что бы на это сказали Кнут, Вирт, Дейкстра и прочие корифеи... Дали бы премию Тьюринга?

Ну вот сделан эксель так. Были, видимо, у MS основания так сделать. А хочется многопоточность, но интерфейс в том же стиле. Так перепишите движок, прецеденты же есть - Open Office, Libre Office. Только при переписи С++ или что-то примените и будет конфетка.
0
 Аватар для Zeus_0x01
150 / 8 / 0
Регистрация: 23.09.2025
Сообщений: 24
16.04.2026, 05:37  [ТС]
Zeag, Про Кнута это просто для примера... (типа человек код даже не видел, но делает выводы)! Можете с тем же успехом подставить любое другое художественное или техническое произведение. Будет тот же смысл!

Цитата Сообщение от Zeag Посмотреть сообщение
Ну вот сделан эксель так. Были, видимо, у MS основания так сделать. А хочется многопоточность, но интерфейс в том же стиле. Так перепишите движок, прецеденты же есть - Open Office, Libre Office. Только при переписи С++ или что-то примените и будет конфетка.
Легко советовать - возьми и перепиши!
Проще же вникнуть в имеющийся инструмент и добавить фичи + это же Windows_NT, а не Linux (значит с большей вероятностью не сломается через 3-5 лет то, что делал)!
Да и на переписать современный софт в одного - это в большинстве случаев нереально + потеря времени. С большой вероятностью проект будет незакончен и брошен (таких примеров хватает)!

Вы рассматриваете мою работу как костыли, но она ничем по принципу работы не отличается от работы макросов, которые используются для обработки данных или даже тех же надстроек! Надстройки даже менее удобны для установки, а тут всё работает и продумано так, чтобы от пользователя требовалось минимальное количество действий!
Или надстройки по вашему тоже костыли?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2026, 05:37

Скрытие части Userform
Вопрос, в общем-то, изложен в заголовке - есть ли способ скрыть/показать часть userform при...

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

Ошибка "application-defined or object-defined error" появляется при попытке скрыть столбцы checkBox из UserForm
Добрый день. Хотел написать программу в которой для удобства просмотра по нажатию на CheckBox-ы...

Изоляция MS Agent 2.0
Написал тестовую программу: Option Explicit Private Declare Sub Sleep Lib &quot;kernel32&quot; (ByVal...

Как показать UserForm при открытии файла?
Всем привет! Как сделать так, чтобы UzerForm появлялась при открытии файла? Без переключателя? Есть...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru