delphi autocad 2007 подшивки
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > delphi autocad 2007 подшивки

delphi autocad 2007 подшивки

Ответ
Поиск в этой теме
Непрочитано 12.12.2008, 16:43 #1
delphi autocad 2007 подшивки
evgeny_
 
Регистрация: 12.12.2008
Сообщений: 6

Привет всем!
Создаю файл подшивки, при добавлении листа в группу вываливается с ошибкой access violation .... in module acdb17.dll . Кто знает, подскажите в чем ошибка ?
ps. смотрел пример на VB в helpe автокада .
////////////////////////////////////////////////
Код:
[Выделить все]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ComObj;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses ACSMCOMPONENTS17Lib_TLB,AXDBLib_TLB;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var mm:TAcSmSheetSetMgr;
db:TAcSmdatabase;
dbI:IAcSmdatabase;
sheetset:TAcSmSheetSet;
sheetsetI:IAcSmSheetSet;
ee:boolean;
dwtLayoutref : TAcSmAcDbLayoutReference;
owner_sheetset:IAcSmPersist;
fileRef : TAcSmFileReference;
bag : IAcSmCustomPropertyBag;
owner_bag:IAcSmPersist;
propval: TAcSmCustomPropertyValue;
resources :IAcSmResources;
labelRef : TAcSmAcDbBlockRecordReference;
calloutBlocks : IAcSmCalloutBlocks;
calloutRef : TAcSmAcDbBlockRecordReference;
parentCat : IAcSmSubset;
newCat :TAcSmSubset;
newCatI,newCatII :IAcSmSubset;
newCatI_owner:IAcSmPersist;
sheet1 : IAcSmComponent;
parentCategoryI : IAcSmSubset;
parentCategory : TAcSmSubset;
newSheet :TAcSmSheet;
newSheetI :IAcSmSheet;
layoutRef :TAcSmAcDbLayoutReference;
layoutRefI :IAcSmAcDbLayoutReference;
ppFileRef: IAcSmFileReference;

begin
ee:=true;
mm:= TAcSmSheetSetMgr.Create(nil);
mm.CreateDatabase('C:\project\acad\ww.dst','',ee,dbI);
db:=TAcSmdatabase.Create(nil);
db.ConnectTo(dbI);
db.GetSheetSet(sheetsetI);
db.LockDb(db);
sheetset:=TAcSmSheetSet.Create(nil);
sheetset.ConnectTo(sheetsetI);
sheetset.SetName('Имя подшивки 1111111');
sheetset.SetDesc('мое пояснение йййййййййй');
dwtLayoutref := TAcSmAcDbLayoutReference.Create(nil);
sheetset.GetOwner(owner_sheetset);

// шаблон дял создания лстов
dwtLayoutref.InitNew(owner_sheetset);
dwtLayoutref.SetName('ird.dwt');
dwtLayoutref.SetFileName('C:\project\acad\ird.dwt');
dwtLayoutref.SetName('sheet');
sheetset.SetDefDwtLayout(dwtLayoutref.DefaultInterface);
// путь для новых листов
fileRef := TAcSmFileReference.Create(nil);
fileRef.InitNew(owner_sheetset);
fileRef.SetFileName('C:\project\acad\');
sheetset.SetNewSheetLocation(fileRef.DefaultInterface);
fileRef.Free;
// дополнительные свойства подшивки

sheetset.GetCustomPropertyBag(bag);
propval:= TAcSmCustomPropertyValue.Create(nil);
bag.GetOwner(owner_bag);
propval.InitNew(owner_bag);
propval.SetFlags(CUSTOM_SHEETSET_PROP);
// propval.SetValue(sheetset.VCLComObject);
bag.SetProperty('Custom Property 1',propval.DefaultInterface);
// ресурсы вид модели
sheetset.GetResources(resources);
fileRef := TAcSmFileReference.Create(nil);
fileRef.InitNew(dbI);
fileRef.SetFileName('C:\project\acad\');
resources.Add(fileRef.DefaultInterface);
fileRef.Free;
// блок марки для подшивки
labelRef := TAcSmAcDbBlockRecordReference.Create(nil);
labelRef.InitNew(dbI);
labelRef.SetFileName('C:\project\acad\label_block.dwg');
labelRef.SetName('Label');
sheetset.SetDefLabelBlk(labelRef.DefaultInterface);
// блоки идентификаторы
calloutRef :=TAcSmAcDbBlockRecordReference.Create(nil);
sheetset.GetCalloutBlocks(calloutBlocks);
calloutRef.InitNew(dbI);
calloutRef.SetFileName('C:\project\acad\Pointer Blocks.dwg');
calloutRef.SetName('Right');
calloutBlocks.Add(calloutRef.DefaultInterface);
calloutRef.Free;
calloutRef :=TAcSmAcDbBlockRecordReference.Create(nil);
sheetset.GetCalloutBlocks(calloutBlocks);
calloutRef.InitNew(dbI);
calloutRef.SetFileName('C:\project\acad\Pointer Blocks.dwg');
calloutRef.SetName('Left');
calloutBlocks.Add(calloutRef.DefaultInterface);
calloutRef.Free;

newCat :=TAcSmSubset.Create(nil);
sheetset.CreateSubset('Новая группа', 'описание её',newCatI);
newCat.ConnectTo(newCatI);
newSheet :=TAcSmSheet.Create(nil);
layoutRef :=TAcSmAcDbLayoutReference.Create(nil);
layoutRef.InitNew(owner_sheetset);
layoutRef.SetName('name');
layoutRef.SetFileName('C:\project\acad\1 name.dwg');
newSheet.SetName('name');
newSheet.SetTitle('title');
newSheet.SetNumber('1');
newCat.AddNewSheet('name', 'описание её',newSheetI);
// здесь вываливается !!!:cool:
newCat.InsertComponent(newSheet.DefaultInterface,nil);
newCat.ImportSheet(layoutRef.DefaultInterface,newSheetI);
newSheet.ConnectTo(newSheetI);
db.UnlockDb(db,ee);
mm.Free;
end;

end.

Последний раз редактировалось Кулик Алексей aka kpblc, 13.12.2008 в 01:01. Причина: Тэги кто вставлять будет?
Просмотров: 4616
 
Непрочитано 16.12.2008, 17:04
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,169


http://www.caduser.ru/cgi-bin/f1/board.cgi?t=40686sG
Посмотри ссылку из поста 1
kp+ вне форума  
 
Автор темы   Непрочитано 17.12.2008, 11:40
#3
evgeny_


 
Регистрация: 12.12.2008
Сообщений: 6


Похоже в делфях никто подшивками не занимался :-( по этой ссылке и начинал ...
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=40686sG
Жалко просто уперся в проблему ...
Может последовательность создания обьектов есть в подшивке ? а может какой то обьект не создал. Думаю в этом дело ...
evgeny_ вне форума  
 
Непрочитано 17.12.2008, 17:08
#4
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,169


Посмотри внимательно методы объекта AcSmSubset и попробуй вместо InsertComponent метод AddNewSheet
kp+ вне форума  
 
Автор темы   Непрочитано 17.12.2008, 19:07
#5
evgeny_


 
Регистрация: 12.12.2008
Сообщений: 6


В справке по методам сказано "Constructs a new sheet component. The new sheet is not automatically inserted into the collection" ..
тоесть метод AddNewSheet только создает новый лист (обьект листа), а вот InsertComponent - "Inserts a sheet at the position specified." вставляет обьект листа в обьект AcSmSubset - "Adds a new sheet component without adding it to the subset.To add the new sheet component to the subset, use the InsertComponent method. "
Но б. чот пока не получается :-(
evgeny_ вне форума  
 
Автор темы   Непрочитано 18.12.2008, 16:55
#6
evgeny_


 
Регистрация: 12.12.2008
Сообщений: 6


чего добился так это создание файла подшивки ww.dst и добалении груп и погрупп (без проблем).
добавляем новый лист в подшивку когда файл ww.dst уже создан,
вот этот код по идее должен работать но увы :-(

Код:
[Выделить все]
 ee:=true;
 mm:= TAcSmSheetSetMgr.Create(nil);
 mm.OpenDatabase('C:\project\acad\ww.dst',ee,dbI);
 db:=TAcSmdatabase.Create(nil);
 db.ConnectTo(dbI);
 db.GetSheetSet(sheetsetI);
 db.LockDb(db);
sheetset:=TAcSmSheetSet.Create(nil);
sheetset.ConnectTo(sheetsetI);
sheetset.AddNewSheet('name', 'описание её',newSheetI);
newSheet :=TAcSmSheet.Create(nil);
newSheet.ConnectTo(newSheetI);
newSheet.SetTitle('name');
sheetset.InsertComponent(newSheet.DefaultInterface,nil);
db.UnlockDb(db,ee);
evgeny_ вне форума  
 
Непрочитано 18.12.2008, 18:46
#7
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,169


Код:
[Выделить все]
newCat.AddNewSheet(newSheet.DefaultInterface,nil);
newCat.ImportSheet(layoutRef.DefaultInterface,newSheetI);
не поможет? За синтаксис не ручаюсь, дельфей под рукой нет
kp+ вне форума  
 
Автор темы   Непрочитано 19.12.2008, 14:41
#8
evgeny_


 
Регистрация: 12.12.2008
Сообщений: 6


решил все таки :-) добавлением владельца листа ./// как и предпологал "Adds a new sheet component without adding it to the subset.To add the new sheet component to the subset, use the InsertComponent method. "

Код:
[Выделить все]
   newCat.AddNewSheet('','',newSheetI);
   newSheet.InitNew(newCatI_owner);
   newSheet.SetTitle('list');
   newSheet.SetDesc('descnnnnnnnnnnnnnnn');
   newSheet.SetNumber('1');
   newCat.InsertComponent(newSheet.DefaultInterface,nil);
есть еще вопрос как добраться к полям обьекта AcSmSheetSet чтобы заполнить поля ? :
Номер проекта
Имя проекта
Фаза проекта
Этап проекта
evgeny_ вне форума  
 
Непрочитано 19.12.2008, 18:06
#9
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,169


на VBA - так:
Код:
[Выделить все]
Dim proj_num As IAcSmSheetSet2
Set proj_num = oSheetDb.GetSheetSet
proj_num.SetProjectName ("HelloWorld")
oSheetDb из http://www.caduser.ru/cgi-bin/f1/board.cgi?t=40686sG
kp+ вне форума  
 
Автор темы   Непрочитано 24.12.2008, 10:28
#10
evgeny_


 
Регистрация: 12.12.2008
Сообщений: 6


так и есть .
Код:
[Выделить все]
 db.GetSheetSet(sheetsetI);
 sheetset2I :=sheetsetI as IAcSmSheetSet2;
 db.LockDb(db);
 sheetset2I.SetProjectNumber('Номер проекта');
 sheetset2I.SetProjectName('Имя проекта');
 sheetset2I.SetProjectPhase('Фаза проекта');
 sheetset2I.SetProjectMilestone('Этап проекта');
вот только не пойму зачем вводить еще один интерфейс IAcSmSheetSet2 ?
спасибо за участие kp+ !!!
evgeny_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > delphi autocad 2007 подшивки



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCad и Delphi. Добавление точки Зойберг Программирование 15 28.02.2008 23:18
Ошибка печати в AutoCad 2007 solan AutoCAD 5 18.06.2007 18:27
Autocad 2007 в Windows Vista mmax AutoCAD 52 14.04.2007 02:20