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

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

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

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

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

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

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

Delphi.Как выводить элементы от места клика мыши,а не по статическим координатам

Автор hmelevskih93, 04.10.15, 19:42:17

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

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

hmelevskih93

Есть простенькая библиотека на делфи для компаса. Ее задача - выводить изображения резисторов, конденсаторов и проч. на чертеж или эскиз в компасе. Пока библиотека выводит элемент, например, резистор, статически, начиная от координат (0,0). Как реализовать функцию, чтобы элемент выводился начиная с того места, где будет сделан клик мыши. Как перейти из окна библиотеки на рабочее поле, взять по клику мыши координаты и построить по ним элемент и вернуться обратно?
Подскажите пожалуйста как это реализовать или хотя бы где искать и в какую сторону двигаться?
Вот собственно код проекта:

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.