線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2126
推到 Plurk!
推到 Facebook!

OnDrawColumnCell 問題?

尚未結案
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-24 22:30:53 IP:202.175.xxx.xxx 未訂閱
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if adoTable1.FieldByName('rtt_group').AsString = 'A' then DBGrid1.Canvas.Font.Color := clRed; DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Fields[DataCol], State); end; 本人編寫了上述的程式碼,但只有在OnDrawColumnCell時生效,但我想編寫一procedure 或 function 每當執行該procedure 時才把上述的代碼生效,請問應該怎樣編寫代碼?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-24 23:06:43 IP:211.20.xxx.xxx 未訂閱
引言: procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if adoTable1.FieldByName('rtt_group').AsString = 'A' then DBGrid1.Canvas.Font.Color := clRed; DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Fields[DataCol], State); end; 本人編寫了上述的程式碼,但只有在OnDrawColumnCell時生效,但我想編寫一procedure 或 function 每當執行該procedure 時才把上述的代碼生效,請問應該怎樣編寫代碼?
chrislao 你好 1.程式照目前方式撰寫 2.然後在Form.OnCreate事件中加入DBGrid1.OnDrawColumnCell := nil ;//把事件關聯切斷 3.在你說的Procedure中如此寫法
Procedure TForm1.someProcedure;
Begin
  DBGrid1.OnDrawColumnCell :=DBGrid1DrawColumnCell ; // 掛上事件後才會執行該事件的程序
  .......
  // 做你想做的事
  ........
  DBGrid1.OnDrawColumnCell :=nil; ; // 切斷事件
End;
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-24 23:33:22 IP:202.175.xxx.xxx 未訂閱
但我想因應我的選擇把不同的資料行變色 if adoTable1.FieldByName('rtt_group').AsString = 'A' 例如我用一個combobox選擇再, 如combobox的內容是a,代碼就是rtt_group=a,dbgrid內rtt_group=a的資料行都變紅色 如combobox的內容是b,代碼就是rtt_group=b,dbgrid內rtt_group=b的資料行都變紅色 如要實現上述的功能,請問怎樣編寫代碼?    
引言:
引言: procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if adoTable1.FieldByName('rtt_group').AsString = 'A' then DBGrid1.Canvas.Font.Color := clRed; DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Fields[DataCol], State); end; 本人編寫了上述的程式碼,但只有在OnDrawColumnCell時生效,但我想編寫一procedure 或 function 每當執行該procedure 時才把上述的代碼生效,請問應該怎樣編寫代碼?
chrislao 你好 1.程式照目前方式撰寫 2.然後在Form.OnCreate事件中加入DBGrid1.OnDrawColumnCell := nil ;//把事件關聯切斷 3.在你說的Procedure中如此寫法
Procedure TForm1.someProcedure;
Begin
  DBGrid1.OnDrawColumnCell :=DBGrid1DrawColumnCell ; // 掛上事件後才會執行該事件的程序
  .......
  // 做你想做的事
  ........
  DBGrid1.OnDrawColumnCell :=nil; ; // 切斷事件
End;
發表人 - chrislao 於 2004/05/24 23:42:46 發表人 - chrislao 於 2004/05/24 23:44:14
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-25 00:02:14 IP:203.67.xxx.xxx 未訂閱
整行變色,字形顏色不能一樣否則就看不到了    
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if adoTable1.FieldByName('rtt_group').AsString = 'A'then
  begin
    DBGrid1.Canvas.Brush.Color:=clRed;
    DBGrid1.Canvas.Rectangle(Rect);
  end
  else 
  if adoTable1.FieldByName('rtt_group').AsString = 'B'then
  begin
    DBGrid1.Canvas.Brush.Color:=clBlue;
    DBGrid1.Canvas.Rectangle(Rect);
  end;      DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Fields[DataCol], State);
end;
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-25 00:12:25 IP:202.175.xxx.xxx 未訂閱
我只是想用紅色標出用combobox所選擇的組別,不是用不同的顏色標出不同的組別.    
引言: 整行變色,字形顏色不能一樣否則就看不到了
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if adoTable1.FieldByName('rtt_group').AsString = 'A'then
  begin
    DBGrid1.Canvas.Brush.Color:=clRed;
    DBGrid1.Canvas.Rectangle(Rect);
  end
  else 
  if adoTable1.FieldByName('rtt_group').AsString = 'B'then
  begin
    DBGrid1.Canvas.Brush.Color:=clBlue;
    DBGrid1.Canvas.Rectangle(Rect);
  end;      DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Fields[DataCol], State);
end;
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-25 00:33:40 IP:203.204.xxx.xxx 未訂閱
引言: 我只是想用紅色標出用combobox所選擇的組別,不是用不同的顏色標出不同的組別.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  If adoTable1.FieldByName('rtt_group').AsString = 'A' Then Begin
    DBGrid1.Canvas.Font.Color:=clRed; // 字紅色
    DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Fields[DataCol], State);
  End;
End;
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-25 09:26:59 IP:218.15.xxx.xxx 未訂閱
引言: 我只是想用紅色標出用combobox所選擇的組別,不是用不同的顏色標出不同的組別.
chrislao你好: 你要的是不是这种效果: procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if adoTable1.FieldByName('rtt_group').AsString=combobox1.Text then DBGrid1.Canvas.Font.Color := clRed; DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Fields[DataCol], State); end; procedure TForm1.ComboBox1Change(Sender: TObject); begin dbgrid1.Columns.RestoreDefaults; end; 则会根据combobox1选择的组别,对应字体变红,试试看 ——行径窄处,留一步与人行—— ===== 为什么,经过多年以后,得失的过程如此冷漠 为什么,经过多年以后,风干的伤口心痛依旧 發表人 -
系統時間:2024-05-19 2:14:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!