Зачем их делают контролами?

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

Зачем их делают контролами?

Сообщение ANDLL » 26.05.2006 (Пт) 23:25

Как известно, многие invisble-in-run-time контролы(например, Internet control, Common Dialog Control, WinSock, Comm Control) совершенно спокойно можно использовать как обычные COM-классы.
Для этого достаточно добавить ссылку на соответствующий OCX в refernces и дальше создавать объект с помощью new.
Как видно из этого, не одному из вышеперечисленных COM-классов вовсе не требуется некоторый "окнонный" контейнер для нормальной работы.
Возникает вопрос: зачем эти классы "заворачивали" в оболочку ActiveX-контролов? Ведь это совершенно не сокращает(мягко говоря) ни размер EXE-файла, ни размер программы в ОЗУ, ни процессорное время, потраченное на загрузку формы.
И еще: вы сильно удивитесь, но в списках Referencies почему-то нету не Common dialog, ни Winsock. VB специально "исключает" из списка те DLL, которые могут быть добавлены через Ctrl+T! Интересно, к чему такая вредность? Приходится нажимать Browse что бы добавить каждую DLL...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.05.2006 (Пт) 23:37

Ну, я погу предложить пару идей -- нетривиальная настройка в Design-time, или персистентность, или ещё что-нибудь столь же продвинутое.

Но у названных контролов ничего из этого действительно нет. Странно.

Может, MS целились на "программирующих мышкой"? :-?
Изображение

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

Сообщение alibek » 26.05.2006 (Пт) 23:46

У меня еще одна догадка.
Возможно, тяжелое наследие VBX, где иначе было нельзя.
Еще одной причиной может быть необходимость доступа к родительскому окну.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.05.2006 (Пт) 23:52

Для Internet control и иже с ним -- сомнительно, что во времена VBX было что-то подобное.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.05.2006 (Сб) 11:00

Еще одной причиной может быть необходимость доступа к родительскому окну
Ведь контролы и без окна работают. В чем же необходимость?

Ну и тогда интересно, почему этих библиотек нету в Referencies?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Сообщение alibek » 27.05.2006 (Сб) 12:09

Ну например сабклассер, который сабклассит окно, на которое помещен.
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 27.05.2006 (Сб) 15:14

Bruce McKinney писал(а):Единственная причина, по которой Timer до сих пор ходит в элементах управления - в предыдущих версиях Visual Basic только элемент управления мог генерировать события. Вот и все.

Классиков знать надо :).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.05.2006 (Сб) 15:45

Ennor, речь идёт не о таймере, а об ActiveX-контролах. С "предыдущими версиями Visual Basic" они всё равно несовместимы.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.05.2006 (Сб) 16:25

alibek, я согласен, что скажем имеет смысл использовать ImageList в качестве именно кеонтрола(из-за устойчивости и удобства редактирования свойств в property page). Имеет смысл размещать, скажем, subclasser или еще что на окне(если контролу требуется некоторый hWnd для работы).

Вопрос не стоит, зачем нужны invisible-контролы. Вопрос стоит зачем на некотрые обычные COM-классы делать навороты, превращая их в контролы, в то время как это им вроде бы совсем не нужно?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.05.2006 (Сб) 18:56

Нуу... Winsock, например, несколько криво работает, если его создать таким макаром - где-то(то ли на Listen, то ли на Connect, то ли ещё где-то) вылетает с ошибкой(тоже пытался - не один ты такой).
Изображение

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 28.05.2006 (Вс) 0:08

Мне кажется, всё гораздо проще. НЕ надо объявлять его WITHEVENTS
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 28.05.2006 (Вс) 1:22

tyomitch, принцип в данном случае тот же. Ну а потом - ты зря забываешь про совместимость. В те времена было не принято менять все, что только можно поменять, в каждой версии. Если в четверке это был контрол без GUI, то он и дальше оставался таким. Да что тут говорить - практ. весь язык такой...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.05.2006 (Вс) 1:24

Какой, к чертям, в четвёрке Internet control?

(Кстати, в VB4 уже были OCX.)

Для справки: вот список VBX из VB3. С ними, может, и поддерживалась совместимость, только среди них нет ни Винсока, ни чего.
  • msole2.vbx
  • crystal.vbx
  • gauge.vbx
  • keystat.vbx
  • mci.vbx
  • mscomm.vbx
  • msmapi.vbx
  • msmasked.vbx
  • msoutlin.vbx
  • picclip.vbx
  • spin.vbx
  • anibuton.vbx
  • graph.vbx
  • pencntrl.vbx
  • threed.vbx
Изображение

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

Сообщение alibek » 28.05.2006 (Вс) 10:17

Кстати, насчет сокетов.
ЕМНИП, то второй версии сокеты получали оконные сообщения. И, соответственно, их делали контролами, чтобы кидать на форму и сабклассить эту форму.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение alibek » 28.05.2006 (Вс) 10:18

tyomitch писал(а):
  • msole2.vbx
  • crystal.vbx
  • gauge.vbx
  • keystat.vbx
  • mci.vbx
  • mscomm.vbx
  • msmapi.vbx
  • msmasked.vbx
  • msoutlin.vbx
  • picclip.vbx
  • spin.vbx
  • anibuton.vbx
  • graph.vbx
  • pencntrl.vbx
  • threed.vbx

Эх... threed.vbx, picclip.vbx, msoutlin.vbx... Ностальгия :)
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.05.2006 (Вс) 11:22

alibek писал(а):Кстати, насчет сокетов.
ЕМНИП, то второй версии сокеты получали оконные сообщения. И, соответственно, их делали контролами, чтобы кидать на форму и сабклассить эту форму.

А я всю жизнь думал, что они создают невидимое окно, и сабклассят его... Зачем им форму мучать?
Изображение

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

Сообщение alibek » 28.05.2006 (Вс) 11:41

tyomitch писал(а):А я всю жизнь думал, что они создают невидимое окно, и сабклассят его... Зачем им форму мучать?

Ну это уже дело разработчика, как сделать.
Лично я бы сабклассил клиентское окно :)
А есть какие-либо особые причины, чтобы так не делать?
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение GSerg » 28.05.2006 (Вс) 11:47

Ну не знаю... я вот сабклассю невидимый static в таких случаях. Ибо set = new рулит.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.05.2006 (Вс) 13:33

alibek писал(а):
tyomitch писал(а):А я всю жизнь думал, что они создают невидимое окно, и сабклассят его... Зачем им форму мучать?

Ну это уже дело разработчика, как сделать.
Лично я бы сабклассил клиентское окно :)
А есть какие-либо особые причины, чтобы так не делать?

А если на форме десять винсоков лежит, и все её сабклассят -- они не подерутся?
Изображение


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

    TopList