Подсветка кнопок на компактной панели по нажатию

Автор TheHZ, 09.02.16, 09:48:19

« назад - далее »

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

TheHZ

Добрый день! По примеру step2, можно выводить кнопки в компактную панель. Как сделать чтобы было видно какая кнопка нажата? (Подсвечивалась или ещё что, например как на панели с точками привязки) Если есть примеры желательно, на чем-нибудь близкому к c#. Все sdk перерыл, ничего похожего не нашёл (

Использовать функцию LibCommandState - которая позволяет получить и установить состояние команды библиотеки.

TheHZ

Сколько не бился не работает у меня эта функция. Вот единственный пример который нашел в SDK на С++:

int WINAPI LibCommandState( unsigned int comm, int * enable, int * checked )
{
   if ( enable )
   {
      int type = ksGetDocumentType( 0 );
      *enable = type == lt_DocSheetStandart || type == lt_DocFragment || type == lt_DocSheetUser;
   }
   return 0;
}


Пытался переделать его в C#, но функция не работает... Вот что я пытался сделать:
public int LibCommandState(short command, ref bool enable, ref int сhecked)
        {
            if (enable)
            {
                int docType = kompas.ksGetDocumentType(0);
                enable =
                (docType == (int)DocType.lt_DocPart3D ||
                docType == (int)DocType.lt_DocAssemble3D ||
                docType == (int)DocType.lt_DocSheetStandart ||
                docType == (int)DocType.lt_DocSheetUser ||
                docType == (int)DocType.lt_DocFragment);
            }
            return 0;
        }

Вроде все верно сделал, но кнопка не остается нажатой после нажатия. Если можете укажите пожалуйста ошибку...

Что, тут непонятного:
Command - номер команды - входное значение;
Enable - кнопка активна или нет - устанавливаемое в зависимости от настроения программиста;
Checked - нажата или нет - устанавливаемое в зависимости от настроения программиста.
//==============================================================================
function LibCommandState(Command:Integer; var Enable:Integer; var Checked:Integer):Integer; stdcall;
begin
  Result:=0;
  case Command of
    1:begin // Подключить панель
        Enable:=1;
        Checked:=0;
      end;
    2:begin // Отключить панель
        Enable:=1;
        Checked:=1;
      end;
  end;
end;
//==============================================================================

Slaviation

Не забыли добавить LibCommandState в объявление "exports" проекта Delphi или def-файл проекта MVS или в соответствующее место (не знаю, правда, какое) проекта C# ?


Это, то причём?
Цитата: Slaviation от 29.03.16, 07:09:04
Не забыли добавить LibCommandState в объявление "exports" проекта Delphi или def-файл проекта MVS или в соответствующее место (не знаю, правда, какое) проекта C# ?
Где тут свойство сhecked было установлено?
Цитироватьpublic int LibCommandState(short command, ref bool enable, ref int сhecked)
        {
            if (enable)
            {
                int docType = kompas.ksGetDocumentType(0);
                enable =
                (docType == (int)DocType.lt_DocPart3D ||
                docType == (int)DocType.lt_DocAssemble3D ||
                docType == (int)DocType.lt_DocSheetStandart ||
                docType == (int)DocType.lt_DocSheetUser ||
                docType == (int)DocType.lt_DocFragment);
            }
            return 0;
        }

Slaviation

К примеру, смотрим обучающий проект \SDK\C++\Visualc\step2\ и его файл step2.def и видим:

;LIBRARY      "Step2"
;DESCRIPTION  ' '

EXPORTS
LIBRARYID            @1
LIBRARYENTRY         @2
LibToolBarId         @3
LibraryBmpBeginID    @4
LIBRARYNAMEW         @5
DisplayLibraryNameW  @6
LibCommandState      @7

ЦитироватьЭто, то причём?
Функция LibCommandState является функцией оформления библиотеки.
В справочной системе , в топике "Функции оформления библиотек типа DLL" есть требование:
Все функции оформления библиотек должны быть объявлены в def файле как экспор­тные, например:
EXPORTS
LIBRARYID @1
LIBRARYENTRY @2

Это, всё понятно, но речь в теме не об этом.
PS. Это уже гадание на кофейной гуще.