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

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

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

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

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

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

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

Программирование для начинающих

Автор HaHa, 21.09.12, 07:49:52

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

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

HaHa

В интернете скачал методичку по программированию в Компас 3D, делаю согласно методички, форма появляется, а при клике на рисовать отрезок ничего не рисует, подскажите, где я не правильно делаю
{$WARN SYMBOL_PLATFORM OFF}
library KompasRTW;

{$E rtw}
{$R *.res}

uses
  SysUtils, Classes, ksTLB,
  UMain   in 'UMain.pas',
  former  in 'former.pas' {MainForm};

{ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ}
exports
  LibraryName   name 'LIBRARYNAME',
  LibraryId     name 'LIBRARYID',
  LibraryEntry  name 'LIBRARYENTRY';
begin

end.
-------------------------------
{$WARN SYMBOL_PLATFORM OFF}
unit UMain;

interface

uses Windows, SysUtils, Forms, LDefin2D, ksConstTLB, ksAuto, ksTLB, former;

{ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ}
procedure LIBRARYENTRY(command: Word);  Pascal;
function LIBRARYNAME: PChar;            Pascal;
function LIBRARYID: Cardinal;           Pascal;
{ИСПОЛЬЗУЕМЫЕ ПРОЦЕДУРЫ}
procedure RunForm;

var
    Kompas: KompasObject;
    iDocument2D: ksDocument2D;

implementation

function LIBRARYNAME: PChar;    Pascal;
begin
  Result:= 'Заготовка для создания библиотеки Компас-3D';
end;

function LIBRARYID: Cardinal; Pascal;
begin
Result:= 100;
end;

procedure LIBRARYENTRY(command: Word); Pascal;
begin
  Kompas:= KompasObject(CreateKompasObject);
  if Kompas <> nil then
  begin
    iDocument2D:= ksDocument2D(Kompas.ActiveDocument2D());
    if iDocument2D = nil then
    Kompas.ksMessage('Текущий документ не является чертежом или фрагментом')
  else
    begin
      //СВОЯ ПРОЦЕДУРА
      RunForm;
      Kompas.ksMessage('Работа библиотеки завершена');
    end;
    //ОСВОБОЖДЕНИЕ ПАМЯТИ
    iDocument2D:= nil;
    end;
    Kompas:= nil;
end;

//ПРОЦЕДУРА ЗАПУСКА ФОРМЫ
procedure RunForm;
var
    former: TMainForm; //ССЫЛКА НА ФОРМУ
begin
  Application.Handle:= Kompas.ksGetHWindow;
//ЗАКРЫВАЕМ ДОСТУП К КОМПАСУ
  Kompas.ksEnableTaskAccess(0);
//СОЗДАЕМ ФОРМУ
  former:= TMainForm.Create(Forms.Application);
//ПОКАЗЫВАЕМ ФОРМУ
  former.ShowModal;
//ОТКРЫВАЕМ ДОСТУП К КОМПАСУ
  Kompas.ksEnableTaskAccess(1);
//ОТКЛЮЧАЕМ ФОРМУ ОТ КОМПАСА
  Application.Handle:= 0;
end;
end.
------------------------------------------------------------------------
{$WARN SYMBOL_PLATFORM OFF}
unit former;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, LDefin2D, ksConstTLB, ksAuto, ksTLB;

type
  TMainForm = class(TForm)
    Edit_x1: TEdit;
    Edit_y1: TEdit;
    Edit_x2: TEdit;
    Edit_y2: TEdit;
    Button_Draw_Line: TButton;
    Button_Ok: TButton;
    GroupBox_Draw_Line: TGroupBox;
    GroupBox1: TGroupBox;
    Button_Draw_Circle: TButton;
    procedure Button_LineDrawClick(Sender: TObject);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

uses UMain;

{$R *.dfm}

procedure TMainForm.Button_LineDrawClick(Sender: TObject);
begin
//РИСУЕМ ОТРЕЗОК
  iDocument2D.ksLineSeg(StrToFloat(Edit_x1.Text), StrToFloat(Edit_y1.Text),
  StrToFloat(Edit_x2.Text), StrToFloat(Edit_y2.Text), 1);
end;
end.

А фрагмент или чертеж открыт, в момент нажатия на кнопку?

HaHa

да открыт, т.е если чертеж или фрагмент появляется форма, иначе выдает что 'Документ не является чертежом или фрагментом', при появлении формы,я ввожу координаты для рисования отрезка,жму рисовать отрезок, ничего не рисуется..

Тогда должен рисовать, можете для проверки здесь
iDocument2D.ksLineSeg(StrToFloat(Edit_x1.Text), StrToFloat(Edit_y1.Text), StrToFloat(Edit_x2.Text), StrToFloatEdit_y2.Text), 1); поставить числовые значения например  iDocument2D.ksLineSeg(0,0,100,100,1);, если нарисует значит проблема в функциях перевода строки в число, если не нарисует значит теряется указатель на документ. Всё это при условии, что обработчик события отрабатывается.

HaHa


HaHa