Если достаточно простого чекбокса, то:
...
var
DrawFlags: Integer;
begin
DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;
if then
DrawFlags := DrawFlags or DFCS_CHECKED;
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end;
...
А если хочется рисовать красиво (стили XP), то:
...
uses ..., UxTheme;
...
var
theme: HTHEME;
dc: hdc;
State: integer;
rect: TRect;
begin
theme := OpenThemeData(Handle, 'BUTTON');
dc := GetDc(Panel1.Handle );
if
then state := CBS_CHECKEDNORMAL
else state := CBS_UNCHECKEDNORMAL;
rect.Left := 10;
rect.Right := 30;
rect.Top := 10;
rect.Bottom := 30;
DrawThemeBackground(theme, dc, BP_CHECKBOX, state, rect, nil);
end;
Только во втором случае нужно быть внимательным со сменой темы пользователем (придет сообщение WM_THEMECHANGED) и после того как рисовать уже не нужно (напрмер при завершении программы) вызвать CloseThemeData(theme); |