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".
Да, длинно и не очень удобно, но накручивать сюда что-то дополнительное как-то не тянет от слова совсем.