Программное добавление контекстной справки в ленту (ribbon)

Автор Тема: Программное добавление контекстной справки в ленту (ribbon)  (Прочитано 3881 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Glam TrollАвтор темы

  • ADN Club
  • Сообщений: 17
  • Карма: 0
Можно ли программно добавить контекстную справку (Вызывается по F1 при наведении на кнопку в ленте) для команд в ленте?
Для пакетов, устанавливаемых в ApplicationPlugins\*.bundle это делается через PackageContents.xml, описывающий пакет. Можно ли сделать это программно из arx?

оффтоп
Зачем такая сложная капча для авторизованных пользователей? Четыре поля? Издеваетесь?
"фaкtориaл числа двeнaдцatь" - прикалываетесь?
Ладно при регистрации, чтобы ботов отсеять, но при создании темы... это уже издевательство над пользователями.(

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13064
  • Карма: 1684
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно ли программно добавить контекстную справку (Вызывается по F1 при наведении на кнопку в ленте) для команд в ленте?
Да. Связывание клавиши помощи F1 с кнопкой на Ленте
Можно ли сделать это программно из arx?
В "чистом" (pure) ObjectARX нет API для работы с Лентой. Поэтому придется или делать "смешанный" (mixed) C++ код (пример здесь: http://adn-cis.org/autocad-api-dlya-lentyi-s-ispolzovaniem-c/cli.html), или сделать сборку на одном из .NET языков, которую грузить из "чистого" arx-файла, а уже в этой сборке выполнять назначение контекстной справки.

Зачем такая сложная капча для авторизованных пользователей? Четыре поля? Издеваетесь?
Нет. Облегчаем себе работу. Уже были атаки ботов, которые пробивали первую линию защиты. Для авторизованных пользователей капча спрашивается один раз при создании первого сообщения.
« Последнее редактирование: 23-11-2014, 14:10:37 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Glam Troll 24-11-2014, 13:44:12

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 33
ну, поделюсь, как это сделано у нас.
1. есть файлик, обычный текстовый. допустим, назовем его "asdf.commands", лежащий рядом с ARX файлами, в котором идет запись такого рода:
"имя_команды   имя_chm_файла имя_html_файла_справки_данной_команды_без_точка_htm"

в оригинале это выглядит так (называем страничку, описывающую команду по имени команды):
mycommand1 helpfile.chm mycommand1
mycommand2 helpfile.chm mycommand2
mycommand3 helpfile.chm mycommand3
mycommand4 helpfile.chm mycommand4


2. дальше, есть такая функция, которая разбирает этот файл на составляющие и помогает акаду приспособиться к тому, что мы будем жмакать F1
Код - C++ [Выбрать]
  1. void activateHelpConnector()
  2. {
  3.         CString curPath = getCurARXPath(); // это путь к папке, где установлена текущая ARX
  4.         CString hlpConnectorFile = curPath + _T("\\asdf.commands");// этот файл также лежит в корне папки проги
  5.         curPath.AppendChar(_T('\\'));
  6.  
  7.         if ( TRUE == ::PathFileExists(hlpConnectorFile.GetString()) )
  8.         {
  9.                 FILE* fin = _tfopen(hlpConnectorFile.GetString(),_T("r"));
  10.                 if(!fin) return;
  11.  
  12.                 ACHAR strCommand[_MAX_PATH];
  13.                 ACHAR strFile[_MAX_PATH];
  14.                 ACHAR strAlias[_MAX_PATH];
  15.                 CString localHelpFile;
  16.                 while(!feof(fin))
  17.                 {
  18.                         _tcsncpy(strCommand,_T("\0"),_MAX_PATH);
  19.                         _tcsncpy(strFile,_T("\0"),_MAX_PATH);
  20.                         _tcsncpy(strAlias,_T("\0"),_MAX_PATH);
  21.                         localHelpFile.Empty();
  22.  
  23.                         localHelpFile.Append(curPath.GetString());
  24.                         _ftscanf(fin,_T("%s%s%s"),strCommand,strFile,strAlias);                
  25.                         localHelpFile.Append(strFile);
  26.                         acedSetFunHelp(strCommand,localHelpFile.GetString(),strAlias,0);
  27.                 }
  28.                 fclose(fin);
  29.         }
  30. }
  31.  

3. вызов функции. в любую ARX в функцию On_kInitAppMsg всовываем activateHelpConnector();

4. ну и собственно есть CUIX файл, в котором прописаны все команды, панельки, рибоны, меню и т.д.

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

Вроде всё. вот так работает у нас справка по F1, без малейшего использования .NET или чего-то еще экзотического.

Оффлайн Glam TrollАвтор темы

  • ADN Club
  • Сообщений: 17
  • Карма: 0
Николай Горлов, Троектратное спасибо!

А chm справка открывается в стандартном окне или кадовском браузере? У нас тоже справка в chm.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 33
в стандартном. кажись у акада своё собственное "стандартное" окно. только и всего. если сильно хочется, то можно сделать своё точно такое (банальный exe-шник), вот только смысла в этом нет, т.к. от версии к версии оно у них меняется :)
короче говоря мы стараемся не изобретать велосипед там, где без этого можно обойтись.

Оффлайн Glam TrollАвтор темы

  • ADN Club
  • Сообщений: 17
  • Карма: 0
мы стараемся не изобретать велосипед
Спасибо, мне в стандартном и надо. А то там ещё связка скриптов и ActiveX