Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Вниз

Как получить в 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
14-59886
Лана Розанова
2003-04-28 08:34
2003.05.19
Web


1-59664
IronHawk
2003-05-05 17:24
2003.05.19
Кк из большого текстового файла удалять символы по особым ...


14-59868
SPeller
2003-04-28 12:08
2003.05.19
Задача


14-59925
dbDev
2003-04-28 10:23
2003.05.19
Компоненты для доступа к dbf & db таблицам


3-59616
ligor
2003-04-28 22:13
2003.05.19
FibPlus





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский