nanoCAD – получение ключевых слов на нескольких языках

Понадобилось мне тут недавно в ком.строке в nanoCAD вывалить запрос типа "Продолжать [Да/Нет] <Да> ?", да и сделать так, чтоб срабатывал и "Д", и "Y".

На лиспе-то элементарно:

1
2
3
4
(initget "Да Нет Yes No _ Y N Y N")
(cond ((getkword "\\nПродолжать [Да/Нет] <Да>? : "))
      (t "Y")
      )

А на NET - хренушки:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Document doc = Application.DocumentManager.MdiActiveDocument;

PromptKeywordOptions options = new PromptKeywordOptions("\nПродолжать?");
options.Keywords.Add("Да");
options.Keywords.Add("Нет");
options.AllowNone = true;
options.AllowArbitraryInput = false;

PromptResult res = doc.Editor.GetKeywords(options);

if (res.Status == PromptStatus.None)
{
    res.StringResult = "Y";
}

if (res.StringResult.Contains("Д") || res.StringResult.Contains("Y"))
{
    //...
}

Во-первых, в ком.строке выводится сообщение типа

1
Продолжать? или [Да/Нет}:"

Во-вторых, нажатие на Y/N вываливает "Неправильный ввод."

Ковыряния в официальной документации что от nanoSoft, что в ObjectARX SDK, что на adn-cis эффекта не возымели. Может быть, дело в том, что версия 23.1.

Варианты добавления ключевых слов со знаком подчеркивания для обеспечения "интернациональности", как это работает в ACAD, не взлетели. Варианты добавления ключевых слов вторым параметром (как строка, разделенная пробелами) в PromptKeywordOptions не сработали совсем, если убирать options.Keywords.Add (на хрена тогда этот второй параметр, неясно от слова совсем).

Но проблему-то решать надо! Так что шарповый код превратился в нечто типа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Document doc = Application.DocumentManager.MdiActiveDocument;

PromptKeywordOptions options = new PromptKeywordOptions("\nПродолжать [Да/Нет] ? <Да> :");
options.Keywords.Add("Да");
options.Keywords.Add("Yes");
options.Keywords.Add("Нет");
options.Keywords.Add("Yes");
options.AllowNone = true;
options.AllowArbitraryInput = false;

PromptResult res = doc.Editor.GetKeywords(options);

if (res.Status == PromptStatus.None)
{
    res.StringResult = "Y";
}

if (res.StringResult.Contains("Д") || res.StringResult.Contains("Y"))
{
    //...
}

Запуск, проверка - работает. Для "Д" в res.StringResult болтается "Да", для "Y" - "Yes", для пустого ввода - "Y". Для "Н" - "Нет", для "N" - "No".

Да, длинно и не очень удобно, но накручивать сюда что-то дополнительное как-то не тянет от слова совсем.

Размещено в .NET, nanoCAD · Метки: , ,



Поделитесь своим мнением


Я не робот.