Object= объясните ламеру :)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Object= объясните ламеру :)

Сообщение Хакер » 24.03.2010 (Ср) 10:55

Допустим. Но ведь мы не пролетаем?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Object= объясните ламеру :)

Сообщение Antonariy » 24.03.2010 (Ср) 10:59

Пролетаем с обработчиком Control_Event(Index As Integer), размещенным в форме, и с таким явлением, как "массив контролов" вообще, но не пролетаем с возможностью обрабатывать события классическим способом.
Лучший способ понять что-то самому — объяснить это другому.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Object= объясните ламеру :)

Сообщение arthur2 » 24.03.2010 (Ср) 11:05

Antonariy писал(а):Что за тема? Вероятно там была речь о чем-то другом, нежели мы тут обсуждаем.
http://bbs.vbstreets.ru/viewtopic.php?p=6693567#p6693567
Antonariy писал(а):Тем, что ты его лишь только что внятно сформулировал.
:oops:
Antonariy писал(а):А так же необходимостью таскать мусорные формы, нужные лишь для обработки ошибок их загрузки
Нет, ещё для обработки событий. По-моему, не так уж и накладно, учитывая, что такая реализация будет гораздо проще.
Артур
 
   

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Object= объясните ламеру :)

Сообщение Antonariy » 24.03.2010 (Ср) 11:16

arthur2 писал(а):
Antonariy писал(а):Что за тема? Вероятно там была речь о чем-то другом, нежели мы тут обсуждаем.
http://bbs.vbstreets.ru/viewtopic.php?p=6693567#p6693567
Собственно, это то, о чем говорил Хакер, и это уже не массив контролов.
Лучший способ понять что-то самому — объяснить это другому.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Object= объясните ламеру :)

Сообщение arthur2 » 24.03.2010 (Ср) 11:54

собственно, да :D Но вполне его заменяет, если это понадобится. Но мы отклонились от темы - с формой в моём варианте - этих ухищрений не понадобится :D
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Object= объясните ламеру :)

Сообщение Хакер » 24.03.2010 (Ср) 11:57

Antonariy, что (какие свойства, возможности и особенности) ты понимаешь под массивом контролов? Что из этого у предлагаемого мной варианта отсутствует или не удовлетворяет тебя?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Object= объясните ламеру :)

Сообщение Antonariy » 24.03.2010 (Ср) 12:26

Хакер писал(а):Antonariy, что (какие свойства, возможности и особенности) ты понимаешь под массивом контролов?
Механизм динамического создания контролов, присущий только VB.
Хакер писал(а):Что из этого у предлагаемого мной варианта отсутствует или не удовлетворяет тебя?
Ничего.
Лучший способ понять что-то самому — объяснить это другому.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 27.03.2010 (Сб) 8:23

Чет не получается:
Код: Выделить всё
Set Form1.Control1.Container = Me

говорит Error 425 :?:

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Object= объясните ламеру :)

Сообщение arthur2 » 28.03.2010 (Вс) 12:11

хм... действительно, Container работает только в пределах формы и с одной на другую перебросить не получается :oops:

Ну тады SetParent или способ Antonariy
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Object= объясните ламеру :)

Сообщение Хакер » 28.03.2010 (Вс) 12:24

Если что-то в VB нельзя сделать, но можно сделать с помощью API, первая мысль, которая должна возникать: подобное отсутствие возможности —это не недостаток VB, это продуманность VB. И попытка заполучить желаемую возможность с помощью API ни к чему хорошему не приведёт.

Не вспомню сходу случай, в котором это правило не работает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Object= объясните ламеру :)

Сообщение arthur2 » 28.03.2010 (Вс) 12:34

И в чём будут грабли здесь?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Object= объясните ламеру :)

Сообщение Хакер » 28.03.2010 (Вс) 12:46

В том, что это наглый обман ActiveX-контрола. С обычным окном, созданным с помощью CreateWIndow, делать SetParent можно как угодно. Оно кроме хендла родителя ничего не знает.

У ActiveX-контрола с контейнером гораздо более сложные взаимоотношения (можешь поискать пример тёмыча с ручным (на чистых API) созданием контрола в окне). А вы тут со свей черной магией.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 29.03.2010 (Пн) 23:56

Вот Ёпст! :(

Тогда объясните, где искать этот Controls.Add?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Object= объясните ламеру :)

Сообщение Antonariy » 30.03.2010 (Вт) 10:52

Controls — свойство формы.
А ищется всё в Object Browser'е, который, как всегда, невозбранно доступен по кнопке F2.
Лучший способ понять что-то самому — объяснить это другому.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 31.03.2010 (Ср) 0:54

F2 писал(а):Property Controls As object
read-only

Но я так и не понял, чего с этим делать, а также где искать Controls.Add :?:
Объсни, плииз, на пальцах, чего нужно сделать, чтобы при недоступности контрола, форма успешно загружалась без него?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Object= объясните ламеру :)

Сообщение Хакер » 31.03.2010 (Ср) 1:01

Это видимо так сложно.

Код: Выделить всё
Private Sub Command1_Click
    MsgBox TypeName(Me.Controls)
    Me.Controls.Add "VB.CommandButton", "gagaga"
    With Me.Controls!gagaga
        .Caption = "foo bar"
        .Visible = True
    End With
End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 31.03.2010 (Ср) 7:57

Да... в жизни б не догадался!
"VB.CommandButton"

Теперь вопрос: как должна выглядеть сия магическая строка для контрола из COMCTL?
(COMCTL(32).ControlName не катит).

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Object= объясните ламеру :)

Сообщение Денис » 31.03.2010 (Ср) 8:41

0xy писал(а):Теперь вопрос: как должна выглядеть сия магическая строка для контрола из COMCTL?


Тоже в жись не догадаешься. Покидай контролы на форму, сохрани ее и открой FRM-файл блокнотом. Впереди в секциях begin control .. end ты увидишь интересующие тебя магические имена.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Object= объясните ламеру :)

Сообщение alibek » 31.03.2010 (Ср) 8:57

Для контролов ActiveX нужно еще лицензии добавить.
Lasciate ogni speranza, voi ch'entrate.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 01.04.2010 (Чт) 12:35

Денис писал(а): Покидай контролы на форму, сохрани ее и открой FRM-файл блокнотом. Впереди в секциях begin control .. end ты увидишь интересующие тебя магические имена.

Так ругаеццо:
Run-time error '739':

Cannot add control 'ComctlLib.ProgressBar'. Dynamically adding ActiveX Controls requires the use of the ProgId which can be different from LibraryName.Class for some controls. The ProgId for this control is 'COMCTL.ProgCtrl.1'.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Object= объясните ламеру :)

Сообщение Antonariy » 01.04.2010 (Чт) 12:46

Вы понимаете смысл ругательства?
Лучший способ понять что-то самому — объяснить это другому.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Object= объясните ламеру :)

Сообщение hclubmk » 01.04.2010 (Чт) 13:05

0xy писал(а):Так ругаеццо

:lol:
Тебе нужен OLE/COM Object Viewer, ветка Controls, и дальше ProgID
Научились ли Вы радоваться трудностям?

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 03.04.2010 (Сб) 2:20

Antonariy писал(а):Вы понимаете смысл ругательства?

Смысл то понятем. Однако вопрос остается актуальным:
как должна выглядеть сия магическая строка для контрола из COMCTL?

Иными словами, где можно узнать полный синтаксис этого метода .Add ???

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Object= объясните ламеру :)

Сообщение hclubmk » 03.04.2010 (Сб) 9:50

Add бывают разные.
смотри в MSDN топики: Add Method (Controls Collection), Add Method (Licenses Collection)
Научились ли Вы радоваться трудностям?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Object= объясните ламеру :)

Сообщение Денис » 03.04.2010 (Сб) 12:29

0xy писал(а):Смысл то понятем. Однако вопрос остается актуальным


Как же смысл мог быть "понятем", если вопрос остался актуальным?

Невозможно добавить контрол 'ComctlLib.ProgressBar'.Динамическое добавление ActiveX-контрола требует использования ProgId, разного с LibraryName.Class для этого контрола. ProgId для этого контрола это: 'COMCTL.ProgCtrl.1'.


ComctlLib.ProgressBar.1 - пробовали?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 03.04.2010 (Сб) 13:20

По-вашему, именно такой вариант строки однозначно следует из "смысла ругательства" ;)
Но, походу, так не рулит: говорит 711

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Object= объясните ламеру :)

Сообщение alibek » 03.04.2010 (Сб) 13:27

Денис писал(а):
Невозможно добавить контрол 'ComctlLib.ProgressBar'.Динамическое добавление ActiveX-контрола требует использования ProgId, разного с LibraryName.Class для этого контрола. ProgId для этого контрола это: 'COMCTL.ProgCtrl.1'.

ComctlLib.ProgressBar.1 - пробовали?

Денис, хватит уже нести чушь. Причем тут "ComctlLib.ProgressBar.1" если черным по белому написано "COMCTL.ProgCtrl.1"?
Lasciate ogni speranza, voi ch'entrate.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Object= объясните ламеру :)

Сообщение 0xy » 03.04.2010 (Сб) 14:06

По наводке hclubmk, мне наконец то удалось разыскать нужный заговор:
MSDN писал(а):Syntax
object.Add (ProgID, name, container)

Прочитав его, я сразу же решился применить строку из "ругательства" в неизменном виде, и... О ЧУДО! Заработало! :)

Однако к добавленному контролу не получается обращаться просто по имени (VB его не видит)--только через Me.Controls! или через объектную переменную.
Так и должно быть??

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Object= объясните ламеру :)

Сообщение hclubmk » 03.04.2010 (Сб) 15:34

Да
Научились ли Вы радоваться трудностям?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Object= объясните ламеру :)

Сообщение Денис » 03.04.2010 (Сб) 22:28

alibek писал(а):Денис, хватит уже нести чушь.

Будь добрее, чувак. И люди потянутся к тебе.
Ну ошибся разок, так что ж теперь? Сразу говорить что я чушь говорю? Просто ошибся.

Но и в моей ошибке был резон: я думал, он пробовал применить COMCTL.ProgCtrl.1 и у него ничего не получилось. А он просто, не читая, код ошибки запостил и ждал готовенького ответа.

Прочитав его, я сразу же решился применить строку из "ругательства" в неизменном виде, и... О ЧУДО! Заработало!


Экий Вы нерешительный, из-за вас меня обругали.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Пред.След.

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

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

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

    TopList