Чтение данных из основной надписи, внешнее приложение, Delphi 7

Автор Pavor, 07.08.11, 13:34:11

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Pavor

Казалось бы -- простой вопрос, однако никак побороть не удается.

В примерах (Step5) вроде все расписано:

var p: Reference;
numb: Cardinal
//.......
begin

p:=GetStampColumnText(numb)
//.............


Однако в моей программе подобный код не компилируется:

var p: Reference;
numb: Cardinal
//.......
begin

Stamp:=ksStamp(doc.ksGetStamp);
p:=Stamp.ksGetStampColumnText(numb); //при компиляции в этой строке ошибка


Ошибка: Types of actual and formal var parameters must be identical

Подскажите, как нужно сделать?
делал уже и так:


var p: ksDynamicArray;
//.......
begin
Stamp:=ksStamp(doc.ksGetStamp);
p:=ksDynamicArray( Stamp.ksGetStampColumnText(numb) ); //при компиляции ошибка та же

У меня Step5 скомпилировался без всяких проблем, поэтому желательно посмотреть полностью место с ошибкой и типами переменных.
Кусок кода из примера.

// Открыть штамп на редактирование
  if ( OpenStamp > 0 ) then
  begin
    // В цикле будем брать все существующие графы
    p := GetStampColumnText( numb );       // Получить текст ячейки
....

Pavor

Так у меня Step5 тоже нормально компилируется и запускается. Но там библиотека.
Вопрос в том, что я не могу такой же подход использовать в своей программе, которая является внешним контроллером.
(Может быть, конечно, что я все делаю не так с самого начала)

Вот фрагмент моей программы:


var
  Kompas : KompasObject;
  doc : ksDocument2D;
  Stamp     : ksStamp;
  p: ksDynamicArray;

    if Kompas = nil then
    begin
     Kompas:= KompasObject(CreateOleObject('Kompas.Application.5'));
     if Kompas <> nil then begin
      Kompas.Visible := true; end else begin
                                  ShowMessage('Невозможно подключиться к Компасу. Возможно, он не установлен.');
                                  exit;
                                  end;
    end;

     //Открываем переданный чертеж
   doc := ksDocument2D( Kompas.Document2D );
     if doc <> nil then begin      {doc begin}
        doc.ksOpenDocument( 'TestFile.cdw', false );


      //Здесь пытаемся прочитать информацию из основной надписи
       Stamp:= ksStamp(doc.GetStamp);

      if Stamp.ksOpenStamp<>0 then
       begin

  //Ошибка: Types of actual and formal var parameters must be identical---|
         p:=ksDynamicArray(Stamp.ksGetStampColumnText(2));// <------------|

         {здесь будет обработка полученных данных}

       Stamp.ksCloseStamp;
       end;

      end;  {doc end}

   //Отключаемся от Компаса
   doc:=nil;
   Kompas:= nil;


Да, как я уже говорил вариант с типом Reference ничего другого не дает:

p: Reference;
//....

//Ошибка: Types of actual and formal var parameters must be identical
  p:=Stamp.ksGetStampColumnText(2);



Примечание к функции ksGetStampColumnText:
После выполнения метод смещается на следующую ячейку.
Если номер графы не определен с помощью функции ksColumnNumber, метод начинает работу с первой графы.
После использования полученный массив желательно удалить.
Если numb != NULL, метод возвращает номер графы.
Функция используется в режиме редактирования штампа.

Pavor

Ну хорошо, хорошо.
А почему не компилируется-то??

p:=ksDynamicArray(Stamp.ksGetStampColumnText(2));
Двойку поменяйте на переменную, в ошибке об этом написано.

Pavor