2014-02-07 3 views
0

저는 델파이 애플리케이션에서 SMDBGrid를 사용하여 MySQL의 쿼리 결과를 보여주고 편집합니다.DBgrid (SMDBGrid)에서 클릭 한 셀의 데이터를 강조 표시하는 방법은 무엇입니까?

그리드를 데이터 편집시 원하는대로 동작시키는 방법을 이해하는 데 도움이되고 싶습니다.

셀의 데이터는 초기에 흰색 배경에 검은 색 글꼴로 표시됩니다.

  1. 나는 셀 containg 데이터를 한 번 클릭하여두면, 흰색 배경에 흰색 글꼴 셀 변경 (아니면 데이터가 바로 사라) 내가 편집 할 데이터를 볼 수 없습니다 .

  2. 동일한 셀에서 다시 한 번 왼쪽 클릭하면 파란색 배경에 흰색 글꼴이 나타납니다. 데이터를 볼 수 있으며 편집 할 수 있습니다.

  3. 동일한 셀에서 세 번째로 왼쪽 클릭하면 흰색 배경에 검정색 글꼴이 나타납니다 (다른 셀과 마찬가지로). 데이터를 볼 수 있으며 편집 할 수 있습니다.

  4. DOUBLE 셀을 클릭하면 한 번 (1), 더블 클릭 그 이후 항상 내가 그것을 설정하는 방법 (2)

질문

를 같이 동작처럼 작동되도록 왼쪽 버튼으로 클릭 한 번 세포에서 색깔을 바꾸기없이 그 세포를 편집하는 것을 허용합니까? 즉 위의 (3)에서와 같이 행동하면 셀이 배경색을 가졌을 때 검정색 글꼴이 계속 표시됩니다.

관련이있을 수 다른 정보는

내가 Query1.edit

  • 와 편집 모드로 전환 그리드를 채우는 쿼리를 실행 한 후

나는이 있습니까 오른쪽 클릭을 감지하는 Grid의 OnMouseDown 이벤트이며 선택 항목을 제공하고 레코드의 다른 필드에 값을 설정하는 PopUpMenu를 표시합니다. 이러한 다른 필드의 값에 따라 셀의 배경색을 설정하는 OnGetCellParams 이벤트도 있습니다. = true를 바로 클릭 할 때 시행 착오를 내가 설정함으로써 (내장?) 편집 메뉴를 표시

  • POPUPMENU = MyPopUpMenu
  • dgEditing = 사실
  • dgAlwaysShowEditor을 제대로 작동하지 할 수있는 팝업 메뉴를 얻으려면

거짓 dgAlwaysShowSelection =하지만 난 거기 뭐하는 거지 정말 모르겠어요.

어쨌든 OnMouseDown 및 OnGetCellParams 이벤트를 제거하고 PopUpMenu를 ''로 설정하여 모든 셀을 제거하면 셀을 왼쪽 클릭했을 때와 아무런 차이가없는 것으로 보입니다. 데이터는 여전히 흰색으로 변했습니다.

답변

1

나는 지금이 방법을 찾았지만 정확하고 최선의 방법인지는 모르겠다. 자동적으로 일어 났을 것으로 생각되는 코드로해야만하는 것처럼 보인다. 어쨌든 OnDrawColumnCell 이벤트를 사용하여 동작을 얻었습니다.

procedure TFrmDataEntry.SMDBGrid1DrawColumnCell(Sender: TObject; 
    const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); 
begin 
//when they click in a cell, temporarily set the background to white and the font to bold black 
if (gdSelected in State) then 
    begin 
    TDBGrid(Sender).Canvas.Brush.Color := clwhite; 
    TDBGrid(Sender).Canvas.Font.Style := Font.Style + [fsBold]; 
    TDBGrid(Sender).Canvas.Font.Color := clblack; 
    end; 
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); //Update the grid so it takes effect 
end;