如何動態改變在TDBCtrlGrid上各DBEdit顏色?? |
尚未結案
|
ju1977
一般會員 發表:9 回覆:9 積分:3 註冊:2002-07-16 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
ju1977
一般會員 發表:9 回覆:9 積分:3 註冊:2002-07-16 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
ju1977
一般會員 發表:9 回覆:9 積分:3 註冊:2002-07-16 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
試試 :
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 發送簡訊給我 |
應該把程式寫在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 發送簡訊給我 |
|
ju1977
一般會員 發表:9 回覆:9 積分:3 註冊:2002-07-16 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |