Дизайнер форм

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

Дизайнер форм

Сообщение drronnie » 10.12.2008 (Ср) 10:39

Господа, я пишу дизайнер форм и столкнулся с такими проблемами.
1. В инспекторе свойств я получаю все свойства контрола, через библиотеку TLI, но хотелось бы знать, как это делает VB6. Как он получает Description и Category свойства? Почему он не показывает допустим hWnd? Откуда он знает, что BackColor это цвет, когда, через TLI этот член имеет тип Long?

2. Я добавляю контролы на форму через Controls.Add(ProgID, Name). И вот кнопки есть свойство Style, у текстового поля Multiline, которые нельзя изменить в Run-time, только в Design-Time. Как мне добавить контрол и указать ему это свойство.

3. И вообще, что такое Design-Time? Как это прикрутить к моему дизайнеру?
Вложения
screenshot.JPG
Вот скриншот, если интересно.
screenshot.JPG (234.45 Кб) Просмотров: 819
Компиляция - перевод словесного поноса в машинный код.

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

Re: Дизайнер форм

Сообщение Antonariy » 10.12.2008 (Ср) 11:02

Почему он не показывает допустим hWnd?
Потому что read only.
Откуда он знает, что BackColor это цвет, когда, через TLI этот член имеет тип Long?
Потому что BackColor это OLE_COLOR, о котором TLI ничего не известно.
Как мне добавить контрол и указать ему это свойство.
Никак. Создать свой контрол из двух текстбоксов с заранее проставленным свойством.
Лучший способ понять что-то самому — объяснить это другому.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Дизайнер форм

Сообщение drronnie » 10.12.2008 (Ср) 11:09

Почему он не показывает допустим hWnd?
Потому что read only.
Я думаю по другой причине, т.к. SelStart не readonly, но в инспекторе свойств оно не показывается.
Откуда он знает, что BackColor это цвет, когда, через TLI этот член имеет тип Long?
Потому что BackColor это OLE_COLOR, о котором TLI ничего не известно.
Я спрашивал, откуда это может знать инспектор свойств VB6.
Как мне добавить контрол и указать ему это свойство.
Никак. Создать свой контрол из двух текстбоксов с заранее проставленным свойством.
А если для свойства будет 10 вариантов контрола - мне 10 контролов создавать?
Компиляция - перевод словесного поноса в машинный код.

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

Re: Дизайнер форм

Сообщение Antonariy » 10.12.2008 (Ср) 11:31

Я думаю по другой причине, т.к. SelStart не readonly, но в инспекторе свойств оно не показывается.
hWnd — имнно по этой. Кроме того, похоже у свойств бывает атрибут типа "не показывать в дизайнере".
Я спрашивал, откуда это может знать инспектор свойств VB6.
Это сишный тип, typedef DWORD OLE_COLOR, в COM, с которым работает TLI, его нет.
А если для свойства будет 10 вариантов контрола - мне 10 контролов создавать?
А кто сказал, что будет легко? :wink: Не нравится гирлянда стандартных — делай свой нестандартный.
Лучший способ понять что-то самому — объяснить это другому.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Дизайнер форм

Сообщение drronnie » 10.12.2008 (Ср) 11:39

hWnd — имнно по этой. Кроме того, похоже у свойств бывает атрибут типа "не показывать в дизайнере".
Это сишный тип, кастуемый к DWORD, в COM, с которым работает TLI, его нет.

Ладно, забудем про TLI! Как это делает инспектор в VB6?
Компиляция - перевод словесного поноса в машинный код.

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

Re: Дизайнер форм

Сообщение Antonariy » 10.12.2008 (Ср) 11:46

Инспектор это делает через сишные интерфейсы, которыми из VB воспользоваться невозможно, насколько я слышал.
Лучший способ понять что-то самому — объяснить это другому.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Дизайнер форм

Сообщение drronnie » 10.12.2008 (Ср) 11:58

Antonariy писал(а):Инспектор это делает через сишные интерфейсы, которыми из VB воспользоваться невозможно, насколько я слышал.

А сылочки нету, где такое читалось?
Что-то я ничего не нагуглил... честно говоря даже не знаю как сформулировать.
Компиляция - перевод словесного поноса в машинный код.

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

Re: Дизайнер форм

Сообщение Antonariy » 10.12.2008 (Ср) 17:28

Не нашел :(
Копать нужно в сторону технологий создания контролов на c++.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: Дизайнер форм

Сообщение Хакер » 11.12.2008 (Чт) 19:07

Нет такого понятия, как сишные интерфейсы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Дизайнер форм

Сообщение tyomitch » 11.12.2008 (Чт) 19:46

Antonariy писал(а):
Я думаю по другой причине, т.к. SelStart не readonly, но в инспекторе свойств оно не показывается.
hWnd — имнно по этой. Кроме того, похоже у свойств бывает атрибут типа "не показывать в дизайнере".
Я спрашивал, откуда это может знать инспектор свойств VB6.
Это сишный тип, typedef DWORD OLE_COLOR, в COM, с которым работает TLI, его нет.
А если для свойства будет 10 вариантов контрола - мне 10 контролов создавать?
А кто сказал, что будет легко? :wink: Не нравится гирлянда стандартных — делай свой нестандартный.

1) Tools -> Procedure Attributes -> Don't show in Property Browser
2) Ну прямо нет. Dim c As stdole.OLE_COLOR
3) Пример создания экземпляра ActiveX-контрола голыми руками я постил.
Изображение

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

Re: Дизайнер форм

Сообщение tyomitch » 11.12.2008 (Чт) 20:11

Antonariy писал(а):Инспектор это делает через сишные интерфейсы, которыми из VB воспользоваться невозможно, насколько я слышал.

И пример декомпиляции TLB через ITypeLib я тоже постил...
Изображение

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Дизайнер форм

Сообщение drronnie » 12.12.2008 (Пт) 10:03

Нашёл тут пример, как показать страницы свойств использую интерфейс ISpecifyPropertyPages. Наверно есть какие-то ещё интерфесы, для управления контролов в Design-Time? Подскажите, какие?
Компиляция - перевод словесного поноса в машинный код.

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

Re: Дизайнер форм

Сообщение tyomitch » 12.12.2008 (Пт) 10:52

Специально для ленивых, вот те топики, что я имел в виду.
viewtopic.php?t=9370
viewtopic.php?t=14075
Изображение

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Дизайнер форм

Сообщение drronnie » 12.12.2008 (Пт) 11:08

Спасибо, Тёмыч. предыдущее сообщение запостил не прочитав твой ответ. Темы нашёл, вот сижу разбираюсь. Просто запустил пример товарища GM, я так понял, что у свойств есть флаг non-browsable, если он есть, то свойство не показываются в инспекторе.
Antonariy писал(а):Потому что read only.

:P
Компиляция - перевод словесного поноса в машинный код.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Дизайнер форм

Сообщение drronnie » 12.12.2008 (Пт) 12:22

Если я правильно понял...
Если объект поддерживает интерфейс IProvideClassInfo - из него можно узнать необходимую информацию о свойствах, их типах и флагах.
Код: Выделить всё
  Dim disp As olelib.IProvideClassInfo, info As olelib.ITypeInfo
  Set disp = o
  Set info = disp.GetClassInfo

А если не поддерживает, то эту же информации мы узнаём из из IDispatch
Код: Выделить всё
  Dim disp As olelib.IDispatch, info As olelib.ITypeInfo
  Set disp = o
  Set info = disp.GetTypeInfo

Вот только мне кажется, что из IDispatch информация какая-то не понлная... например нигде нет флага FUNCFLAG_FNONBROWSABLE, даже у hWnd.
Компиляция - перевод словесного поноса в машинный код.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Дизайнер форм

Сообщение drronnie » 15.12.2008 (Пн) 14:32

Еслик ому интересно, выложил исходник тут
Компиляция - перевод словесного поноса в машинный код.


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

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

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

    TopList