![]() |
只能顯示“(MEMO)”這種形式顯然不能夠滿足用戶的需要,為了能夠使得數據被實際顯示出來,我們需要寫一些代碼,對DBGrid做一點功能上的增強。首先,我們要先在數據庫中建立一張表,命名為TestTable,這張表中至少要有一個MEMO類型的字段,把它命名為Data。然后我們來給字段的OnGetText事件寫一段代碼實現上面的需求。操作步驟如下:
1. 把你的TDataset組件與剛才新建的數據庫中的TestTable表相連接。
2. 雙擊TDataset組件來打開字段編輯器(Fields editor)。
3. 添加MEMO字段Data.
4. 選中該字段,在對象檢查器中(Object Inspector)雙擊OnGetText事件建立事件句柄。
編寫代碼如下:
| procedure TForm1.DBTableDataGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text := Copy(DBTableData.AsString, 1, 50); end; |
TDataset對象的名字是“DBTable”,MEMO字段的名字是“Data”,因此缺省情況下連接到MEMO字段的TMEMOField名字是“DBTableData”。我們在代碼中告訴DBGrid將MEMO字段顯示成文本方式,就是把實際的內容顯示出來。這里有一個值得注意的地方,因為MEMO字段可以容納比較多的文本,在DBGrid中全部顯示出來的話,DBGrid就會被撐得很大,所以我們做了限制,只是把MEMO中的前50個字符顯示出來。(如圖2)
![]() |
顯示的工作完成之后,我們還想對顯示出來的文本進行編輯,這在缺省狀態下是不可以實現的,我們準備另建一個窗體,在上面放置一個DBMemo組件,用它來對文本進行編輯,思考到這里還有一個需要解決的問題,如何來觸發一次編輯過程呢?就用鍵盤的回車鍵吧,當記錄指針指向這條記錄時,按下回車鍵,則彈出一個窗體,上面的DBMemo組件可以顯示并且編輯文本。實現代碼如下:
| procedure TForm1.DBGrid1KeyDown( Sender: TObject; var Key: Word; Shift: TShiftState); begin //如果按下的是回車鍵則觸發下面的代碼 if Key = VK_RETURN then begin if DBGrid1.SelectedField = DBTableData then //建立新的窗體 with TMemoEditorForm.Create(nil) do try //讀取數據庫中的數據用DBMemo來顯示 DBMemoEditor.Text := DBTableData.AsString; ShowModal; DBTable.Edit; DBTableData.AsString := DBMemoEditor.Text; finally Free; end; end; end; |
上面的步驟實現之后,實際的程序運行效果是這樣的(如圖3)。
![]() |
動動你的腦筋、理清思路、列出算法,很多知名軟件中的很酷功能我們都能夠來實現,各位讀者月友,打開DELPHI,體驗一下吧。



