Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.20.56] |
|
Сообщ.
#1
,
|
|
|
Добрый день, коллеги. Написал в D10 цветную заливку квадратика CheckBoxa.
Впоследствии оказалось, что при простом перемещении мыши над контролом без нажатий, цвет возвращается к стандартному function ChangeCheckBoxColor(Sender : TObject; SetColor : integer) : boolean; var wrkDC : HDC; cnv : TCanvas; rect : TRect; i : integer; begin wrkDC := GetDC(TCheckBox(Sender).Handle); cnv := TCanvas.Create; cnv.Handle := wrkDC; rect.Left:=2; rect.Top :=4; rect.Right:=11; rect.Bottom := 13; cnv.Brush.Color := SetColor; // цвет cnv.FillRect(rect); for i := 0 to 2 do begin // галка {Left-mid to left-bottom} cnv.MoveTo( 3, 7+i); cnv.LineTo( 6, 10+i); {Left-bottom to right-top} cnv.MoveTo( 6, 8+i); cnv.LineTo( 10, 4+i); end; cnv.Free; SetBkMode(wrkDC, TRANSPARENT); ReleaseDC(TCheckBox(Sender).Handle, wrkDC); result := True; end; Безрезультатно перерыл все форумы, Почему происходит перерисовка в стандарт? Где поставить запрет? |
Сообщ.
#2
,
|
|
|
Дядка а откуда колится эта ChangeCheckBoxColor?
|
Сообщ.
#3
,
|
|
|
По кнопке где-то в TForm1.bStartClick(Sender: TObject) вызывается закраска определенного CheckBoxa
if arrClearCb[i].Checked then begin // очистка .... ChangeCheckBoxColor(arrClearCb[i], clYellow); end; // очистка |
Сообщ.
#4
,
|
|
|
Система (Windows) перерисовывает чекбокс при каждой обработке сообщения WM_PAINT
Таки образом, надо или перехватывать это сообщение, или использовать темы с нужным цветом, или использовать свой (или готовый чужой) компонент с собственной отрисовкой. |
Сообщ.
#5
,
|
|
|
Спасибо, разбираться в перехватах или использовать новый компонент нет времени.
Буду использовать другие объекты для расцветки состояний мониторинга. |