2014-02-07 45 views
0

我在Delphi應用程序中使用SMDBGrid來顯示和編輯數據,作爲MySQL查詢的結果。如何突出顯示DBgrid(SMDBGrid)中單擊的單元格中的數據?

我想了解如何使網格在編輯數據時以我想要的方式運行。

單元格中的數據最初以白色背景上的黑色字體顯示。

  1. 如果我留在一個單元格方含數據點擊一次,細胞變爲 白色字體在白色背景上(或者數據剛剛消失) ,我無法看到的數據進行編輯。

  2. 如果我再次在同一個單元格中單擊,我會在 藍色背景上獲得一個白色字體。我可以看到數據並且可以編輯它。

  3. 如果我在同一個單元格中第三次點擊,我在 白色背景上獲得了黑色字體(就像其他單元格一樣)。我可以看到數據並且可以編輯它。

  4. 雙擊單元格一次表現得像(1),雙擊 此後始終表現得像(2)

問題

如何設置它,以便左鍵點擊一旦在一個單元格中讓我編輯該單元格而不改變顏色?即像上面(3)中的行爲一樣,繼續在該單元原本具有的任何背景顏色上顯示黑色字體。

其他信息,可能是相關

運行查詢來填充我把它進入編輯模式與

  • Query1.edit
  • 電網後

我有一個網格中的OnMouseDown事件檢測到右鍵單擊並顯示一個PopUpMenu,它提供選項並在記錄的其他字段中設置值。還有一個OnGetCellParams事件,它根據這些其他字段中的值設置單元格的背景顏色。爲了讓彈出菜單中能正常工作並沒有顯示(內置?)的編輯菜單時右點擊,通過試驗和錯誤我設置

  • POPUPMENU = MyPopUpMenu
  • dgEditing =真
  • dgAlwaysShowEditor =真
  • dgAlwaysShowSelection =假

,但我真的不知道我在做什麼在那裏。

無論如何,通過刪除OnMouseDown和OnGetCellParams事件並將PopUpMenu設置爲'''來移除所有這些似乎與單擊LEFT時出現的情況沒有什麼區別。數據仍然變白。

回答

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; 
相關問題