Ооооо!!!! Огромное спасибо за столь внушительный пример!
Скачал ushlobjadditional.pas с указанной ссылки и jwashlguid.pas
При компиляции с ushlobjadditional.pas возникли ошибки на строке 1803. Поправил декларирование внешних функций, скопировав полное декларирование и вставив перед "external".
Ниже идёт код до правки. В нём Лазарус ругался на отсутствие нормального описания функций.
- Код: Выделить всё
const
shell32 = 'Shell32.dll'; //from ShellAPI, ShlObj
function SHGetIconOverlayIndexA; external shell32 name 'SHGetIconOverlayIndexA';
function SHGetIconOverlayIndexW; external shell32 name 'SHGetIconOverlayIndexW';
function SHGetIconOverlayIndex ; external shell32 name 'SHGetIconOverlayIndexA';
function SHCreateDirectoryExA; external shell32 name 'SHCreateDirectoryExA';
function SHCreateDirectoryExW; external shell32 name 'SHCreateDirectoryExW';
function SHCreateDirectoryEx ; external shell32 name 'SHCreateDirectoryExA';
function SHGetSpecialFolderPathA; external shell32 name 'SHGetSpecialFolderPathA';
function SHGetSpecialFolderPathW; external shell32 name 'SHGetSpecialFolderPathW';
function SHGetSpecialFolderPath; external shell32 name 'SHGetSpecialFolderPathA';
function SHGetFolderPathA; external shell32 name 'SHGetFolderPathA';
function SHGetFolderPathW; external shell32 name 'SHGetFolderPathW';
function SHGetFolderPath; external shell32 name 'SHGetFolderPathA';
function SHGetFolderLocation; external shell32 name 'SHGetFolderLocation';
procedure SHGetSettings; external shell32 name 'SHGetSettings';
function SoftwareUpdateMessageBox; external shell32 name 'SoftwareUpdateMessageBox';
function SHGetMalloc; external shell32 name 'SHGetMalloc';
function SHGetDesktopFolder; external shell32 name 'SHGetDesktopFolder';
В другом месте Лазарус ругался на пробразование array of char в shortstring. Я переменную с массивом загнал в PChar(). Раньше в Дельфях и Киликсе, вроде, это прокатывало. Или в данном случае это неприменимо?
Затем я скачал пару .INC файлов из комплекта JEDI, которые требовались.
В довершение привычная функция FindClose в главном модуле программы резко отказалась работать с TSeachRec и потребовала себе что-то вроде хэндла. Ну ок. Скормил TSeachRec.FindHandle
Программа наконец компилится. И тут я заметил, что забыл самое важное! =)))
Куда засовывать название файла или каталога, для которого я хочу получить выпадающее меню?!
Посмотрел на код и так, и этак.. Не понял. =(
По-умолчанию процедура никакого меню не показывает.
Подскажите, плиз!