Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2009, 22:55   #1
Longedok
Пользователь
 
Аватар для Longedok
 
Регистрация: 14.07.2007
Сообщений: 40
По умолчанию Проблема с Property Sheet

Здравствуйте, я пишу плагин для миранды (на delphi) и у меня появилась необходимость добавить свой пункт в диалог настроек миранды. Диалог настроек это по сути тот же Property Sheet (стандартный контрол windows).

Чтобы добавить диалог настроек необходимо:
1) Создать файл с ресурсами диалога
2) Заполнить специфичную для миранды структуру TOptionsDialogPage (в правильности её заполнения я уверен) и передать её опять же, специфичной для миранды функции MS_OPT_ADDPAGE (тут я думаю тоже всё нормально )
3) Определить процедуру обратного вызова, в которой будут обрабатываться сообщения предназначеные для диалога.

Вобщем все эти шаги я выполнил, пункт в настройки добавился, но контролы (чекбоксы всякие) которые я определил в файле ресурсов почему-то не отображаются.

Да и сам диалог, как бы не обновляется - то есть стандартные кнопки ок, отмена, принять не подсвечиваются под курсором мыши (хотя на нажатия реагируют). А если окно какого-нибудь приложения перетащить поверх моего диалога - изображение этого окна останется на диалоге, даже после того как это окно убрать (надеюсь понятно объяснил).

Привожу свой файл ресурсов и код процедуры обработки сообщений от диалога:

Файл ресурсов:
Код:
//Здесь идёт объявление констант
...
IDD_DLG1 DIALOGEX 0,0,224,126
STYLE WS_CHILD|WS_VISIBLE|DS_MODALFRAME
EXSTYLE WS_EX_CONTROLPARENT
BEGIN
  CONTROL "Ник",IDC_GrpBoxNick,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,2,1,219,39
  CONTROL "Жирный ",IDC_ChkNickBold,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,6,11,42,9
  CONTROL "Курсив",IDC_ChkNickItalic,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,52,11,38,9
  CONTROL "Подчёркнутый",IDC_ChiNickUnder,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,96,11,60,9
  CONTROL "Зачёркнтуый",IDC_ChkNickStroke,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,160,11,55,9
  CONTROL "Цвет:",IDC_StNickColor,"Static",WS_CHILD|WS_VISIBLE,6,25,20,9
  CONTROL "",IDC_EdtNickColor,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP,30,24,54,13,WS_EX_CLIENTEDGE
  ... //далее ещё строк 20 аналогичного кода
Процедура обработки:
Код:
function DlgProc(Dialog: HWnd; Message, wParam, lParam: DWord): Boolean; cdecl;
begin
  result := false;
  case message of
    WM_INITDIALOG:
    begin
      result := true;
    end;
    WM_COMMAND:
    begin
    end;
    WM_NOTIFY:
    begin
      result := true;
    end;
  end;
end;
Котэ покарает тебя, %username%!

Последний раз редактировалось Longedok; 08.07.2009 в 22:58.
Longedok вне форума Ответить с цитированием
Старый 08.07.2009, 22:58   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хм...а разве сообщение WM_PAINT обрабатывать не надо?
(перерисовку окна)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2009, 23:10   #3
Longedok
Пользователь
 
Аватар для Longedok
 
Регистрация: 14.07.2007
Сообщений: 40
По умолчанию

Ну, в исходниках других плагинов я обработки такого сообщения не видел. Вот код из другого (вполне работающего) плагина:
Код:
BOOL CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	HWND hw;
	char buff[512];

	switch ( msg ) {
	case WM_INITDIALOG: {
		...
		return TRUE;
	}
	case WM_COMMAND:
		...
		break;

	case WM_NOTIFY:
		...
		break;
	}

	return FALSE;
}
А если я всё таки буду обрабатывать wm_paint, что конкретно необходимо делать в обработке этого сообщения? На мсдне вот нашёл статью, но там ничего мне полезного вроде бы нету.
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Котэ покарает тебя, %username%!
Longedok вне форума Ответить с цитированием
Старый 10.07.2009, 21:50   #4
Longedok
Пользователь
 
Аватар для Longedok
 
Регистрация: 14.07.2007
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
хм...а разве сообщение WM_PAINT обрабатывать не надо?
(перерисовку окна)
Точно, надо было обрабатывать это сообщение. Даже не обрабатывать а просто написать в теле обработчика result := false - и дальше это сообщение уже обрабатывается чем-то другим. Не знаю почему не сработал result := false в теле процедуры (вне case ... of).
Котэ покарает тебя, %username%!
Longedok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Property AuthProxyRetries does not exist indy 10 :( Crivel Работа с сетью в Delphi 8 30.03.2020 21:56
Error 1 Property 'Item' is 'ReadOnly' [SK]OzzY Общие вопросы .NET 2 18.04.2009 23:49
Оформление Excel, sheet ALERDCOM Помощь студентам 1 11.10.2008 04:41