Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору procedure CheckListBox_OnDrawItem(lpdis : PDRAWITEMSTRUCT); var tchBuffer : Array [0..MAX_PATH] of WideChar; itemdata : LongInt; BrushNew : hBrush; BrushOld : hBrush; PenBrush : hPen; begin if lpdis.ItemID > -1 then begin if ((lpdis.itemState and ODS_SELECTED) <> 0) then begin BrushNew := CreateSolidBrush(RGB(235, 235, 250)); BrushOld := SelectObject(lpdis.hdc, BrushNew); FillRect(lpdis.hdc, lpdis.rcItem, BrushNew); PenBrush := CreatePen(PS_SOLID, 1, RGB(65, 105, 225)); SelectObject(lpdis.hdc, PenBrush); Rectangle(lpdis.hdc, lpdis.rcItem.Left, lpdis.rcItem.Top, lpdis.rcItem.Right, lpdis.rcItem.Bottom); DeleteObject(PenBrush); SetBkColor(lpdis.hdc, RGB(235, 235, 250)); SelectObject(lpdis.hdc, BrushOld); DeleteObject(BrushNew); SetBkMode(lpdis.hdc, TRANSPARENT); SetTextColor(lpdis.hdc, RGB(255, 0, 0)); end else begin FillRect(lpdis.hdc, lpdis.rcItem, GetSysColorBrush(COLOR_WINDOW)); SetBkColor(lpdis.hdc, GetSysColor(COLOR_WINDOW)); SetTextColor(lpdis.hdc, GetSysColor(COLOR_WINDOWTEXT)); if (lpdis.itemID mod 2) <> 0 then begin BrushNew := CreateSolidBrush(RGB(240, 240, 240)); BrushOld := SelectObject(lpdis.hdc, BrushNew); FillRect(lpdis.hdc, lpdis.rcItem, BrushNew); SetBkColor(lpdis.hdc, RGB(240, 240, 240)); SelectObject(lpdis.hdc, BrushOld); DeleteObject(BrushNew); end; end; if ((lpdis.itemState and ODS_FOCUS) <> 0) then DrawFocusRect(lpdis.hdc, lpdis.rcItem); itemdata := SendMessageW(lpdis.hwndItem, LB_GETITEMDATA, lpdis.itemID, 0); if itemdata <> 0 then begin if InitThemeLibrary and UseThemes then DrawThemeBackground(CheckTheme, lpdis.hdc, BP_CHECKBOX, CBS_CHECKEDNORMAL, Rect(lpdis.rcItem.Left + 2, lpdis.rcItem.Top + 2, lpdis.rcItem.Left + lpdis.rcItem.Bottom - lpdis.rcItem.Top - 1, lpdis.rcItem.Bottom - 2), nil) else DrawFrameControl(lpdis.hdc, Rect(lpdis.rcItem.Left + 2, lpdis.rcItem.Top + 2, lpdis.rcItem.Left + lpdis.rcItem.Bottom - lpdis.rcItem.Top - 1, lpdis.rcItem.Bottom - 2), DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_CHECKED or DFCS_FLAT); end else begin if InitThemeLibrary and UseThemes then DrawThemeBackground(CheckTheme, lpdis.hdc, BP_CHECKBOX, CBS_UNCHECKEDNORMAL, Rect(lpdis.rcItem.Left + 2, lpdis.rcItem.Top + 2, lpdis.rcItem.Left + lpdis.rcItem.Bottom - lpdis.rcItem.Top - 1, lpdis.rcItem.Bottom - 2), nil) else DrawFrameControl(lpdis.hdc, Rect(lpdis.rcItem.Left + 2, lpdis.rcItem.Top + 2, lpdis.rcItem.Left + lpdis.rcItem.Bottom - lpdis.rcItem.Top - 1, lpdis.rcItem.Bottom - 2), DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_FLAT); end; SendMessageW(lpdis.hwndItem, LB_GETTEXT, lpdis.itemID, LPARAM(@tchBuffer)); lpdis.rcItem.Left := lpdis.rcItem.Left + 22; lpdis.rcItem.Right := lpdis.rcItem.Right - 5; DrawTextW(lpdis.hdc, @tchBuffer[0], -1, lpdis.rcItem, DT_SINGLELINE or DT_VCENTER); end else begin FillRect(lpdis.hdc, lpdis.rcItem, GetSysColorBrush(COLOR_WINDOW)); SetBkColor(lpdis.hdc, GetSysColor(COLOR_WINDOW)); SetTextColor(lpdis.hdc, GetSysColor(COLOR_WINDOWTEXT)); DrawTextW(lpdis.hdc, PWideChar(szEmptyStr), -1, lpdis.rcItem, DT_SINGLELINE or DT_VCENTER or DT_CENTER); end; end; |