Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 28.03.04 09:05

Лучшее из нашего FAQ   |x|
Добавить свою кнопку к системным кнопкам формы (свернуть, заркрыть,...) в заголовке формы
в библиотеке R&A Lib есть компонент tRACaptionButton

Вся основная работа по рисованию кнопки в заголовке окна происходит в процедуре DrawBtn. Рассмотрим код подробней.

procedure TForm1.DrawBtn;
var
WDc: HDc;
Cx,Cy: Integer;
XFrame, Yframe: Integer;
begin
WDc := GetWindowDc(Handle);
Cx := GetSystemMetrics(SM_CXSize);
Cy := GetSystemMetrics(SM_CYSize);
xFrame := GetSystemMetrics(SM_CXFrame);
yFrame := GetSystemMetrics(SM_CYFrame);
R := Bounds(Width - xFrame - 4*Cx + 2, yFrame + 2, Cx - 2, Cy - 4);
if Press then
DrawFrameControl(WDc,R,DFC_BUTTON,DFCS_ButtonPUSH or DFCS_PUSHED)
else
DrawFrameControl(WDc,R,DFC_BUTTON,DFCS_ButtonPUSH);
ReleaseDc(Handle,WDC);
end;


Переменная WDc содержит контекст устройства окна, полученной функцией GetWindowsDc. Он понадобится для рисования окна. С помощью нескольких вызовов функции GetSystemMet rics узнаем размер стандартной кнопки заголовка окна. Затем вычисляем положение и размер прямоугольника, в котором будет рисоваться кнопка. И самое основное вызываем функцию DrawFrameControl. Эта функция рисует стандартный Control заданного типа и стиля. Используя тип DFC_BUTTON рисуем кнопку. Задавая стиль DFCS_BUTTONPUSH рисуется кнопка в нормальном состоянии, если задать стиль DFCS_BUTTONPUSH or DFCS_PUSHED рисуется кнопка в нажатом состоянии. Переменная Press содержит состояние в котором следует рисовать кнопку. В конце работы освобождаем контекст.

Теперь о самом неприятном. Чтобы все это заработало так как надо необходимо обработать кучу сообщений которое windows посылает приложению.Куча это, конечно, громко сказано, но у меня получилось 7, плюс 1 определенное мной для отслеживания Click. Вот эти сообщения:

WM_NCPAINT
WM_NCACTIVATE
WM_NCLBUTTONDOWN
WM_NCHITTEST
WM_SIZE
WM_NCLBUTTONUP
WM_LBUTTONUP
В основном обработка сообщений сводится к вызову DrawBtn. В обработке WM_NCLBUTTONDOWN опре! деляется , была ли опущена левая кнопка мыши в области занятой кнопкой. WM_NCHITTEST предотвращает максимизацию окна. WM_SIZE правильно отрисовывает кнопку при изменении размеров окна. WM_NCLBUTTONUP Определяет был ли щелчок кнопкой мыши. И вызывает обработчик по средствам PostMessage. Вызов PostMessage сделан для того чтобы окно успело отреагировать на другие сообщения. WM_LBUTTONUP используется, если пользователь передумал и убрал курсор с кнопки при нажатой кнопке мыши.

PS: Можно обьединить кнопку в заголовке окна и пункт системного меню, описаный на страничке манипуляции с системным меню
Пример программы, как это сделать самому.
И пример компоненты, как это сделать не мучаясь :)

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • KOL + TASM = ???
    как включить в KOL проект уже скомпилированный кусок кода ? уточняю: имеется участок кода весьма критичный к скорости ...
  • -= Можно ли все Error ловить своей проги посредством WinAPI =-
    Пишу значит прогу. Думаю, а если напортачил че. Значит нужно иметь хотя бы коды ошибок , записаных в файл. Но не ...
  • Format disk
    Здравствуйте уважаемые мастера! Как отформатировать диск не используя стандартный диалог форматирования? Спасибо за ...
  • Игра puzzle.
    Такой вопрос! Как разбить рисунок на n прямоугольничков, да так, чтобы их еще и туда сюда тягать можно было? Ну кто ...
  • paradox с паролем
    Как создать (программно) paradox с паролем ? И как подключаться к этой базе (с паролем ) ? Вот создание: with ...
  • SendMESSAGE
    Как на компьютер зная его IP отправить сообщение на Службу сообщений Как перехватить сообщения которые приходят на ...
  • Midas и прокси
    Использую midas в своем проекте. Долгое время использовал SocketConnection и работало отлично, но понадобилось ...
У нас большой выбор статей   |x|
ADO & COM или SQL-сервер своими руками.
Рассмотрен вариант модернизации систем от файл-серверной технологии к клиент-серверной.
Новинки книжного рынка   |x|
Delphi. Программирование на языке высокого уровня: Учебник для вузов
Книга посвящена новейшей версии Delphi 7 Studio. Здесь изложены как приемы программирования в среде Delphi, ее главные составные части — галереи компонентов, хранилища объектов, вспомогательный инструментарий, так и сам язык программирования Delphi. Подробно рассматриваются компоненты программ, некоторые дополнительные возможности — динамически подключаемые библиотеки, интерфейсы, технология СОМ и система ModelMaker. Книга может быть полезна как начинающим — в качестве пособия для первоначального изучения среды и языка Delphi, так и опытным программистам, желающим пополнить свои знания в области применения языка Delphi. Допущено Министерством образования Российской Федерации в качестве учебника для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов «Информатика и вычислительная техника».
Автор: Фаронов В. В.
Другие сайты о DELPHI   |x|
Курс обучения Turbo Pascal.
На страницах проекта изложен полный обучающий курс языка Turbo Pascal. Каждый раздел сайта посвящен определенной теме. К каждой теме приведена исчерпывающая информация. Каждая тема состоит из занятий ...

» Оценка сайта: 2
Опрос населения :)
Как часто вы заглядываете на наш сайт?
»»» Регулярно
»»» Раз в неделю
»»» Когда нужна помощь
»»» По почтовой рассылке
»»» Сделал стартовой страницей
Для души

Хокку дня
Меньше и меньше кругом самураев
Вот и соседи недавно
Тоже свалили в Израиль...

Афоризмы
Очень часто нам не нужно, чтобы ЭТО было хорошо. Нам нужно, чтобы ЭТО было ЗАВТРА....

Фраза дня
Кто с чем к нам зачем, тот от того и - того! (А. Невский)

Дурацкие законы (информация предоставлена сайтом kurilka.com)
Если вы в Техасе(США) , даже не думайте стрелять по бизонам со второго этажа отеля.
В Канзасе (США) все пешеходы, пересекающие дорогу ночью, должны носить световые отражатели.

И на закуску коротенький анекдот
Иван Грозный был против абортов! Он детей взрослыми убивал...

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=94


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное