Индикатор выполнения программы

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

Индикатор выполнения программы

Сообщение OMEGUS » 15.04.2005 (Пт) 15:04

Народ такая идея: как пользователь показать что программа работает а не висит если идет очень длинная и сложная обработка данных ?

ProgressBar конечно выход но и его не хватает что бы показать динамику работы программы...

Мне бы просто индикатор какой-нибудь что бы два цвета менялись.

Есть такие элементы в VB6 или еще что то ?

Спасибо...

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.04.2005 (Пт) 16:39

Чтобы цвета менялись...хм :?

да действительно трудная задача :lol:

PictureBox
Image
TextBox
Label
Form
...
Свойство BackColor :wink:

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.04.2005 (Пт) 16:42

OMEGUS И чего ты такго делаешь что тебе не хватает ProgressBar'a ты значение max поменя :wink:

Или я чего то не понял :?

OMEGUS
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 31.01.2005 (Пн) 11:40
Откуда: Санкт-Петербург

Сообщение OMEGUS » 15.04.2005 (Пт) 16:46

Я все менял.... я просто не могу везде этот прогресс бар вткать у меня очень монго действий....

Мне бы просто какую-нибудь функцию которая сообщала бы что программа выполняется а не висит...

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.04.2005 (Пт) 17:04

Можешь окошко выводить с текстом "Подождите идет выполнение действий"

OMEGUS
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 31.01.2005 (Пн) 11:40
Откуда: Санкт-Петербург

Сообщение OMEGUS » 15.04.2005 (Пт) 17:34

Не ну это здорово а если программа зависнет в этот момент и пользователь так и будет ждать .... ждать... ждать.. ???

Что бы как то происходил анализ таск бара ... или еще как-то ....

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

Сообщение GSerg » 15.04.2005 (Пт) 17:46

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

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.04.2005 (Пт) 17:51

:evil: Млин, совсем не хочешь думать!!! Да есть вагон и маленькая тележка способов как известить юзера о том что программа работает

OMEGUS
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 31.01.2005 (Пн) 11:40
Откуда: Санкт-Петербург

Сообщение OMEGUS » 15.04.2005 (Пт) 18:02

А что такое шейп и как его двигать ?

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 15.04.2005 (Пт) 18:10

Ramzes писал(а):Да есть вагон и маленькая тележка способов как известить юзера о том что программа работает
Блин, сообщи пару способов мелкосовтовцам, плиз, а то эти гады при запуске Win2000 Pro совсем об этом не побеспокоились :(

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 15.04.2005 (Пт) 18:21

vvs_adm писал(а):
Ramzes писал(а):Да есть вагон и маленькая тележка способов как известить юзера о том что программа работает
Блин, сообщи пару способов мелкосовтовцам, плиз, а то эти гады при запуске Win2000 Pro совсем об этом не побеспокоились :(

Хе... как говорят умные люди, а не всякие там Шурики 8) :)
"RTFM, батенька, RTFM"...
помоему правильно накалякал... :roll:

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 15.04.2005 (Пт) 19:02

Наверное, можно вывести показ прогрессбара в отдельный поток...
По идее, тогда на него не будет влиять то, что происходит в основном потоке... В ВБ это реально? В с++ - там точно реально :wink:

STanli
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 163
Зарегистрирован: 31.05.2004 (Пн) 15:22
Откуда: ТОМСК

Сообщение STanli » 16.04.2005 (Сб) 23:37

Можешь сделать висящую в трее иконку, изменяющуюся при действиях программы (там где их много), вроде и видно, и понятно.
Раз, два, три, четыре, пять, с детства с рифмой я дружу.

OMEGUS
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 31.01.2005 (Пн) 11:40
Откуда: Санкт-Петербург

Сообщение OMEGUS » 05.05.2005 (Чт) 13:38

А как сделать висящую в трее иконку.... ?

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 06.05.2005 (Пт) 9:59

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

'КОД МОДУЛЯ

Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Integer
Public Const NIM_ADD = 0
Public Const NIM_MODIFY = 1
Public Const NIM_DELETE = 2
Public Const NIF_MESSAGE = 1
Public Const NIF_ICON = 2
Public Const NIF_TIP = 4
Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type

Public Function SetTrayIcon(Mode As Long, hWnd As Long, Icon As Long, tip As String) As Long
Dim nidTemp As NOTIFYICONDATA
nidTemp.cbSize = Len(nidTemp)
nidTemp.hWnd = hWnd
nidTemp.uID = 0&
nidTemp.uFlags = NIF_ICON Or NIF_TIP
nidTemp.uCallbackMessage = 0&
nidTemp.hIcon = Icon
nidTemp.szTip = tip & Chr$(0)
SetTrayIcon = Shell_NotifyIconA(Mode, nidTemp)
End Function

'КОД ФОРМЫ

'Затем уже в событиях формы вы можете пользоваться вышеприведеными API-функциями.
'Запустите программу. Иконка появится в трее. Наведите на нее курсор, и вы увидите
'надпись "Проверка", теперь кликните в любом месте формы и снова наведите на иконку...

Private Sub Form_Click()
SetTrayIcon NIM_MODIFY, Me.hWnd, Me.Icon, "Работает? Работает!"
End Sub
Private Sub Form_Load()
SetTrayIcon NIM_ADD, Me.hWnd, Me.Icon, "Проверка"
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetTrayIcon NIM_DELETE, Me.hWnd, 0&, ""
End Sub

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 06.05.2005 (Пт) 17:31

Меня тоже эта тема интересует, только хм.. с другой стороны. Как внимание пользователя отвлечь-понятно, хоть метку на метку разных цветов наложить и width менять, а как отследить событие сканирования одной записи в бд при поиске? Ведь, допустим, при sql запросе Jet перебирает все записи указанной таблицы?
Ответьте, если не трудно.
Спасибо.

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 10.05.2005 (Вт) 23:31

Сделай анимацию как в DrWeb или при сканировании диска в 98. Так юзер будет знать, что ты не висишь

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 11.05.2005 (Ср) 5:45

Как отвлечь пользователя, это не вопрос, но хотелось бы настоящий индикатор сделать

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 11.05.2005 (Ср) 12:03

CAPTION у формы сделай бегущей строкой...

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 11.05.2005 (Ср) 19:46

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

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 12.05.2005 (Чт) 15:00

Помоему всё просто: берёшь делаешь следующий контрол:
На контроле ставишь шейп. При изменении ширины контрола ширина шейпа изменяется соответственно.
Ставишь там же таймер с интервалом ~100
При каждом срабатывании таймера передвигаешь шейп на 1 пиксель вправо. Если при этом свойство x1 (так по-моему) шейпа = ширине контрола, присваиваешь ему значение ширины шейпа с минусом.

В результате имеем:
До срабатывания таймера: видим контрол и шейп в первоначальной позиции.
После срабатывания таймера: шейп сдвинулся вправо на 1.
посте того, как шейп полностью ушёл за правый край контрола, он начинает вылазить из-за левого края.

Как раз такую картину мы видим при загрузке ХР.
Тока там вместо шейпа - картинка.
Я знаю верный путь

OMEGUS
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 31.01.2005 (Пн) 11:40
Откуда: Санкт-Петербург

Сообщение OMEGUS » 12.05.2005 (Чт) 15:06

Ну е мое .... :-) !!!!

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 12.05.2005 (Чт) 16:49

Да в общем хорошая идея. При таком крутящемся индикаторе и юзер не скучает и сам индикатор можно не привязывать к событию сканирования. Я так и сделаю пожалуй.
Спасибо

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

Сообщение GSerg » 12.05.2005 (Чт) 18:31

http://bbs.vbstreets.ru/viewtopic.php?p=112343#112343

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

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 12.05.2005 (Чт) 18:48

GSerg писал(а):Начиная с XP у прогрессбара есть свойство MARQUE. Он при этом бегает просто от левой границы к правой... Можно лицерзеть при загрузке XP... Имитируется весьма легко движущимся шейпом :)


Ну так то ж начиная! а в 2k, me, 9x?
Я знаю верный путь

shest
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 10.03.2003 (Пн) 14:12
Откуда: Москва

Сообщение shest » 12.05.2005 (Чт) 20:31

Почему-то всё чаще замечаю, что полное игнорирование написанного другими выше приобретает всё большее распространение

Почему игнорирование ? Просто убедившись, что придётся ограничиться отвлечением пользователя, выбрал наилучший вариант :?


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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 168

    TopList