ListBox: работать с элементами поотдельности. Делаю на HTML

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

ListBox: работать с элементами поотдельности. Делаю на HTML

Сообщение Wolfie » 09.07.2007 (Пн) 21:38

Приветствую! Подскажите кому не трудно: можно ли работать с элементами ListBox по отдельности как с объектами - короче - мне нужно менять цвет и стиль шрифта отдельным элементам, хорошо бы еще и бэкграунд, а в иделе - залокировать некоторые из них (т.е. не дать выбрать их). Как все это сделать?
Не хотелось бы пользоваться .ОСХ и .ДЛЛ , но если это единственный выход - то порекомендуйте какими.
Последний раз редактировалось Wolfie 12.07.2007 (Чт) 19:32, всего редактировалось 1 раз.
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 09.07.2007 (Пн) 21:49

Примеров, вроде бы, полно.
Суть сводится к следующему:
Сменить стиль на LBS_OWNERDRAWFIXED или LBS_OWNERDRAWVARIABLE.
Сделать перехват сообщений WM_MEASUREITEM и WM_DRAWITEM.

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

Сообщение Хакер » 09.07.2007 (Пн) 21:51

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

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 09.07.2007 (Пн) 22:26

EUGY Спасибо, я никак не мог запрос сформулировать чтобы найти

Хакер Спасибо, я как то так и думал... чаял что попроще, но придется повозится...

Покак работал с ListBox встал еще вопрос - можно ли при стиле листа в виде чекбоксов сделать некоторые из них Grayed ?
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 09.07.2007 (Пн) 23:44

Можно,
но придется повозится...

Всю непредусмотренную разработчиками функциональность придется решать через сабклассинг.
Все что хочешь сделать с окном - надо делать самому, либо оставить на произвол DefWindowProc.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 10.07.2007 (Вт) 9:36

Я просто думал, что каждый элемент в листбоксе это в конечном счете контрол, пусть и неполноценный, вот я и надеялся прорваться сквозь оболочку к этим элементам...
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение Хакер » 10.07.2007 (Вт) 10:12

Нет, это всего лишь графика. DC у каждого элемента есть, да.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 10.07.2007 (Вт) 18:04

1. А через DC что можно сделать с элементом? это я так понял к графике относится только? и как этот DC получить тогда?

2. Интересно, а если сделать свой UserControl "Список" где для каждого элемента создавать лэйбл или чекбокс, это не займет много памяти, скажем для 500 элементов? не будет такой "лист" тормозить?
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение Хакер » 10.07.2007 (Вт) 18:13

1. Включаешь стиль WS_OWNERDRAWFIXED. Далее ты будешь получать спеицальное сообщение, и в частности структуру DRAWITEMSTUCT. В ней будут содержаться все необходмые сведения. При получении сообщения будешь отрисовывать нужный итем с помощью API-функций.

2. Уродство. :puker:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Stop Kran
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 22
Зарегистрирован: 19.06.2007 (Вт) 3:35
Откуда: из онлайна

Сообщение Stop Kran » 10.07.2007 (Вт) 20:04

Интересно, а если сделать свой UserControl "Список" где для каждого элемента создавать лэйбл или чекбокс, это не займет много памяти, скажем для 500 элементов? не будет такой "лист" тормозить?

500 элементов. Я думаю что тормозить всётаки будеть. :idea: Однако не легче ли сделать юзер-контрол который прописывал бы всё на html? :roll: Такой контрол будет быстрее. К примеру сравни у 50 обьектов измеить свойство или написать две строки кода и отобразить на экран результат.

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

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

Stop Kran
Ты бредишь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 11.07.2007 (Ср) 13:11

Хакер спс за разъяснение с п.1 :)

Между прочим, идея Stop Kran весьма интересна, ведь контрол такой есть и называется WebBrowser, и вся прелесть в том, что именно у IE я увидел такое обращение с элементами листа - атрибут style изменяет вид каждого элемента (поправьте если не так) - т.е. по идее, понадобится процедура вроде
AddItemHTML и функция GetItemHTML и делать WebBrowser по размеру Списка... без сомнения - понадобится много ковырятельств с CSS+HTML... и самое неприятное, это как брать активный элемент? где то я видел здесь такую тему про HTML...

Ну как идейка, на суд скептиков? :lol:
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 11.07.2007 (Ср) 14:52

Ну с WB лучше всего со стороны простоты реализации поставленной задачи. Но, имхо, это извращение.
Salus populi suprema lex

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 11.07.2007 (Ср) 17:46

А не извращение делать целый модуль с кучей API да еще потом все это отлаживать... А как сам IE это делает? Короче извращение так и так :lol: Осталось только понять как получать выбранный элемент...

Так что спасибо Stop Kran за наводку
Последний раз редактировалось Wolfie 11.07.2007 (Ср) 17:49, всего редактировалось 1 раз.
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение Хакер » 11.07.2007 (Ср) 17:47

А не извращение делать целый модуль с кучей API да еще потом все это отлаживать...


Нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 11.07.2007 (Ср) 18:00

Хакер твое ИМХО нам ясно, спасибо, однако не соглашусь,
с HTML мне приятней чем сабклассировать... хотя и здесь будут подводные камни и косяки нет сомнений

Господа, подскажите, как получить выбранный элемент списка? посомтрел те6му vb+html но на мысль не натолкнула, а HTML DOM мне знаком слабо...
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 11.07.2007 (Ср) 19:41

Подсказал бы, но боюсь соврать - сейчас нет ВБ под рукой. А для поверхностного ознакомления с ДОМ, если ты хорошо знаком с НТМL, достаточно открыть ObjectBrowser.
Salus populi suprema lex

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 11.07.2007 (Ср) 21:31

Люди, у меня тут вопрос по теме. Как изменить цвет линий сетки LV?

Wolfie
Насчет бэкграунда: http://forum.sources.ru/index.php?showtopic=130242 (мне её раньше BV дал)может понадобится. Там во втором топике архив с тремя примерами. В одном из них закрашивается также и чекбокс. Вобщем посмотри.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 11.07.2007 (Ср) 21:48

dr.MIG , э, HTML то я знаю, а вот капк я DOM в OBrowser посмотрю? она там откуда, от WB что-ли? я из ДОМ знаю только getElemetnByID и более ничего, так как со скриптами дел не имел почти... Так что если кто подскажет как они должны проконтактировать (WB и активный элемент списка) буду очень признателен

burik отправили на регистрацию, порегюсь и скачаю, спасибо...
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 11.07.2007 (Ср) 22:44

Wolfie писал(а):dr.MIG , э, HTML то я знаю, а вот капк я DOM в OBrowser посмотрю? она там откуда, от WB что-ли?

А как насчёт в референсах добавить Microsoft HTML Object Library?
Salus populi suprema lex

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

Сообщение Денис » 12.07.2007 (Чт) 0:29

Wolfie
Я тут себе недавно Ubuntu раздобыл (ну и поставил, конечно). Так там на LiveCD автозапуск для винды. Прога выводит веб-страницу в которой уже и реализован весь интерфейс (ну, там, проги для винды бесплатные поставить, Тормозиллу и пр.) :!:

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

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 12.07.2007 (Чт) 13:10

dr.MIG благодарю за подсказку, я особо с WB и HTML в VB дела всеже не имел, посему вот не знал =)

VB_D3D_Денис ... вот спасибо честно за то, что я теперь знаю что это такое "Ubuntu", правда я вот останусь верным Мелкософту и его монопольным шедеврам (само это ЮАРское слово даже напрягает) :lol: Э, я так понял, что ты предлагаешь мне взять оттуда метод отлова скриптом через DOM из HTML Формы данных? Тогда такая просьба - не скопируешь мне в эту тему, или просто приложишь к этой теме или пошлешь на почту wolfie@bk.ru страничку эту одну из инсталлера, где там такой скрипт, а то честно не очень с моим соединением хочется заливать себе всю эту ОС а потом еще разбирать инсталлер :D заранее спасибо, но если влом - не напрягайся. И это кстати точно не DHTML или там IIS какой нибудь?
Последний раз редактировалось Wolfie 12.07.2007 (Чт) 13:45, всего редактировалось 1 раз.
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение tyomitch » 12.07.2007 (Чт) 13:25

Вот все HTML-ки оттуда.
Вложения
disctree.rar
(503.33 Кб) Скачиваний: 58
Последний раз редактировалось tyomitch 12.07.2007 (Чт) 13:49, всего редактировалось 1 раз.
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 12.07.2007 (Чт) 13:43

tyomitch Спасибо, только у всех страниц
Код: Выделить всё
<script src="../incl/js/ocd_common.js" type="text/javascript" language="JavaScript1.2"></script>

Можно тогда и его уж до полного комплекта :lol: , в самих листах скриптов вроде нет... ocd_common.js из папки incl/js, а лучше навреное если не слишком весомая всю папку js из incl :oops:
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение tyomitch » 12.07.2007 (Чт) 13:49

Проверяй теперь.
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 12.07.2007 (Чт) 15:05

отлично, более чем - теперь все FullSet =) буду анализировать скрипты...

.: __________________ .: (.) :. __________________ :.

Ковырялся в HTML и в этом скрипте, на который они все ссылаются - помойму там только открытие PopUp со скриншотом скрипт делает ну да еще что-то, короче спасибо за материал - пока ковырял вдруг осенило -

ведь я могу сделать каждый элмент тегом -a- , засунуть -style- где все -А- описать как дисплей:блок и получу даже лучше чем бейсик - подсветку при наведении мыши, далее, после клика в BeforeNavigate сделать событие вроде Click (Я так прикинул, что можно написать свой контрол или даже ОСХ) и отменить переход, а элемент выделить через getElementByID... вроде все радужно - функционал в отображении - гигантский, проблема в понижении скорости, а также в процедурах типа AddItem и RemoveItem, так как придется перегенерировать всю страницу... ну и в дизайнмодэ не заполнишь, разве что кинуть ListBox и его ковырять...

Как такой вариант? практически без скриптов =)
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 13.07.2007 (Пт) 2:33

проблема в понижении скорости, а также в процедурах типа AddItem и RemoveItem

Когда спидометр упадет, не забудь переименовать название темы обратно :)

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 13.07.2007 (Пт) 18:48

Э, да вроде курс менять не собираюсь, но если что - конечно переименую =) в
ListBox: работать с элементами по отдельности трудно, скучно и я забил
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot], YaCy [Bot] и гости: 98

    TopList