全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2199
推到 Plurk!
推到 Facebook!

判斷滑鼠在DBGrid中的位置?

尚未結案
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-04 15:23:52 IP:219.145.xxx.xxx 未訂閱
各位先進好! 請問在DBGrid中如何判斷滑鼠的點擊 是在Record上,還是在DBGrid中空白處?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-04 16:23:50 IP:61.155.xxx.xxx 未訂閱
//判断在dbgrid记录中位置 procedure TForm1.DBGrid1CellClick(Column: TColumn); var col,row:integer; begin col:=column.Index ; row:=table1.RecNo ; edit1.Text :=inttostr(col) ; edit2.Text :=inttostr(row) ; end; //对于是否在在Record上,可以用    procedure TForm1.DBGrid1ColEnter(Sender: TObject); begin .... end;    procedure TForm1.DBGrid1ColExit(Sender: TObject); begin ..... end;    procedure TForm1.DBGrid1Enter(Sender: TObject); begin .... end;    procedure TForm1.DBGrid1Exit(Sender: TObject); begin .... end;    来判断的!
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-04 17:00:10 IP:219.145.xxx.xxx 未訂閱
Hi!sos_admin  區分點擊位置的原因如下:  1)如果在Record上DblClick,則把當前Record放到StringGrid中,  2)如果在DBGrid的空白處DblClick,應沒有資料放到StringGrid中,  但實際確將最後一個Record放到StringGrid中。   故有此問    
procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
 I:integer;
begin
 for I := 0 to  adoquery1.FieldCount-1 do
 begin
   stringgrid1.Cells[i,0]:=adoquery1.Fields[i].AsString;
 end;
end;
 
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-04 17:20:47 IP:61.155.xxx.xxx 未訂閱
如果在DBGrid的空白處DblClick,應沒有資料放到StringGrid中, 但實際確將最後一個Record放到StringGrid中。 没有发生这种情况的,请问您的〔空白處〕是指哪儿?
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-04 17:33:49 IP:211.21.xxx.xxx 未訂閱
引言: Hi!sos_admin 區分點擊位置的原因如下: 1)如果在Record上DblClick,則把當前Record放到StringGrid中, 2)如果在DBGrid的空白處DblClick,應沒有資料放到StringGrid中, 但實際確將最後一個Record放到StringGrid中。 故有此問
procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
 I:integer;
begin
 for I := 0 to  adoquery1.FieldCount-1 do
 begin
   stringgrid1.Cells[i,0]:=adoquery1.Fields[i].AsString;
 end;
end;
 
其實您在DBGrid的空白處Double Click,肯定會有資料寫入StringGrid中,會寫入StringGrid的原因是根據您的adoquery1的指標指向目前的那一筆,而不是因為您在DBGrid的空白處Double Click就不會寫資料到StringGrid中,所有這並不是程式的問題,您可以向user這樣解釋… ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-05 08:45:41 IP:61.134.xxx.xxx 未訂閱
Hi!SOS_admin,您好!  DBGrid空白处入图中所示: Hi!channel,您好! 晚輩是這樣設想:
 
  if DBGrid1Dbclick不在空白處 then
     begin
       for I := 0 to  adoquery1.FieldCount-1 do
        begin
         stringgrid1.Cells[i,0]:=adoquery1.Fields[i].AsString;
        end;
     end;
 
這樣在DBGrid中空白處Dbclick就不會有資料寫入.但如何判斷呢?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-05 16:08:33 IP:61.155.xxx.xxx 未訂閱
mathewzhao 兄: 使用dbgrid好象不能实现您这样的想法。 dbgrid 不能您点击左边或右边的空白区域,都会触发的---并且处理的是当前所指向的记录。 我想最好的方式,莫过于不显示您的空白区域哦
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-05 16:51:44 IP:61.150.xxx.xxx 未訂閱
Hi!SOS_admin兄,下午好!    人世間最大的痛苦莫過於此:感覺近在嘴邊,卻吃不到肚裏. 以為
code6421
版主


發表:43
回覆:223
積分:208
註冊:2002-08-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-05 17:13:18 IP:61.216.xxx.xxx 未訂閱
是要這樣嗎??    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;    type
  TForm1 = class(TForm)
    Table1: TTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ListBox1: TListBox;
    Table1NAME: TStringField;
    Table1SIZE: TSmallintField;
    Table1WEIGHT: TSmallintField;
    Table1AREA: TStringField;
    Table1BMP: TBlobField;
    procedure DBGrid1DblClick(Sender: TObject);
    procedure DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure FormCreate(Sender: TObject);
  private
    FHitCell:Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  if FHitCell then
     ListBox1.Items.Add(Table1.FieldByName('NAME').AsString);
end;    procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FHitCell:=False;
end;    procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  FHitCell:=True;
end;    procedure TForm1.FormCreate(Sender: TObject);
begin
  FHitCell:=False;
end;    end.    
直接繼承至DBGrid,改寫MouseDown函式會更好. Just coding... Taiwan:http://code6421.ktop.com.tw China:http://home.hoolee.com/~code6421
------
Just codeing...
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-06 16:49:03 IP:61.155.xxx.xxx 未訂閱
mathewzhao 兄: 这样也可以实现您的想法了!< >< > 〔就再多問一句:在>看红色 > >> >> ;
系統時間:2024-05-18 15:16:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!