обращение через api к progressbar по его hwnd

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

обращение через api к progressbar по его hwnd

Сообщение Nikita » 30.06.2003 (Пн) 15:02

на главной форме frmMain есть progressbar pb, и есть функция, запускаемая как поток, которая раз в 50мс обновляет состояние pb в соответствии со значением некоторой переменной g_Percent
пишется это так (в функции потока):
frmMain.pb.value=g_Percent
если запускать из visual studio, то это отлично работает, однако если скомпилировать (в p-code) то на этой строке программа вылетит "memory could not be read"

поскольку в потоках крайне рекомендуется использовать только apiшные функции, наверно в этом проблема, и возникает вопрос - какие нужны параметры у sendmessage чтобы менять Value у прогресбара? hWnd его известен

еще хотелось бы уметь его скрывать-показывать, я попробовал
SendMessage pb_hWnd, WM_SHOWWINDOW, false/true, 0 - но это не работает

Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Сообщение Nikita » 30.06.2003 (Пн) 17:12

нашел как обращаться к value у progressbar -
SendMessage pb.hWnd, PBM_SETPOS, g_Percent, 0
const pbm_setpos=wm_user+2

но оно тоже не работает

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 03.07.2003 (Чт) 9:21

Может нужно не 0, а ByVal 0&

Посмотри http://www25.brinkster.com/msvbasic/default.asp?p=src&s=CProgressBar.cls

Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Сообщение Nikita » 03.07.2003 (Чт) 11:31

спасибо! помогло, правда не в прямом смысле

дело не в ByVal &0, оказалось что этот SendMessage работает, но передавая скажем, значение 50 (когда max=100) получаем полоску в несколько пикселей, ее совсем незаметно, вот и кажется что "несработало"
Какое значение передавать чтобы получить 100% заполнение полоски - я пока не понял, что-то между 38000 и 40000 :)

и все-таки хотелось бы через api уметь скрывать progressbar.. делать visible=false/true

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.07.2003 (Чт) 12:19

Возможно нужно задать диапазон через PBM_SETRANGE
Lasciate ogni speranza, voi ch'entrate.

Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Сообщение Nikita » 04.07.2003 (Пт) 10:41

да, помогло :) спасибо
странно что свойство Max=100 не соответствовало реальности и пришлось через Api устанавливать

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.07.2003 (Пт) 11:16

Да вообще-то вполне логично. Для задания диапазона в API используется Long, а контрол позволяет задавать дробные числа. Значит на самом деле при установке/считываении параметров Property Let увеличивает число в (к примеру) 400 раз, а Property Get уменьшает в 400 раз.
Lasciate ogni speranza, voi ch'entrate.


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

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

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

    TopList