Обсуждение:Длм-ка lgxe.d32 - работа с терминальными ActiveX-объектами с поддержкой событий (+)

0 (0)
  • Развернуть Обсуждение:Длм-ка lgxe.d32 - работа с терминальными ActiveX-объектами с поддержкой событий (+) ( Обсуждение примера  18.11.2003 04:43 )
    0(0)
    23.03.2012 В серверной части убрана передача флага flags=DISPATCH_PROPERTYPUTREF.
    Глючит при присвоении свойству-объекту ActiveX нового объекта ActiveX,
    т.к. передается pdisp с типом VT_DISPATCH, а wFlags==DISPATCH_PROPERTYPUTREF.
    Для правильной работы требуется одно из сочетаний:
    VT_DISPATCH + DISPATCH_PROPERTYPUT
    VT_DISPATCHREF + DISPATCH_PROPERTYPUTREF
    Выбрал 1-й вариант.
    16.04.2009 Добавлена поддержка типа V_NUMERIC. Делается автоконвертация в CURRENCY и обратно.
    20.01.2009 В серверной части добавлена регистрация всех созданных объектов в спец.список, а
    при завершении работы макроса - удаление всех оставшихся в списке объектов (из-за
    взаимных ссылок могли оставаться неудаленные объекты).
    23.05.2007 Введена поддержка наследования TlgActiveX. Добавлены функции lgxBeforeSet,
    lgxBeforeSetObject, lgxBeforeGet, lgxBeforeGetObject для перехвата событий
    BeforeSet и BeforeGet. Добавлена поддрежка передачи TArray в качестве аргу-
    ментов (необходимо для Open Office).
    11.04.2007 При невозможности создать TlgActiveX-объект теперь не возвращается объект,
    а возвращается то, что предусмотрено функцией lgxeError или null. Это было крити-
    чно при использовании одновременно с vclrsl.d32. Как вариант - проверка наличия
    MS Office или Open Office.
    21.08.2006 Предусмотрена очистка массива ListText при инициализации, деинициализации серверного модуля.
    16.08.2006 Добавлена поддержка передачи TArray по значению в качестве аргумента метода.
    (Используется при работе со StarOffice).
    15.08.2006 Изменен алгоритм передачи строковых аргументов, аргументов по ссылке и
    возвращаемых значений. Снято ограничение на размер строки.

    22.02.2000 Луппов Григорий Борисович, ОАО КБ "Хлынов", г.Киров
    e-mail: greg@ezmail.ru

    Универсальный клиент ActiveX
    исключительно для работы в трехзвенке
    (вариант с обработкой событий)

    Состав: модуль lgxe.d32 (поместить на терминальный компьютер к программе
    term.exe)
    модуль lgxse.d32(поместить на сервер приложений в каталог MAC)

    Назначение: программа является приблизительным аналогом rslx.d32 Сергея
    Кубрина. Но rslx.d32 при работе на удаленной машине требует
    поддержки протокола DCOM, который не работает, если терми-
    нальный компьютер стоит под Windows 95(98). Данная длм-ка
    призвана устранить этот недостаток и позволяет работать с
    объектами ActiveX, которые создаются и выполняются на тер-
    минальном компьютере.

    Особенности:в данной длм-ке осуществлено разделение объектов TlgActiveX,
    которые создаются на сервере приложений, и их свойств и мето-
    дов, которые вызываются/выполняются на терминале с передачей
    входящих и выходящих параметров между терминалом и сервером.

    Посмотреть пример
    >> Ответить
    • Развернуть Добавлена поддержка TArray (+) ( григ  16.08.2006 11:06 )
      0(0)
      Вот пример:
      import rslx, lgxse1;
      
      array args;
      ar=TArray;
      
      
      DstFile="private:factory/swriter";
      word=TlgActiveX("com.sun.star.ServiceManager",false);
      
      //вернуть структуру имя свойства+значение
      macro wrd_MakePropertyValue(word,PropName,PropValue)
       if(valtype(PropValue)!=V_STRING) return false; end;
       ob=word.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
       ob.Name=PropName;
       ob.Value=PropValue;
       return ob;
      end;
      
      ar[0]=wrd_MakePropertyValue(word,"FilterName","rtf");
      //MsgBox(ar[0]);
      
      //DstFile="file:///c:/6/AnketaU.rtf";
      DstFile="file:///c:/6/AnketaU.rtf";
      ob = word.CreateInstance("com.sun.star.frame.Desktop");
      odoc = ob.LoadComponentFromURL(DstFile,"_blank",0,ar);
      ooText=oDoc.GetText();
      ooText.SetString("Hello World!");
      
      ob=ar[0];
      ob.Value="HTML (StarWriter)";
      odoc.StoreToURL("file:///c:/6/1.txt",ar);
      
      end;
      
      

      >> Ответить
    • Развернуть Добавлена поддержка наследования (+) ( григ  23.05.2007 15:51 )
      0(0)
      23.05.2007 Введена поддержка наследования TlgActiveX. Добавлены функции lgxBeforeSet,
      lgxBeforeSetObject, lgxBeforeGet, lgxBeforeGetObject для перехвата событий
      BeforeSet и BeforeGet.

      >> Ответить
      • Развернуть Работает только через TCP/IP ( Crin  14.11.2007 14:29 )
        0(0)
        Работает только через TCP/IP
        а через PIPE возможно? (term.ini PROTOCOL = 1)
        >> Ответить
        • Развернуть Нет. Я так из положения вышел (+) ( григ  14.11.2007 15:21 )
          0(0)
          Сделал term1.ini c PIPE и запускаю с ним терминал, а в term.ini поставил TCP/IP
          >> Ответить
          • Развернуть Есть еще вариант ( Crin  14.11.2007 17:36 )
            0(0)
            Есть еще вариант, чтобы не менять всем ярлыки для запуска.
            В term.ini проставить PROTOCOL=1, сделать копию ini-файла
            например term.in2, там проставить PROTOCOL=2.
            В lgxe.d32 заменить term.ini на term.in2 каким нибудь редактором бинарных файлов.

            Спасибо!
            >> Ответить
    • Развернуть Запутался lg lgx lgxe они все нужны или взаимо заменяемы. ( deusex  04.07.2013 09:59 )
      0(0)
      1. я так понимаю lgxe это продолжение lgx т.е lgx нужно везде заменить на lgxe?
      2. не совсем понятно нужен ли lg или все его функции есть в lgxe?
      3. Должена остаться только одна dlm lgxe? остальное можно вырезать?
      >> Ответить
    • Развернуть а исходники доработки где ?))) ( Neverwinter  10.07.2013 16:04 )
      0(0)
      Not specified
      >> Ответить
    • Развернуть а как сделать так чтоб можно было пользоваться Excel - если отчет долго формируется? ( KaMPiLeR  30.05.2016 11:09 )
      0(0)
      а то начинает формироваться отчет в открытый иксель ((
      >> Ответить
      • Развернуть Все просто :) (+) ( григ  30.05.2016 12:17 )
        0(0)
        1. ob=TlgActiveX("Excel.Application",false); - новый экземпляр Excel
        2. Юзать ob_temp - это заглушка для случаев, когда в TC Enter-ом жмешь на *.xls
        3. Не надо делать Visible=true перед выводом
        4. Поставить на OnError визуализацию Excel или выход из него

          if(IsStandAlone()) ob=ActiveX("Excel.Application",null,false); ob_temp=ActiveX("Excel.Application",null,false);
          else ob=TlgActiveX("Excel.Application",false); ob_temp=TlgActiveX("Excel.Application",false); end;
        
          ob.Workbooks.Add;
          sheet1=ob.Sheets(CurSheet);
        
          ob.Calculation=xlManual;
          ob.ScreenUpdating=false;
        
          ...
        
          if(not IsStandAlone()) lgSetAnswer(0); TestEvent(1); end;
        
          ob.Calculation=xlAutomatic;
          ob.ScreenUpdating=true;
          ob.Visible=true;
          ...
        
         OnError(err)
          MsgBox("Ошибка:"+err.Message+"|Модуль:"+err.Module+"|Строка:"+string(err.Line));
          //на случай сбоя визуализируем Excel
          if(valtype(ob)==V_GENOBJ)
           ob.Calculation=xlAutomatic;
           ob.ScreenUpdating=true;
           ob.Visible=true;
           //или ob.Quit;
          end; 
         end;
        

        >> Ответить
        • Развернуть правильно я понимаю что нужно где то указать что объект икселя формировать на стороне сервера? (+) ( KaMPiLeR  30.05.2016 13:36 )
          0(0)
          у меня на сервере приложений пользователи не работают - иксель запустить только я могу.

          второй параметр у TlgActiveX - это что?
          >> Ответить
          • Развернуть TlgActiveX - это только на стороне термина (+) ( григ  30.05.2016 14:15 )
            0(0)
            На СП юзай rslx.d32 или rsax.d32, но лучше этого не делать.
            Второй параметр = true - использовать активный экземпляр класса, если он есть, = false - создавать новый.
            >> Ответить
            • Развернуть хм, а что это значит? ( KaMPiLeR  30.05.2016 14:24 )
              0(0)
              TlgActiveX - это только на стороне термина
              у меня обычная трехзвенка.

              На СП юзай rslx.d32 или rsax.d32, но лучше этого не делать.
              странный совет ))


              проблема проста - раньше когда отчет долго формировался - запрещал открывать иксель и народ особо не возбухал.
              сейчас переосмылил и хочется чтоб можно было работать в икселе ))
              >> Ответить
            • Развернуть хм, а что это значит? ( KaMPiLeR  30.05.2016 14:24 )
              0(0)
              TlgActiveX - это только на стороне термина
              у меня обычная трехзвенка.

              На СП юзай rslx.d32 или rsax.d32, но лучше этого не делать.
              странный совет ))


              проблема проста - раньше когда отчет долго формировался - запрещал открывать иксель и народ особо не возбухал.
              сейчас переосмылил и хочется чтоб можно было работать в икселе ))
              >> Ответить
              • Развернуть TlgActiveX создает объекты на(+) ( григ  30.05.2016 16:11 )
                0(0)
                терминальном компьютере, а не на СП. Excel у тебя на терминале будет работать. Не знаю, как тут еще пояснить. В 3-х звенке можно ActiveX-объекты создавать на терминале, а можно - на СП.
                Совет не странный, а нормальный, т.к. бывало, что некоторые программеры в 3-х звенке запускают Excel на СП, получают xls-файл, копируют на терминал или сетевой диск и открывают Excel-ом на терминале. При отладке может быть куча повисших Excel-процессов на СП, что не гуд. Да и тормозить будет всех.
                Ну а насчет "переосмыслил" - так я ведь тебе уже все нарисовал - смотри выше. Вместо "..." вставь свой вывод и пользуйся.


                >> Ответить