Создание компактной и инструментальной панели в Компас-3D (delphi)

Автор SerGoVec, 03.09.15, 11:02:22

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

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

SerGoVec

Всем првивет!
Подскажите пожалуйста как создать компактную и вложенную в нее инструментальную панель содержащую описанные в коде функции библиотеки. То есть, есть написанная пользовательская библиотека, содержащая определенные функции. Пользоваться ими можно в компасе через менеджер библиотек. Хочеться сделать компактную,инструментальную панель, с вложенными в нее этими самыми фунциями. Библиотека написана на delphi (среда Embarcadero Delphi XE8). Приведите пожалуйста простой примерчик.

ps. Сам пытался сделать по аналогии с примером step12 (встроенный пример sdk компаса (ASCON\KOMPAS-3D V16\SDK\Pascal\Delphi\step12), но не срастается.


SerGoVec

На самом деле я хотел отдельный пример (чисто про инструментальную панель), понять суть. Разобрался сам :). Если кому поможет:

в коде разрабатываемой библиотеке, в файле с расширением .pas обязательно должны фигурировать: LIBRARYENTRY, LIBRARYID, LibToolBarId.

В LIBRARYENTRY должен быть перечень вызываемых процедур, функций, который и обуславливает логику работы библиотеки, например библиотека выполняет 4 функции - ShowPropValue, ShowPropIndex, ShowDocType, pzdShow3DInfo. Каждая функция будет иметь индекс (по индексу будет осуществляться привязка функций к кнопочкам в инструментальной панели). Пример кода:

procedure LIBRARYENTRY(comm: WORD); Pascal;
var
  doc: IKompasDocument;

begin
  Application.Handle := GetHWindow;
  KompasAPI := IDispatch(CreateKompasApplication) as IApplication;

  doc := KompasAPI.ActiveDocument;

  case comm of
    1: begin
        ShowPropValue(doc);
       end;
    2: begin
        ShowPropIndex(doc);
       end;
    3: begin
        ShowDocType(doc);
       end;
    4: begin
        pzdShow3DInfo(doc);
       end;

  end;
  Application.Handle := 0;
end;

Следующим идет обязательное обозначение идентификатором разрабатываемой библиотеки. Код для LIBRARYID:

function LIBRARYID: Cardinal; pascal;
begin
  LIBRARYID := 100;
end;

Следующим идет получение индентификаторов компактных, инструментальных панелей (в моем случае нужна только инструментальная панель). Код для LibToolBarId:

function LibToolBarId( barType,                               // Тип запрашиваемой панелей ( 0 - компактная панель, 1- -                                                                          //простая инструментальная панель )
                       index : Integer ) : Integer; stdcall;    // Индекс панели
begin

  if ( barType = 1 ) then
  begin
    if ( index = 0 ) then
      Result := 2000
    else
      Result := -1;
  end
  else
   Result := -1;
end;


Теперь в ресурсном фале с расширением .rc пишем:

100 RCDATA
{
0
0
}

//определение имени панелей.
//2001 - название инструментальной панели
//2000 - компактная панель (включение инструментальной панели)
STRINGTABLE
{
  100 "Приложение"
  2000 "Моя панель свойств"
}

//Определение состава компактной панели
2000 RCDATA
{
  // пишем идентификаторы состава панели. В данном случае индексы функций (ShowPropValue, ShowPropIndex, ShowDocType, pzdShow3DInfo)
1
2
3
4
0xffff //END_OF_RESOURCE_TABLE
}

//иконки методов, входящих в инструментальной панели
1001 BITMAP "res\1.bmp"
1002 BITMAP "res\2.bmp"
1003 BITMAP "res\3.bmp"
1004 BITMAP "res\4.bmp"

// Определение иконки инструментальной панели при включении ее в компактную панель
//2001 ICON DISCARDABLE "res\bar1.ico" (это если будет компактная панель. Важно принимает только тип icon

// показ панелей внизу (popup - вложенность)
100 MENU
BEGIN
  POPUP "Панель свойств"
  BEGIN
        MENUITEM "Значения свойств", 1
        MENUITEM "Индексы свойств",  2
        MENUITEM "Тип документа",    3
        MENUITEM "XML",              4
  END
END

И еще, обязательно в создаваемой библиотеке прописать вызываемые системные функции: LIBRARYENTRY, LIBRARYID, LibToolBarId. Если работать в Embarcadero Delphi, выделить библиотеку в project manager и нажать правую клавушу мышки, выбрать View Source. Пример кода:

library kotik;

{$R 'main.res' 'main.rc'}

uses
  main in 'main.pas',
  LogForm in 'LogForm.pas' {LogForm1};

{$E rtw}

// Экспортные функции
exports
  LIBRARYENTRY,
  LIBRARYID,
  //LIBRARYNAME;
  LibToolBarId;


begin
end.
+ Благодарностей: 2

Дмитрий Геннадьевич

Бьюсь целый день с созданием панели, нифига не работает... И тут вижу такую неприметную надпись.... Это серьезно или я чего-то не понял???
Буфер обмена-2.jpg

Дмитрий22