Тема: Как в команде вызвать ключевое слово?

Вопрос? Как в команде вызвать ключевой слово. На пример команда circle[3P/2P/Ttr]

procedure TForm1.Button1click(sender:tObject);
var
acad:olevariant;
begin
acad:=getactiveoleobject('Autocad.application');
acad.activedocument.sendcommand('circle ');
end;
procedure TForm1.Button2click(sender:tObject);
var
acad:olevariant;
begin
acad:=getactiveoleobject('Autocad.application');
acad.activedocument.sendcommand('3P '); //естественно ошибка!
end;

Re: Как в команде вызвать ключевое слово?

Наверное лучше так, если это не противоречит задумке.

Acad.ActiveDocument.SendCommand('circle 3p ');

Re: Как в команде вызвать ключевое слово?

Нет так не подходит. Увы. Нужно выбором.

Re: Как в команде вызвать ключевое слово?

Не понял, что надо делать выбором?
Может быть так:
Задай вопрос о ключевых ссловах:
// Prompt & Input cannot contain blanks
returnString = Acad.ActiveDocument.Utility.GetString(False, 'Enter text (a space or <enter> terminates input): ');
или GetKeyword([Prompt])
см.Help.
Проверь что ответили, затем вводи точки
Напр.:
pt   := Acad.ActiveDocument.Utility.GetPoint(,'Укажи центр окружности:');
или
др. необходимые размеры. (математ. - пересчитай, где центр и какой радиус)
А потом черти.
Acad.ActiveDocument.SendCommand('_CIRCLE'+#13+pt+#13+radius+#13);
или формируй строку:
if s='2P' then
  Acad.ActiveDocument.SendCommand('_CIRCLE'+#13+'2P'+#13+pt1+#13+pt2+#13);
и т.д.
Не очень красиво, но это в голову сразу пришло.

Re: Как в команде вызвать ключевое слово?

... или как вариант, попробуй послать акаду wm_keydown или wm_char. Ищи в сети, где то были рабочие примеры.

Re: Как в команде вызвать ключевое слово?

Возможно с командой "cirle" я превел не совсем корректный пример. Более точно отразит задачу команда "pline".т.е пользователь нажимает кнопку с командой "pline" чертит... затем нажимая кнопку button2, начинает рисовать например "дугу". Вопрос как все таки "добавить" в ком. строку ARC без прикрощения рисования.

Re: Как в команде вызвать ключевое слово?

Не без добрых людей наваял пример.
Только вот как то извратно выходит.
Вообще, надо ли это?

procedure SendKeys(KeyChars: string; extra: Longword);
var i:integer;
begin
  if KeyChars<>'' then
    for i:=1 to Length(KeyChars) do
      begin
        keybd_event(VkKeyScan(KeyChars[i]), extra, 0, 0);
        keybd_event(VkKeyScan(KeyChars[i]), extra, KEYEVENTF_KEYUP, 0);
      end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Acad:IAcadApplication;
    hAcad:HWND;
begin
  try
    Acad:=GetActiveOleObject('AutoCAD.Application') as IAcadApplication;
    hAcad:=GetParent(Acad.ActiveDocument.HWND);
    if hAcad=0 then Abort;
    SetForegroundWindow(hAcad);
    SendKeys('circle ', 0);
    SendKeys('3P ', 0);
  finally
    Acad:=nil;
  end;
end;

Re: Как в команде вызвать ключевое слово?

Спасибо!