[英]How to use onDrawColumnCell to change cell text without using textout on Delphi?
我想問一下是否有另一種方法可以在不使用TextOut()
的情況下更改單元格文本? 使用TextOut()
需要我不想混入的坐標。 此外,我只想更改文本並保留其他所有內容,如顏色、字體、alignment 等。
我的目的是改變不同場景中文本的顯示。 例如:
MM/yyyy
中,另一列顯示在MM/dd/yyyy
中。 我知道如果TDBGrid
是“可編輯的”,這將是進行編輯的一項艱巨挑戰。 所以我打算在不可編輯的網格中使用任何解決方案。 而且,我不想轉向TStringGrid
,因為我發現TDBGrid
很容易處理數據集。
順便說一句,我正在使用 Delphi 7。
對於僅在特定條件下將特定單元格留空,是否可以發出“退出”以跳過將單元格值顯示到單元格本身?
喜歡:
procedure Tform1.dbgrdDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.fieldname = 'total') and (column.field.value=0) then
exit
else
dbgrdsku.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
如果您正在使用TDBGrid
和數據源,在直接選擇在Grid
中進行更改之前,請檢查在數據源(在TFields
上)中進行更改是否有用。
使用Datasource
不會花費那么多資源進行繪畫。 到達該點(繪制)后,數據可能已經更改。
您可以在TDataset
后代(TQuery、TADOQuery、TFDQuery 等)上創建TFields
,並使用OnGetText
事件更改要繪制的文本。 更簡單更好。
如果你是這樣的兩個字段:
使用像這樣使用兩個字段的OnGetText
的簡單代碼:
procedure TForm3.ADOQuery1DatosGrupoGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
// too hight for number greater than 5
if (not Sender.IsNull) then
if (Sender.AsInteger > 5) then
Text := 'too hight!'
else
Text := Sender.AsString;
end;
procedure TForm3.ADOQuery1fechaGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
// Change the date format
if (not Sender.IsNull) then
Text := formatDateTime('MM/yyyy', Sender.AsDateTime)
end;
你得到了這個結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.