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

如何在dbgrid中顯示進度progressbar?

答題得分者是:andersonhsieh
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-10 10:49:21 IP:211.74.xxx.xxx 未訂閱
如主題, 3Q
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-12 21:06:44 IP:61.219.xxx.xxx 未訂閱
引言: 如主題, 3Q
可否再詳細描述您的問題需求,可能大夥都看不太懂吧? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-13 13:12:03 IP:211.74.xxx.xxx 未訂閱
我希望在dbgrid中呈現 每一筆記錄某一固定欄位(cell)-->進度百分比 以兩種顏色(背景白色、前景藍色), 當進度百分比為100%,該筆cell是藍色的, 若進度百分比為 50%,該筆cell左半部是藍色的,左半部是白色的, 並且能在該cell上顯示目前的百分比為多少%, 就像是把Tprogressbar元件放在DBgrid上一樣,不知各位前輩是否能理解呢?    
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-13 13:27:39 IP:211.20.xxx.xxx 未訂閱
是否試著在onDrawDataCell自己將背景顏色畫上去,至於如何做可參考以前的文章 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-13 15:56:44 IP:211.74.xxx.xxx 未訂閱
版主您好: 感謝您撥空答覆...... 問題是出在,顏色要占該cell的百分比(依比例), 若是修改整個cell的color,我是可以達成的. 3Q
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-13 16:01:21 IP:211.20.xxx.xxx 未訂閱
那你又如何知道到在是50%或100% @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-13 16:07:51 IP:211.74.xxx.xxx 未訂閱
我會透過每一筆記錄的某二個欄位值 已完成數量 ---------- * 100% 應完成數量 來得知百分比,再加上用顏色管理的概念, 使用者比較容易看出異常的進度 版主3Q
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-13 16:23:52 IP:211.20.xxx.xxx 未訂閱
既然你知道百分比,就可以利用這一百分比去處理,因為在ONDRAWDATACELL會有一RECT的參數吧,將該RECT的WIDTH當成100%,那你可以透過改變WIDTH來達成不同百分比畫不同長度的藍色 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-13 16:56:49 IP:211.74.xxx.xxx 未訂閱
版主您好: 我是使用delphi 6 DBGrid 的 OnDrawColumnCell event 可否請您描述更清楚一點 Rect 的用法呢? 3Q
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-13 17:13:59 IP:211.20.xxx.xxx 未訂閱
可以參考一下這一篇文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20448 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-09-17 15:02:28 IP:61.30.xxx.xxx 未訂閱
版主您好: 那篇文章,我這兩天研究了一下,並無提到如何去改變Rect的寬度 可否請您再撥空賜教,3Q
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-09-17 17:23:41 IP:211.20.xxx.xxx 未訂閱
給你一段程式碼參考 procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var rs : TRect; lx, ly : Integer; begin if Column.FieldName = 'TOT_P' then begin lx := (Rect.Right - Rect.Left - Column.Width) div 2; ly := (Rect.Bottom - Rect.Top - 14) div 2; DBGrid1.Canvas.Brush.Color := clBlue; rs.Top := Rect.Top; rs.Left := Rect.Left; rs.Right := Rect.Left round(Column.Width*Table1NOW_COUNT.AsFloat/Table1TOT_COUNTQ.AsFloat); rs.Bottom := Rect.Bottom; DBGrid1.Canvas.FillRect(rs); end else DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-09-20 16:54:56 IP:61.30.xxx.xxx 未訂閱
版主大人: 我修正後的程式碼如下 procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var rs : TRect; lx, ly : Integer; begin if Column.FieldName = 'EDT040' then begin lx := (Rect.Right - Rect.Left - Column.Width) div 2; ly := (Rect.Bottom - Rect.Top - 14) div 2; DBGrid1.Canvas.Brush.Color := clBlue; rs.Top := Rect.Top; rs.Left := Rect.Left; rs.Right := Rect.Left ROUND(Column.Width/100)*DM.scdsPM_WORKPATH_STA['EDT040']; rs.Bottom := Rect.Bottom; DBGrid1.Canvas.FillRect(rs); DBGrid1.Columns[4].Color := clRed; DBGrid1.Columns[4].Font.Color := clWhite; end else DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; 功能上已經可用color顯示進度!3Q 但是我原本在該欄位會一併顯示文字,如 55% ,會被進度的顏色蓋掉, 不知如何處理?
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-09-20 17:00:02 IP:61.30.xxx.xxx 未訂閱
對不起,剛browser有問題,要我點<重送結果>, 結果就變成重貼了好幾次,sorry everybody
Perlman
一般會員


發表:0
回覆:5
積分:1
註冊:2002-03-14

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-09-20 17:33:06 IP:202.145.xxx.xxx 未訂閱
X := (Rect.Left Rect.Right)div 2 - TDBGrid(Sender).Canvas.TextWidth( '50%')div 2; TDBGRid(Sender).Canvas.TextOut( X, Rect.Top, '50%'); 的文字出現,至於放在中央,那就可以看到你'50%' 了
------
不會寫 Perl 的 Perlman
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-09-23 08:55:04 IP:61.30.xxx.xxx 未訂閱
大家早: 經我測試的結果 Canvas.Brush.Color 的等級比 Canvas.TextOut 優先 因此文字會被顏色蓋住,不知是否有更好的方式呢? 3Q
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2002-09-23 11:19:41 IP:211.20.xxx.xxx 未訂閱
你應該要變更你輸出文字的顏色吧 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#18 引用回覆 回覆 發表時間:2002-09-23 11:36:59 IP:211.20.xxx.xxx 未訂閱
改成以下程式
 
X := (Rect.Left Rect.Right)div 2 - DBGrid1.Canvas.TextWidth('50%')div 2;
Y := (Rect.Bottom Rect.Top)div 2 - DBGrid1.Canvas.TextHeight('50%')div 2;
DBGrid1.Canvas.Font.Color := clYellow;
DBGRid1.Canvas.TextRect(rs, X, Y, '50%');
@@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#19 引用回覆 回覆 發表時間:2002-10-03 08:32:11 IP:61.30.xxx.xxx 未訂閱
各位前輩,我已測試成功了,謝謝各位的建議 //nProgress為事先算出的百分比 //需另外處理進度為0的部分(使用case的語法) procedure TForm1.DrawColor(nProgress: Integer; const Rect: TRect; Column: TColumn); var rs : TRect; X, Y, lx, ly : Integer; begin //產生顏色進度 lx := (Rect.Right - Rect.Left - Column.Width) div 2; ly := (Rect.Bottom - Rect.Top - 14) div 2; DBGrid1.Canvas.Brush.Color := clRed; rs.Top := Rect.Top; rs.Left := Rect.Left; rs.Right := Rect.Left round(Column.Width/100)*nProgress div 2; rs.Bottom := Rect.Bottom; DBGrid1.Canvas.FillRect(rs); //在顏色上顯示文字 X := (Rect.Left Rect.Right) div 2 - DBGrid1.Canvas.TextWidth(inttostr(nProgress) '%') div 2; Y := (Rect.Bottom Rect.Top) div 2 - DBGrid1.Canvas.TextHeight(inttostr(nProgress) '%') div 2; DBGrid1.Canvas.Font.Color := clWhite; DBGRid1.Canvas.TextRect(rs, X, Y, inttostr(nProgress) '%'); end;
系統時間:2024-04-19 23:22:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!