OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 25 Сентябрь, 2020 07:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 02 Июнь, 2006 22:39 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1027
Илья Ермаков писал(а):
Ну хорошо, скажем так:
... потому что обсуждаемое "ОНО" (SheetChange)- это всего лишь абстрактный метод COM-интерфейса WorkbookEvents, который нужно описать в своей реализации этого интерфейса.

Посему смысла в строке
if sheet.SheetChange then GetValue
нет никакого.

Так же как и в фразе "где найти описание событий...". Нет никаких "описаний событий", есть сигнатуры методов, которые мы определяем, и которые будут вызываться при наступлении событий. Эти сигнатуры видим собственно в описании интерфейса CtlExcel9.WorkbookEnents.
Это Вы о реализации уже говорите. Метод а что же ещё. Однако события существуют помимо их реализации при проектировании. Ух, загнул - не разогнешь. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 02 Июнь, 2006 23:33 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Спасибо за оказаное внимание моей проблеме! :D
Пока ехал с работы домой, столько всего написали :) Буду сейчас разбираться...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 02 Июнь, 2006 23:38 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
GUEST писал(а):
А какие параметры у сообщения OleClient.UpdateMsg?

Не знаю. Я не разобрался с исходниками :( У меня не хватает знаний в предметной области. Тут мало понимать язык на котором написана программа, надо еще сообразить, что стоит за некоторыми абстракциями...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 02 Июнь, 2006 23:50 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
Вячеслав, понял наконец-то, что Вам нужно.

Я так понимаю, что нужно создать свой тип - потомок от WorkbookEvents и реализовать для него нужную процедуру On..., которая и будет делать все, что Вам нужно....

В соседней ветке http://blackbox.metasystems.ru/forum/vi ... ght=invoke Сергей Губанов описывал нечто похожее (процедурные переменные связанные с объектами)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 00:08 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
Вот ссылки, нарытые в Гугле по теме. Вкратце - нужно использовать некий интерфейс IConnectionPoint. Глубже не разбирался, но что это геморрой изрядный - уже ясно. Т.е. это не геморрой только из VB и VBA, как обычно у MS и бывает.

http://rsdn.ru/Forum/Message.aspx?mid=274837
http://rsdn.ru/article/qna/com/comevents.xml

На Васике все пишется в одну строчку :) Там спец. функция есть. Сейчас под рукой нет примера, который я нашел и уже было подумывал привязать макрос к таблице, но это частное решение, я его оставил на крайний случай... Пример по ссылке на C++ вроде то, что надо, но С++ я не знаю :oops: (накладно не проффесионалу в программировании изучать несколько языков)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 00:17 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
GUEST писал(а):
Почему Вы думаете, что данные в ячейках меняются в результате работы SheetChange? И ещё. Если Excel под отладчиком запустить - то при старте клиента в BlackBox он будет к существующей копии сервера подключаться или нет?

Я как раз думаю, что SheetChange меняется в результате изменения в ячейках. Клиент в BlackBox скорее всего подключается к существующей копии сервера, т.к. в Excel при создании экземпляра объекта возникает "чистая" книга.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 00:24 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
Цитата:
Она постоянно работу выполняет (я вижу как в ячейках данные меняются)

Вячеслав, она не может выполнять никакой работы, потому что это всего лишь COM-интерфейс. А реализовываете его именно Вы, как нужно Вам. А потом создаете экземпляр вашего типа и привязываете его к Excel через IConnectionPoint. Посмотрите пока ссылки выше. Если не разберетесь - тогда поглядим вместе.

Я неправильно выразился... Я хотел лишь сказать, что событие такое наступает и ВВ его отлавливает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 00:58 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
Вот еще материал - я отсканировал 5 страничек про ConnectionPoint из старой книжки по COM:
http://blackbox.metasystems.ru/download ... nPoint.rar

Спасибо! Посмотрел. При поверхностном просмотре у меня сложилось следующее мнение. Механизм ConnectionPoint обеспечивает двунаправленную связь между клиентом и сервером. Но для решения проблемы "OnChange..." такой сложный механизм не очень-то и нужен.

"Объект предоставляет услуги клиенту, позволяя ему вызы вать методы своего интерфейса. Ну а если объекту нужно на ладить обратную связь с клиентом? Ему может потребоваться сделать запрос или просто ообщить клиенту о каком-то со бытии. Как обеспечить общую двунаправленную связь между объектом и клиентом? Предыдущий раздел предлагал один ответ: позволять объекту посылать события клиенту, используя методы интерфейса IAdviseSink. Клиент с помощью IDataObject::DAdvise передает
объекту указатель на зтот интерфейс, и, когда объект желает что-нибудь сообщить (например, об изменении в данных), он вызывает метод IAdviseSink::OnDataChange. Эта схема прекрасно годится для немного специфичных миров, в которых царствуют единообразная передача данных и составные документы. "


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 01:03 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
...
Посему смысла в строке
if sheet.SheetChange then GetValue
нет никакого...


Смысл у этой строки следующий (в том контексте, в котором она писалась): при возникновении события sheet.SheetChange вызвать процедуру GetValue.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 01:23 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
GUEST писал(а):
Илья Ермаков писал(а):
Посмотрите пока ссылки выше. Если не разберетесь - тогда поглядим вместе.
Вам, Вячеслав, где-нибудь это предлагали? Если задача будет решена (вопрос времени, по-моему) неплохо будет её в архив скинуть тоже. Правда как этот раздел организовать пока не знаю.


Можно сказать, что предлагали... Я "перекопал" кучу сайтов и форумов (кстати на Королевстве Delphi есть очень хорошие статьи на тему интеграции с Office), пролистал несколько книг (в электронном виде, например, есть Василий Корняков "Программирование документов и приложений MS Office в Delphi"), смотрел, в частности, некоторые главы из книги "Delphi и технология COM", которую рекомендовал мне Илья... НО! Там все решения через VCL :(
У меня сложилось стойкое ощущение, что пойми я до конца тот код с процедурными переменными связанными с объектами, что приводил Сергей Губанов, то проблема решится на раз.

А о каком архиве речь? Что-то типа FAQ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 01:37 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Совсем забыл! Засыпаю по-маленьку :) Вот ссылка на статью "Взаимодействие Microsoft Excel с приложениями .NET. Позднее связывание" в которой целый параграф так и называется "Перехват событий Excel". Но все на C# :( Если этот язык для кого не проблема, то может быть там есть ответ.

http://www.aspnetmania.com/Articles/Article/51.html

Всем огромное спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 05:05 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1027
Вячеслав Бойко писал(а):
Илья Ермаков писал(а):
...
Посему смысла в строке
if sheet.SheetChange then GetValue
нет никакого...


Смысл у этой строки следующий (в том контексте, в котором она писалась): при возникновении события sheet.SheetChange вызвать процедуру GetValue.
У IConnectionPoint есть метод Advise. Вероятно он уведомления о событии и разрешает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 03 Июнь, 2006 15:47 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
Цитата:
У меня сложилось стойкое ощущение, что пойми я до конца тот код с процедурными переменными связанными с объектами, что приводил

Нет, Вячеслав, это абсолютно разные вещи. Процедурные поля применяются в Паскалях для организации обработки событий, но никак не в COM. В COM даже нет процедур как таковых - только интерфейсы, объекты и их методы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 04 Июнь, 2006 11:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
Разобрался, как организовать подключение. В BlackBox работа с диспетчерскими интерфейсами (IDispatch, через которые и работает Офис) скрыта за своими типами, и все делается гораздо проще, чем в том же С++ или С#.
Подключение-то происходит (это видно, например, по тому, что когда закрываем Excel не отключившись, идет TRAP "не найден обработчик"). Однако сами события не обрабатываются. Такое ощущение, что проблема в Excel: нужно "повернуть" какой-то "выключатель", что-ли. Один вроде уже нашел: app.PUTEnableEvents(TRUE). Однако не помогает.
Ниже выкладываю два примера. 1-й - это подключение через процедуру Connect BlackBox'a. 2-й - подключение в традиционном стиле COM, как это делалось бы на том же С++. Ничего не меняется, так что проблема не в ББ, а в каких-то нюансах Офиса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 04 Июнь, 2006 11:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
Пример с подключением через CtlT.Connect (как это упоминается в документации к модулю CtlT и в документе Ctl/Docu/Dev-Man).
Код:
MODULE TempExcel;

   IMPORT CtlT, CtlExcel := CtlExcel9, StdLog, WinApi;
   
   TYPE
      WorkbookEvents = POINTER TO RECORD (CtlExcel.WorkbookEvents) END;
           (* Наша реализация WorkbookEvents *)
   
   VAR app: CtlExcel.Application;
         wb: CtlExcel.Workbook;
         wbe: WorkbookEvents;
   
   PROCEDURE NewApp*;
   BEGIN
      app := CtlExcel.NewApplication();
      app.PUTEnableEvents(TRUE);
      wb := app.Workbooks().Add(NIL)
   END NewApp;

   PROCEDURE ShowApp* ;
   BEGIN
      app.PUTVisible(TRUE)
   END ShowApp;
   
   PROCEDURE ConnectEvents* ;
   BEGIN
      NEW(wbe);
      CtlT.Connect(wbe, wb)
   END ConnectEvents;
   
   PROCEDURE DisconnectEvents* ;
      VAR res: COM.RESULT;
   BEGIN
      CtlT.Disconnect(wbe, wb)
   END DisconnectEvents;
   
   (* Даем конкретные определения абстрактным методам. Все пустые кроме SheetChange *)
   
   PROCEDURE (this: WorkbookEvents) SheetChange (Sh: CtlT.Object; Target: CtlExcel.Range);
   BEGIN
      StdLog.String("Sheet was changed. Col: "); StdLog.Int(Target.Column());
      StdLog.String("Row: "); StdLog.Int(Target.Row()); StdLog.Ln;
   END SheetChange;
   
   PROCEDURE (this: WorkbookEvents) Activate;
   END Activate;
   
   PROCEDURE (this: WorkbookEvents) AddinInstall;
   END AddinInstall;
   
   PROCEDURE (this: WorkbookEvents) AddinUninstall;
   END AddinUninstall;
      
   PROCEDURE (this: WorkbookEvents) BeforeClose (VAR Cancel: BOOLEAN);
   END BeforeClose;
      
   PROCEDURE (this: WorkbookEvents) BeforePrint (VAR Cancel: BOOLEAN);
   END BeforePrint;
   
   PROCEDURE (this: WorkbookEvents) BeforeSave (SaveAsUI: BOOLEAN; VAR Cancel: BOOLEAN);
   END BeforeSave;

   PROCEDURE (this: WorkbookEvents) Deactivate;
   END Deactivate;
   
   PROCEDURE (this: WorkbookEvents) NewSheet (Sh: CtlT.Object);
   END NewSheet;
   
   PROCEDURE (this: WorkbookEvents) Open;
   END Open;

   PROCEDURE (this: WorkbookEvents) SheetActivate (Sh: CtlT.Object);
   END SheetActivate;

   PROCEDURE (this: WorkbookEvents) SheetBeforeDoubleClick (Sh: CtlT.Object; Target: CtlExcel.Range; VAR Cancel: BOOLEAN);
   END SheetBeforeDoubleClick;

   PROCEDURE (this: WorkbookEvents) SheetBeforeRightClick (Sh: CtlT.Object; Target: CtlExcel.Range; VAR Cancel: BOOLEAN);
   END SheetBeforeRightClick;

   PROCEDURE (this: WorkbookEvents) SheetCalculate (Sh: CtlT.Object);
   END SheetCalculate;

   PROCEDURE (this: WorkbookEvents) SheetDeactivate (Sh: CtlT.Object);
   END SheetDeactivate;

   PROCEDURE (this: WorkbookEvents) SheetFollowHyperlink (Sh: CtlT.Object; Target: CtlExcel.Hyperlink);
   END SheetFollowHyperlink;

   PROCEDURE (this: WorkbookEvents) SheetSelectionChange (Sh: CtlT.Object; Target: CtlExcel.Range);
   END SheetSelectionChange;

   PROCEDURE (this: WorkbookEvents) WindowActivate (Wn: CtlExcel.Window);
   END WindowActivate;

   PROCEDURE (this: WorkbookEvents) WindowDeactivate (Wn: CtlExcel.Window);
   END WindowDeactivate;

   PROCEDURE (this: WorkbookEvents) WindowResize (Wn: CtlExcel.Window);
   END WindowResize;

END TempExcel.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 04 Июнь, 2006 12:01 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
А вот пример прямой работы через COM. Однако ничего не меняется...

Код:
MODULE TempExcel;

   IMPORT COM, WinOle, CtlT, CtlExcel := CtlExcel9, StdLog, WinApi;
   
   CONST
      AppEventsIID = "{00024413-0000-0000-C000-000000000046}";
   
   TYPE
      WorkbookEvents = POINTER TO RECORD (CtlExcel.WorkbookEvents) END;
      AppEvents = POINTER TO RECORD (CtlExcel.AppEvents) END;
   
   VAR app: CtlExcel.Application;
         wb: CtlExcel.Workbook;
         cpc: WinOle.IConnectionPointContainer;
         cp: WinOle.IConnectionPoint;
         ape: AppEvents;
         cookie: INTEGER;
   
   PROCEDURE NewApp*;
      VAR res: COM.RESULT;
   BEGIN
      app := CtlExcel.NewApplication();
      app.PUTEnableEvents(TRUE);
      wb := app.Workbooks().Add(NIL);
      (* Запрашиваем у приложения его ConnectionPointContainer *)
      (* Обращаемся не к самому app. Application это всего лишь тип-оболочка ББ, автоматически
         сгенерированный для удобной работы с заточенным под VisualBasic диспетчером IDispatch.
         Вот к диспетчеру - объекту COM - и обращаемся, запрашивая его интерфейс
         IConnectionPointContainer. *)
      res := app.disp.QueryInterface(COM.ID(cpc), cpc);
      ASSERT(cpc # NIL, 100);
      (* Ищем ConnectionPoint для обработчика AppEvents по его GUID *)
      res := cpc.FindConnectionPoint(AppEventsIID, cp);
      ASSERT(cp # NIL, 101)
   END NewApp;
   
   PROCEDURE ShowApp* ;
   BEGIN
      app.PUTVisible(TRUE)
   END ShowApp;
   
   PROCEDURE ConnectEvents* ;
      VAR res: COM.RESULT;
   BEGIN
      (* Регистрируем приемник событий, который реализует
         интерфейс  с GUID ["00024413-0000-0000-C000-000000000046"]
         При этом наш класс получает уникальный идентификатор
         cookie, который  нужно сохранить, чтобы иметь возможность отключиться от источника
         событий *)
      NEW(ape);
      res := cp.Advise(ape.disp, cookie)
   END ConnectEvents;
   
   PROCEDURE DisconnectEvents* ;
      VAR res: COM.RESULT;
   BEGIN
      res := cp.Unadvise(cookie)
   END DisconnectEvents;

   PROCEDURE (this: AppEvents) NewWorkbook (Wb: CtlExcel.Workbook);
   BEGIN
      StdLog.String("New workbook created.")
   END NewWorkbook;

   PROCEDURE (this: AppEvents) SheetActivate (Sh: CtlT.Object);
   END SheetActivate;

   PROCEDURE (this: AppEvents) SheetBeforeDoubleClick (Sh: CtlT.Object; Target: CtlExcel.Range; VAR Cancel: BOOLEAN);
   END SheetBeforeDoubleClick;

   PROCEDURE (this: AppEvents) SheetBeforeRightClick (Sh: CtlT.Object; Target: CtlExcel.Range; VAR Cancel: BOOLEAN);
   END SheetBeforeRightClick;
   
   PROCEDURE (this: AppEvents) SheetCalculate (Sh: CtlT.Object);
   END SheetCalculate;
   
   PROCEDURE (this: AppEvents) SheetChange (Sh: CtlT.Object; Target: CtlExcel.Range);
      VAR res: INTEGER;
   BEGIN
      res := WinApi.MessageBoxW(0, "SheetChange", "Event", WinApi.MB_OK);
      StdLog.String("Sheet was changed. Col: "); StdLog.Int(Target.Column());
      StdLog.String("Row: "); StdLog.Int(Target.Row()); StdLog.Ln
   END SheetChange;
   
   PROCEDURE (this: AppEvents) SheetDeactivate (Sh: CtlT.Object);
   END SheetDeactivate;
   
   PROCEDURE (this: AppEvents) SheetFollowHyperlink (Sh: CtlT.Object; Target: CtlExcel.Hyperlink);
   END SheetFollowHyperlink;
   
   PROCEDURE (this: AppEvents) SheetSelectionChange (Sh: CtlT.Object; Target: CtlExcel.Range);
   END SheetSelectionChange;
   
   PROCEDURE (this: AppEvents) WindowActivate (Wb: CtlExcel._Workbook; Wn: CtlExcel.Window);
   END WindowActivate;

   PROCEDURE (this: AppEvents) WindowDeactivate (Wb: CtlExcel.Workbook; Wn: CtlExcel.Window);
   END WindowDeactivate;

   PROCEDURE (this: AppEvents) WindowResize (Wb: CtlExcel.Workbook; Wn: CtlExcel.Window);
   END WindowResize;
   
   PROCEDURE (this: AppEvents) WorkbookActivate (Wb: CtlExcel.Workbook);
   END WorkbookActivate;
   
   PROCEDURE (this: AppEvents) WorkbookAddinInstall (Wb: CtlExcel.Workbook);
   END WorkbookAddinInstall;

   PROCEDURE (this: AppEvents) WorkbookAddinUninstall (Wb: CtlExcel.Workbook);
   END WorkbookAddinUninstall;
   
   PROCEDURE (this: AppEvents) WorkbookBeforeClose (Wb: CtlExcel.Workbook; VAR Cancel: BOOLEAN);
      VAR res: INTEGER;
   BEGIN
      res := WinApi.MessageBoxW(0, "BeforeClose", "Event", WinApi.MB_OK);
      StdLog.String("Workbook before close.")
   END WorkbookBeforeClose;
   
   PROCEDURE (this: AppEvents) WorkbookBeforePrint (Wb: CtlExcel.Workbook; VAR Cancel: BOOLEAN);
   END WorkbookBeforePrint;
   
   PROCEDURE (this: AppEvents) WorkbookBeforeSave (Wb: CtlExcel.Workbook; SaveAsUI: BOOLEAN; VAR Cancel: BOOLEAN);
   END WorkbookBeforeSave;
   
   PROCEDURE (this: AppEvents) WorkbookDeactivate (Wb: CtlExcel.Workbook);
   END WorkbookDeactivate;
   
   PROCEDURE (this: AppEvents) WorkbookNewSheet (Wb: CtlExcel.Workbook; Sh: CtlT.Object);
   END WorkbookNewSheet;
   
   PROCEDURE (this: AppEvents) WorkbookOpen (Wb: CtlExcel.Workbook);
   END WorkbookOpen;

END TempExcel.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 05 Июнь, 2006 07:35 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
А вот пример прямой работы через COM. Однако ничего не меняется...


Коды возвращаемых результатов не пробовал проверять?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 05 Июнь, 2006 10:37 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
Разобрался, как организовать подключение...

Спасибо, Илья! Мне многое стало понятно из Ваших примеров. Буду сидеть разбираться дальше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 05 Июнь, 2006 11:48 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
Vlad писал(а):
Коды возвращаемых результатов не пробовал проверять?

Проверил. Все нормально. COM.RESULT = 0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 05 Июнь, 2006 20:43 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Vlad писал(а):
Коды возвращаемых результатов не пробовал проверять?

Проверил. Все нормально. COM.RESULT = 0.


Тогда очень странно. Я бы проверил на чем-нибудь своем, а не на Excel'e.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB