Прорисовка кнопки в заголовке окна :: Статьи по Delphi - Iguana
Поиск по базе статей [/articles/?PHPSESSID=2a0dcc5af3a059d634ae9307c1aa5b82] : 18.08.2006 Изменено разрешение сайта Изменено минимальное разрешение сайта на 1024x768 Подробнее... 02.08.2006 Выгружена игра "Digger Remastered" Вспоминаем старый добрый DOS и времена 80-х! ;) Подробнее... Рекомендуем книгу! Программирование в среде Delphi 8 for .NET. Самоучитель Книга представляет собой самоучитель начального уровня и посвящена набору инструментальных средств программирования Delphi 8. Если вы уже знакомы с Delphi, то помимо нового материала, в этой книге вы найдете много привычных понятий и компонентов, а если е ... Прорисовка кнопки в заголовке окна :: Статьи по Delphi unit Unit1; interface uses Windows, Buttons, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class (TForm) procedure FormResize(Sender: TObject); private CaptionBtn : TRect; procedure DrawCaptButton; procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPaint; procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE; procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT; procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST; procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN; public { Public declarations } end ; var Form1: TForm1; implementation const htCaptionBtn = htSizeLast + 1; {$R *.DFM} procedure TForm1.DrawCaptButton; var xFrame, yFrame, xSize, ySize : Integer; R : TRect; begin //Размеры растягиваемой рамки xFrame := GetSystemMetrics(SM_CXFRAME); yFrame := GetSystemMetrics(SM_CYFRAME); //Размеры кнопок в заголовке окна xSize := GetSystemMetrics(SM_CXSIZE); ySize := GetSystemMetrics(SM_CYSIZE); //Определение расположения новой кнопки CaptionBtn := Bounds(Width - xFrame - 4*xSize + 2, yFrame + 2, xSize - 2, ySize - 4); //Получаем указатель на канву Canvas.Handle := GetWindowDC(Self.Handle); Canvas.Font.Name := 'Symbol' ; Canvas.Font.Color:= clBlue; Canvas.Font.Style := [fsBold]; Canvas.Pen.Color := clYellow; Canvas.Brush.Color := clBtnFace; try DrawButtonFace(Canvas, CaptionBtn, 1, bsAutoDetect, False, False, False); //Определяем меньший четырешугольник для рисования внутри кнопки R := Bounds(Width - xFrame - 4 * xSize + 2, yFrame + 3, xSize - 6, ySize - 7); with CaptionBtn do Canvas.TextRect(R, R.Left + 2, R.Top - 1, 'W'); finally ReleaseDC(Self.Handle, Canvas.Handle); Canvas.Handle := 0; end ; end ; procedure TForm1.WMNCPaint( var Msg : TWMNCPaint); begin inherited ; DrawCaptButton; end ; procedure TForm1.WMNCActivate( var Msg : TWMNCActivate); begin inherited ; DrawCaptButton; end ; procedure TForm1.WMSetText( var Msg : TWMSetText); begin inherited ; DrawCaptButton; end ; procedure TForm1.WMNCHitTest( var Msg : TWMNCHitTest); begin inherited ; with Msg do if PtInRect(CaptionBtn, Point(XPos - Left, YPos - Top)) then Result := htCaptionBtn; end ; procedure TForm1.WMNCLButtonDown( var Msg : TWMNCLButtonDown); begin inherited ; if (Msg.HitTest = htCaptionBtn) then ShowMessage( 'Вы нажали кнопку в заголовке окна' ); end ; procedure TForm1.FormResize(Sender: TObject); begin //Форсируем перерисовку заголовка окна при изменении размеров формы Perform(WM_NCACTIVATE, Word(Active), 0); end ; end . Copyright 2001-2007 © "Iguana Software" . О компании | Продукты | Усуги | Заявление о приватности | Правила использования | Обратная связь IGP Delphi Forum | Библиотека VCL | Увлекательные знакомства, Украина