Вновь о Event-ах с динамических контролов (FM20.DLL)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Вновь о Event-ах с динамических контролов (FM20.DLL)

Сообщение lomaster » 02.11.2004 (Вт) 14:48

VB5, хочу поймать клик от кнопки.
Кнопки беру из FM20.DLL и вставляю во фрейм, взятый оттуда же.
(Там и кнопки и фреймы гораздо функциональнее нежели в VB - как раз мне этих свойств и не хватает).
Код: Выделить всё
Dim myCmd(50) As Object

Private Sub Frame1_Click()
    Set myCmd(1) = Frame1.Controls.Add "Forms.CommandButton.1", "cmdEdit", True)
End Sub

Все работает. После щелчка на форме появляется кнопка.
Пытаюсь поймать ее клик - заменяю первую строчку на
Код: Выделить всё
Private WithEvents myCmd(50) As MSForms.CommandButton

она у меня махом меняется на
Код: Выделить всё
Private WithEvents myCmd As MSForms.CommandButton

Т.е. с массивом контролов я сразу обломился :(
Ну ладно, думаю, хотя бы с одного Event поймать, а там будем кумекать дальше...

Запускаю... И получаю "Run-time error '13': Type mismatch" в строке
Код: Выделить всё
Set myCmd = Frame1.Controls.Add("Forms.CommandButton.1", "cmdEdit", True)

т.е. MSForms.CommandButton он добавлять не хочет - только Object :(
(Control, кстати, тоже не хочет - только Object)
А Object эвентов не имеет!
И так - заколдованный круг :(((

Перечитал несколько топиков на эту тему (нашел по поиску) - везде не то :(
То и дело приводится пример
Код: Выделить всё
Dim ctlName As Control
Set ctlName = Form1.Controls.Add("VB.CommandButton", "Name", Form1)

который у меня вообще никак не работает.
"Run-time error '438': Object doesn't support this property or method"

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 02.11.2004 (Вт) 15:10

VBControlExtender

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 02.11.2004 (Вт) 15:12

Это примерчик из MSDN. У тебя примерно будет тоже самое, только добавление по другому, как ты сам ранее написал.

Код: Выделить всё

Option Explicit
Dim WithEvents objExt As VBControlExtender ' Declare VBControlExtender variable WithEvents

Private Sub LoadControl()
   Licenses.Add "Project1.Control1", "ewrinvcmcoe"
   Set objExt = Controls.Add("Project1.Control1", "myCtl")
   objExt.Visible = True ' The control is invisible by default.
End Sub

Private Sub extObj_ObjectEvent(Info As EventInfo)
   ' Program the events of the control using Select Case.
   Select Case Info.Name
   Case "Click"
      ' Handle Click event here.
   ' Other cases now shown
   Case Else ' Unknown Event
      ' Handle unknown events here.
   End Select
End Sub


lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 02.11.2004 (Вт) 15:24

Увы, не знает мой VB5 что есть такой VBControlExtender :(
(Грит - пользовательский тип и требует описать)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2004 (Вт) 16:52

Зачем as extender...
Сразу as Project1.Control1
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 02.11.2004 (Вт) 17:05

А как же тогда обрабатывать???
Private Sub extObj_ObjectEvent(Info As EventInfo)

Pls. Если можно - рабочий пример.

(извините, но предыдущие ответы я уже читал в других топиках. НО не работают они!!!)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 02.11.2004 (Вт) 17:25

как говориться GSerg, тогда только withevents и все дела, а интерфейсики к событиям придется описать заранее в классе

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 02.11.2004 (Вт) 20:46

Господи, куда я попал? Это же форум для новичков!
Ну не понимаю я как можно описать
Konst_One писал(а):интерфейсики к событиям
которых нет :shock:
Ну никак я не въеду в эти теоретические умозаключения :(

Люди! Умоляю - дайте хоть 3 строчки реально работающего кода.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2004 (Вт) 21:18

У меня реально не работает ничего. Правда, совсем по другой причине :)

В теории - подключаешь библу через project-references, объявляешь withevents as commandbutton и создаёшь кнопку, её ProgID "Forms.CommandButton.1".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 03.11.2004 (Ср) 9:05

Вот в том то и дело, что все работает только в теории :(
Что реально удалось получить подробно описано в моем первом посте.

Думаю, что решение все таки есть. Просто мы его, увы, не знаем. Иначе зачем вообще сделана такая возможность по созданию контролов если с них нельзя словить ни одного события? Чиста для декора что ли?

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 03.11.2004 (Ср) 12:12

как вариант
посмотри

http://www.mvps.org/emorcillo/vb6/com/index.shtml

EventCollection Class v2.0

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 03.11.2004 (Ср) 14:25

Посмотрел - сурово очень - с полпинка не въедешь - буду изучать...
Первые впечатления - заточено чиста под VB6 - на многое мой VB5 ругается.
И первые неутешительные выводы - если кто то это пишет и применяет (т.е. таскает за своими проектами эту постороннюю библиотеку) - значит нормальных человеческих средств для ловли эвентов в VB просто нет :(
Ой, как хреново то...

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 03.11.2004 (Ср) 14:59

lomaster писал(а):И первые неутешительные выводы - если кто то это пишет и применяет (т.е. таскает за своими проектами эту постороннюю библиотеку) - значит нормальных человеческих средств для ловли эвентов в VB просто нет :(
Ой, как хреново то...


Очень неправильное мнение.
Напиши что тебе не хватает в стандартной VB кнопке.

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 03.11.2004 (Ср) 16:14

А вернее всего поставить VB6 и немучится ! :wink:
Max!

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 03.11.2004 (Ср) 16:21

Мне не хватает в стандартной кнопке:
- возможности выбрать цвет шрифта
- возможности поместить иконку слева от надписи

Мне не хватает в стандартном фрейме:
- скроллинга
(идиеты создавали стандартный фрейм - если объекты в нем крутить, то они наползают на рамку - приходится измудряться)

2Max!
Поставлю, когда на всех компах будет msvbvm60.dll ;)

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 03.11.2004 (Ср) 17:32

lomaster писал(а):Мне не хватает в стандартной кнопке:
- возможности выбрать цвет шрифта
- возможности поместить иконку слева от надписи


запросто реализуемо через UserControl

lomaster писал(а):Мне не хватает в стандартном фрейме:
- скроллинга
(идиеты создавали стандартный фрейм - если объекты в нем крутить, то они наползают на рамку - приходится измудряться)


попробуй Picture как контейнер

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 04.11.2004 (Чт) 9:16

codemaster писал(а):запросто реализуемо через UserControl


Увы, на это моих мозгов не хватает :(
Если новую тему начну - поможешь?

codemaster писал(а): попробуй Picture как контейнер


Я делаю 2 фрейма (один в другом) - вот про это я и говорил "приходится измудряться".

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 04.11.2004 (Чт) 10:56

lomaster писал(а):Увы, на это моих мозгов не хватает :(
Если новую тему начну - поможешь?".


Почитай здесь если возникнут вопросы пиши
http://mik-seite.narod.ru/activex/startartikel.htm


lomaster писал(а):Я делаю 2 фрейма (один в другом) - вот про это я и говорил "приходится измудряться".


Зачем?
Опиши подробно какие "объекты" ты хочешь прокр на форме?

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 04.11.2004 (Чт) 11:18

codemaster писал(а):Почитай здесь


Обязательно изучу. Только сразу вопрос:
Если я наделю обычную кнопку необходимыми мне свойствами (т.е. создам новый ActiveX control) то все это будет внутри проги или придется таскать за собой новую OCX-сину и регистрить ее?

codemaster писал(а):Опиши подробно какие "объекты" ты хочешь прокр на форме?

Кнопки (много. одна под другой. количество заранее не известно)
Я их размещаю на невидимом фрейме.
Потом вставляю этот фрейм внутрь другого.
При прокрутке двигаю кнопки во внутреннем фрейме.
В таком варианте кнопки, при перемещении за край внутреннего фрейма, постепенно исчезают и не закрывают рамку и надпись на наружном фрейме.
По уму надо бы влепить и 3й фрейм чтобы разместить кнопки на нем и двигать уже его, а не сами кнопки.
Ты предлагаешь размещать их на Image - по моему - тут это без разницы - механизм то один и тот же.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 04.11.2004 (Чт) 17:02

Да ладно что там делать-то - пять минут потратил на пример, где все это реализовал - лови...
Вложения
SampleBt.rar
(45.56 Кб) Скачиваний: 33
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 04.11.2004 (Чт) 17:06

Увы, не знает мой VB5 что есть такой VBControlExtender


И лучше поставь сразу VB6 иначе ничего кроме проблем не поимеешь - большинство кода в сети именно под VB6.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 05.11.2004 (Пт) 9:55

Andrey Fedorov писал(а):Да ладно что там делать-то

Да... Круто наворочено. Я столько кода за всю жизнь не написал ;)

Первые впечатления - вопросы:
1. - У меня эта красота, очевидно, не будет работать в принципе (VB5).
Вот сейчас ругается на
Код: Выделить всё
Private Sub UserControl_InitProperties()
    Tag = UserControl.ContainerHwnd

"Compile error: Method or data member not found"

2. - Издержки такого подхода - Надо везде таскать за собой и регистрить SSubTmr6.dll. Так?

Andrey Fedorov писал(а):И лучше поставь сразу VB6 иначе ничего кроме проблем не поимеешь - большинство кода в сети именно под VB6.


Да стоял у меня VB6. Для себя когда то упражнялся в нем.
Сейчас пишу утилитку для людей у большинства из которых msvbvm60.dll отсутствует, а напрягать их его скачиванием не хочу (они же не виноваты что я в С++ не силен). Так же очень не хочется засорять ихнюю систему регистрацией компонентов, нужных только моей проге.

Кстати, утилитка уже завоевала популярность. Если кто из читающих пользует Total Commander, то очень даже может пригодится. Вот только развивать ее дальше, увы, мозгов не хватает - поэтому спрашиваю вас - специалистов.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.11.2004 (Пт) 9:58

Ну ни фига себе причина :)
А какая разница - msvbvm50 или msvbvm60? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.11.2004 (Пт) 10:57

Да... Круто наворочено. Я столько кода за всю жизнь не написал


Все писать и не нужно - многое можно найти готовым и в исходниках - надо просто научиться пользоваться поиском в интернете.

У меня эта красота, очевидно, не будет работать в принципе (VB5).


Ну и поставь VB6. Иначе у тебя не будет работать еще 99% из того что есть в интернете. На каждом исходнике/примере будут проблемы. Она тебе настолько нужна - версия VB5 с которой все давно перешли на VB6 или VB.NET ???

2. - Издержки такого подхода - Надо везде таскать за собой и регистрить SSubTmr6.dll. Так?


Не обязательно - мне не хотелось тратить время на разборки, а так можно обойтись и без нее, реализовав нужную функциональность в самом Exe-шнике. А в обычной жизни мне так проще, ибо эта-же DLL-ка пользуется и в других местах программы/программ.

Сейчас пишу утилитку для людей у большинства из которых msvbvm60.dll отсутствует, а напрягать их его скачиванием не хочу (они же не виноваты что я в С++ не силен).


Думаешь там рантайм-библиотеки не надо?
Эдак тебе надо писать на ассемблере ;)

Так же очень не хочется засорять ихнюю систему регистрацией компонентов, нужных только моей проге.


Наивный... Эта DLL-ка давным-давно есть практически у всех. Ибо она входит в состав WinXP, офиса, идет с сервис-паками и кучей других продуктов... ;)

Так что она нужна не только твоей программе.

А для единиц, которые до сих пор сидят на Win95 не имея у себя практически никакого нового софта (msvbvm50.dll там, кстати, тоже в Win95 нет) - все одно нужно выкладывать нормальный дистрибутив, который в любом случае должен существовать для любого продукта.

В идеале на сайте должны быть:

1. Полный дистрибутив программы (включая рантайм библиотеку).
2. Сервис-пак (тут уже может быть только один твой exe-шник).

И вообще - если твоя утилита нужная и интересная, то лишний мегабайт трафика вряд ли кого-то лимитурует...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lomaster
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 02.11.2004 (Вт) 13:36

Сообщение lomaster » 05.11.2004 (Пт) 11:27

Andrey Fedorov писал(а):если твоя утилита нужная и интересная, то лишний мегабайт трафика вряд ли кого-то лимитурует...

Утила весит 18KB! И без проблем работает практически на всех системах (поскольку MSVBVM50.DLL имеется практически у всех. За почти 7 тысяч закачек не было ни одной жалобы). И я очень этим горжусь.
И если уж ее переписывать, то действительно на Ассемблере, но никак не на VB6.
А .NET с его Framework это вообще - ужас.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.11.2004 (Пт) 11:51

Утила весит 18KB! И без проблем работает практически на всех системах (поскольку MSVBVM50.DLL имеется практически у всех.


А как быть тем у кого и этой DLL все-же нету?

За почти 7 тысяч закачек не было ни одной жалобы). И я очень этим горжусь.


Да просто им влом писать ;)

И если уж ее переписывать, то действительно на Ассемблере, но никак не на VB6.


Ну, это твое дело - меня, к примеру, на мозахизм не очень тянет. Свое время дороже. Хотя в свое время писал для 8080 и Z80, но тогда это было действительно нужно и обосновано.

А .NET с его Framework это вообще - ужас.


И тут ничего страшного - в следующие операционки его включат.
А для серъезных и нужных продуктов его и сейчас скачать/установить совсем не проблема.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList  
cron