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

Dbgrid 欄位圈選加總問題

尚未結案
miguel
一般會員


發表:26
回覆:20
積分:9
註冊:2002-03-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-25 11:31:30 IP:61.221.xxx.xxx 未訂閱
各位 先進/高手 大家好,小弟又來 問 問題了  src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=11872729&CC=265531"> < >< >
Mickey
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-25 19:39:35 IP:218.32.xxx.xxx 未訂閱
試試看 :
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-26 09:25:50 IP:61.221.xxx.xxx 未訂閱
感謝 Mickey 版主的 回覆,終於可以動了耶!! 真是太感謝了!!< >< > 不過 如果 我要 加總的欄位有空值就會出現如下訊息 這該如何解決啊?? 原諒小弟才疏學淺,也感謝 Mickey 版主的解答!!
Mickey
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-26 14:33:39 IP:218.163.xxx.xxx 未訂閱
多一個 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-26 17:06:57 IP:61.221.xxx.xxx 未訂閱
感謝 Mickey 版主的回覆,解決我的問題了!! 真是 感謝 !!
領航天使
站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-29 19:55:41 IP:211.76.xxx.xxx 未訂閱
引言: 多一個 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);
       
用strtofloatdef(StatusBar1.Panels[0].Text,0)更方便喔 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
Mickey
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-29 22:39:44 IP:218.32.xxx.xxx 未訂閱
謝謝天使...< >又學到了...< >
miguel
一般會員


發表:26
回覆:20
積分:9
註冊:2002-03-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-30 09:11:43 IP:61.221.xxx.xxx 未訂閱
感謝 領航天使 & Mickey 兩位版主的耐心教導!!  < >< >< > 因為使用拖曳滑鼠,會有無法跨頁(無法拖曳過去) 能否改為使用按 >< >
Mickey
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-30 15:24:15 IP:218.163.xxx.xxx 未訂閱
被點名了... 舉一隅, 至少也一隅返吧...加油 ! 不過呢...送佛送到西...阿彌陀佛 :
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-30 17:16:27 IP:61.221.xxx.xxx 未訂閱
感謝 Mickey 兄,真是麻煩 你不少    < >< > 我會多加油的 !! THANKS!!!
Mickey
版主


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-30 21:20:34 IP:218.32.xxx.xxx 未訂閱
對不起...我口吻稍嫌嚴厲了一些...    只是希望一個問題除了獲得解決之外,    問答雙方都能有所收穫, 而非單純"解決"問題...    此篇的重點在於 Class 的繼承與運用, 希望你    "解決"問題後, 能進一步了解這些觀念, 未來    若遇到類似的問題, 就能游刃有餘...
miguel
一般會員


發表:26
回覆:20
積分:9
註冊:2002-03-30

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-10-01 09:08:35 IP:61.221.xxx.xxx 未訂閱
不會啦!! 我真的 很感激 有這塊園地 更感謝 Mickey 兄的 傳授!! 其實 我這一系列的問題,都是在模擬EXCEL 的功能 當然 還是要教育USER,使用上的觀念!!
系統時間:2024-05-06 18:49:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!