Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Диалоговое окно "Customize Toolbar"

397
18 июля 2007 года
SergPas
527 / / 03.02.2007
Почему при двойном щелчке по панели инструментов появляется и тут же скрывается диалоговое окно "Customize ToolBar"? При создании панели инструментов задаю стиль "CCS_ADJUSTABLE". Также пытался обработать сообщения TBN_QUERYINSERT и TBN_QUERYDELETE в рамках WM_NOTIFY, но если диалоговое окно не отображено они соответственно и не обрабатываются... В справке о сообщениях TBN_QUERYINSERT и TBN_QUERYDELETE говорится, что они должны возвращать true или false в зависимости от того, хотим ли мы добавить или удалить кнопку с панели инструментов... Вопрос: "Каким же образом я буду возвращать булевское значение, когда оконная функция главного окна возвращает значение типа LRESULT (longint), ведь в Delphi нет макроса HANDLE_MSG"? Как быть? Может нужно провести ещё какие-то действия?
10
18 июля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: SergPas
Каким же образом я буду возвращать булевское значение, когда оконная функция главного окна возвращает значение типа LRESULT (longint), ведь в Delphi нет макроса HANDLE_MSG"?


А в Messages.pas не описаны нужные типы?

397
18 июля 2007 года
SergPas
527 / / 03.02.2007
Типы, конечно описаны... Но как я могу возвращать оконной функции булевский тип, когда она возвращает тип LRESULT (longint)... Получается несоответствие типов... Разве что попробывать преобразовать тип boolean к типу longint... Но это пока не проблема, так как не показывается диалоговое окно "Customize ToolBar", точнее отображается и тут же исчезает... Нужно сначала решить этот вопрос!!!
353
18 июля 2007 года
Nixus
840 / / 04.01.2007
Когда хочешь вернуть true, возвращай - 1, когда false - 0.
10
18 июля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: SergPas
Типы, конечно описаны... Но как я могу возвращать оконной функции булевский тип, когда она возвращает тип LRESULT (longint)...


Result := LRESULT(True) или LRESULT(False).

397
18 июля 2007 года
SergPas
527 / / 03.02.2007
Да и это понятно... Мне обрабатывать эти сообщения бесполезно, так как диалоговое окно "Настройка панели инструментов" не отображается на экране... Неужели никто не знает, как решить данную проблему?
397
19 июля 2007 года
SergPas
527 / / 03.02.2007
Проблему решил... Ошибка состояла в следующем:
Код:
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;

Вышеприведённый код неправильный. Строка 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;

А также обязательно должна присутствовать обработка сообщения TBN_QUERYINSERT; в противном случае окно "Настройка панели инструментов" создаётся и сразу же уничтожается!!! Да, и при создании панельки обязательно указать стиль CCS_ADJUSTABLE!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог