请教:如何处理form(注意不是richedit等其它控件)的OnDragOver事件?(99分)

  • 主题发起人 主题发起人 *HelloWorld*
  • 开始时间 开始时间
H

*HelloWorld*

Unregistered / Unconfirmed
GUEST, unregistred user!
我新近才开始接触拖放操作,在实现这样一个简单的效果时卡住了:一个最简单的窗体form,
我从别的程序上拖一段文本到这个form上来,在OnDragOver的时候希望这个form能做出反应
,比如说把form的标题给换成'Now DragOver'。请哪位帮忙给出一段代码示范一下这个操作
好吗?如果分不够我还会再加的!谢谢!!!
 
怎么没人肯帮一下忙吗?我都要急死了,555555555[:(]
 
好象在那里看到过,等下我找以下,晚上贴出来,不好意思
 
to smilelove:
太好了!就等着你的代码了!先谢谢!!!!
 
//其实form和其他空间没有什么区别啊,我想大概就是不同程序见的drag&drop吧,
//以下是把外部的文件拖放入本应用程序中,你自己看看吧
//如果还不能满足你,再说吧
unit Unit1;

interface

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

type
; TForm1 = class(TForm)
; ; ListBox1: TListBox;
; ; procedure FormCreate(Sender: TObject);
; ; procedure FormDestroy(Sender: TObject);
; private
; ; { Private declarations }
; ; procedure WMDROPFILES(var Msg: TMessage);
; ; procedure LBWindowProc(var Message: TMessage);
; ; procedure AddFile(sFileName: string);
; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;

implementation

{$R *.DFM}

uses
; ShellAPI;

var
; OldLBWindowProc: TWndMethod;

procedure TForm1.AddFile(sFileName: string);
begin
; ListBox1.Items.Add(sFilename);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
; OldLBWindowProc := ListBox1.WindowProc; // store defualt WindowProc
; ListBox1.WindowProc := LBWindowProc; // replace default WindowProc
; DragAcceptFiles(ListBox1.Handle, True); // now ListBox1 accept dropped files
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
; ListBox1.WindowProc := OldLBWindowProc;
; DragAcceptFiles(ListBox1.Handle, False);
end;

procedure TForm1.LBWindowProc(var Message: TMessage);
begin
; if Message.Msg = WM_DROPFILES then
; ; WMDROPFILES(Message); // handle WM_DROPFILES message
; OldLBWindowProc(Message); ;// call default ListBox1 WindowProc method to handle all other messages
end;

procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
; pcFileName: PChar;
; i, iSize, iFileCount: integer;
begin
; pcFileName := ''; // to avoid compiler warning message
; iFileCount := DragQueryFile(Msg.WParam, $FFFFFFFF, pcFileName, 255);
; for i := 0 to iFileCount - 1 do
; begin
; ; iSize := DragQueryFile(Msg.wParam, 0, nil, 0) + 1;
; ; pcFileName := StrAlloc(iSize);
; ; DragQueryFile(Msg.WParam, i, pcFileName, iSize);
; ; if FileExists(pcFileName) then
; ; ; AddFile(pcFileName); // method to add each file
; ; StrDispose(pcFileName);
; end;
; DragFinish(Msg.WParam);
end;

end.


;
 
to smilelove:
谢谢你的代码,但它还不是我想要的。我这个程序关键的一点就在于form1上是没有其它控件
的,仅仅要form1对拖放操作做出反应。同时,我希望拖放的是一段文本(比如说从IE浏览器
上选的一段文字),而不是一个文件。您还能帮我想想吗?真的不好意思。
 
道理是一样的阿
你只要把上面的代码中listbox1全部替换成form1就可以了呀
至于文本你用clipboard不是更好吗
 
多人接受答案了。
 
后退
顶部