Всем првивет!
Подскажите пожалуйста как создать компактную и вложенную в нее инструментальную панель содержащую описанные в коде функции библиотеки. То есть, есть написанная пользовательская библиотека, содержащая определенные функции. Пользоваться ими можно в компасе через менеджер библиотек. Хочеться сделать компактную,инструментальную панель, с вложенными в нее этими самыми фунциями. Библиотека написана на delphi (среда Embarcadero Delphi XE8). Приведите пожалуйста простой примерчик.
ps. Сам пытался сделать по аналогии с примером step12 (встроенный пример sdk компаса (ASCON\KOMPAS-3D V16\SDK\Pascal\Delphi\step12), но не срастается.
Создаётся, без проблем.
На самом деле я хотел отдельный пример (чисто про инструментальную панель), понять суть. Разобрался сам :). Если кому поможет:
в коде разрабатываемой библиотеке, в файле с расширением .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.jpg
Если у Вас Компас выше 16 версии (17+), то Вам сюда:
https://forum.ascon.ru/index.php?topic=35696.msg285096#msg285096