델파이 TDBGrid 다중 선택시 깔끔한 선택 모양
델파이 TDBGrid 에서 Ctrl키 Shift 등으로 multi selected 할 경우 선택된 것을 다시 클릭하여 선택취소할 경우 그림처럼 현재 선택셀이 Selected와 무관하게 항상 파란색 컬러로 선택되어 헤갈려 보일경우가 있다
이럴경우 onDrawColumnCell 이벤트에 다음과 같이 코딩하면 다음 그림처럼 깔끔한 모양이 보여진다.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if TDBGrid(Sender).SelectedRows.CurrentRowSelected =False then
begin
TDBGrid(Sender).Canvas.Brush.Color := clWindow; //clWhite;
TDBGrid(Sender).Canvas.Font.Color := clWindowText; //clBlack;
end;
TDBGrid(Sender).Canvas.FillRect(Rect);
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
물론 다중선택시 TDBGrid의 옵션은 다음과 같이 설정한다.
(추가)
//한줄레코드 색깔넣기, 다중선택 깔끔하게
if qrHw300_list.FieldByName('WORK_CHK').AsString = '재직' then
begin
if TDBGrid(Sender).SelectedRows.CurrentRowSelected = True then
begin
TDBGrid(Sender).Canvas.Brush.Color := clHighlight;
TDBGrid(Sender).Canvas.Font.Color := clWhite;
end
else
begin
TDBGrid(Sender).Canvas.Brush.Color := clWhite;
TDBGrid(Sender).Canvas.Font.Color := clBlack;
end;
end
else //퇴직
begin
if TDBGrid(Sender).SelectedRows.CurrentRowSelected = True then
begin
TDBGrid(Sender).Canvas.Brush.Color := clHighlight;
TDBGrid(Sender).Canvas.Font.Color := clRed;
end
else
begin
TDBGrid(Sender).Canvas.Brush.Color := clWhite;
TDBGrid(Sender).Canvas.Font.Color := clRed;
end;
end;
TDBGrid(Sender).Canvas.FillRect(Rect);
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);