델파이

델파이 TDBGrid 다중 선택시 깔끔한 선택 모양

미스터몽키 2015. 5. 16. 16:39

델파이 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);