Распределенные приложения: контроллеры автоматизации. Часть 2. Фертиков В.В. - 16 стр.

UptoLike

Составители: 

16
try // если Excel запущен - подключиться к нему
{ Exl = GetActiveOleObject("Excel.Application");
}
catch(...) // Excel не запущен - запустить его
{ Exl = CreateOleObject("Excel.Application");
}
Exl.OlePropertySet("Visible", true);
Book=Exl.OlePropertyGet("WorkBooks").OleFunction("Add");
Sheet = Book.OlePropertyGet("ActiveSheet");
Sheet.OlePropertyGet("Range","A1").
OlePropertySet("Value","Hello, World!");
Sheet.OlePropertyGet("Range","A2").
OlePropertySet("Value","");
int i,j=0;
for(i=0; i<Table1->FieldCount; i++)
Sheet.OlePropertyGet("Cells",2,i+2).
OlePropertySet("Value",
Table1->Fields->Fields[i]->FieldName);
int Bounds[]={0,Table1->FieldCount};
Arr = VarArrayCreate(Bounds,1,varVariant);
while(!Table1->Eof)
{ Arr.PutElement(IntToStr(++j),0);
for(i=0; i<Table1->FieldCount; i++)
Arr.PutElement(
Table1->Fields->Fields[i]->AsString,i+1);
Sheet.OlePropertyGet("Range",
Sheet.OlePropertyGet("Cells",j+2,1),
Sheet.OlePropertyGet("Cells",j+2,
Table1->FieldCount+1)).
OlePropertySet("Value", Arr);
Table1->Next();
}
Table1->Close();
}
Программа использует описанные в предыдущем разделе механизмы
управления диспинтерфейсом. Новым здесь является лишь использование ва-
риантного массива, для создания которого функцией VarArryCreate потребо -
вался вспомогательный массив Bounds, описывающий его размерности.
Использование библиотеки типов для раннего связывания
В предыдущих разделах достаточно подробно рассмотрен способ созда-
ния клиентов с использованием типа Variant, основанного на механизме ди -
намического (позднего) связывания. При таком способе клиент (контроллер ав -
томатизации) явно или неявно использует метод
IDispatch::GetIDsOfNames, а возможно, также другие методы IDispatch,
для генерирования динамического запроса к объекту во время выполнения.
Данный способ наиболее прост в использовании изнутри Delphi (как и
                                16
     try       // если Excel запущен - подключиться к нему
     {    Exl = GetActiveOleObject("Excel.Application");
     }
     catch(...)      // Excel не запущен - запустить его
     {    Exl = CreateOleObject("Excel.Application");
     }
     Exl.OlePropertySet("Visible", true);
     Book=Exl.OlePropertyGet("WorkBooks").OleFunction("Add");
     Sheet = Book.OlePropertyGet("ActiveSheet");
     Sheet.OlePropertyGet("Range","A1").
          OlePropertySet("Value","Hello, World!");
     Sheet.OlePropertyGet("Range","A2").
          OlePropertySet("Value"," №");
     int i,j=0;
     for(i=0; iFieldCount; i++)
       Sheet.OlePropertyGet("Cells",2,i+2).
          OlePropertySet("Value",
               Table1->Fields->Fields[i]->FieldName);
     int Bounds[]={0,Table1->FieldCount};
     Arr = VarArrayCreate(Bounds,1,varVariant);
     while(!Table1->Eof)
     {    Arr.PutElement(IntToStr(++j),0);
          for(i=0; iFieldCount; i++)
               Arr.PutElement(
                    Table1->Fields->Fields[i]->AsString,i+1);
          Sheet.OlePropertyGet("Range",
               Sheet.OlePropertyGet("Cells",j+2,1),
               Sheet.OlePropertyGet("Cells",j+2,
                    Table1->FieldCount+1)).
                         OlePropertySet("Value", Arr);
          Table1->Next();
     }
     Table1->Close();
}

      Программа использует описанные в предыдущем разделе механизмы
управления диспинтерфейсом. Новым здесь является лишь использование ва-
риантного массива, для создания которого функцией VarArryCreate потребо-
вался вспомогательный массив Bounds, описывающий его размерности.

     Использование библиотеки типов для раннего связывания
     В предыдущих разделах достаточно подробно рассмотрен способ созда-
ния клиентов с использованием типа Variant , основанного на механизме ди-
намического (позднего) связывания. При таком способе клиент (контроллер ав-
томатизации)       явно      или       неявно       использует       метод
IDispatch::GetIDsOfNames , а возможно, также другие методы IDispatch ,
для генерирования динамического запроса к объекту во время выполнения.
Данный способ наиболее прост в использовании изнутри Delphi (как и