Тема: Как отследить окончание работы команды "pan"?

есть форма
на ней батон
нажимаем на батон - прячем форму, запускаем команду pan
ThisDrawing.SendCommand "_pan" & vbCrLf
спрашивается как отследить конец панировки, чтобы снова показать форму?

Re: Как отследить окончание работы команды "pan"?

Не ответ на вопрос, но предложение, а может сделать форму не модальной?

Re: Как отследить окончание работы команды "pan"?

Ести принципиально, чтоб форма была модальной, то можно по таймеру опрашивать нажата ли кнопка ескапе, через API.
GetAsyncKeyState
GetKeyState

Re: Как отследить окончание работы команды "pan"?

да,  этот вариант (опрос клавы) давно напршивается, но хотел найти чего попроще, тем более выход из панировки предусматривается не только нажатием esc

Re: Как отследить окончание работы команды "pan"?

нижеприведенный код получает координаты точки, указанной юзером, при этом форма скрывается и до того, как нажата лкм есть возможность выйти в режим pan по правой кнопке, потом два ескапа и снова форма. Никак не могу выйти в пан напрямую, минуя сложые телодвижения нажатия пкм, выбор пан, лкм...
Dim pnt As Variant
zFrm.hide
On Error Resume Next
Err.Clear
pnt = ThisDrawing.Utility.GetPoint(, "Укажите центр")
tbxCx.Text = Round(pnt(0), 5)
tbxCy.Text = Round(pnt(1), 5)
tbxCz.Text = Round(pnt(2), 5)
drawThePoint (pnt)
ThisDrawing.Application.Update
zFrm.Show

Re: Как отследить окончание работы команды "pan"?

> Виктор
Можно привязать хот кей. Как на форму, но видимо они будут работать, когда форма активна (что не есть хорошо), либо на сделать хоткей на уровне системы тогда будут работать всегда и везде :) (что тоже не приятно). Может можно привязать хоткеи к Автокаду :) Можно это сделать это программным путем, а можно и в acad.mns . Поглядите как там объявляются ***ACCELERATORS.

Re: Как отследить окончание работы команды "pan"?

по-видимому остановлюсь на немодальной форме - наименьшие потери сил и времени

Re: Как отследить окончание работы команды "pan"?

> Виктор
А если до и после команды _PAN проверять значение переменной VIEWCTR? И если изменилась, то показывать форму.

Re: Как отследить окончание работы команды "pan"?

А вот так будет наверно красивее, ну все зависит от вашей специфики и размеру формы. Если формочка занимает пару % от экрана, то можно сделать ее onTop и прозрачной, тогда бутоны навиду с функциональной формой, и для пана сразу видно есть ли, что то важное под формой и стоит ли тянуть.
Про VIEWCTR не может быть и речи, к примеру вам необходимо воспользоваться паном несколько раз, ну находится интересуемый Вас объект через несколько экранов, так что лицезреть на форму и нажимать на бутон несколько раз?

Re: Как отследить окончание работы команды "pan"?

А может еще проще взглянуть. На фоме есть кнопка, которая прячет форму и запускает пан. На мой взгляд можно пан не запускать. Он и так привязан к mouse3, и в тулах и в попапе прописать вызов процедурки, которая развернет форму. Что это нам дает мы не ограниченны в действиях, т.е. свернули форму делаем все, что необходимо, а не только паним. Да и сделать комманду SF (Show Form) для command line тоже пригодилось бы

Re: Как отследить окончание работы команды "pan"?

> SmeL
Ладно (хотя в начальной постановке задачи стоял вопрос об однократном запуске PAN)
А если анализировать cmdactive и cmdnames ?

Re: Как отследить окончание работы команды "pan"?

Про cmdnames, это мы должны вызвать команду отличную от пам, чтоб доказать, что мы с памом закончили? или сброс действия (в нашем случае пам) ACAD воспринимает тоже как команда?

Re: Как отследить окончание работы команды "pan"?

> SmeL
Если команда PAN закончила свою работу, то переменная cmdnames не будет ее содержать (не важно началась ли другая команда или не началась). Кроме того можно воспользоваться командным реактором для получения информации о том, что PAN завершила свою работу.

Re: Как отследить окончание работы команды "pan"?

Тогда как лучше во Вашему Александр Ривилис? таймер с cmdnames или работать с командным редактором?

Re: Как отследить окончание работы команды "pan"?

> SmeL
Я не работаю с VBA и поэтому не в курсе насколько хорошо и удобно в нем реализованы командные реакторы. Если хорошо - то лучше через реактор (меньше должно тормозить).

Re: Как отследить окончание работы команды "pan"?

Я даже и не подзреваю, как с ним работать в VBA, если у редактора есть Event -ы, то лучше через редактор. Надеюсь мы вывели удовлетворяющий ответ для Виктора.

Re: Как отследить окончание работы команды "pan"?

> SmeL
AcadApplication.EndCommand(command_name)

Re: Как отследить окончание работы команды "pan"?

Спасибо за посильную помощь в разрешении проблемы Smel`у и Александру Ривилису.
Для интересующихся лиц - код:
в модуле формы:
Private Sub cbxPan_Click()
zFrm.Hide
ThisDrawing.SendCommand "_pan" & vbCrLf
End Sub
в модуле ThisDrawing:
Private Sub AcadDocument_EndCommand(ByVal cmdName As String)
If cmdName = "PAN" Then zFrm.Show
End Sub
евент EndCommand может оказаться полезен для отслеживания завершения других команд

Re: Как отследить окончание работы команды "pan"?

так честнее:
Private Sub cbxPan_Click()
Dim PauseTime, Start
zFrm.Hide
Paning = True
ThisDrawing.SendCommand "pan" & vbCrLf
PauseTime = 0.1
Do
Start = Timer
  Do While Timer < Start + PauseTime
   DoEvents
   If Not Paning Then zFrm.Show:  Exit Sub
  Loop
Loop Until False
End Sub
Private Sub AcadDocument_EndCommand(ByVal CmdName As String)
If CmdName = "PAN" And Paning Then Paning = False
End Sub