Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1135260332
NailMan
2005-12-22 17:05
2006.08.27
[DShow] Фильтр для настройки яркости и пр.


15-1153997361
ПЛОВ
2006-07-27 14:49
2006.08.27
Примерчик бы :-)


6-1144449490
vagra
2006-04-08 02:38
2006.08.27
Узнать IP по имени домена


1-1152251750
just
2006-07-07 09:55
2006.08.27
Delphi пропускает строки кода при компиляции


2-1154861442
ЮзерОК
2006-08-06 14:50
2006.08.27
ListBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский