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

如何動態改變在TDBCtrlGrid上各DBEdit顏色??

尚未結案
ju1977
一般會員


發表:9
回覆:9
積分:3
註冊:2002-07-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-10 15:47:01 IP:211.22.xxx.xxx 未訂閱
在TDBCtrlGrid上放數個DBEdit元件,並在執行期動態判斷 分數69~60為黃色;分數59以下為紅色 麻煩各為高手指教!謝謝! 姓名 國文 數學 英文 ---- ---- ---- ---- AA 89 65 100 BB 98 96 45 CC 78 67 56
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-10 17:38:29 IP:218.16.xxx.xxx 未訂閱
直接改 DBEdit 顏色我做不到,這樣可以嗎? :     若可以我才 post 範例。(太忙)
ju1977
一般會員


發表:9
回覆:9
積分:3
註冊:2002-07-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-10 18:19:17 IP:211.22.xxx.xxx 未訂閱
是字要變顏色 tdbedit.Font.Color := clRed
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-10 18:33:25 IP:218.16.xxx.xxx 未訂閱
那祝你好運了 
ju1977
一般會員


發表:9
回覆:9
積分:3
註冊:2002-07-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-10 18:48:31 IP:211.22.xxx.xxx 未訂閱
可否請你post在TDBEdit外框變顏色範例 3q
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-10 20:58:39 IP:218.32.xxx.xxx 未訂閱
試試 :
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
  Index: Integer);
begin
  if DBCtrlGrid.DataSource.DataSet.FieldByName('Score').AsInteger < 60 then
    DBCtrlGrid.Font.Color := clRed
  else if DBCtrlGrid.DataSource.DataSet.FieldByName('Score').AsInteger < 70 then
    DBCtrlGrid.Font.Color := clYellow
  else
    DBCtrlGrid.Font.Color := clWindowText;
end;    
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-10 22:54:29 IP:211.76.xxx.xxx 未訂閱
應該把程式寫在DataSte之AfterScroll事件中
假設 SCORE1國文 -> DBEDIT1
     SCORE2數學 -> DBEDIT2
     SCORE3英文 -> DBEDIT3    procedure TForm1.Query1AfterScroll(DataSet: TDataSet);
var score:Double;
begin
  Score:=DataSet.FieldByName('Score1').AsFloat; //國文
  if Score<=59 then 
     DbEdit1.Font.Color:=clRed
  else
     if Score<=69 then 
        DbEdit1.Font.Color:=clYellow
     else
        DbEdit1.Font.COlor:=clGreen;       Score:=DataSet.FieldByName('Score2').AsFloat; //數學
  if Score<=59 then 
     DbEdit2.Font.Color:=clRed
  else
     if Score<=69 then 
        DbEdit2.Font.Color:=clYellow
     else
        DbEdit2.Font.COlor:=clGreen;       Score:=DataSet.FieldByName('Score3').AsFloat; //英文
  if Score<=59 then 
     DbEdit3.Font.Color:=clRed
  else
     if Score<=69 then 
        DbEdit3.Font.Color:=clYellow
     else
        DbEdit3.Font.COlor:=clGreen; 
       
end;        
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-10 23:20:08 IP:218.16.xxx.xxx 未訂閱
jul977    剛才吃飯回來見你不需要沒存檔 反正不是你要的我懶得重做
ju1977
一般會員


發表:9
回覆:9
積分:3
註冊:2002-07-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-11 10:35:47 IP:211.22.xxx.xxx 未訂閱
正如 Justmade 所說的 Mickey、cmj的方法且不可行 還有沒有其它方法
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-11 21:23:59 IP:218.32.xxx.xxx 未訂閱
procedure SetFieldColor(Form: TForm; Field: TField);
var i : integer;
begin
  if Field <> nil then begin
  for i := 0 to Form.ComponentCount - 1 do
    if (Form.Components[i] is TDBEdit) and
       (TDBEdit(Form.Components[i]).Field <> nil) and
       (TDBEdit(Form.Components[i]).Field.FieldName=Field.FieldName) then begin
      if Field.AsInteger < 60 then
        TDBEdit(Form.Components[i]).Font.Color := clred
      else if Field.AsInteger <70 then
        TDBEdit(Form.Components[i]).Font.Color := clblue
      else
        TDBEdit(Form.Components[i]).Font.Color := clWindowText;
    end;
  end;
end;    procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
  Index: Integer);
var i : integer; dum : TDBEdit;
begin
  for i := 0 to TDBCtrlPanel(DBCtrlGrid.Controls[0]).ControlCount-1 do
    if (TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i] is TDBEdit) and
       (TDBEdit(TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i]).Field <> nil) and
       (TDBEdit(TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i]).Field.FieldName<>'姓名') then
      SetFieldColor(self,TDBEdit(TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i]).Field);
end;    procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var i : integer; dum : TDBEdit;
begin
  if (Table1<>nil) then begin
    for i := 0 to Table1.Fields.Count-1 do
    if Table1.Fields[i].FieldName <> '姓名' then
      SetFieldColor(self,Table1.Fields[i]);
  end;
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  Table1.Close;
  Table1.Open;
end;
記得執行時再 Open Table1 喔, 不然會如 Justmade 兄所說, Actived TDBCtrlPanel 有問題, 我也不知為何 ?
ju1977
一般會員


發表:9
回覆:9
積分:3
註冊:2002-07-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-12 12:08:39 IP:211.22.xxx.xxx 未訂閱
可以了,謝謝各位!!
系統時間:2024-11-25 12:55:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!