|
182 / 33 / 3
Регистрация: 28.05.2015
Сообщений: 148
|
|||||||||||
Работа с контейнером01.07.2017, 04:50. Показов 3969. Ответов 24
Метки нет (Все метки)
Первый вопрос.
Вот пример перечисления элементов формы с проверкой типа элемента совместно с его тэгом:
Второй вопрос. В контейнере есть контролы, находящиеся в массиве, а так же и отдельные элементы без массивов. Например, мне нужно, чтобы при MouseMove для каждого элемента(массива элементов) происходило одно и тоже действие - допустим Beep. Можно ли их как-то логически объединить, чтобы для каждого элемента не нагромождать свой "событийный" код, а в целях компактности - для всех сразу? Третий вопрос. Создаём контролы в контейнере и пытаемся задать событие:
0
|
|||||||||||
| 01.07.2017, 04:50 | |
|
Ответы с готовыми решениями:
24
Работа с контейнером multimap
|
|
oh my god
|
|||||||||||||
| 01.07.2017, 07:08 | |||||||||||||
через LostFocus например в программе калькулятор:
2
|
|||||||||||||
|
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
|
|||||||
| 01.07.2017, 22:53 | |||||||
|
Была такая же проблема.Решил так.Но я создавал массив элементов управления на форме.Но форма тоже контейнер.Код должен работать и в другом контейнере.На Image работает,проверял.
1
|
|||||||
|
|
|||||||||||||||||||
| 01.07.2017, 23:27 | |||||||||||||||||||
Сообщение было отмечено CharlyChaplin как решение
Решение
fever brain, у тебя же в коде нет обработки событий массива динамически созданных контролов.
txb и cbx - это по одному контролу, а but - не работает, ну т.е. и не должен, т.к. не присвоена ссылка.
Выйти из этой проблемной ситуации можно либо сабклассингом, либо превратив массив контролов в динамически создаваемые контролы. Другие варианты мне неизвестны. Для динамически созданных контролов ты можешь поступить как описано в этом примере. Т.е. для каждого контрола создать экземпляр класса, который будет держать ссылку на этот контрол и на общую процедуру в коде формы, которую класс будет вызывать, как только он поймает событие контрола. Форма:
2
|
|||||||||||||||||||
|
Модератор
|
|||
| 03.07.2017, 19:54 | |||
|
Добавлено через 14 секунд
0
|
|||
|
|
|
| 03.07.2017, 20:05 | |
|
The trick, спасибо за помощь на vbforums.
Действительно очень круто у тебя получилось. Любопытно, как ты нашел, что именно такой прототип должен быть у события. Первый - индекс, за ним - оригинальные параметры. И ещё, идентификатор интерфейса ведь может быть любой лишь бы уникальный?
0
|
|
|
Модератор
|
|||
| 03.07.2017, 20:44 | |||
|
К примеру открываем VB6.OLB в просмотрщике OLE; нас интересует к примеру лейбл, смотрим его outgoing-интерфейс событий - LabelEvents, смотрим его IID = 33AD4EDA-6699-11CF-B70C-00AA0060D393, чтобы получить такой интерфейс для массива контролов прибавляем 1 к IID.Data1, получается 33AD4EDB-6699-11CF-B70C-00AA0060D393.
1
|
|||
|
|
||
| 03.07.2017, 21:41 | ||
|
подключить нужный массив, затем: IConnectionPointContainer::EnumConnectio nPoints + IConnectionPoint::GetConnectionInterface и оттуда извлечь GUID. Добавлено через 3 минуты только среда почему то ругается на EnumConnectionPoints, "метод не найден", хотя IntelliSense и отображает его.
0
|
||
|
Модератор
|
|
| 03.07.2017, 21:48 | |
|
Dragokas, так не получится. Насколько я понял интерфейс реализует VB6, а не ActiveX контрол, а он не реализует метод EnumConnectionPoints. Нужно реверсить и смотреть каким образом формируется IID для юзерконтролов и сторонних контролов. Пока не могу, позже.
1
|
|
|
Модератор
|
|
| 05.07.2017, 23:37 | |
|
Сделал другой вариант, попроще с использованием WithEvents, но он не так гибок как в первом примере. В первом примере можно к примеру абсолютно все массивы контролов одного типа "пропустить" через общий обработчик.
1
|
|
|
Модератор
|
||||||
| 08.07.2017, 11:17 | ||||||
|
Про ActiveX контролы. Как известно VB6 при подключении библиотеки ActiveX контролов через компоненты, создает OCA файл с именем как у оригинального EXE. При исследовании интерфейса массива контролов было выяснено что описание интерфейса находится в соответствующем OCA файле, VB6 просто добавляет интерфейсы для массивов контролов, а также еще какие-то интерфейсы, вероятно врапперы. Причем при каждом создании такой библиотеки (если она была удалена) все UUID'ы генерируются случайно. Для массива контролов создается интерфейс с именем _\x01EventXXX, где XXX номер. Однако, если попытаться создать TLB с коклассом имплементирующим этот интерфейс в качестве дефолтного для событий, то ничего не выйдет. Конечно же, никакого сообщения об ошибке не будет т.к. IID интерфейса корректный, но события будут сдвинуты. Дальнейшее исследование показало что VB6 по неизвестной пока причине сдвигает первый метод события на 0x30 байт. Просмотр vTable полученного интерфейса показал что там содержатся нули, т.е. методы не реализованы. Может быть это используется к примеру для DataBinding'а и т.п. Теперь для создания TLB нам нужно определить базовый интерфейс для обеспечения сдвига на 0x30 байт и сделать его ограниченным. В итоге код для моей версии OCA получился таким:
1
|
||||||
|
Модератор
|
|||||||||||
| 08.07.2017, 11:28 | |||||||||||
|
Про общий интерфейс массива контролов. Для массива контролов VB6 реализует общий недокументированный интерфейс. Небольшой реверс показал что этот интерфейс имеет IID = E93AD7C1-C347-11D1-A3E2-00A0C90AEA82. При дальнейшем реверсе я пришел к выводу что интерфейс имеет следующую структуру (уже в TLB):
Я сделал небольшой пример использования этого интерфейса для получения информации минуя позднее связывание:
0
|
|||||||||||
|
182 / 33 / 3
Регистрация: 28.05.2015
Сообщений: 148
|
|
| 08.07.2017, 20:54 [ТС] | |
|
Может у себя в блоге добавишь запись? А то в тему не каждый заглядывает. Вдруг ещё кому полезным будет.
Не в тему будет сказано. Но мне почему-то подумалось про стамеску и бревно: что даже такой простой вещью из бревна можно сделать скульптуру, если есть мозги и руки. Мне преподаватель как-то сказал: `Не нужно сбрасывать со счетов устаревшие языки. Многие считают их неэффективными, маскируя тем самым неэффективность собственных мозгов и неумении применить "старый" инструмент.`
0
|
|
|
oh my god
|
|
| 09.07.2017, 19:49 | |
|
Ребята конечно перестарались, отвечая на простенький вопрос, если честно из последних постов я сам с трудом понимаю о чем беседа, а вы то хоть поняли CharlyChaplin, ?
0
|
|
|
|
|
| 09.07.2017, 19:54 | |
|
fever brain, так ты спрашивай, коль чего не понятно.
Если тебе кажется, что на этот простенький вопрос есть простенький ответ, не стесняйся, пиши своё решение. Добавлено через 2 минуты The trick сделал огромную работу, реализовав то, что с десяток лет не могли сделать даже на vbforums и для чего нет в нативной реализации от разработчиков VB6.
0
|
|
|
Модератор
|
|
| 09.07.2017, 20:35 | |
|
fever brain, говорил тебе - учи COM. Сколько уже лет прошло? Один из подпунктов вопроса был - как сделать переменную WithEvents и обработать ей событие от массива контролов. Знаешь путь?
Просто так интересно совпало что на двух тематических форумах был задан интересный вопрос об обработке событий массива контролов.
0
|
|
|
182 / 33 / 3
Регистрация: 28.05.2015
Сообщений: 148
|
|
| 11.07.2017, 03:24 [ТС] | |
|
The trick, скинь материалы по COM плиз.
0
|
|
|
Модератор
|
|
| 11.07.2017, 11:53 | |
|
1
|
|
| 11.07.2017, 11:53 | |
|
Помогаю со студенческими работами здесь
20
Работа с контейнером библиотеки STL Работа с контейнером map, запрос на выборку Работа с контейнером map: найти и вывести те тройки чисел, где последние числа равны Проблемы с контейнером задача с контейнером Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|