Как правильно объявить Imagelist

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

Как правильно объявить Imagelist

Сообщение Alexanbar » 20.05.2005 (Пт) 22:31

Вот тут как-то была дискуссия, где, в частности, одни выражали одобрение по поводу Option Explicit, другие (в частности, я) - негодование. Вопрос, собственно, вот в чём. Сделал я отрисовку Toolbara в XP стиле. Там содержится собственно процедура отрисовки.

Sub DrawToolbar(ByVal hwnd As Long, Optional ByVal Msg As Long, Optional ByVal lParam As Long)
Dim Toolbar As Object
.....
Dim Iml as Imagelist
.....
CopyMemory Toolbar, GetProp(hwnd, "Toolbar"), 4&
....
Set Iml = Toolbar.ImageList
...



После серьёзных переустановок в системе, в частности, при переустановке оффиса, все Toolbar-ы в проектах лысеют. Выяснил, что причина оператор

Set Iml = Toolbar.ImageList


почему-то перстаёт возвращать iMagelist.

Убираю объявление

Dim Iml as Imagelist


- тогда всё работает.

Вывод:
1) либо не объявлять переменную Iml вообще
2) либо объявлять, но как?

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 20.05.2005 (Пт) 22:38

А если объявить ее типа Variant, что тогда ?
No comments ...

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 20.05.2005 (Пт) 23:17

Ну, пока объявил как Object. Вроде работает.
Почему вот по-старому перестаёт работать, в частности, при попытке запустить новый проект на любом другом компе? Отчего нельзя объявить

Dim Iml as Imagelist

??

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

Сообщение tyomitch » 20.05.2005 (Пт) 23:27

Alexanbar, у меня такое чувство, что у тебя к проекту подключены сразу две библиотеки с Common Control-ами, 5-ая и 6-ая. Ага?
Изображение

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 21.05.2005 (Сб) 11:49

tyomitch писал(а):Alexanbar, у меня такое чувство, что у тебя к проекту подключены сразу две библиотеки с Common Control-ами, 5-ая и 6-ая. Ага?


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

А вообще, я пробовал делать и так:

Dim Iml as MScomctllib.Imagelist


и

Dim Iml as Сomctllib.Imagelist


- оба не работали.

P.S. Убрал ссылку на 5.0. Всё равно работает, тлько, если объявляю как object. В принципе, можно с этим и смириться - не понятно, чего не так делаю.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 25.05.2005 (Ср) 0:26

История продолжается. Начались все безобразия после установки Office-2003.

Запускаю vb6 проект на выполнение- выдаётся ошибка "Type mismatch". С чего бы это?

Как оказалось, VB6 перестало нравиться передавать следующие параметры в DLL и внтри неё в Модуль:



Call XX.sub1(Listview1,.....)


В класс-модуле Sub1 Объявлена так:
Public sub sub1(Listview1 as object,......)

....

CALL SUB2(Listview1,.....)
....

end sub


А внутри обычного модуля внутри Dll:

public sub SUB2( Listview1 AS Listview,....)

dim Iml as Imagelist

set Iml=Listview1.Icons
.....
end sub


!!!Ошибка пропадает, если запустить групповой проект основной программы и DLL.

Смог всё отремонтировать, объявив в SUB2 Listview1 as Object и Dim Iml as object.

И так и не понял, почему пришлось пойти на эти шаги.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 25.05.2005 (Ср) 10:10

Alexanbar писал(а):
Смог всё отремонтировать, объявив в SUB2 Listview1 as Object и Dim Iml as object.

И так и не понял, почему пришлось пойти на эти шаги.



Посмотри в object Browser что у тебя за библиотеки
и уточни что из них ты пользуеш

Код: Выделить всё
Dim Iml as MScomctllib.Imagelist
Dim Tbr as MScomctllib.Toolbar


желательно пользовать тулбар и imglist из одной библиотеки.
//<-
Mit freundlichen Grüßen
//->

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 25.05.2005 (Ср) 13:34

Использую MS Windows Common Controls 6.0. (в DLL есть ещё формы диалога с Листвьями). Объявление Dim Iml as MScomctllib.Imagelist ничего не меняет. В ссылках много чего указано собственнного производства, а также:
1) VB for Fpplications (msvbvm60dll)
2)VB Runtime objects and procedures(-/-)
3) VB objects and procedures (vb6.olb)
4) OLE Automation(OLE2.tlb)
5)scrrun.dll
6) DAO3.51 obj lib
5) cNewmenu6.dll (с vbasselerator)


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

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

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

    TopList