function WndProc(wnd:HWND; msg, wParam, lParam:longint):LRESULT; stdcall;
begin
case msg of
//обрабатываемые сообщения главного окна
case PNMTOOLBAR(lParam).hdr.code of
//уведомляющие сообщения панели инструментов
TBN_QUERYINSERT: result:=LRESULT(true);
end;
end;
result:=DefWindowProc(wnd, msg, wParam, lParam);
end;
Диалоговое окно "Customize Toolbar"
Почему при двойном щелчке по панели инструментов появляется и тут же скрывается диалоговое окно "Customize ToolBar"? При создании панели инструментов задаю стиль "CCS_ADJUSTABLE". Также пытался обработать сообщения TBN_QUERYINSERT и TBN_QUERYDELETE в рамках WM_NOTIFY, но если диалоговое окно не отображено они соответственно и не обрабатываются... В справке о сообщениях TBN_QUERYINSERT и TBN_QUERYDELETE говорится, что они должны возвращать true или false в зависимости от того, хотим ли мы добавить или удалить кнопку с панели инструментов... Вопрос: "Каким же образом я буду возвращать булевское значение, когда оконная функция главного окна возвращает значение типа LRESULT (longint), ведь в Delphi нет макроса HANDLE_MSG"? Как быть? Может нужно провести ещё какие-то действия?
Цитата: SergPas
Каким же образом я буду возвращать булевское значение, когда оконная функция главного окна возвращает значение типа LRESULT (longint), ведь в Delphi нет макроса HANDLE_MSG"?
А в Messages.pas не описаны нужные типы?
Типы, конечно описаны... Но как я могу возвращать оконной функции булевский тип, когда она возвращает тип LRESULT (longint)... Получается несоответствие типов... Разве что попробывать преобразовать тип boolean к типу longint... Но это пока не проблема, так как не показывается диалоговое окно "Customize ToolBar", точнее отображается и тут же исчезает... Нужно сначала решить этот вопрос!!!
Когда хочешь вернуть true, возвращай - 1, когда false - 0.
Цитата: SergPas
Типы, конечно описаны... Но как я могу возвращать оконной функции булевский тип, когда она возвращает тип LRESULT (longint)...
Result := LRESULT(True) или LRESULT(False).
Да и это понятно... Мне обрабатывать эти сообщения бесполезно, так как диалоговое окно "Настройка панели инструментов" не отображается на экране... Неужели никто не знает, как решить данную проблему?
Код:
Вышеприведённый код неправильный. Строка result:=DefWindowProc(wnd, msg, wParam, lParam) должна идти в начале тела оконной функции WndProc:
Код:
function WndProc(wnd:HWND; msg, wParam, lParam:longint):LRESULT; stdcall;
begin
result:=DefWindowProc(wnd, msg, wParam, lParam);
case msg of
//обрабатываемые сообщения главного окна
case PNMTOOLBAR(lParam).hdr.code of
//уведомляющие сообщения панели инструментов
TBN_QUERYINSERT: result:=LRESULT(true);
end;
end;
end;
begin
result:=DefWindowProc(wnd, msg, wParam, lParam);
case msg of
//обрабатываемые сообщения главного окна
case PNMTOOLBAR(lParam).hdr.code of
//уведомляющие сообщения панели инструментов
TBN_QUERYINSERT: result:=LRESULT(true);
end;
end;
end;
А также обязательно должна присутствовать обработка сообщения TBN_QUERYINSERT; в противном случае окно "Настройка панели инструментов" создаётся и сразу же уничтожается!!! Да, и при создании панельки обязательно указать стиль CCS_ADJUSTABLE!!!