Код для массового перименования позиций

Автор Sprinter500, 22.03.13, 20:25:41

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

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

В Total или из командной строки, когда ставилось Delphi на регистрацию не влияет.
+ Благодарностей: 1

Sprinter500

Спасибо. Попробовал - пишет: "Ошибка регистрации. обратитесь к администратору". Странно ведь у меня учетка - администратор )))))

В общем понял, что надо переустанавливать. И пробовать снова. Как все это проделаю отпишусь, что получилось.

Sprinter500

Еще пара вопросов:
1. После того как Компас переустановлю, надо ли будет регистрировать компоненты, или автоматом все пройдет?
2. Далее просто в Uses прописываю kAPI7 и все?

Надеюсь все получится

Компас их при установке зарегистрирует.
В Uses прописать ksAPI7, но всё зависит от кода.
+ Благодарностей: 1

Sprinter500

Переустановил проблема осталась. Разобрался только с одной - снял запрет с редактирования папки Ascon - наделил правами учетку. Скидываю сам проект. Может в нем ошибка?. Примеры в SDK по API7 не хотят работать, точнее вообще ни один не компилится в RTW.


Sprinter500

А через API5 никак нельзя все это реализовать? Пускай даже код немного сложнее будет.

Вы делаете Exe файл, попробуйте сделать так для получения Api7:
newKompasAPI:=CreateOleObject('Kompas.Application.7') as iApplication;
PS. Лучше всё сделать библиотекой dll или rtw, проще и меньше подводных камей.
+ Благодарностей: 1

Sprinter500

Спасибо большое! Заработало. Осталось только код настроить.
На счет библиотек: у каждого свои вкусы и привычки. Мне в виде приложений exe нравится делать так как:
1. Не надо подключать. Открыл нужное приложение и вперед
2. Вроде бы форма и все элементы в библиотеке задаются кодом, а не конструктором форм как для exe. Хотя может я ошибаюсь.


Sprinter500

Вот код процедуры:

procedure RENM();
var
   newKompasAPI : IApplication;
   disp : IDispatch;
   pDocuments : iDocuments;
   pDocument : IKompasDocument;
   pKompasDocument2D : IKompasDocument2D;
   pViewsAndLayersManager : IViewsAndLayersManager;
   pViews : IViews;
   pView : IView;
   pSymbols2DContainer : ISymbols2DContainer;
   pDrawingContainer : IDrawingContainer;
   pLeaders : ILeaders;
   pBaseLeader : IBaseLeader;
   pLeader : ILeader;
   pDrawingObject : IDrawingObject;

   I:integer;
   oldValue, newValue: string;

begin
     //disp := IDispatch( CreateKompasApplication );
     //newKompasAPI := disp As IApplication;
     newKompasAPI:=CreateOleObject('Kompas.Application.7') as iApplication;
     pDocuments := newKompasAPI.Documents;
     pDocument := pDocuments.Add(1,true);//(doc tupe,visible-regim)
     pKompasDocument2D :=  pDocument as iKompasDocument2D;
     pViewsAndLayersManager := pKompasDocument2D.ViewsAndLayersManager;
     pViews := pViewsAndLayersManager.Views;
     pView := pViews.ViewByNumber[1];
     pView.Current := true;
     pDrawingContainer := pView as iDrawingContainer;
     pSymbols2DContainer := pView as iSymbols2DContainer;
     pLeaders:= pSymbols2DContainer.Leaders;

oldValue:='2';
newValue:='5';

for I:=0 to pLeaders.Count-1 do
   begin
     pDrawingObject:=pLeaders.Item;
     if pDrawingObject<>nil then
        begin
            if pDrawingObject.DrawingObjectType=ksDrLeader then
                begin // Простая линия-выноска
                    pLeader:=pDrawingObject as ILeader;
                    if pLeader<>nil then
                        begin
                            if pLeader.TextOnShelf.Str=oldValue then
                                begin
                                  pLeader.TextOnShelf.Str:=newValue;
                                  pDrawingObject.Update;
                                end;
                            pLeader:=nil;
                        end;
                end;
        end;
   end;
end;

Sprinter500

При нажатии на кнопку, вызывающую эту процедуру - почему то открывает новый документ при уже отрытом, вместо того чтобы поменять и выдает ошибку.

Для этого отладчик существует.
хотя  pDrawingObject:=pLeaders.Item; ???
pDrawingObject:=pLeaders.Item[J];

Sprinter500

А если попытаться нажать кнопку с процедурой снова то новая ошибка:

Вы создаёте документ  pDocument := pDocuments.Add(1,true); откуда там вид с номером 1 pView := pViews.ViewByNumber[1];, Вы хотябы в код немного вникните.

Sprinter500

Почему то вставился старый код. Ты прав там ошибка была - я поменял (то есть добавил индекс итерации):
....
for I:=0 to pLeaders.Count-1 do
   begin
     pDrawingObject:=pLeaders.Item;
....

Ошибка возникала на свежем коде. Прикладываю обновленный проект. См. модуль WKMPS.

Sprinter500

Цитата: Sabahs от 13.04.14, 17:14:37
Вы создаёте документ  pDocument := pDocuments.Add(1,true); откуда там вид с номером 1 pView := pViews.ViewByNumber[1];, Вы хотябы в код немного вникните.

Я не знаю что эта процедура означает. Взял подходящий код из соседней ветки. Очень хочу вникнуть во все тонкости. Можете посоветовать что почитать? Кроме встроенного Хелпа - он настолько краткий, что чайнику такому как я многое не понятно.

Sprinter500

Добавил в чертеж Вид с номером 1. Теперь новый документ не создается, но вылазит ошибка как на 4.PNG.

Что надо сделать с этим кодом чтобы он годился для редактирования открытых документов?:
....
     newKompasAPI:=CreateOleObject('Kompas.Application.7') as iApplication;
     pDocuments := newKompasAPI.Documents;
     pDocument := pDocuments.Add(1,true);//(doc tupe,visible-regim)
     pKompasDocument2D :=  pDocument as iKompasDocument2D;
....

#36
 pDocument := pDocuments.Add(1,true); меняете на pDocument := newKompasAPI.ActiveDocument
pKompasDocument2D :=  pDocument as iKompasDocument2D; - здесь не вылетит, если активный документ 2D.
В V15 справка по Api полное говно, можно пользоваться старой.

+ Благодарностей: 1

Sprinter500

Цитата: Sprinter500 от 13.04.14, 17:17:21
Почему то вставился старый код. Ты прав там ошибка была - я поменял (то есть добавил индекс итерации):
....
for I:=0 to pLeaders.Count-1 do
   begin
     pDrawingObject:=pLeaders.Item;
....

Ошибка возникала на свежем коде. Прикладываю обновленный проект. См. модуль WKMPS.


Чудеса "I" в квадратных скобках исчезает через некоторое время, причем ее снова видно в цитате пока я писал этот текст.


Sprinter500

У тебя меняется pDocument на pDocuments. Не понятно. Сделал так:
    //disp := IDispatch( CreateKompasApplication );
     //newKompasAPI := disp As IApplication;
     newKompasAPI:=CreateOleObject('Kompas.Application.7') as iApplication;
     pDocuments := newKompasAPI.Documents;
     //pDocument := pDocuments.Add(1,true);//(doc tupe,visible-regim)
     pDocument := newKompasAPI.ActiveDocument;
     //pKompasDocument2D :=  pDocument as iKompasDocument2D;
     pKompasDocument2D :=  pDocument as iKompasDocument2D;

Вылазит та же ошибка. Может pDocuments := newKompasAPI.Documents; то же поменять надо? Я наверно задолбал уже "чайникизмом". Восхищаюсь твоим терпением :)