procedure Tform1.FormCreate(Sender: TObject); begin DragAcceptFiles(Handle,True); end;procedure TfrmMain.DragFiles(var Msg: TWMDROPFILES); var Num,i:Integer; FName:array [0..255] of char; FName1:PWideChar; begin Num:=DragQueryFile(Msg.Drop,$FFFFFFFF,nil,0); for i:=0 to Num-1 do begin DragQueryFile(Msg.Drop,i,FName,SizeOf(FName)); Label3.Caption:=FName; GGPMemo1.Lines.LoadFromFile(StrPas(FName)); end; DragFinish(Msg.Drop); end;
把下面代码改为Grid的OnEnter事件中试试procedure Tform1.FormCreate(Sender: TObject); begin DragAcceptFiles(Handle,True); end;
procedure Tform1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle,True);
end;procedure TfrmMain.DragFiles(var Msg: TWMDROPFILES);
var
Num,i:Integer;
FName:array [0..255] of char;
FName1:PWideChar;
begin
Num:=DragQueryFile(Msg.Drop,$FFFFFFFF,nil,0);
for i:=0 to Num-1 do
begin
DragQueryFile(Msg.Drop,i,FName,SizeOf(FName));
Label3.Caption:=FName;
GGPMemo1.Lines.LoadFromFile(StrPas(FName));
end;
DragFinish(Msg.Drop);
end;
begin
DragAcceptFiles(Handle,True);
end;
1.DragAcceptFiles(Handle,True); 这句就放在FormCreate里面
2.在处理wm_dropfiles消息里面做一下变通,获取当前光标位置,判断如果光标在Grid之外,就退出该消息处理过程。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls;type
TDBGrid = class(DBGrids.TDBGrid)
private
procedure WMDropFiles(var M: TWMDropFiles); message WM_DROPFILES;
end; TForm1 = class(TForm)
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses ShellAPI;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(DBGrid1.Handle, True)
end;{ TDBGrid }procedure TDBGrid.WMDropFiles(var M: TWMDropFiles);
var
I: Integer;
P: PChar;
begin
inherited;
GetMem(P, MAX_PATH);
for I := 0 to DragQueryFile(M.Drop, $FFFFFFFF, P, MAX_PATH) - 1 do
begin
DragQueryFile(M.Drop, I, P, MAX_PATH);
ShowMessage(P);
end;
FreeMem(P);
DragFinish(M.Drop);
M.Result := 0;
end;end.