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

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

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

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

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

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

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

Создание библиотеки переводников.

Автор niktoto, 17.10.13, 14:25:59

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

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

Эту строку пока уберите.
pRemoteElement.AutoSorted:=False;
PS. Отладчик отличная вещь, интерфейс который равен nil сразу покажет.

niktoto


Тогда, пока курите бамбук, я пришёл с работы и у меня ребёнок голодный, разберусь с домашними проблемами, тогда дойдёт очередь до Ваших.
PS. Я не видел, как Вы получили newKompasAPI, а в функции GetCurrentDocument ошибка, возможно разработчики SDK хотели заставить думать, т.к. она ...

niktoto

опачки, ну вот что получилось

function GetCurrentDocument : IKompasDocument2D;
var
  kDoc : IKompasDocument;
  begin

  if ( newKompasAPI <> nil ) then
     // Получить активный документ
     kDoc := newKompasAPI.ActiveDocument;
  Result := kDoc As IKompasDocument2D;

end;

function GetSymbols2DContainer : ISymbols2DContainer;

var
  viewsMng  : IViewsAndLayersManager;
  views     : IViews;
  view      : IView;
begin
  Result := nil;

  if ( newdoc <> nil ) then
  begin
    // Получить менеджер для работы с видами и слоями
    viewsMng := newdoc.ViewsAndLayersManager;

    if ( viewsMng <> nil ) then
    begin
      // Получить коллекцию видов
      views := viewsMng.Views;

      if ( views <> nil ) then
      begin
        // Получить активный вид
        view := views.ActiveView;
        // Получить контейнер
        Result := view As ISymbols2DContainer;
      end;
    end
  end
end;

procedure GetNewKompasAPI;
var
  disp : IDispatch;
begin
if newKompasAPI = nil then
  begin
    disp := IDispatch(CreateKompasApplication);
    newKompasAPI := disp As IApplication;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
symbCont      : ISymbols2DContainer;
pRemoteElements:IRemoteElements;
pRemoteElement:IRemoteElement;
txt : IText;

begin
    GetNewKompasAPI;
    newdoc := GetCurrentDocument;

    symbCont := GetSymbols2DContainer;
    pRemoteElements:=symbCont.RemoteElements;
    pRemoteElement:=pRemoteElements.Add;
    pRemoteElement.AutoSorted:=False;
    pRemoteElement.Radius:=10;
    pRemoteElement.Xc:=0;
    pRemoteElement.Yc:=0;
    pRemoteElement.Height:=10;
    pRemoteElement.Width :=10;
    txt:=pRemoteElement.AdditionalText;
    txt.Str:='Ж';
    pRemoteElement.Update ;


end;

end.


niktoto

все супер, все получилось :) осталось только со свойствами разобраться

niktoto


function GetCurrentDocument : IKompasDocument2D;
var
  kDoc : IKompasDocument;
  begin

  if ( newKompasAPI <> nil ) then
     // Получить активный документ
     kDoc := newKompasAPI.ActiveDocument;
  Result := kDoc As IKompasDocument2D;

end;

function GetSymbols2DContainer : ISymbols2DContainer;

var
  viewsMng  : IViewsAndLayersManager;
  views     : IViews;
  view      : IView;
begin
  Result := nil;

  if ( newdoc <> nil ) then
  begin
    // Получить менеджер для работы с видами и слоями
    viewsMng := newdoc.ViewsAndLayersManager;

    if ( viewsMng <> nil ) then
    begin
      // Получить коллекцию видов
      views := viewsMng.Views;

      if ( views <> nil ) then
      begin
        // Получить активный вид
        view := views.ActiveView;
        // Получить контейнер
        Result := view As ISymbols2DContainer;
      end;
    end
  end
end;

procedure GetNewKompasAPI;
var
  disp : IDispatch;
begin
if newKompasAPI = nil then
  begin
    disp := IDispatch(CreateKompasApplication);
    newKompasAPI := disp As IApplication;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
symbCont      : ISymbols2DContainer;
pRemoteElements:IRemoteElements;
pRemoteElement:IRemoteElement;


RemoteElementParam: ksRemoteElementParam;
DynamicArray: ksDynamicArray;
Char255: ksChar255;

txt:IText;
line  : ITextLine;
item  : ITextItem;
font  : ITextFont;


begin
    GetNewKompasAPI;
    newdoc := GetCurrentDocument;
    symbCont := GetSymbols2DContainer;
    pRemoteElements:=symbCont.RemoteElements;
    pRemoteElement:=pRemoteElements.Add;
    pRemoteElement.AutoSorted:=False;
    pRemoteElement.Xc:=10;
    pRemoteElement.Yc :=5;
    pRemoteElement.Radius :=5;
    pRemoteElement.ShelfX :=20;
    pRemoteElement.ShelfY :=30;
    txt:=pRemoteElement.TextUp;
    line:=txt.Add;
    item:=line.Add;
    font := item As ITextFont;
    font.Height := 10;
    txt.Str := 'Ж';
    item.Update;
    pRemoteElement.Update ;
end;

end.

и столько проблем из за одной галочки!

13.02.14, 21:54:52 #86 Последнее редактирование: 13.02.14, 22:08:56 от Sabahs
Если делать всё правильно, то проблем минимум.
У Вас проблема, Вы ленитесь лишний раз делать проверки, если бы Вы проверяли, то по крайней мере не было бы вылетов, но для того, чтобы понять, почему, не что не получается, нужно использовать отладчик, либо дополнительный код, который подтверждает прохождение операции.
Для примера - if symbCont<>nil then pRemoteElements:=symbCont.RemoteElements else kompas.ksMessage('pRemoteElements=nil'); и т.д.

niktoto

у выносного элемента есть свойство pRemoteElement.ShelfDirection, я так понял это задать числами направление: 1 вправо, 2 вверх, 3 вниз, а вот влево никак не получается направить.

15.02.14, 14:17:55 #88 Последнее редактирование: 15.02.14, 14:46:51 от Sabahs
Вы, извините, но у Вас очень интересная специальность и Вас, не научили правильно поставить задачу, при минимуме телодвижений.
Как, я  могу ответить?
PS. Я уверен, что у Вас не тот тип переменной, а некоторые переменные, не могут иметь отрицательные значения.
http://forum.ascon.ru/index.php/topic,24298.msg174086.html#msg174086

niktoto

Я уже боюсь что либо спрашивать. Но все же рискну. Вот например я строю просто две линии через ksLineSeg. Возможно ли как нибудь задать условие, если они пересекаются то ... ?


niktoto

08.03.14, 13:43:39 #91 Последнее редактирование: 08.03.14, 16:01:35 от niktoto
вот и заканчиваю библиотеку, остались мелкие доработки, а именно:
1) я вызываю форму вот таким кодом
if (command=1) then
begin
// получаем дескриптор главного окна КОМПАС
Application.Handle := kompas.ksGetHWindow;
// создаем объект диалогового окна
Form1 := TForm1.Create(Application);
// выводим диалог на экран
Form1.Show;
Application.Handle := 0;
doc:=nil;
end;

взял из примера, где форма в модальном режиме. Отсюда вопрос, корректно ли я переделал ее под свой проект?

2) Решил добавить маленькую фишку, чтобы после того как нажималась кнопка и появлялся фантом ,форма сворачивалась. А вот как реализовать это ? Просто через form3.windowstate:=wsMinimized; не получается. Наверняка это как то связано с тем, как вызывается сама форма...

niktoto


niktoto

11.03.14, 12:02:12 #93 Последнее редактирование: 11.03.14, 12:41:35 от niktoto
для этого вопроса лучше создадим отдельную тему