簡體   English   中英

如何突出顯示DBgrid(SMDBGrid)中單擊的單元格中的數據?

[英]How to highlight data in clicked cell in a DBgrid (SMDBGrid)?

我在Delphi應用程序中使用SMDBGrid來顯示和編輯數據,這是來自MySQL查詢的結果。

我希望獲得一些幫助,以幫助您理解如何在編輯數據時使網格表現出我想要的方式。

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

  1. 如果我在包含數據的單元格中單擊一次,則該單元格將變為白色背景上的白色字體(或者數據可能消失了),而我看不到要編輯的數據。

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

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

  4. 雙擊單元格一次就像(1),然后雙擊總是像(2)

如何設置它,以便在單元格中單擊一次僅使我可以在不更改顏色的情況下編輯該單元格? 也就是說,其行為類似於上面的(3),在單元格最初具有的任何背景顏色上繼續顯示黑色字體。

其他可能相關的信息

運行查詢以填充網格后,我將其置於編輯模式

  • Query1.edit

我確實在Grid中有一個OnMouseDown事件,該事件檢測到右鍵單擊並顯示一個PopUpMenu,該菜單提供選擇並在記錄的其他字段中設置值。 還有一個OnGetCellParams事件,它根據這些其他字段中的值設置單元格的背景顏色。 為了使彈出菜單正常工作,並且右鍵單擊時不顯示(內置?)編輯菜單(通過反復試驗,我設置了該菜單)

  • PopUpMenu = MyPopUpMenu
  • dgEditing = true
  • dgAlwaysShowEditor = true
  • dgAlwaysShowSelection = false

但我不確定自己在那做什么。

無論如何,通過刪除OnMouseDown和OnGetCellParams事件並將PopUpMenu設置為''來刪除所有內容,似乎與單擊單元格時發生的情況沒有任何區別。 數據仍然變白。

我現在找到了一種執行此操作的方法,但是不確定這是否是正確/最佳的執行方法,因為似乎我必須通過編寫我認為會自動發生的代碼來執行此操作。 無論如何,我通過使用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; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM