Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
DoEvents

И куда его?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам