Size: a a a

2020 November 21

VA

Viktor Akselrod in Delphi & Lazarus
предлагаю на этом закрыть тему.
ибо ничем хорошим это не закончится.
получено достаточно мнений.
принимать их или нет - решение за автором вопроса.
если кто-то из других участников захочет высказаться - пожалуйста.
источник

N

Nik in Delphi & Lazarus
+
источник

N

Nik in Delphi & Lazarus
Звиняй, Виктор, но я дорасскажу раз человек не видит самостоятельно..
источник

N

Nik in Delphi & Lazarus
zamtmn
существенных нет
открывай код на C#
источник

N

Nik in Delphi & Lazarus
и смотри внимательно что там происходит
источник

N

Nik in Delphi & Lazarus
 PromptPointResult pPtRes;
 PromptPointOptions pPtOpts = new PromptPointOptions("");
 // Prompt for the start point
 pPtOpts.Message = "\nEnter the start point of the line: ";
 pPtRes = acDoc.Editor.GetPoint(pPtOpts);
 Point3d ptStart = pPtRes.Value;
 // Exit if the user presses ESC or cancels the command
 if (pPtRes.Status == PromptStatus.Cancel) return;
источник

z

zamtmn in Delphi & Lazarus
не томи
источник

N

Nik in Delphi & Lazarus
создают объект-точку.. заполняют её свойства.. и отдают этот объект редактору acDoc.Editor
источник

N

Nik in Delphi & Lazarus
обрабатывает ввод точки РЕДАКТОР.. на выходе проверяют какой статус вернулся в свойствах точки
источник

N

Nik in Delphi & Lazarus
// Prompt for the end point
 pPtOpts.Message = "\nEnter the end point of the line: ";
 pPtOpts.UseBasePoint = true;
 pPtOpts.BasePoint = ptStart;
 pPtRes = acDoc.Editor.GetPoint(pPtOpts);
 Point3d ptEnd = pPtRes.Value;
 if (pPtRes.Status == PromptStatus.Cancel) return;
 // Start a transaction
источник

N

Nik in Delphi & Lazarus
после этого задают параметры для запроса второй точки и отдают её редактору
источник

z

zamtmn in Delphi & Lazarus
происходит тут абсолютно тоже, у меня этот редактор называется commandmanager
источник

N

Nik in Delphi & Lazarus
тот самый автомат состояний
источник

N

Nik in Delphi & Lazarus
и обработка событий от пользователя РЕДАКТОРОМ, а не зацикливание внутри функции
источник

N

Nik in Delphi & Lazarus
   if commandmanager.get2dpoint('Specify first point:',p1) then
     if commandmanager.get2dpoint('Specify second point:',p2) then begin
       CreateLine(p1,p2)
       exit(cmd_ok);
     end;
   result:=cmd_cancel;
источник

z

zamtmn in Delphi & Lazarus
тут абсолютно тоже что и у меня, разница в деталях
источник

N

Nik in Delphi & Lazarus
твой код себя ведёт совершенно иначе
источник

VA

Viktor Akselrod in Delphi & Lazarus
zamtmn
происходит тут абсолютно тоже, у меня этот редактор называется commandmanager
там синхронный вывод подряд двух диалогов. по факту аналог InputQuery
от твоего вариант это отличается тем, что у тебя юзер кликает по полю.
клики не работают синхронного. клики работают через очередь сообщений.
это ключевое отличие
источник

N

Nik in Delphi & Lazarus
эта разница как раз в том через какое отверстие удалять гланды
источник

N

Nik in Delphi & Lazarus
Viktor Akselrod
там синхронный вывод подряд двух диалогов. по факту аналог InputQuery
от твоего вариант это отличается тем, что у тебя юзер кликает по полю.
клики не работают синхронного. клики работают через очередь сообщений.
это ключевое отличие
причём в автокаде реализован ввод как при помощи клика на поле чертежа, так и в ручную в командной строке.. поэтому обработка там совершенно нелинейная идёт..
источник