![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Где находится функция прорисовки TCheckBox [D7, XP]
avi9526 © (2011-08-06 18:40:00)Собственно, вопрос - где находится функция прорисовки TCheckBox ? (типа OnPaint, WMPaint и т.д.)
Не могу найти этого и для других компонентов на основе TWinControl (TButton)
DVM (2011-08-06 23:31:00) [1]
> avi9526 (06.08.11 18:40)
> где находится функция прорисовки TCheckBox ?
в commctrl.dll или в user32.dll в зависимости от версии вин задействованных тем
~AQUARIUS~ (2011-08-06 20:54:00) [2]
> TWinControl'ы сам Windows рисует.
Только стандартные, к которым, впрочем, CheckBox и пренадлежит.
Это рисует саму "галочку", текст пририсуйте сами:
uses
UxTheme, Themes;
procedure DrawCheckBox(ACanvas: TCanvas; ALeftTop: TPoint; AHotLight, APressed,
AEnabled: Boolean; AState: TCheckBoxState);
var
td: TThemedElementDetails;
rc: TRect;
tb: TThemedButton;
fl: DWORD;
begin
rc := Bounds(ALeftTop.X, ALeftTop.Y, 13, 13);
if not ThemeServices.ThemesEnabled then
begin
fl := DFCS_BUTTONCHECK;
if AEnabled then
begin
if APressed then fl := fl or DFCS_PUSHED;
case AState of
cbChecked: fl := fl or DFCS_CHECKED;
cbGrayed: fl := fl or DFCS_BUTTON3STATE or DFCS_CHECKED;
end;
end else fl := fl or DFCS_INACTIVE;
DrawFrameControl(ACanvas.Handle, rc, DFC_BUTTON, fl);
end else
begin
case AState of
cbUnchecked: if AEnabled then
begin
if APressed then tb := tbCheckBoxUncheckedPressed else
if AHotLight then tb := tbCheckBoxUncheckedHot
else tb := tbCheckBoxUncheckedNormal;
end else tb := tbCheckBoxUncheckedDisabled;
cbChecked: if AEnabled then
begin
if APressed then tb := tbCheckBoxCheckedPressed else
if AHotLight then tb := tbCheckBoxCheckedHot
else tb := tbCheckBoxCheckedNormal;
end else tb := tbCheckBoxCheckedDisabled;
cbGrayed: if AEnabled then
begin
if APressed then tb := tbCheckBoxMixedPressed else
if AHotLight then tb := tbCheckBoxMixedHot
else tb := tbCheckBoxMixedNormal;
end else tb := tbCheckBoxMixedDisabled;
else Exit;
end;
td := ThemeServices.GetElementDetails(tb);
ThemeServices.DrawElement(ACanvas.Handle, td, rc);
end;
end;
Sapersky (2011-08-06 19:03:00) [3]TWinControl'ы сам Windows рисует.
С ручной отрисовкой - потомки TCustomControl/TGraphicControl.