Страница: 1 |
Страница: 1 |
Вопрос: Как поменять значение в статус-баре, если....
Добавлено: 07.12.07 12:48
Автор вопроса: LonerWanderer
Изменяю значение в статус-баре и загружаю сторонее приложение:
Public ACADApp as Object
...
Sub ЗагрузкаПриложенияAcad()
' Следующие 2 строки только для справки.
' Переменная ACADVersion получает значение раньше из реестра.
Dim ACADVersion as String
ACADVersion="AutoCAD 2005." '
Application.StatusBar = "Загрузка " & ACADVersion
Set ACADApp = CreateObject("AutoCAD.Application")
MsgBox ("Готово")
End Sub
На строке
Set ACADApp = CreateObject("AutoCAD.Application")
программа приостанавливает работу и ждет, пока приложение "AutoCAD.Application" не запустится, после чего продолжается выполнение программы. Приложение запускается от 10 до 30 секунд, в зависимости от версии приложения и мощности машины пользователя.
Хотелось бы, чтобы в это время в статус-баре изменялся текст (ну например, добавлялись бы точки после "AutoCAD 2005")
Можно ли этого добиться или это ограничение VBA и обойти его не получится?
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
AL
Вопросов: 7
Ответов: 21
Профиль | | #1
Добавлено: 07.12.07 13:47
попробуйте запустить таймер и по таймеру менять сообщения в статусбара, думаю получиться
Номер ответа: 2
Автор ответа:
LonerWanderer
Вопросов: 18
Ответов: 66
Профиль | | #2
Добавлено: 07.12.07 13:52
Чтобы менять по таймеру, надо чтобы таймер был активным, а активна строка по запуску стороннего приложения.
Если я ошибаюсь (а так хочется ошибиться), то можно кусочек кода для примера?
Номер ответа: 3
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #3
Добавлено: 07.12.07 14:29
В однопоточном приложении - только с извращением.
Как вариант, создай отдельный OCX usercontrol. На нем помести таймер который будет посылать SendMessage SB_SETTEXT в нужную часть statusbar. Работать будет.
Номер ответа: 4
Автор ответа:
LonerWanderer
Вопросов: 18
Ответов: 66
Профиль | | #4
Добавлено: 07.12.07 14:32
А можно пример? А то даже не знаю, как подступиться. Я в VBA не такой уж большой знаток.
Номер ответа: 5
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #5
Добавлено: 07.12.07 14:34
Можно, если тебя устроит дополнительный файл к твоей программе.
Номер ответа: 6
Автор ответа:
LonerWanderer
Вопросов: 18
Ответов: 66
Профиль | | #6
Добавлено: 07.12.07 14:44
Тогда, пожалуй, не надо. Экселевская книга копируется в разные места и цеплять за собой еще файл не хочется. Я-то буду знать о доп. файле, а вот пользователи забудут, даже если я им об этом буду ежедневно напоминать.
Ладно.
Придется, видимо, писать просто "Загружается приложение такое-то. Пожалуйста, подождите....."
А так хотелось сделать красиво.
Номер ответа: 7
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #7
Добавлено: 07.12.07 14:57
На всякий случай:
'скомпилировать в ocx
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Dim hStatus As Long
Private Const WM_SETTEXT = &HC
Private Sub Timer1_Timer()
Call SendMessage(hStatus, WM_SETTEXT, 0, ByVal CStr(Time))
End Sub
Public Sub Start(hs As Long)
Timer1.Enabled = True
Timer1.Interval = 300
hStatus = hs
End Sub
Public Sub Finish()
Timer1.Enabled = False
End Sub
Номер ответа: 8
Автор ответа:
LonerWanderer
Вопросов: 18
Ответов: 66
Профиль | | #8
Добавлено: 07.12.07 15:31
Вопросы.
1. Как скомпилировать?
2. Если OCX будет находиться в сетевой папке - проблем не возникнет? (по моему разумению - не должно)
3. Можно пример вызова? Ведь там не функция, а подпрограмма. Что-то я никак не соображу (Может я тупой, а может - просто пятница сегодня. Хочется думать, что пятница ).
Номер ответа: 9
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #9
Добавлено: 07.12.07 16:27
1. В Visual Studio (VB6.0) создать новый проект "ActiveX Control", поместить приведенный пример в область кода. Переименовать имя Usercontrol на что-нибудь осмысленное, положить объект таймер.
Скомпилировать: меню Файл->Make MyControl.ocx
2. могут возникнуть.
3. в Excel "Элементы управления->другие элементы->зарегистрировать.." выбираем нужный ocx и кладем его, например, прямо на лист.
Где-нибудь в коде пишем
MyControl.Start Application.Hwnd
и наслаждаемся.
Номер ответа: 10
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #10
Добавлено: 07.12.07 22:45
DoEvents
Номер ответа: 11
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #11
Добавлено: 08.12.07 02:10
И куда его?