.Ocx на основе ListView

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

.Ocx на основе ListView

Сообщение Avtopic » 18.04.2007 (Ср) 16:55

Здравствуйте!

ListView из ComnCtr 5.0 не имеет свойства .GridLines, .FullRowSelect, .HotTracking
по сравнению с ListView из ComnCtr 6.0.
Но при передаче ListView соответствующих сообщении апи
LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT, LVS_EX_TRACKSELECT
контроль приобретает эти свойства.

В .осх использую ListView из ComnCtr 6.0 и использую родные свойства а не посылаемые через апи.
Значит или нет вышесказанное, что мой контроль в будущем не будет работать на машине где не имеется 6-ая версия ComnCtr.
Или для .осх лучше брать по возможности раннюю версию и остальное лучше добавлять самому через апи.

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

Сообщение GSerg » 18.04.2007 (Ср) 17:01

Вопрос неясен.
Ответ, соответствено, тоже неясен.
Кроме как "что используешь, то и таскаешь", но непонятно, почему это неизвестно автору вопроса.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.04.2007 (Ср) 17:11

Честно скажу, не понял ответ :(

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

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

Если ты юзаешь 6-ой, а на машине его не окажется, то будет ошибка. Если ты юзаешь 5-ый, а на машине его не окажется, будет ошибка.

Юзать лучше 5-ый, потому как, во первых - манифест, а во вторых - не создаётся дурацкое окно враппер, в котором помещается окно листвью.

Когда я пытался взять в свои руки 6-ой контрол, то получалось, что сообщения, отсылаемые ему никак не действуют. Так я выяснил что hWnd, которому я шлю сообщения и ставлю стили это не листвью. Это vb-шный враппер *WndClass20*. Поэтому надо либо Enum-ить ChildWindows либо FindWindow в нём, чтобы получить hWnd самого листавю.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.04.2007 (Ср) 17:32

Хакер писал(а):Если ты юзаешь 6-ой, а на машине его не окажется, то будет ошибка. Если ты юзаешь 5-ый, а на машине его не окажется, будет ошибка.

Юзать лучше 5-ый, потому как, во первых - манифест, а во вторых - не создаётся дурацкое окно враппер, в котором помещается окно листвью.
Спасибо!

Хакер писал(а): Когда я пытался взять в свои руки 6-ой контрол, то получалось, что сообщения, отсылаемые ему никак не действуют. Так я выяснил что hWnd, которому я шлю сообщения и ставлю стили это не листвью. Это vb-шный враппер *WndClass20*. Поэтому надо либо Enum-ить ChildWindows либо FindWindow в нём, чтобы получить hWnd самого листавю.

этот враппер чуть не свел меня сума, я не знал что за окно, но по интуиции догадался, что окно LisView сидит в окне.
И потом когда Parent для LisView установил 0 и выворачивал ему кишки, передвинул листвью а враппер остался на своей позиции, тогда убедился.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.04.2007 (Ср) 18:07

Еще один вопрос про этот осх.

Читал что
VB6 не позволяет программисту задать CLSID для своих классов напрямую
Вопрос, как задать CLSID для своих классов напрямую :)

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

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

Сообщение GSerg » 18.04.2007 (Ср) 18:09

Avtopic, ты хоть отдалённо представляешь, что будет, если у тебя это получится?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.04.2007 (Ср) 18:56

Gserg если бы я хоть отдаленно представлял это, то у меня бы точно получилось.

Исходя из содержательного ответа :wink: , остается лишь предположить, что это грозит чем-то плохим, вернее разрушительным.
Но почему, не понимаю.

Если имеется в виду что могут совпасть ID разных классов, то тогда возникает (у меня) вопрос,
как компилятор умудряется создавать, уникальные ID. На локальной машине понятно,
но при переносе и регистрации на другую машину, не понятно

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

Сообщение GSerg » 18.04.2007 (Ср) 19:06

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

Последняя часть твоего вопроса для меня пока непонятна.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.04.2007 (Ср) 19:32

Позвольте, утоню вопрос,
Сделал в свое время ActiveX. Использую в разных местах своих проектах.
Проделано немало работы, как по отношению ActiveX, так и в проектах.

В один день узнаю, что лучше использовать пятую версию контроля используемого в ocx, вместо шестого, но так чтобы совместимость с проектами сохранилось, но,
Компилятор извещает, что изменения в интерфейсе ActiveX, не позволяют поддерживать бинарную совместимость с прежним ActiveX-ом.

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

По этому и хочется создать новый ocx, в котором укажу старый Clsid и номер версии

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

Сообщение GSerg » 18.04.2007 (Ср) 19:42

Avtopic, не надо делать то, о чём ты имеешь самые абстрактные представления.

Программа компилируется в машинный код.
Машинный код вызова метода контрола - получить число, прибавить к нему константу и вызвать то, что лежит по получившемуся адресу.

По получившемуся адресу должно лежать то, что можно вызвать. Это и называется "бинарной совместимостью".

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

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.04.2007 (Ср) 19:58

Gserg, каждый ответ, что-то дает, за что и спасибо, но не интересует меня бинарная совместимость, по крайней мере, на этом этапе своего развития, пусть за этим следит VB6, меня интересует как ни меняя в проектах ничего создать для них новую осх, и заменит ею старый.
Не могу поверить, что, создав ActiveX, и захотев добавить туда маленькое изменение, допустим, добавить свойство, вам приходится переустанавливать все программы, где используется ActiveX.

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

Сообщение GSerg » 18.04.2007 (Ср) 20:08

VB6 не может и не будет за этим следить. Никогда.
И да, захотев добавить маленькое изменение, ты обязан создать новый CLSID, новый IID и вообще всё новое, а также переустановить все программы. Это стандарт COM, причём весьма мудрый, даже если ты пока этого не понимаешь.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 18.04.2007 (Ср) 20:57

Добавив свойство, CLSID можно не менять -- только IID. И удалив свойство, тоже. Программы переустанавливать не нужно.

(В сторону) и эти-то люди молятся на сильные имена .нет-сборок... :roll:
Изображение

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

Сообщение GSerg » 18.04.2007 (Ср) 21:09

Программы переустанавливать не нужно? И они подхватят новую версию ocx, в которой не будет проперти, к которой они обращаются? :roll:

tyomitch писал(а):и эти-то люди молятся на сильные имена .нет-сборок... :roll:

А это про кого? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Antonariy » 18.04.2007 (Ср) 22:22

GSerg писал(а):Программы переустанавливать не нужно?
При добавлении действительно не нужно. При изменении или удалении нужно.
Лучший способ понять что-то самому — объяснить это другому.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.04.2007 (Ср) 23:17

tyomitch писал(а):Добавив свойство, CLSID можно не менять -- только IID. И удалив свойство, тоже. Программы переустанавливать не нужно.

(В сторону) и эти-то люди молятся на сильные имена .нет-сборок... :roll:


Да, но как это сделать?, вся эта тема идет отсюда,
1. Если создаю осх. Совместимый со старым, и компилятор не ругается, потом удаляю старый из систем32 и без регистрации, без ничего на его место кидаю новый, все работает, ничто не ругается.

2. добавив свойство в Activex, компилятор сообщает, что не может создать совместимый осх.
Если нажать OK создается осх, который положив на место старого, и без регистрации и с анрегистер старый/с регистрацией нового, не принимает ни один старый проект.

То, что пишет Gserg, что если удалить свойство которое сидит в старой осх., и которыми пользуются программы, и это свойство убрать, канешно произойдет крах, это каждому ясно. Я и не представлял что он такого мнения обо мне (без обид), канешно если программа не найдет свойство в новой осх., произайдет обвал,
Но вопрос о том, можно или нет выйти из положения когда при добовлении чего то нового, компилятор спрашивает создать или нет бинарно несовместимы со старим осх,
а это несовместимость вызвано добавлением нового свойства

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

Сообщение GSerg » 19.04.2007 (Чт) 7:54

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

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

Сообщение tyomitch » 19.04.2007 (Чт) 8:11

GSerg писал(а):Программы переустанавливать не нужно? И они подхватят новую версию ocx, в которой не будет проперти, к которой они обращаются? :roll:

А что, после переустановки подхватят? :roll:

GSerg писал(а):
tyomitch писал(а):и эти-то люди молятся на сильные имена .нет-сборок... :roll:

А это про кого? :roll:

Про благодарных клиентов MS.
Изображение

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

Сообщение GSerg » 19.04.2007 (Чт) 8:14

Под переустановкой я разумел перекомпиляцию приложений и переустановку :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 26.04.2007 (Чт) 15:40

Хакер писал(а):Если ты юзаешь 6-ой, а на машине его не окажется, то будет ошибка. Если ты юзаешь 5-ый, а на машине его не окажется, будет ошибка.

Создал ListView с помощью API, почти со всеми атрибутами свойственными 5-ой и 6-ой версии.
Прошу объяснить, что использует в качестве “болванки” Windows при создании окна "SysListView32", и существует ли в этом случае понятие версии.

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

Сообщение GSerg » 26.04.2007 (Чт) 15:47

Что ты понимаешь под болванкой?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 26.04.2007 (Чт) 16:12

Откуда берутся все значения для этого класса окон. Hе уверен, но наверно ComCtl32.

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

Сообщение GSerg » 26.04.2007 (Чт) 16:16

Что значит "значения"? Само окно берётся из библиотеки comctl.
И да, она может быть разных версий.
Ограничения по версиям см. в описании каждого сообщения LVM_*.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 26.04.2007 (Чт) 16:57

ааа..., понятно. Т.е. они могут поддерживать, не поддерживать определенные сообщения.
Тогда почему не спрашиваете, для чего столько возни с API если Windows содержит готовый контроль на базе comctl, я закладывал в этой затее, идею совместимости для всех ос.
т. е. если можно у меня вопрос, имеет или нет смысл делать ListView на API функциях если все нужные свойства в Windows-ском ListView присутствуют, и нет таких методов и свойств, которые мешают делу.

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

Сообщение GSerg » 26.04.2007 (Чт) 16:59

Avtopic, в чём по-твоему отличие между "ListView на API" и "Windows-ском ListView"?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 26.04.2007 (Чт) 17:17

Клянусь, не знаю. Отсюда и столько, наверно простых вопросов на, убежден, легкие для вас темы.
Как я понимал и для чего начал возится с апи, написал.

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

Сообщение GSerg » 26.04.2007 (Чт) 17:25

:roll:
ListView один. Совсем. На всю систему.
Ocx - его оболочка, избавляющая от необходимости использовать CreateWindowEx и SendMessage.
Версия ocx не влияет на версию ListView.
Ы?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 26.04.2007 (Чт) 17:49

GSerg писал(а):ListView один. Совсем. На всю систему.
Ocx - его оболочка, избавляющая от необходимости использовать CreateWindowEx и SendMessage.
Если вы это спрашивали, то это я знал. :roll:

Вобщем, из всего вынес одно заключение,
GSerg писал(а):Версия ocx не влияет на версию ListView.

что обратное недействительно. Что и интересовало.
Версия ListView (comctl) влияет на версию ocx.
Пиши его, хоть на api, хоть используя готовый контроль, написанный на XP ocx (соответствующем comctl), может не работать в W98?

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

Сообщение GSerg » 26.04.2007 (Чт) 17:53

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

След.

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

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

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

    TopList