HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Drag&Drop egy külső alkalmazásból


Példaprogram letöltése

5274 bájt

Ebben a példában annak járunk utána, hogy miként lehet egy külső alkalmazásból drag&drop technikával egy szöveget áthelyezni egy saját alkalmazásunkban lévő Memo komponensbe. Ez a külső alkalmazás lehet például a Wordpad vagy akár a Word is.

Ahhoz hogy a külső drag&drop kapcsolatot létre tudjuk hozni, módosítanunk kell alkalmazásunk Form-jának a deklarációját.
TForm1 = class(TForm, IDropTarget )
Ezután a drag&drop megvalósításához implementálnunk kell az alábbi metódusokat.
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: HResul; stdcall;
function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall;
A fenti metódusok implementálásával vezérelhetjük a drag@drop funkciót. Ahhoz hogy alkalmazásunk kívülről adatokat tudjon fogadni, meg kell tennünk még egy lépést. Regisztrálnunk kell alkalmazásunk drag&drop funkcióját a rendszerben.
OleInitialize(Nil);
OleCheck(RegisterDragDrop(Handle,Self));
Ezt a regisztrációt, alkalmazásunk bezárásakor meg is kell szüntetnünk.
RevokeDragDrop(Handle);
OleUninitialize;
A Drop metódus kerül végrehajtásra, amikor egy megadott szövegrészt átemelünk alkalmazásunkba.
A metódus dataObj tagja tartalmazza az áthelyezendő adatokat. Meg kell győződnünk arról, hogy létezik-e egyáltalán adat.
if (dataObj=Nil) then
  Exit;
Ahhoz hogy a dataObj tartalmából ki tudjuk olvasni a szöveget, két típusra van szükségünk: TFORMATETC és TSTGMEDIUM.
A TFORMATETC struktúrában beállítjuk a lekérdezendő adat típusát, amelyet a GetData függvény segítségével elhelyezünk egy TSTGMEDIUM struktúrában.
with f do begin
  cfFormat:=CF_TEXT;
  ptd:=Nil;
  dwAspect:=DVASPECT_CONTENT;
  lindex:=-1;
  tymed:=TYMED_HGLOBAL;
end;
OleCheck(dataObj.GetData(f,s));
Egy Pointer segítségével azonosítjuk a memóriában az adatterületet, majd kiolvassuk onnan a szöveget.
Data:=GlobalLock(s.hGlobal);
Memo1.Text:=Data;
Végül felszabadítjuk a Pointert.
GlobalUnlock(s.hGlobal);
ReleaseStgMedium(s);

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 297. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |