5,388
社区成员
发帖
与我相关
我的任务
分享
procedure TDesignFrm.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True); //充许拖放
end;
procedure TDesignFrm.WMDropFiles(var Msg: Tmessage);
var
N,Count : Integer;
buffer : ARRAY[0..1024] OF Char;
Curwindow,PrevWindow,ParentWnd :THANDLE; //取得的窗口句柄
MousePoint:TPOINT;
bufClassName,bufClassCaption:array[0..255] of Char;
begin
WITH Msg DO
BEGIN
Count:=DragQueryFile(WParam, $FFFFFFFF, Nil,256);
FOR N := 0 TO Count-1 DO
BEGIN
DragQueryFile(WParam, N, Buffer, SizeOf(buffer));
ShowMessage(StrPas(Buffer)); //显示文件名称
END;
DragFinish(WParam); //拖放结束
END;
end;
//得到光标处的控件
GetCursorPos(MousePoint);{获取光标的位置}
Curwindow:=WindowFromPoint(MousePoint);
GetClassName(Curwindow,bufClassName,255);
HandleEdit.Text:=IntToStr(Curwindow); {当前句柄}
ShowMessage(StrPas(bufClassName)); {类名}
procedure TForm1.Button1Click(Sender: TObject);
begin
SetCaptureControl(Self);
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
AControl: TControl;
begin
ReleaseCapture;
// AControl := ControlAtPos(Point(X, Y), True, True);
AControl := ControlAtPos(ScreenToClient(Mouse.CursorPos), True, True); //修改后
if (AControl = nil) then Exit;
Text := AControl.Name;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetCaptureControl(Self);
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
AControl: TControl;
begin
ReleaseCapture;
AControl := ControlAtPos(Point(X, Y), True, True);
if (AControl = nil) then Exit;
Text := AControl.Name;
end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, shellapi;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
procedure DropFiles(var Msg: TMessage); message WM_DropFILES;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DropFiles(var Msg: TMessage);
var i, Count: integer;
buffer: array[0..1024] of Char;
begin
inherited;
Count := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 256); // 第一次调用得到拖放文件的个数
for i := 0 to Count - 1 do
begin
buffer[0] := #0;
DragQueryFile(Msg.WParam, i, buffer, sizeof(buffer)); // 第二次调用得到文件名称
if LowerCase(ExtractFileExt(buffer))='.txt' then
Memo1.Lines.Add(buffer)
else
ShowMessage('文件类型不对');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
end.