这个问题应该不难,难道没有人会吗? (50分)

A

abigtoy

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]我使用DBGrid进行拖放操作时,有个小问题不知如何处理。
据我所知,开始拖动时应该调用OnMouseDown事件,然后调用
BeginDrag方法。[/red]
但是我发现在单元格上按下鼠标键却无法调用OnMouseDown事件,
那么如何才能在某个单元格上按下鼠标键时调用BeginDrag方法并
获得当前单元格的信息呢?
望各位指教。
谢谢!
也许有一点点难度。
 
这个问题没有人碰见过?
还是无法在DBGrid控件上实现?
有什么第三方控件可以实现吗?
 
Delphi自带的DBGrid有OnCelClick事件的啊,你可以在这个事件下面调用BeginDrag试试
既然点了某个单元格,那就选中了一条记录,可以根据列名取该记录中相应的值
郑重声明:以上方法我没试过,只是一条思路而已。
 
OnCelClick必须放开鼠标才会触发,那样就不是拖动了。
有没有其他的方法啊?
 
用消息处理,这么简单,声明和处理WM_LBUTTONDOWN嘛
 
要更改dbgrid一个属性:
设置DragMode属性为 dmManual 此时就可调用OnCelClick事件
当属性DragMode属性为daAutomatic 时,程序会先去执行OnDragDrop等事件,
而不执行OncelClick事件,原因就在这儿了,可根据你的需要自已去想办法解决了
 
EhLib中的DBGridEh,全自动的
 
to:wangjiankang,
麻烦您用具体代码示范以下如何使用消息处理来实现
DBGrid的拖放功能。本人不胜感激!
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure WMLButtonDown(VAR Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('你按的是按钮'); //
end;

procedure TForm1.WMLButtonDown(VAR Msg: TWMLButtonDown);
begin
inherited;
ShowMessage('捕获的鼠标消息,你按的位置是X='+IntToStr(msg.XPos)+'Y='+IntToStr(msg.YPos));
end;

end.

 
如有答案的话,请给多来一份,谢谢
 
顶部