Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 12.05.2015
Сообщений: 7
1

Библиотека для КОМПАС-2D на делфи. Как выводить элементы от места клика мыши, а не по статическим координатам?

01.10.2015, 20:14. Просмотров 1155. Ответов 1
Метки нет (Все метки)

Есть простенькая библиотека на делфи для компаса. Ее задача - выводить изображения резисторов, конденсаторов и проч. на чертеж или эскиз в компасе. Пока библиотека выводит элемент, например, резистор, статически, начиная от координат (0,0). Как реализовать функцию, чтобы элемент выводился начиная с того места, где будет сделан клик мыши. Как перейти из окна библиотеки на рабочее поле, взять по клику мыши координаты и построить по ним элемент и вернуться обратно?
Подскажите пожалуйста как это реализовать или хотя бы где искать и в какую сторону двигаться?
Вот собственно код проекта:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
unit main;
 
interface
 
uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, LDefin2D, ksConstTLB, ksAuto, ksTLB, StdCtrls, jpeg, ExtCtrls;
 
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
 // заголовки 
 procedure  LIBRARYENTRY(command: WORD); Pascal;
 procedure Run;
 procedure Rezistor;
 procedure Condensator;
 procedure Diod;
 function   LIBRARYNAME : PChar;         Pascal;
 function   LIBRARYID   : Cardinal;      Pascal;
// ссылки на КОМПАС и 2D документ
var
 Form1: TForm1;
 Kompas: KompasObject;
 iDocument2D: ksDocument2D;
 
implementation
 
{$R *.dfm}
 
var x: real;
param   : ksLDimParam;
  dPar    : ksDimDrawingParam;
  sPar    : ksLDimSourceParam;
  tPar    : ksDimTextParam;
 
 
function LIBRARYNAME: PChar; pascal;
begin
  // произвольное название библиотеки
  Result := 'RadioLib'
end;
 
function LIBRARYID: UINT; pascal;
begin
  // произвольный идентификатор то 100 и выше
  Result := 100;
end;
 
procedure LIBRARYENTRY (command:WORD); pascal;
begin
  // связываем переменную Kompas с API КОМПАСа
  Kompas := KompasObject(CreateKompasObject);
  // если все в порядке…
  if Kompas <> nil then
   begin
    // связываем переменную iDocument2D
    // с текущим 2D документом
    iDocument2D := ksDocument2D(Kompas.ActiveDocument2D());
    if iDocument2D=nil then
     // сообщение об ошибке
     Kompas.ksMessage('Текущий документ не является чертежом или фрагментом')
    else
     begin
      // своя процедура запуска библиотеки - см. ниже
      Run;
      Kompas.ksMessage('Работа библиотеки завершена');
     end;
    // освобождение памяти
    iDocument2D := nil;
    end;
    Kompas := nil
end;
 
procedure Run;
begin
  // делаем нашу форму формой КОМПАСа
Application.Handle:=kompas.ksGetHWindow;
  // закрыть доступ к компасу
  kompas.ksEnableTaskAccess(0);
  // создаем форму
form1:=TForm1.Create(Application);
  // вывод формы
  form1.ShowModal;
 // открыть доступ к компасу
 kompas.ksEnableTaskAccess(1);
 // отключаем нашу форму от КОМПАСа
Application.Handle := 0
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
case ComboBox1.ItemIndex of
  0: Rezistor;
  1: Condensator;
  2: Diod;
  else  Kompas.ksMessage('Выберите элемент!');//Edit1.Text:='Dfhbfyn yt ds,hfy';
  end;
end;
 
 
procedure Rezistor;
begin
//Image1.Picture.LoadFromFile('rezistor.jpg');
iDocument2D.ksLineSeg(0,0,0,5,1) ;
iDocument2D.ksLineSeg(-2,5,2,5,1) ;
iDocument2D.ksLineSeg(-2,5,-2,15,1) ;
iDocument2D.ksLineSeg(2,5,2,15,1) ;
iDocument2D.ksLineSeg(-2,15,2,15,1) ;
iDocument2D.ksLineSeg(0,15,0,20,1) ;
end;
 
procedure Condensator;
begin
iDocument2D.ksLineSeg(0,0,0,5,1) ;
iDocument2D.ksLineSeg(-4,5,4,5,1) ;
iDocument2D.ksLineSeg(-4,6.5,4,6.5,1) ;
iDocument2D.ksLineSeg(0,6.5,0,11.5,1) ;
end;
 
procedure Diod;
begin
iDocument2D.ksLineSeg(0,0,0,14,1) ;
iDocument2D.ksLineSeg(-2.5,9,2.5,9,1) ;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2015, 20:14
Ответы с готовыми решениями:

Рисование фигуры по координатам клика мыши
Здравствуйте! Нужно написать сайт, в котором по клику мыши рисовались фигуры по координатам...

Библиотека для пересохранение файлов Компас-3D
Файлы созданные в новых версиях Компаса, нельзя открыть в старых. Чтобы открыть чертеж созданный в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
393 / 334 / 119
Регистрация: 09.09.2011
Сообщений: 1,200
01.10.2015, 23:36 2
Посоветовал бы пойти на форум компании АСКОН - там есть ветка, где обсуждается программирование для компаса, в том числе и на делфи. Там гораздо быстрее получите ответ.
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.