Тема: Про ввод информации пользователем подскажите

Здравствуйте!
Хелп читал, но не осилил. Не расскажете ли как исполнить следующее:
От пользователя необходимо получить одно из трех, на выбор:
- либо он выберет на экране примитив (GetEntity)
- либо он введет в командной строке некоторое значение (и нажмет Enter)
- либо он сразу нажмет Enter и тогда будет принято значение, предлагаемое по умолчанию

Заранее спасибо.

Re: Про ввод информации пользователем подскажите

С "некоторым значением" не так просто - только ключевые слова. Для их задания можно использовать Utility.InitializeUserInput

Re: Про ввод информации пользователем подскажите

На лиспе делаю так

;; initget with bit 128 has no effect with entsel but here is a trick:
(initget 128 "10 20 30 40 50")
;; click right mouse button to make your choice or do another things you need:
(setq e (entsel "\nSelect object or choice value [10/20/30/40/50] <50>: "))
;; to retrieve the default value if OP have pressed Enter:
(if (not e)(setq e "50"))

То же самое просто на VBA, только вместо initget используй InitializeUserInput

~'J'~

Re: Про ввод информации пользователем подскажите

Возможен еще такой трюк:
1) Вместо Utility.GetEntity использовать Utility.GetPoint с Utility.InitializeUserInput 128
2) Если введена точка, то получить примитив при помощи SelectAtPoint
3) Если введена строка, то получить при помощи Utility.GetInput
Теоретически все это должно работать также, как это работает в VLisp/ARX

Re: Про ввод информации пользователем подскажите

Я чуть не опоздал...
Естественно что у тебя выставлено
"Break on Unhandled Errors" в секции
Tools->Options->Error Trapping

Option Explicit

Sub UserInputTest()
Dim pickVar As Variant
Dim retString As String
Dim kWord As String
kWord = "10 20 30 40 50"

With ThisDrawing
.SetVariable "OSMODE", 512

On Error Resume Next

With .Utility
'//
.InitializeUserInput 128, kWord
'//     - pick point, user input or press Enter:
pickVar = ThisDrawing.Utility.GetPoint(, "Select point on object or choose a value from list(10,20,30,40,50) <50>: ")
'//     - pick point, click on right mouse button, then press Enter:
'pickVar = ThisDrawing.Utility.GetPoint(, "Select point on object or choose a values with right click[10/20/30/40/50] <50>: ")

If Err Then
Err.Clear
End If

If VarType(pickVar) = vbEmpty Then
retString = .GetInput

If retString = "" Then
retString = "50"
MsgBox "You choose the default value: " & retString
Else
MsgBox retString
End If

Else
     Dim oSset As AcadSelectionSet
     
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set oSset = .Add("$AtPoint$")
          End With

oSset.SelectAtPoint pickVar
If oSset.Count <> 0 Then
Dim oEnt As AcadEntity
Set oEnt = oSset.Item(0)
MsgBox "You selected: " & oEnt.ObjectName
Set oSset = Nothing
Else
MsgBox "You missed, try again"
End If
End If

End With
End With
End Sub

~'J'~

Re: Про ввод информации пользователем подскажите

Спасибо. Код работает.
Вот только я не понял - почему нельзя использовать GetEntity?

Re: Про ввод информации пользователем подскажите

wl2000 пишет:

Вот только я не понял - почему нельзя использовать GetEntity?

Потому-что этот метод не позволяет вводить произвольную строку (флаг 128 Utility.InitializeUserInput на нее не действует - читай документацию).

Re: Про ввод информации пользователем подскажите

спасибо