如何在dbgrid中顯示進度progressbar? |
答題得分者是:andersonhsieh
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
給你一段程式碼參考
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 發送簡訊給我 |
版主大人:
我修正後的程式碼如下
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 發送簡訊給我 |
|
Perlman
一般會員 發表:0 回覆:5 積分:1 註冊:2002-03-14 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
改成以下程式
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 發送簡訊給我 |
各位前輩,我已測試成功了,謝謝各位的建議
//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;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |