• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

ActiveX ошибки!

Автор Пётр Петрович, 04.12.07, 15:43:38

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

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

Пётр Петрович

Вставил на свою форму ActiveX компонент. Но при попытке получить объект, выдаёт ошибку:
[Error] ElectricaSU_.pas(108): Incompatible types: 'Kompas6API5_TLB.KompasObject' and 'KsTLB.KompasObject'

Помогите побороть, пожалуйста!

unit вавап;
interface
uses
  LtDefine,
  LibTool,
  ShellAPI,
  comobj,
  LDefin2D,
  KsTLB,
  ksAuto,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan,
  DocInfo_,
  IniFile_,
  EditStamp_,
  EXE_Running_,
  KillTask_,
  InsertLibFragment_,
  ExtCtrls, OleCtrls, KGAXLib_TLB, Menus;

type
.
.
KGAX1: TKGAX;
.
.

var
  Form1: TForm1;
  iKompas:KompasObject;
  iDoc:ksDocument2D;

implementation

procedure TForm1.FormShow(Sender: TObject);
begin
  with Form1 do;
    begin
      Width:=screen.WorkAreaWidth;
      Height:=screen.WorkAreaHeight;
      Left:=0;
      Top:=0;
    end;
  KGAX1.Width:=Form1.ClientWidth;
  KGAX1.Height:=Form1.ClientHeight;
  KGAX1.GetKompasObject;
  iKompas:= KompasObject(CreateOleObject('Kompas.Application.5'));
end;

procedure TForm1.N2Click(Sender: TObject);
begin
  iKompas := KGAX1.GetKompasObject;
//  iKompas:= KompasObject(GetActiveOleObject('Kompas.Application.5'));
  iDoc := ksDocument2D ( iKompas.Document2D );
  if NewProject(iKompas, iDoc)=0 then exit;
  iDoc := ksDocument2D ( iKompas.ActiveDocument2D );
  ShowDocInfo (iKompas,iDoc);
  SetForegroundWindow (iKompas.ksGetHWindow);
  if ShowEditStampForm (iKompas, iDoc)=0 then exit;
  EditStamp (iKompas, iDoc);
end;


Пётр Петрович

Добавил в uses   Kompas6API5_TLB и заработало...

Только вот ещё проблема:

Когда выполняю KGAX1.CloseAll;

После этого пытаюсь вставить новый документ
  iDoc := ksDocument2D ( iKompas.Document2D );
  KGAX1.InsertDocument('c:\1.cdw',iKompas);
  iDoc.ksOpenDocument('c:\1.cdw',WordBool(0));
  iDoc := ksDocument2D ( iKompas.ActiveDocument2D );
  iKompas.ksMessage(inttostr(KGAX1.GetDocumentsCount));
документ открывается count увеличивается. Но он не отображается в ActiveX компоненте! Что делать? Уже с ребятами всё попробовали, но всё никак не выйдем из ситуации!

Пётр Петрович

Здравствуйте! Столкнулся с проблемой в какой момент времени получать iDoc=ActiveDocument2D
если делать onPaint, то это происходит при каждом обновлении и меня не устраивает.
Нужно при загрузке восстанавливать все документы, которые были закрыты без их закрытия... Мучаюсь с этим уже две недели. Подскажите как сделать, пожалуйста!!!

Nesh

CloseAll не документ закрывает, а доступ к компасу, вроде бы.

Пётр Петрович

А как тогда заурыть документ? Пробовал и Remove и ksClose - не получается никак, либо с ошибкой с какой-то

333

Нужно добавить новый документ.
После этого закрыть все предыдующие.

long count = kgax.GetDocumentsCount();
kgax.AddDocument( "C:\\1.frw" );
for (long i = 0; i < count; i++)
{
  kompasCtrl->RemoveDocument(0);
}

Пётр Петрович

Всё это, конечно, хорошо, но мне нужно сделать таким образом. Пытался по-разному, но так и не получилось...
1) Если при закрытии моей программы были открыты документы, то при загрузке программы загружать все документы (ссылки хранятся в INI - файле)
2) Если при закрытии программы не было открыто документов, то открывать пустое окно моей программы...
Как это сделать???
И ещё. При открытии приходится по таймеру сканировать загрузился ли документ или нет, потом только загружать следующий... Тоже неудобно как-то...

Nesh

Зачем по таймер, просто проверь активный ли текущий документ в контйнере при его инициализации

chelkar

Цитата: Пётр Петрович от 12.12.07, 18:56:02
Всё это, конечно, хорошо, но мне нужно сделать таким образом. Пытался по-разному, но так и не получилось...
1) Если при закрытии моей программы были открыты документы, то при загрузке программы загружать все документы (ссылки хранятся в INI - файле)
2) Если при закрытии программы не было открыто документов, то открывать пустое окно моей программы...
Как это сделать???
И ещё. При открытии приходится по таймеру сканировать загрузился ли документ или нет, потом только загружать следующий... Тоже неудобно как-то...
Непонятно, если файлы собственные, то в чем дело? Если файлы компасовые, то зачем весь огород с KGAX, делай библиотеку в Компасе и вперед.
Хорошо бы понять что делает приложение. Тогда можно подсказать чего-то.
Может такой вариант подойдет. На старте приложения открываем окно, соединяемся с КОМПАСом, просто как с сервером, берем список файлов из ини и показываем превью или иконки. А уж по выбранному грузим KGAX

333

Если документов нет. Нужно погосить KGAX-ное окно
Еще желательно ему установить нулевой размер

      kompasCtrl.ShowWindow( SW_HIDE );
      kompasCtrl.MoveWindow( CRect(0, 0, 0, 0), FALSE );

если нужно будет показать
      kompasCtrl.ShowWindow( SW_SHOW );