Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

Как получить в Edit е перетащенный на него линк из WebBrowser а   Найти похожие ветки 

 
Alekseev ©   (2003-03-19 23:37) [0]

На начало перетаскивания реакции нет (т.е. отладчик не всплывает), в Edit"е тоже нет никаких изменений. Пока страница не загружена, все нормально, как только загрузилась, ничего нету :(. Если можно исходничек какой-нибудь. Пожалуйста.
Спасибо заранее.


 
nikkie ©   (2003-03-20 15:01) [1]

Слушай, я ж тебе все ключевые слова сказал... Если непонятно - значит надо почитать что-нибудь про COM. Если основы понимаешь, то код за час пишется...

Ну да ладно... Хочешь исходник, вот тебе.

unit Unit2;

interface

uses ActiveX, ComObj, ShlObj, Types, Windows;

type
TDropTarget = class(TComObject, IDropTarget)
private
FURLFormat: TClipFormat;
FDropEffect: Longint;
public
constructor Create;
destructor Destroy; override;

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;
end;

implementation

constructor TDropTarget.Create;
begin
FURLFormat := RegisterClipboardFormat(CFSTR_SHELLURL);
end;

destructor TDropTarget.Destroy;
begin
// check that the object is destroyed
MessageBox(0, "Destroyed", "", MB_OK);
end;

function TDropTarget.DragEnter(const dataObj: IDataObject; grfKeyState: Longint;
pt: TPoint; var dwEffect: Longint): HResult;
var
fmt: FORMATETC;
hr: HResult;
begin
fmt.cfFormat := FURLFormat;
fmt.ptd := nil;
fmt.dwAspect := DVASPECT_CONTENT;
fmt.lindex := -1;
fmt.tymed := TYMED_HGLOBAL;

hr := dataObj.QueryGetData(fmt);
if Succeeded(hr) then FDropEffect := DROPEFFECT_LINK
else FDropEffect := DROPEFFECT_NONE;
dwEffect := FDropEffect;
Result := S_OK;
end;

function TDropTarget.DragOver(grfKeyState: Longint; pt: TPoint;
var dwEffect: Longint): HResult;
begin
dwEffect := FDropEffect;
Result := S_OK;
end;

function TDropTarget.DragLeave: HResult;
begin
Result := S_OK;
end;

function TDropTarget.Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint;
var dwEffect: Longint): HResult;
var
fmt: FORMATETC;
medium: STGMEDIUM;
hr: HResult;
url: PChar;
begin
fmt.cfFormat := FURLFormat;
fmt.ptd := nil;
fmt.dwAspect := DVASPECT_CONTENT;
fmt.lindex := -1;
fmt.tymed := TYMED_HGLOBAL;

hr := dataObj.GetData(fmt, medium);
if Succeeded(hr) then begin
url := GlobalLock(medium.hGlobal);
MessageBox(0, url, "URL", MB_OK);
GlobalUnlock(medium.hGlobal);
ReleaseStgMedium(medium);
FDropEffect := DROPEFFECT_LINK;
end else begin
FDropEffect := DROPEFFECT_NONE;
end;

dwEffect := FDropEffect;
Result := S_OK;
end;

end.


Использование:

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterDragDrop(Edit1.Handle, TDropTarget.Create);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
RevokeDragDrop(Edit1.Handle);
end;


Еще нужен вызов OleInitialize. Например, в файле проекта:

begin
OleInitialize(nil);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
OleUninitialize();
end.


 
Alekseev ©   (2003-03-20 21:22) [2]

Спасибо nikkie.
Обязательно прочитаю все что можно про COM, я просто до этого момента не сталкивался, и плохо представляю, что это такое.
Еще раз спасибо :)



Страницы: 1 вся ветка

Текущий архив: 2003.05.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.03 c
1-59769
Tatiana
2003-05-06 17:43
2003.05.19
Gde ob yavlat local varibles ?


14-59930
xman
2003-04-30 12:55
2003.05.19
как зарегистрироватся так,


3-59580
msoftware
2003-04-26 04:58
2003.05.19
Проблемы с Autoincrement полями в INTERBASE


4-60005
Dimonich
2003-03-17 18:32
2003.05.19
Как свернуть прогу в трей?


1-59736
AVovikA
2003-05-05 18:02
2003.05.19
Что осталось после удаления формы?!