1
다음 코드를 사용하여 DBGrid 내에 체크 박스를 표시하고 있습니다.델파이 : DBGrid (테마) 안에 체크 박스 넣기
가 가uses Vcl.Themes;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
CtrlState: Array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
CtrlStateXP: Array[Boolean] of TThemedButton = (tbCheckBoxUncheckedNormal, tbCheckBoxCheckedNormal);
var
CheckBoxRectangle : TRect;
Details: TThemedElementDetails;
begin
if Column.Field.DataType = ftBoolean then
begin
Column.Title.Alignment := taCenter;
Column.Alignment := taCenter;
TDBGrid(Sender).Canvas.FillRect(Rect);
if ThemeServices.ThemesEnabled then
begin
Details := ThemeServices.GetElementDetails(CtrlStateXP[Column.Field.AsBoolean]);
ThemeServices.DrawElement(TDBGrid(Sender).Canvas.Handle, Details, Rect);
end
else
begin
CheckBoxRectangle.Left := Rect.Left + 2;
CheckBoxRectangle.Right := Rect.Right - 2;
CheckBoxRectangle.Top := Rect.Top + 2;
CheckBoxRectangle.Bottom := Rect.Bottom - 2;
DrawFrameControl(TDBGrid(Sender).Canvas.Handle, CheckBoxRectangle, DFC_BUTTON, CtrlState[Column.Field.AsBoolean]);
end;
end;
end;
가 그것은 내가 행을 통해 이동하는 경우를 제외하고 잘 작동하고
이 스타일이된다 : 그것은 (적어도에 예상) 모두 테마 아닌 테마 VCL 스타일 이 (XE2, XE7 베를린에서 테스트) 작동
어떤 도움 : 울부 짖는 소리 같은 '이상한'? 감사합니다. . 난 그냥 다음 행을 추가 자신에 의해 방법을 적응하기 위해 관리했습니다 몇 가지 시도와 연구 후
FillRect가 잘못되었습니다. 부모님 배경을 그리는 데 테마 서비스를 제공해서는 안됩니까? –