Dbgrid 欄位圈選加總問題 |
尚未結案
|
miguel
一般會員 發表:26 回覆:20 積分:9 註冊:2002-03-30 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
試試看 :
type DumClass = class(TCustomGrid); TForm1 = class(TForm) Table1: TTable; DataSource1: TDataSource; DBGrid1: TDBGrid; StatusBar1: TStatusBar; procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private SelectRect : TRect; CG : TGridCoord; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var MG : TGridCoord; ColChanged : Boolean; Sum : real; begin if SSLeft in Shift then begin MG := DBGrid1.MouseCoord(X,Y); ColChanged := (MG.X<>CG.X) or (CG.X = 0); if ColChanged then begin if CG.Y=0 then CG.Y:=MG.Y; SelectRect :=DumClass(DBGrid1).CellRect(MG.X,CG.Y); DBGrid1.Canvas.Brush.Color := clRed; DBGrid1.Canvas.FrameRect(SelectRect); if StatusBar1.Panels[0].Text='' then Sum := 0 else Sum := StrtoFloat(StatusBar1.Panels[0].Text); StatusBar1.Panels[0].Text := FloatToStr(sum strtofloat(DumClass(DBGrid1).GetEditText(MG.X,CG.Y))); CG.X := MG.X; end; end; end; procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin DBGrid1.Invalidate; CG.X := 0; CG.Y := 0; StatusBar1.Panels[0].Text := '0'; end;發表人 - Mickey 於 2003/09/25 19:53:33 |
miguel
一般會員 發表:26 回覆:20 積分:9 註冊:2002-03-30 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
多一個 if 或用 try except 阿...這...有點誇張了喔....
var inc : real; begin ... if StatusBar1.Panels[0].Text='' then Sum := 0 else Sum := StrtoFloat(StatusBar1.Panels[0].Text); try inc := strtofloat(DumClass(DBGrid1).GetEditText(MG.X,CG.Y)); except inc := 0; end; StatusBar1.Panels[0].Text := FloatToStr(sum inc); |
miguel
一般會員 發表:26 回覆:20 積分:9 註冊:2002-03-30 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 多一個 if 或用 try except 阿...這...有點誇張了喔....用strtofloatdef(StatusBar1.Panels[0].Text,0)更方便喔 ~~~Delphi K.Top討論區站長~~~var inc : real; begin ... if StatusBar1.Panels[0].Text='' then Sum := 0 else Sum := StrtoFloat(StatusBar1.Panels[0].Text); try inc := strtofloat(DumClass(DBGrid1).GetEditText(MG.X,CG.Y)); except inc := 0; end; StatusBar1.Panels[0].Text := FloatToStr(sum inc);
------
~~~Delphi K.Top討論區站長~~~ |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
miguel
一般會員 發表:26 回覆:20 積分:9 註冊:2002-03-30 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
被點名了...
舉一隅, 至少也一隅返吧...加油 !
不過呢...送佛送到西...阿彌陀佛 :
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Grids, DBGrids, DB, DBTables, Math; type DumClass = class(TCustomGrid); TForm1 = class(TForm) Table1: TTable; DataSource1: TDataSource; DBGrid1: TDBGrid; StatusBar1: TStatusBar; procedure DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } SelectRect : TRect; CG : TGridCoord; Selecting : Boolean; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var C,D : TRect; begin if (ssShift in Shift) then begin if (not Selecting) then begin CG.X := DumClass(DBGrid1).Col; CG.Y := DumClass(DBGrid1).Row; Selecting := True; StatusBar1.Panels[0].Text := 'Selecting...'; end; C := DumClass(DBGrid1).CellRect(CG.X,CG.Y); D := DumClass(DBGrid1).CellRect(DumClass(DBGrid1).Col,DumClass(DBGrid1).Row); SelectRect.Left := min(C.Left,D.Left); SelectRect.Right := max(C.Right,D.Right); SelectRect.Top := C.Top; SelectRect.Bottom := C.Bottom; DBGrid1.Canvas.Brush.Color := clRed; DBGrid1.Canvas.FrameRect(SelectRect); end; end; procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var i : integer; Sum : real; begin if (Shift=[])and(key=16)and(Selecting) then begin sum := 0; for i := min(CG.X, DumClass(DBGrid1).Col) to max(CG.X, DumClass(DBGrid1).Col) do sum := sum strtofloatdef(DumClass(DBGrid1).GetEditText(i,CG.Y),0); StatusBar1.Panels[0].Text := FloatToStr(sum); Selecting := False; DBGrid1.Invalidate; end; end; end. |
miguel
一般會員 發表:26 回覆:20 積分:9 註冊:2002-03-30 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
miguel
一般會員 發表:26 回覆:20 積分:9 註冊:2002-03-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |