Массив,Десктоп,Константы...

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

Массив,Десктоп,Константы...

Сообщение Gemini » 28.09.2007 (Пт) 20:29

Вопрос 1:
На голову не залазет... Ж)

Есть поле 2 столбца * 3 ячейки в столбце
Загоняю площадь в массив, получается
redim MyArray(5) as PointAPI
массив от 0 до 5
при вызове MyArray(i)
мне нужно в зависимости от i (0-5) задать массиву координаты ячеек по x и y.
Голову сломал.(с математикой не дружу(а жаль...))
пробовал так
x=i\6
y=i\2
(Фигня получаеся(блин))

Вопрос2:
Не получается найти позиции (по x,y) иконок на рабочем столе
Пишу вот такой код:
Код: Выделить всё

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam _
As Any) As Long

Const LVM_FIRST = &H1000
Const LVM_GETTITEMCOUNT& = (LVM_FIRST + 4)
Const LVM_SETITEMPOSITION& = (LVM_FIRST + 15)
Const LVM_GETITEMPOSITION = (LVM_FIRST + 16)
Const LVM_GETITEMTEXT = (LVM_FIRST + 45)

dim IconPosition() as POINTAPI


Public sub FindIcon()
dim hdesk&,icount%,XY as POINTAPI,i%

hdesk = FindWindow("progman", vbNullString)
hdesk = FindWindowEx(hdesk, 0, "shelldll_defview", vbNullString)
hdesk = FindWindowEx(hdesk, 0, "syslistview32", vbNullString)

icount = SendMessage(hdesk, LVM_GETTITEMCOUNT, 0, 0&)

ReDim IconPosition(icount) As POINTAPI

for i = 0 to icount-1
    Call SendMessage(hdesk, LVM_GETITEMPOSITION, i,IconPosition(i))
debug.print IconPosition(i).X,IconPosition(i).Y
next i
end sub

Кол-во иконок находит, а вот при нахождении их позиции винда (XP)выводит ошибку:

AppName: explorer.exe AppVer: 6.0.2800.1106 ModName: comctl32.dll
ModVer: 6.0.2800.1106 Offset: 0004f8e6

не могу понять в чём дело???

Вопрос 3

Не посчитайте меня полным дебилом:)

Где люди находят константы кроме как в текстовом файле с айпишками
в стандартном наборе.
допустим такую искал не нашел...
Const LVM_GETTITEMCOUNT& = (LVM_FIRST + 4)

(в чём фишка.Может гдето можно скачать расширинные листы констант,айпишек,типов??? если да? Подскажите буду признателен!!!)


Всем кто хоть немного поможет ОГРОМНОЕ СПАСИБО!!!!

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

Сообщение Хакер » 28.09.2007 (Пт) 20:44

Читая заголовок темы, я думал, что в теме будет вопрос "Выберите лишнее". Ан нет :)

Вопрос 3:
Кто-где.

Кто-то использует описанный тобою способ. Кто-то мучает для этого API-Guide. Кто то использует поиск. Кто-то (например - я) читает сишные .h-файлы и отыскивает значения констант там.

(в чём фишка.Может гдето можно скачать расширинные листы констант,айпишек,типов??? если да? Подскажите буду признателен!!!)


Не надо скачивать. Надо установить студию полностью и возрадоваться от вида папки VCxx/Includes/

Ещё как вариант - раскопать исходники win32.tlb . Они кстати тоже есть в комлпекте студии. Только вот люди делают наоборот.


Вопрос 2:
Кол-во иконок находит, а вот при нахождении их позиции винда (XP)выводит ошибку:

AppName: explorer.exe AppVer: 6.0.2800.1106 ModName: comctl32.dll
ModVer: 6.0.2800.1106 Offset: 0004f8e6

не могу понять в чём дело???

Сходи в модуль comctl32, посмотри что по оффсету 0x0004f8e6 - и сразу поймёшь в чём дело :)

Вопрос 1:
Читал, читал, так и не понял о чём речь идёт...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 29.09.2007 (Сб) 18:15

Не надо скачивать. Надо установить студию полностью и возрадоваться от вида папки VCxx/Includes/

Классно, оооочень много там нашел.(Осталось только разобраться)


по второму вопросу:
В инклудах нашел:

Код: Выделить всё

#define LVM_GETITEMPOSITION     (LVM_FIRST + 16)

#define ListView_GetItemPosition(hwndLV, i, ppt) \
    (BOOL)SNDMSG((hwndLV), LVM_GETITEMPOSITION, (WPARAM)(int)(i), (LPARAM)(POINT FAR*)(ppt))

это на VC

не очень понятно что такое
(POINT FAR*)(ppt)

POINT FAR* - это тип POINTAPI ?
ppt - это какой-то тип?

или это dim ppt as POINTAPI

'(WPARAM)(int)(i)
как я понял разбивать надо так:
Dim i as integer

Обьясните Пожалуйста!...

-----------------------------------

Вопрос 1:
Читал, читал, так и не понял о чём речь идёт...


По поводу первого вопроса
есть массив от 0 до 5
имеющий тип Boolen

когда я начинаю перебирать массив:

то из i yflj

Код: Выделить всё

for i = 0 to ubound(MyArray())
if MyArray(i)=True then
''' Вопрос \/
   x=i\5
   y=i\2
end if
next i



как узнать положение x,y из номера ячейки i
зная что мы имеем 2 столбца в которых по 3 ячейки
0 0
1 2
3 4
5 6
[/quote]

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

Сообщение Хакер » 29.09.2007 (Сб) 19:02

не очень понятно что такое
(POINT FAR*)(ppt)

POINT FAR* - это тип POINTAPI ?
ppt - это какой-то тип?

или это dim ppt as POINTAPI

'(WPARAM)(int)(i)
как я понял разбивать надо так:
Dim i as integer

Обьясните Пожалуйста!...


Зачем ты это переводишь? Это макрос. Макросов нет в VB.

POINT FAR* ppt - это указатель на переменную ppt типа POINT, только там она вроде как аргумент идёт, а не как переменная.


____________________________

По поводу второй части:
1) В чём смысл сравнивания True с True в строчке MyArray(i)=True ?
2)
Строка = (i \ КолВоСтолб) + 1
Столбец = ((i - 1) mod КолВоСтолб)+1

при условии что отсчёт начинается с 1.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 29.09.2007 (Сб) 20:36

У меня этот код вообще ничего не выводит :shock:

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

Сообщение Хакер » 29.09.2007 (Сб) 20:37

netdemon
Тут было твоё сообщение с бредом, так оно отделено, чтоб ты знал и не постил его ещё раз в надежде на баги форума.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 30.09.2007 (Вс) 6:57

Строка = (i \ КолВоСтолб) + 1
Столбец = ((i - 1) mod КолВоСтолб)+1

Вот СПАСИБО!!! Хорошо...

POINT FAR* ppt - это указатель на переменную ppt типа POINT, только там она вроде как аргумент идёт, а не как переменная.

Так если это аргумент то откуда доставать x,y.
так же как и с кол-вом иконок?
Код: Выделить всё
dim XY_POS%
XY_POS= SendMessage(hdesk, LVM_GETITEMPOSITION, i, ??? )


А не мог бы ты рассказать что за аргумент, как его передать.
А то тестировать очень геморойно vb постоянно вылетает. :(
(если не трудно)

За все отвеченные вопросы примного БЛАГОДАРЕН!

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 30.09.2007 (Вс) 8:46

По поводу иконок на рабочем столе...

Все я нашел решение.
Я вспомнил что в закромах у меня лежал (не мой) проект под название маршал.
немного его переделав получилось!!!
если кому интересно смотрите.
(Возможностей у него ОООЧень много!!!)
Вложения
Marshal.zip
(3.83 Кб) Скачиваний: 63

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

Сообщение Хакер » 30.09.2007 (Вс) 14:00

Так если это аргумент то откуда доставать x,y.
так же как и с кол-вом иконок?
Код:

Код: Выделить всё
dim XY_POS%
XY_POS= SendMessage(hdesk, LVM_GETITEMPOSITION, i, ??? )


А не мог бы ты рассказать что за аргумент, как его передать.
А то тестировать очень геморойно vb постоянно вылетает.
(если не трудно)


Если там аргумент ByVal и As Long (некоторые любят делать его ByRef и As Any - я категорически не переношу это, но не призываю не юзать) то передавать надо VarPtr(ppt), а pptr должна быть в свою очередь Dim As POINTAPI
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 30.09.2007 (Вс) 14:13

Хакер

Спасибо тебе за помощь!

З.Ы.
пробовал через VarPtr(ppt) -не вылетает, но возвращает нули...:(

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

Сообщение Хакер » 30.09.2007 (Вс) 14:15

Код в студию.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

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

    TopList