Форум: "Основная";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
ВнизКак добавить таймер на форму в VBA редакторе Найти похожие ветки
← →
Calibr2 (2006-07-14 11:39) [0]Почему то в VBA редакторе нету компонента Timer, не подскажете где его взять?
← →
Сергей М. © (2006-07-14 11:48) [1]
> где его взять?
Сделай его сам.
Проще простого -
File -> New .. -> ActiveX Library
File -> New .. -> ActiveX Control
Создаешь AX-библиотеку c AX-контролом, базирующемся на стандартном TTimer, регистрируешь библиотеку, подключаешь к VBA и пользуешь.
← →
Calibr2 (2006-07-14 12:12) [2]А можно поподробнее? Я чего то не нашел в ActiveXControl класс TTimer
← →
TUser © (2006-07-14 12:18) [3]Сергей предлагает тебе его сделать из delphi-компонента
← →
Calibr2 (2006-07-14 12:54) [4]Расскажите пожалуйста по подробнее как создать этот Timer и как связать его с VBA
← →
Сергей М. © (2006-07-14 13:11) [5]Тебе оно вообще зачем ?
Изложи задачу подробно ..
Есть предположение, что и без таймера можно обойтись.
← →
Calibr2 (2006-07-14 13:41) [6]Я хочу написать Скрипт на VBA чтоб при открытии Acad-овского документа открытый файл пересохранялся в мою папку(C:\Временный файлы\<Имя открытого файла>) и сохранялся каждую минуту, а тот файл пусть остается прежним. Если пользователь сохранит документ, то мой файл заменяет старый, если при закрытии документа пользователь в ответ на диалог сохранения нажмет "Нет", то мой пересохраненный файл удаляется.
Так вот Timer мне нужен только для того, чтоб каждую минуту сохранять документ.
Я знаю что в Acadе есть BackUp, но он не всегда срабатывает как надо, вот я и решил сделать такую программу.
← →
Сергей М. © (2006-07-14 13:45) [7]ACad вроде бы реализован как сервер автоматизации.
Если так, то никакие скрипты не нужны.
Пишется обычное делфи приложение, которое получает доступ к АКаду как к олей-серверу и с нужной периодичностью командует АКаду сохранить тот или иной открытый им документ в тот или иной файл.
← →
Calibr2 (2006-07-14 14:33) [8]Просто в Delphi для Акада в таймере не всегда срабатывает событие OnBeginClose поэтому нужно написать скрипт хотя бы для этого события, потому что если пользователь закроет документ после того как программа сохранила его, то запроса на сохранение не выйдет и данные будут потеряны, поэтому я должен организовать свой запрос, а я не знаю как из скрипта передать данные в Delphi-программу.
← →
Сергей М. © (2006-07-14 14:42) [9]И при чем в этом случае таймер ?
← →
Calibr2 (2006-07-14 15:06) [10]Тестируя этот пример раз 5-10 не для всех документов срабатывает процедура BeginClose, а если она не срабатывает, то диалог сохранения не выводится, т.е. все даные с последнего пользовательского сохранения не сохраняются, а в скрипте процедура OnBeginClose для AcadDocument срабатывает всегда. Но из скрипта я не могу передать данные в Delphi программу и поэтому не знаю сохранил пользователь документ или нет.
var
Acad: OleVariant;
AcadApp: IAcadApplication;
AcadDocs: array[0..50] of TAcadDocument;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i: Integer;//Счетчик, вспомогат. переменная
iCol: Integer;//Количество документов в AutoCADе
begin
try
{пытаемся подключиться к уже запущенному AutoCADу}
Acad := GetActiveOleObject("AutoCAD.Application");
AcadApp := IDispatch(Acad) as IAcadApplication;
Caption := "AutoCAD запущен";// пишем, что AutoCAD запущен
except
{если не получилось, то пишем, что AutoCAD закрыт}
Caption := "AutoCAD сейчас закрыт...";
ListBox1.Clear;// очищаем список
iCol := 0;
exit;// выходим
end;
try
{пытаемся подключиться к активному документу}
iCol := AcadApp.Documents.Count;//Определяем кол-во документов
{Цикл перебора всех запущенных документов}
for i := 0 to iCol - 1 do
begin
AcadDocs[i].Free;
AcadDocs[i] := nil;
AcadDocs[i] := TAcadDocument.Create(Self);//Создаем документ
AcadDocs[i].ConnectTo(AcadApp.Documents.Item(i));//Соединяем его с
//i-тым в AutoCadе
AcadDocs[i].OnBeginClose := BeginClose;//Закрытие
end;
except
{если не получилось, то пишем Чертёж не запущен}
Caption := "Чертеж не запущен...";
exit;// выходим
end;
end;
(******* ПРОЦЕДУРА ЗАКРЫТИЯ ДОКУМЕНТОВ *******)
procedure TForm1.BeginClose(Sender: TObject);
var
Name: String; //Имя закрывающегося файла
begin
Timer1.Enabled := false;
Name := (Sender as TAcadDocument).Name;//Определяем имя закрывающегося файла
{Выводим диалог сохранения}
if Application.MessageBox(pChar("Сохранить изменения в документе " + Name + "?"), "AutoCAD", mb_YESNO + MB_ICONWARNING) = idYES then
{Если отвечают "ДА"}
Caption := "Yes";
else
Caption := "No";
Timer1.Enabled := true;
end;
← →
Сергей М. © (2006-07-14 15:14) [11]И что творится в OnTimer ?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c