Подключение библиотек компаса к делфи
|
|
novichek5 | Дата: Вторник, 04.05.2010, 14:26 | Сообщение # 1 |
Новичек
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Кто подскажет как библиотеку фрагментов, созданную в компасе подключить к делфи?чтобы не искать ее в менеджере библиотек, а которая бы вызывалась автоматически через окно делфи
|
|
| |
Maxa | Дата: Вторник, 11.05.2010, 06:28 | Сообщение # 2 |
Школьник
Группа: Администраторы
Сообщений: 22
Статус: Offline
| Что именно вы имеет ввиду? 1. чтобы библиотека включалась в компасе по нажатию на кнопку в Delphi? 2. чтобы выбор вставки фрагмента был из Delphi?
|
|
| |
Maxa | Дата: Вторник, 11.05.2010, 08:43 | Сообщение # 3 |
Школьник
Группа: Администраторы
Сообщений: 22
Статус: Offline
| Вот например интерфейс выбора фрагмента через делфи. Только пока не вставляется , но проблема вставки найдется var libname,buf:string; j1,i,j:integer; insertName:string; x,y,angle:double; kompas,fl,rub,frag,d2d,par,type1,req,dp,obj:variant; pDefFrg,p:longint; begin kompas:=getactiveoleobject('kompas.application.5'); //выберем библиотеку фрагментов fl:=kompas.GetFragmentLibrary; j1:=1; buf:=fl.ksChoiceFragmentFromLib('c:\ELECTRO.LFR',j1); if j1=3 then begin for i:=1 to length(buf) do if buf[i]='|' then j:=i; insertName:=copy(buf,j+1,length(buf)); rub:=kompas.getparamstruct(6); //rub.init; rub.phantom:=1; type1:=rub.GetPhantomParam; type1.xBase:= 0; type1.yBase:= 0; type1.scale_:= 1; //rub.phType:= 1; d2d:=kompas.ActiveDocument2D; frag:=D2D.GetFragment; pDefFrg:= frag.ksFragmentDefinition(buf,insertName,1); if (pDefFrg<>0) then begin type1.gr:= d2d.ksNewGroup(1); // временная группа par:=kompas.getparamstruct(7); // par.init; par.xBase:= 0; par.yBase:= 0; par.angle:= 0; par.scale_:= 1 ; p:=frag.ksInsertFragment(pDefFrg,1,par); d2d.ksEndGroup; req:=kompas.getparamstruct(10); j:=0; while j<>-1 do begin angle:=0; j:=d2d.ksPlacement(req,x,y,angle,rub); if j=-1 then dp:=d2d.ksCopyObj(p,0,0,x, y,1,angle); end; end else showmessage('Ошибка создания описания вставки фрагмента'); end else showmessage('Следует выбирать фрагмент');
|
|
| |
novichek5 | Дата: Вторник, 11.05.2010, 08:54 | Сообщение # 4 |
Новичек
Группа: Пользователи
Сообщений: 6
Статус: Offline
| А например по нажатию кнопки в окне делфи запускается библиотека в компасе,а при выборе необходимого в бибилиотеке, выходит окошко делфи, в котором выбираются необходимые данные, по котором идет расчет и результат выдается в делфи в виде текста))))))))))))
|
|
| |
Maxa | Дата: Вторник, 11.05.2010, 12:31 | Сообщение # 5 |
Школьник
Группа: Администраторы
Сообщений: 22
Статус: Offline
| Именно в этом коде запускается библиотека в компасе а при выборе необходимого: в данном случаем вставляет, но также можно и другие действия делать, например считать название какие именно данные вам надо вывести в делфи в виде текста? P.S. Код рабочий, ошибка была не в коде
|
|
| |
novichek5 | Дата: Вторник, 11.05.2010, 13:04 | Сообщение # 6 |
Новичек
Группа: Пользователи
Сообщений: 6
Статус: Offline
| опечатка выводить данные не в делфи а в компасе в виде текста Добавлено (11.05.2010, 13:04) --------------------------------------------- почему то выдает ошибку на этой строке kompas:=getactiveoleobject('kompas.application.5'); пишет undeclared identifier "getactiveoleobject"
|
|
| |
Maxa | Дата: Среда, 12.05.2010, 07:07 | Сообщение # 7 |
Школьник
Группа: Администраторы
Сообщений: 22
Статус: Offline
| извиняюсь, в uses прописать comobj а нельзя ли написать какие параметры надо считать, я мог бы и примерчик с текстом скинуть
|
|
| |
novichek5 | Дата: Среда, 12.05.2010, 10:54 | Сообщение # 8 |
Новичек
Группа: Пользователи
Сообщений: 6
Статус: Offline
| давайте я вам напишу задание, чтобы было все понятно...есть библиотека фрагментов, созданная в компасе.вот она ниже
Прикрепления:
_4.lfr
(217.6 Kb)
|
|
| |
novichek5 | Дата: Среда, 12.05.2010, 11:18 | Сообщение # 9 |
Новичек
Группа: Пользователи
Сообщений: 6
Статус: Offline
| необходимо , чтобы она запускалась в компасе ну к примеру по нажатию кнопки в окне делфи.Далее запустилась, выбираешь например установочную базу, щелкаешь по ней, чтобы ее вытащить из библиотеки и вставить в нужное место чертежа, тут при этом нажатии появляется окно делфи, в котором выбираешь нужную схемку, там же прилагается краткое описание схемки. эти схемки можно выбирать, пусть будет 2.Вот они Добавлено (12.05.2010, 11:03) --------------------------------------------- нажимаем расчет в этом окошке и по формулам, которые около схем..внизу окна выдается значение, нажимаем далее это окошко сменяется другим в котором выбираеются необходимые виды закрепления и исходя из этого выбираются значения....все есть в этом вордовском документе Добавлено (12.05.2010, 11:10) --------------------------------------------- выглядит это примерно как в ниже приведенной программе Добавлено (12.05.2010, 11:17) --------------------------------------------- программа Добавлено (12.05.2010, 11:18) --------------------------------------------- ((((почему то не отправляется она.....вот и конечный результат в виде там трех строк выдается на чертеже в углу как результат расчета
|
|
| |
Maxa | Дата: Среда, 12.05.2010, 13:11 | Сообщение # 10 |
Школьник
Группа: Администраторы
Сообщений: 22
Статус: Offline
| вот пример на 2 кнопки по нажатию на первую выбираем фрагмент по нажатию на вторую, строим фрагмент и дописывааем три строчки, в остальном надеюсь вы догадаетесь и найдете решение сами unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,comobj; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var libname,buf:string; j1,i,j:integer; insertName:string; x,y,angle:double; kompas,fl,rub,frag,d2d,par,type1,req,dp,obj:variant; pDefFrg,p:longint; procedure TForm1.Button1Click(Sender: TObject); begin kompas:=getactiveoleobject('kompas.application.5'); setforegroundwindow(kompas.ksGetHWindow); //выберем библиотеку фрагментов fl:=kompas.GetFragmentLibrary; j1:=1; buf:=fl.ksChoiceFragmentFromLib('c:\ELECTRO.LFR',j1); if j1=3 then begin //здесь мы получаем путь к фрагменту, из которого можем определить оп имени с чем будем работать // form1.Caption:=buf; end else showmessage('Следует выбирать фрагмент'); setforegroundwindow(form1.Handle); //далее делаем вычисления в своей программе end; procedure TForm1.Button2Click(Sender: TObject); begin //рисуем то что выбрано for i:=1 to length(buf) do if buf[i]='|' then j:=i; insertName:=copy(buf,j+1,length(buf)); rub:=kompas.getparamstruct(6); //rub.init; rub.phantom:=1; type1:=rub.GetPhantomParam; type1.xBase:= 0; type1.yBase:= 0; type1.scale_:= 1; //rub.phType:= 1; d2d:=kompas.ActiveDocument2D; frag:=D2D.GetFragment; pDefFrg:= frag.ksFragmentDefinition(buf,insertName,1); if (pDefFrg<>0) then begin type1.gr:= d2d.ksNewGroup(1); // временная группа par:=kompas.getparamstruct(7); // par.init; par.xBase:= 0; par.yBase:= 0; par.angle:= 0; par.scale_:= 1 ; p:=frag.ksInsertFragment(pDefFrg,1,par); d2d.ksEndGroup; dp:=d2d.ksCopyObj(p,0,0,100,150,1,0); end else showmessage('Ошибка создания описания вставки фрагмента'); //пишем 3 строки d2d.kstext(40,70,0,7,0.5,0,form1.Caption); d2d.kstext(40,80,0,7,0.5,0,form1.Caption); d2d.kstext(40,90,0,7,0.5,0,form1.Caption); end; end.
|
|
| |
novichek5 | Дата: Среда, 12.05.2010, 14:34 | Сообщение # 11 |
Новичек
Группа: Пользователи
Сообщений: 6
Статус: Offline
| спасибо)
|
|
| |
Maxa | Дата: Четверг, 13.05.2010, 05:13 | Сообщение # 12 |
Школьник
Группа: Администраторы
Сообщений: 22
Статус: Offline
| обращайтесь
|
|
| |
Vladuk | Дата: Суббота, 29.01.2011, 23:02 | Сообщение # 13 |
Новичек
Группа: Пользователи
Сообщений: 1
Статус: Offline
| у меня не понимает данной строки kompas: = getactiveoleobject ('kompas.application.5'); что дописать надо, чтобы понял?
|
|
| |
Maxa | Дата: Воскресенье, 30.01.2011, 19:59 | Сообщение # 14 |
Школьник
Группа: Администраторы
Сообщений: 22
Статус: Offline
| Пропишите в uses ComObj;
|
|
| |
Петрович | Дата: Среда, 16.11.2011, 14:19 | Сообщение # 15 |
Новичек
Группа: Пользователи
Сообщений: 1
Статус: Offline
| привет всем, не подскажете как прописывать деталь в компасе через делфи...конкретно как правильно писать окружности линии и т.п.
|
|
| |