Вопрос по Progressbar

vinni

Вставил я в свою форму из панели элементов компонент Microsoft ProgressBar Control, version 6.0У меня все работает нормально!Вопрос: Будет ли он нормально работать на других машинах, нужно ли им регистрировать этот компонент?
6 ответов

vinni

Если такого компонента на машине нет, то не будет - всё проще простого:)


vinni

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


vinni

У меня стоит Access 2000, я специально этот компонент не добавлял, ставил Access по умолчанию и у меня все работает, будет ли этот компонент работать на других машинах?


vinni

Блин, ну чо глупости спрашивать? Возмите и проверьте!Мы-то откуда знаем, что за машины, версии программ, напряжение в сети...


vinni

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


vinni

Вот пример программного прогресс-бара:1. Создаем форму, обзываем ее ProgressMeter.(Внешний вид, цвет, размер и т.д. можете менять по Вашему желанию, а также имеет границы или нет)Делаем в ее всплывающей и модальной. MDB с Формой и модулем прикреплена к сообщению.2. Создаем такой модуль:Option Compare DatabaseOption ExplicitPrivate lngMaxProgressMeter As LongPrivate intRepaintCoefficent As IntegerPrivate intRepaint As IntegerPublic Sub subOpenProgressMeter(MaxProgressMeter As Long, Optional CaptionProgressMeter As String)On Error GoTo Err_Exit'Запретить вызов при 0 значенииIf MaxProgressMeter <= 0 Then Exit Sub'Заполняет переменныеlngMaxProgressMeter=MaxProgressMeterintRepaintCoefficent=MaxProgressMeter \ 20'Открывает формуDoCmd.OpenForm "ProgressMeter" , acNormal'Вывод сообщения в заголовок формыIf CaptionProgressMeter <> "" Then Forms![ProgressMeter].Caption = CaptionProgressMeterEnd If Forms![ProgressMeter].RepaintExit SubErr_Exit:MsgBox err.DescriptionEnd Sub'Обновляет показания индикатораPublic Sub subRefreshProgressMeter(lngEnterParametr As Long)Dim intMeter As IntegerDim ctlSk As ControlDim intNmb As IntegerDim strProcent As StringDim frmFormPM As Form'Передаёт значение выполненных процентов ****************** = funProsent(lngEnterParametr)'Проверяет, загружена ли формаIf funIsLoadProgress Then 'Связывает переменную с формой Set frmFormPM = Forms![ProgressMeter] 'Не допускает равенства 0 If intMeter = 0 Then 'Перебирает все элементы формы For Each ctlSk In frmFormPM.Controls 'Реагирует только на прямоугольники If ctlSk.ControlType = acRectangle Then ctlSk.Visible = False End If Next ctlSk Else intNmb = 4 'Перебирает все элементы формы For Each ctlSk In frmFormPM.Controls 'Реагирует только на прямоугольники If ctlSk.ControlType = acRectangle Then If intNmb <= intMeter Then ctlSk.Visible=True Else ctlSk.Visible=False End If intNmb=intNmb + 5 End If Next ctlSk End If 'Отображает проценты strProcent = CStr(intMeter) & " %" frmFormPM.npDone.Caption = strProcent ' Обновляет форму If intRepaint>= intRepaintCoefficent Then frmFormPM.Repaint intRepaint = 0 Else intRepaint = intRepaint + 1 End If'Вывод сообщения в заголовок формы когда процесс завершен. If intMeter = 100 Then frmFormPM.Caption = "Готово" frmFormPM.Repaint 'Пауза перед закрытием For intNmb = 1 To 200 subPausePM Next intNmb Else subPausePM End IfElse MsgBox "Сначала необходимо инициализировать индикатор.", vbCritical, "Ошибка"End If Set frmFormPM = Nothing'End IfEnd Sub'Функция определяющая загружена ли форма в память или нет'указанная в переменной "strNameObject" (аргумент функции)'Если Да, то возвращается True, иначе FalsePrivate Function funIsLoadProgress() As BooleanOn Error GoTo Err_ExitConst conDesignView = 0Const conObjStateClosed = 0funIsLoadProgress = FalseIf SysCmd(acSysCmdGetObjectState, acForm, "ProgressMeter") <> conObjStateClosed Then If Forms("ProgressMeter").CurrentView <> conDesignView Then funIsLoadProgress = True End IfEnd IfExit FunctionErr_Exit: MsgBox err.DescriptionEnd Function'Функция возвращает выполненное значение в процентах'Максимальное число храниться в глобальной переменной lngMaxProgressMeterPrivate Function funProsent(EnterParametr As Long) As IntegerDim ********* As Integer'Начальное значениеfunProsent = 0'Максимальное значение не должно = 0If lngMaxProgressMeter <= 0 Then Exit Function'Выполненное значение не должно равняться 0'и быть больше максимальногоIf EnterParametr < 0 Then Exit FunctionIf EnterParametr> lngMaxProgressMeter Then EnterParametr = lngMaxProgressMeter ********* = ((EnterParametr * 100) / lngMaxProgressMeter) - 0.5 funProsent = *********End Function'Закрыть индикаторPublic Sub subCloseProgressMeter()On Error GoTo Err_Exit'Закрывает формуIf funIsLoadProgress Then DoCmd.Close acForm, "ProgressMeter"End IfExit SubErr_Exit:MsgBox err.DescriptionEnd Sub'Пауза при отображении индикатораPrivate Sub subPausePM()Dim lCount As LongFor lCount = 0 To 50000: Next lCount '******** Sub3. Пример вызова прогресс-бара из кода формы или чего Вам будет угодно:3.1. Вызов на вполнение прогресс-бара для совершения НЕциклических, а каких-либо последовательных действий:Docmd.Echo False' ИНДИКАТОРDim sngInterval As SingleIf IsNull(30) Or 30 <= 0 Then Exit SubsngInterval=30 / 19 ' ГДЕ 19 - это количество требуемых операций, т.е. на сколько раз вы делите вашими опреациями 100%subOpenProgressMeter p ' ВЫЗЫВАЕМ ПРОГРЕСС-БАРОПЕРАЦИЯ 1 (НАПРИМЕР ОТКРЫТИЕ ФОРМЫ)subRefreshProgressMeter 1 ' ОБНОВЛЯЕМ ПРОГРЕСС-БАРОПЕРАЦИЯ 2 (НАПРИМЕР ОТКРЫТИЕ ФОРМЫ)subRefreshProgressMeter 2 ' ОБНОВЛЯЕМ ПРОГРЕСС-БАРОПЕРАЦИЯ 3 (НАПРИМЕР ОТКРЫТИЕ ФОРМЫ)subRefreshProgressMeter 3 ' ОБНОВЛЯЕМ ПРОГРЕСС-БАРОПЕРАЦИЯ 4 (НАПРИМЕР ОТКРЫТИЕ ФОРМЫ)subRefreshProgressMeter 4 ' ОБНОВЛЯЕМ ПРОГРЕСС-БАРОПЕРАЦИЯ 5 (НАПРИМЕР ОТКРЫТИЕ ФОРМЫ)subRefreshProgressMeter 5 ' ОБНОВЛЯЕМ ПРОГРЕСС-БАРОПЕРАЦИЯ 6 (НАПРИМЕР ОТКРЫТИЕ ФОРМЫ)subRefreshProgressMeter 6 ' ОБНОВЛЯЕМ ПРОГРЕСС-БАР......ОПЕРАЦИЯ 19 (НАПРИМЕР ОТКРЫТИЕ ФОРМЫ)subRefreshProgressMeter 19 ' ОБНОВЛЯЕМ ПРОГРЕСС-БАРsubCloseProgressMeter ' ЗАКРЫВАЕМ ПРОГРЕСС-БАРDoCmd.Echo True3.2. Вызов прогресс-бара для выполнения каких-лиюо циклических действий:Docmd.Echo FalseDim a As LongDim p As Longp=100' ИНДИКАТОРDim sngInterval As SingleIf IsNull(30) Or 30 <=0 Then Exit SubsngInterval=30 / pFor a=1 To psubOpenProgressMeter pСАМ ЦИКЛ (ТРЕБУЕМЫЕ ДЕЙСТВИЯ)subRefreshProgressMeter aNextsubCloseProgressMeterDoCmd.Echo TrueЛично у меня все прекрасно работает вне зависимости от компа, где установлено. cкачать