高分求教怎样实现:类似于网络蚂蚁弹出一个在最上面的小窗口,然后将网页链接拖拉到此窗口中以获得其内容? 用delphi7怎么样实现,谢谢各位高手.邮箱:[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.01cn.net/noncgi/attach/2004/01/06/2603-Welcome.rar这里有你想要的功能,参考一下 谢谢!但我已没有DELPHI5,用不了。我想知道那几个bpl的控件一定需要吗?有没有不需要此BPL的例子? 用OLE拖放技术。只要窗体实现IDropTarget接口就可以了。我这个程序可以实现从网页或者Word拖放文字进来,目前只支持普通文字、图片、文件,你可以完善支持HTML,RTF,图片,文件。我现在不会拖放网址,好像用扩展剪切板格式,知道的话发Mail给我,谢谢!//-------------------------unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ActiveX, StdCtrls, ComCtrls, ExtCtrls, ShellAPI;type TForm1 = class(TForm, IDropTarget) Image1: TImage; Memo1: TMemo; RichEdit1: TRichEdit; ListBox1: TListBox; Memo2: TMemo; //要允许窗口接受 drag drop,窗口要支持 IDropTarget 接口 procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private procedure ListDragData(DragObj: IDataObject); procedure HandleText(DragObj: IDataObject; etc: TFormatETC); procedure HandleBMP(DragObj: IDataObject; etc: TFormatETC); procedure HandleRTF(DragObj: IDataObject; etc: TFormatETC); procedure HandleHTML(DragObj: IDataObject; etc: TFormatETC); procedure HandleHDROP(DragObj: IDataObject; etc: TFormatETC); //File drop procedure ClearOldInfo(); //procedure WMDropFiles(var Msg:TWMDropFiles);message WM_DROPFILES; { Private declarations } public //////////////// // IDropTarget //////////////// //既然支持 IDropTarget 接口,那么必须实现其每个方法,这4个方法可以从 IDropTarget 代码粘贴。 function DragEnter( const dataObj : IDataObject; grfKeyState : Longint; pt : TPoint; var dwEffect : Longint ) : HResult; stdcall; function DragOver( grfKeyState : Longint; pt : TPoint; var dwEffect : Longint ): HResult; stdcall; function DragLeave : HResult; stdcall; function Drop( const dataObj: IDataObject; grfKeyState : Longint; pt : TPoint; var dwEffect : Longint ) : HResult; stdcall; { Public declarations } end;var Form1: TForm1;implementation uses ShlObj;{$R *.DFM}function TForm1.DragEnter(const dataObj: IDataObject; grfKeyState: Integer; pt: TPoint; var dwEffect: Integer): HResult;begin dwEffect:= DROPEFFECT_COPY; Result:= S_OK;end;function TForm1.DragLeave: HResult;begin Result:= S_OK;end;function TForm1.DragOver(grfKeyState: Integer; pt: TPoint; var dwEffect: Integer): HResult;begin Result:= S_OK;end;function TForm1.Drop(const dataObj: IDataObject; grfKeyState: Integer; pt: TPoint; var dwEffect: Integer): HResult;begin ClearOldInfo(); ListDragData(DataObj); Result:= S_OK;end;procedure TForm1.FormCreate(Sender: TObject);var res : HRESULT;begin SetWindowPos(Handle, HWND_TOPMOST, 0, 0, WIDTH, HEIGHT, SW_SHOWNORMAL); //DragAcceptFiles(Handle, true); OleInitialize( nil ); //OLE drag drop 初始化 {Allow window to accept drop events} res := RegisterDragDrop( Handle, Self ); //允许窗口接受 drag drop {Check if register was sucessfull} if( Failed( res ) ) then //判断 drag drop 初始化是否成功 ShowMessage( 'RegisterDragDrop Failed' );end;procedure TForm1.FormDestroy(Sender: TObject);begin {Finished accepting drops} RevokeDragDrop( Handle ); //窗口不允许 drag drop OleUninitialize; // 释放 OLE drag dropend;procedure TForm1.HandleText(DragObj: IDataObject; etc: TFormatETC);var p : pointer; stgm : TSTGMedium;begin //逻辑:先判断数drag drop 的据是否有效,如有效则将数据放在 TSTGMEDIUM 媒体上。 //然后锁定媒体、获得数据,最后解锁媒体、释放媒体。 //判断 drag drop 的数据是否有效 {Make certain the data rendering is available} if(DragObj.QueryGetData(etc) = NOERROR) then begin //从剪切板获得用 FORMATETC 结构描述的数据并放入TSTGMEDIUM 结构(存储媒体) DragObj.GetData(etc, stgm); //先锁定全局内存并获取指向数据的指针(P = 指向数据第一个字节地址) p := GlobalLock(stgm.hGlobal); //获得数据并转化成文本 Memo1.Text := string(p); //解锁 GlobalFree(stgm.hGlobal); //释放内存 ReleaseStgMedium(stgm); end;end;procedure TForm1.HandleBMP(DragObj: IDataObject; etc: TFormatETC);var stgm: TSTGMedium;begin if DragObj.QueryGetData(etc) <> NO_ERROR then begin DragObj.GetData(etc, stgm); Image1.Picture.Bitmap.Handle:= stgm.hBitmap; Image1.Refresh; ReleaseSTGMedium(stgm); end;end;procedure TForm1.HandleHDROP(DragObj: IDataObject; etc: TFormatETC);var pdf : PDropFiles; stgm : TSTGMEDIUM; p: PWideChar; sFileName: WideString; N: integer;begin if DragObj.QueryGetData(etc) = NO_ERROR then begin sFileName:= ''; DragObj.GetData(etc, stgm); pdf:= GlobalLock(stgm.hGlobal); p:= Pointer(integer(Pointer(pdf)) + pdf.pFiles); sFileName:= sFileName + P^; repeat Inc(P); sFileName:= sFileName + P^; until p^ = #0; ListBox1.Items.Add(sFileName); end;end;procedure TForm1.HandleHTML(DragObj: IDataObject; etc: TFormatETC);var stgm: TSTGMedium; p: Pointer;begin if DragObj.QueryGetData(etc) <> NO_ERROR then begin DragObj.GetData(etc, stgm); p:= GlobalLock(stgm.hGlobal); RichEdit1.Text:= string(p); GlobalFree(stgm.hGlobal); ReleaseSTGMedium(stgm); end;end;procedure TForm1.HandleRTF(DragObj: IDataObject; etc: TFormatETC);beginend;//显示 drag drop 数据内容procedure TForm1.ListDragData(DragObj: IDataObject);var efe: IEnumFormatETC; fe: TFormatETC;begin //判断接口是否可用 if DragObj = nil then exit; //获得 IEnumFormatETC 接口 DragObj.EnumFormatEtc(DATADIR_GET, efe); //对剪切板的 IEnumFormatETC 接口进行遍历得到当前剪切板内所有数据格式 while efe.Next(1, fe, nil) <> S_FALSE do begin case fe.cfFormat of CF_TEXT: HandleText(DragObj, fe); CF_BITMAP: HandleBMP(DragObj, fe); //CF_HTML: HandleHTML(DragObj, fe); //CF_TIFF: //不处理文件拖动,用其他方法处理。(WM_DropFiles) CF_HDROP: HandleHDROP(DragObj, fe); else Memo2.Lines.Add('other format!'); end; end;end;procedure TForm1.ClearOldInfo;begin Memo1.Lines.Clear; RichEdit1.Lines.Clear; ListBox1.Clear; Image1.Picture.Bitmap:= nil; Image1.Picture.Bitmap.FreeImage; Memo2.Lines.Clear;end;end. 这段是我copy的,试了一下,没有问题 初学DELPHI对于文件的理解,希望大家多多指教 求个sql复杂句子,头有点晕想不出了大家给个法子。 delphi中dll中怎样添加mscomm控件??回答高分300分!! 怎样使用API读(包括建立)、写、查找二进制文件? 编译错误,在线等待!!sos! 如何将一个表名传入一个过程中? 有人知道报表的制作吗?up也给分。。。。。。。。。。。 关于数据库的问题 请教如何用一个递归函数实现此功能 那位大侠有delphi进销存的源码,我愿意用一套PB的企业管理系统源码交换,学习用! 哪位高手知道 FastReport2.5 在程序中怎么设置 “Band”对象 的强迫换行. 做过MDI的高分请教
但我已没有DELPHI5,用不了。我想知道那几个bpl的控件一定需要吗?有没有不需要此BPL的例子?
我现在不会拖放网址,好像用扩展剪切板格式,知道的话发Mail给我,谢谢!
//-------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ActiveX, StdCtrls, ComCtrls, ExtCtrls, ShellAPI;type
TForm1 = class(TForm, IDropTarget)
Image1: TImage;
Memo1: TMemo;
RichEdit1: TRichEdit;
ListBox1: TListBox;
Memo2: TMemo; //要允许窗口接受 drag drop,窗口要支持 IDropTarget 接口
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure ListDragData(DragObj: IDataObject);
procedure HandleText(DragObj: IDataObject; etc: TFormatETC);
procedure HandleBMP(DragObj: IDataObject; etc: TFormatETC);
procedure HandleRTF(DragObj: IDataObject; etc: TFormatETC);
procedure HandleHTML(DragObj: IDataObject; etc: TFormatETC);
procedure HandleHDROP(DragObj: IDataObject; etc: TFormatETC); //File drop
procedure ClearOldInfo();
//procedure WMDropFiles(var Msg:TWMDropFiles);message WM_DROPFILES;
{ Private declarations }
public
////////////////
// IDropTarget
//////////////// //既然支持 IDropTarget 接口,那么必须实现其每个方法,这4个方法可以从 IDropTarget 代码粘贴。
function DragEnter( const dataObj : IDataObject;
grfKeyState : Longint;
pt : TPoint;
var dwEffect : Longint
) : HResult; stdcall; function DragOver( grfKeyState : Longint;
pt : TPoint;
var dwEffect : Longint
): HResult; stdcall; function DragLeave : HResult; stdcall; function Drop( const dataObj: IDataObject;
grfKeyState : Longint;
pt : TPoint;
var dwEffect : Longint
) : HResult; stdcall;
{ Public declarations }
end;var
Form1: TForm1;implementation uses ShlObj;{$R *.DFM}function TForm1.DragEnter(const dataObj: IDataObject; grfKeyState: Integer;
pt: TPoint; var dwEffect: Integer): HResult;
begin
dwEffect:= DROPEFFECT_COPY;
Result:= S_OK;
end;function TForm1.DragLeave: HResult;
begin
Result:= S_OK;
end;function TForm1.DragOver(grfKeyState: Integer; pt: TPoint;
var dwEffect: Integer): HResult;
begin
Result:= S_OK;
end;function TForm1.Drop(const dataObj: IDataObject; grfKeyState: Integer;
pt: TPoint; var dwEffect: Integer): HResult;
begin
ClearOldInfo();
ListDragData(DataObj);
Result:= S_OK;
end;procedure TForm1.FormCreate(Sender: TObject);
var
res : HRESULT;
begin
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, WIDTH, HEIGHT, SW_SHOWNORMAL);
//DragAcceptFiles(Handle, true);
OleInitialize( nil ); //OLE drag drop 初始化 {Allow window to accept drop events}
res := RegisterDragDrop( Handle, Self ); //允许窗口接受 drag drop {Check if register was sucessfull}
if( Failed( res ) ) then //判断 drag drop 初始化是否成功
ShowMessage( 'RegisterDragDrop Failed' );
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
{Finished accepting drops}
RevokeDragDrop( Handle ); //窗口不允许 drag drop OleUninitialize; // 释放 OLE drag drop
end;procedure TForm1.HandleText(DragObj: IDataObject; etc: TFormatETC);
var
p : pointer;
stgm : TSTGMedium;
begin
//逻辑:先判断数drag drop 的据是否有效,如有效则将数据放在 TSTGMEDIUM 媒体上。
//然后锁定媒体、获得数据,最后解锁媒体、释放媒体。 //判断 drag drop 的数据是否有效
{Make certain the data rendering is available}
if(DragObj.QueryGetData(etc) = NOERROR) then
begin
//从剪切板获得用 FORMATETC 结构描述的数据并放入TSTGMEDIUM 结构(存储媒体)
DragObj.GetData(etc, stgm); //先锁定全局内存并获取指向数据的指针(P = 指向数据第一个字节地址)
p := GlobalLock(stgm.hGlobal); //获得数据并转化成文本
Memo1.Text := string(p); //解锁
GlobalFree(stgm.hGlobal); //释放内存
ReleaseStgMedium(stgm);
end;
end;
procedure TForm1.HandleBMP(DragObj: IDataObject; etc: TFormatETC);
var
stgm: TSTGMedium;
begin
if DragObj.QueryGetData(etc) <> NO_ERROR then
begin
DragObj.GetData(etc, stgm);
Image1.Picture.Bitmap.Handle:= stgm.hBitmap;
Image1.Refresh;
ReleaseSTGMedium(stgm);
end;
end;procedure TForm1.HandleHDROP(DragObj: IDataObject; etc: TFormatETC);
var
pdf : PDropFiles;
stgm : TSTGMEDIUM;
p: PWideChar;
sFileName: WideString;
N: integer;
begin
if DragObj.QueryGetData(etc) = NO_ERROR then
begin
sFileName:= '';
DragObj.GetData(etc, stgm);
pdf:= GlobalLock(stgm.hGlobal);
p:= Pointer(integer(Pointer(pdf)) + pdf.pFiles);
sFileName:= sFileName + P^;
repeat
Inc(P);
sFileName:= sFileName + P^;
until p^ = #0;
ListBox1.Items.Add(sFileName);
end;
end;
procedure TForm1.HandleHTML(DragObj: IDataObject; etc: TFormatETC);
var
stgm: TSTGMedium;
p: Pointer;
begin
if DragObj.QueryGetData(etc) <> NO_ERROR then
begin
DragObj.GetData(etc, stgm);
p:= GlobalLock(stgm.hGlobal);
RichEdit1.Text:= string(p);
GlobalFree(stgm.hGlobal);
ReleaseSTGMedium(stgm);
end;
end;procedure TForm1.HandleRTF(DragObj: IDataObject; etc: TFormatETC);
beginend;
//显示 drag drop 数据内容
procedure TForm1.ListDragData(DragObj: IDataObject);
var
efe: IEnumFormatETC;
fe: TFormatETC;
begin
//判断接口是否可用
if DragObj = nil then exit;
//获得 IEnumFormatETC 接口
DragObj.EnumFormatEtc(DATADIR_GET, efe);
//对剪切板的 IEnumFormatETC 接口进行遍历得到当前剪切板内所有数据格式
while efe.Next(1, fe, nil) <> S_FALSE do
begin
case fe.cfFormat of
CF_TEXT: HandleText(DragObj, fe);
CF_BITMAP: HandleBMP(DragObj, fe);
//CF_HTML: HandleHTML(DragObj, fe);
//CF_TIFF:
//不处理文件拖动,用其他方法处理。(WM_DropFiles)
CF_HDROP: HandleHDROP(DragObj, fe);
else Memo2.Lines.Add('other format!'); end;
end;
end;procedure TForm1.ClearOldInfo;
begin
Memo1.Lines.Clear;
RichEdit1.Lines.Clear;
ListBox1.Clear;
Image1.Picture.Bitmap:= nil;
Image1.Picture.Bitmap.FreeImage; Memo2.Lines.Clear;
end;end.