呵呵,言不必有失,旨在解決問題不是沒試過?方法、思路、技術等問題,沒有實現不了的...只是怕理解岐意寫不出來................ xx:=ACellViewInfo.Value; yy:=cxGrid1DBTableView1.Controller.FocusedColumn.VisibleCaption; zz:=cxGrid1DBTableView1.Controller.FocusedRow.Values[0]; jj:=RightStr(yy,2); ff:=cxGrid1DBTableView1.Controller.FocusedColumnIndex; aa:=FormatDateTime('yyyy-mm',cxDateEdit1.Date)+'-'+jj; if StrToInt(Trim(ff))=0 then begin MessageDlg('提示:不要選擇“部門名稱”的列標題,請點擊選擇擇人數!',mtWarning,[mbOK],0); Exit; end else begin qry_psjbdetail.Close; qry_psjbdetail.SQL.Clear; qry_psjbdetail.SQL.Add( ' select '''+ FormatDateTime('mm',cxDateEdit1.Date)+''' as YF,c.COLRQ,''>''+'''+ Trim(dxSpinEdit1.Text)+'''+''Hr'' as TJ,c.CB,c.BM,c.KB,c.XB,c.COLAID,c.Full_Name,c.COLJBT from ' ); qry_psjbdetail.SQL.Add( ' (se...........
拋磚引玉地補充下: 以下是CX下測試的,DB的自己研究下................. xx:=ACellViewInfo.Value; yy:=cxGrid1DBTableView1.Controller.FocusedColumn.VisibleCaption; zz:=cxGrid1DBTableView1.Controller.FocusedRow.Values[0]; jj:=RightStr(yy,2); ff:=cxGrid1DBTableView1.Controller.FocusedColumnIndex; //DB的自己研究下... aa:=FormatDateTime('yyyy-mm',cxDateEdit1.Date)+'-'+jj; if StrToInt(Trim(ff))=0 then begin MessageDlg('提示:不要選擇“部門名稱”的列標題,請點擊選擇擇人數!',mtWarning,[mbOK],0); Exit; end else begin qry_psjbdetail.Close; qry_psjbdetail.SQL.Clear; qry_psjbdetail.SQL.Add( ' select '''+ FormatDateTime('mm',cxDateEdit1.Date)+''' as YF,c.COLRQ,''>''+'''+ Trim(dxSpinEdit1.Text)+'''+''Hr'' as TJ,c.CB,c.BM,c.KB,c.XB,c.COLAID,c.Full_Name,c.COLJBT from ' ); qry_psjbdetail.SQL.Add( ' (se...........
其实楼主,没有必要费这么大劲,你不就要判断是在title还是在cell吗,那好,TDBGridEh有两个事件,OnCellClick和OnTitleClick,你只需要定义一个变量,比如clickwhich,然后写下面代码procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); begin clickwhich := 0; end;procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh); begin clickwhich := 1; end;剩下的,你就是判断clickwhich 就ok了
DB的測試如下:var a,b:string; begin a:=inttostr(dbgrid1.DataSource.DataSet.recno); b:=inttostr(dbgrid1.SelectedIndex); end;StringGrid的測試如下: ACol, ARow: Integer; var CanSelect: Boolean); begin StringGrid1.Cells... StringGrid1.Cols... StringGrid1.Rows... end;cx的寫過了,DBgridEh的不用再測試了吧
回bdmh: 如果在CellClick里面加标志的话,楼主是在DblClick中判断。 我用gettickcount判断,貌似DblClick比CellClick先触发,这样楼主判断的时候, 标志可能还没有刷新赋值呢。stringgrid有个MouseToCell的方法,楼主看看他的代码, procedure TCustomDrawGrid.MouseToCell(X, Y: Integer; var ACol, ARow: Longint); var Coord: TGridCoord; begin Coord := MouseCoord(X, Y); ACol := Coord.X; ARow := Coord.Y; end;grideh有个MouseCoord方法,返回的也是一个TGridCoord类型,楼主可以参考一下试试。
楼主这话好像是在说自己愚钝啊~~偶觉得没什么。 楼上的脾气够爆的……呵呵~~procedure dbgrideh1dblclick(sender: tobject); var pot: TPoint; p: TGridCoord; begin getcursorpos(pot); pot := screentoclient(pot); p := dbgrideh1.MouseToCell(pot.X,pot.Y); if p.Y = 0 then showmessage('title') else showmessage('cell'); end;
xx:=ACellViewInfo.Value;
yy:=cxGrid1DBTableView1.Controller.FocusedColumn.VisibleCaption;
zz:=cxGrid1DBTableView1.Controller.FocusedRow.Values[0];
jj:=RightStr(yy,2);
ff:=cxGrid1DBTableView1.Controller.FocusedColumnIndex;
aa:=FormatDateTime('yyyy-mm',cxDateEdit1.Date)+'-'+jj;
if StrToInt(Trim(ff))=0 then
begin
MessageDlg('提示:不要選擇“部門名稱”的列標題,請點擊選擇擇人數!',mtWarning,[mbOK],0);
Exit;
end else
begin
qry_psjbdetail.Close;
qry_psjbdetail.SQL.Clear;
qry_psjbdetail.SQL.Add( ' select '''+ FormatDateTime('mm',cxDateEdit1.Date)+''' as YF,c.COLRQ,''>''+'''+ Trim(dxSpinEdit1.Text)+'''+''Hr'' as TJ,c.CB,c.BM,c.KB,c.XB,c.COLAID,c.Full_Name,c.COLJBT from ' );
qry_psjbdetail.SQL.Add( ' (se...........
以下是CX下測試的,DB的自己研究下.................
xx:=ACellViewInfo.Value;
yy:=cxGrid1DBTableView1.Controller.FocusedColumn.VisibleCaption;
zz:=cxGrid1DBTableView1.Controller.FocusedRow.Values[0];
jj:=RightStr(yy,2);
ff:=cxGrid1DBTableView1.Controller.FocusedColumnIndex;
//DB的自己研究下...
aa:=FormatDateTime('yyyy-mm',cxDateEdit1.Date)+'-'+jj;
if StrToInt(Trim(ff))=0 then
begin
MessageDlg('提示:不要選擇“部門名稱”的列標題,請點擊選擇擇人數!',mtWarning,[mbOK],0);
Exit;
end else
begin
qry_psjbdetail.Close;
qry_psjbdetail.SQL.Clear;
qry_psjbdetail.SQL.Add( ' select '''+ FormatDateTime('mm',cxDateEdit1.Date)+''' as YF,c.COLRQ,''>''+'''+ Trim(dxSpinEdit1.Text)+'''+''Hr'' as TJ,c.CB,c.BM,c.KB,c.XB,c.COLAID,c.Full_Name,c.COLJBT from ' );
qry_psjbdetail.SQL.Add( ' (se...........
begin
clickwhich := 0;
end;procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
begin
clickwhich := 1;
end;剩下的,你就是判断clickwhich 就ok了
a,b:string;
begin
a:=inttostr(dbgrid1.DataSource.DataSet.recno);
b:=inttostr(dbgrid1.SelectedIndex);
end;StringGrid的測試如下: ACol,
ARow: Integer; var CanSelect: Boolean);
begin
StringGrid1.Cells...
StringGrid1.Cols...
StringGrid1.Rows...
end;cx的寫過了,DBgridEh的不用再測試了吧
经测试,kye_jufei((飞飞VS玲玲)天涯浪子居士)的代码通过。而且写出了db\cx\stringgrid,良师益友....
var
iTmp: Integer;
begin
iTmp := DBGrid1.Row;end;
{点击标题行与数据的第一行皆返回1,问题依然没有返回}
1、用MouseDown判断坐标,这个试过不行,你可以试试,
2、你说用标志,这个也不行,
我要实现的是,DBGrid1DblClick里面做点事情
如果在CellClick里面加标志的话,楼主是在DblClick中判断。
我用gettickcount判断,貌似DblClick比CellClick先触发,这样楼主判断的时候,
标志可能还没有刷新赋值呢。stringgrid有个MouseToCell的方法,楼主看看他的代码,
procedure TCustomDrawGrid.MouseToCell(X, Y: Integer; var ACol, ARow: Longint);
var
Coord: TGridCoord;
begin
Coord := MouseCoord(X, Y);
ACol := Coord.X;
ARow := Coord.Y;
end;grideh有个MouseCoord方法,返回的也是一个TGridCoord类型,楼主可以参考一下试试。
楼上的脾气够爆的……呵呵~~procedure dbgrideh1dblclick(sender: tobject);
var pot: TPoint;
p: TGridCoord;
begin
getcursorpos(pot);
pot := screentoclient(pot);
p := dbgrideh1.MouseToCell(pot.X,pot.Y);
if p.Y = 0 then
showmessage('title')
else
showmessage('cell');
end;
cell:TGridCoord;
p: TPoint;
begin
GetCursorPos(p);
p := DBGridEh1.ScreenToClient(p);
cell := DBGridEh1.MouseCoord(p.X,p.Y);
if cell.Y = 0 then //表示点击的上方标题栏
ShowMessage('TopTitle')
else if cell.X = 0 then //表示点击的左侧标题栏
ShowMessage('LefTitle')
else
ShowMessage('Cell'); //点击的是单元格
end;
已经投诉你了,这位仁兄就像疯狗一样,各位不必理会