HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Drag and Drop szimulálása Office alkalmazásoknál


Példaprogram letöltése

6444 bájt

Ha egy Word alkalmazásra az Intézőből áthúzunk egy állományt Drag and Drop-al, akkor a Word megnyitja azt szerkesztésre, feltéve, hogy a választott állomány formátuma a Word által ismert (*.doc, *.rtf, stb.). Ez a lehetőség nem csak a Word programnál, hanem bármely más Office alkalmazásnál fennáll.
Lehetőségünk van arra, hogy saját alkalmazásunkból szimuláljuk ezt a műveletet, vagyis programból végezzük el ezt a Drag and Drop-ot. Mellékelt példánkban készítünk egy komponenst, mellyel ezt a lehetőséget egyszerűen felhasználhatjuk.

A mellékelt példaprogram megnyitása előtt a DropData.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens használatához a TargetApplication property-ben annak az alkalmazásnak kell megadni az ablak nevét, mellyel el szeretnénk hitetni, hogy drag and drop történt. Ez a név az alábbi lehet:
Alkalmazás neve TargetApplication property értéke
excel XLMain
word OpusApp
access OMain
powerpoint95 PP7FrameClass
powerpoint97 PP97FrameClass
notepad NOTEPAD
paintbrush pbParent
wordpad WordPadClass
A DropFileName property-ben annak az állománynak a nevét, elérési útját kell megadnunk, melyet az adott alkalmazásra „dobunk”.
A komponens megvalósítása
A megoldás abban rejlik, hogy a kiválasztott alkalmazásnak küldünk egy WM_DROPFILES üzenetet. Az üzenet paramétereként egy TDragInfoA struktúrát adunk át, melyben leírhatjuk a szükséges adatokat.
Első lépésként arra van szükség, hogy a megadott alkalmazás főablakának az azonosítóját lekérdezzük. Ehhez a FindWindow függvényt használjuk. Ha a cél alkalmazás nem fut, akkor nem járunk eredménnyel.
procedure TDropData.Execute;
begin
  wnd:=FindWindow(PChar(FTargetApplication), nil);
  if IsWindow(wnd) then begin
Ha a lekérdezés sikeres, akkor a MakeDrop függvényünk meghívásával elkészítjük a TDragInfoA struktúrát, melyet a WM_DROPFILES üzenettel elküldünk a kiszemelt programnak.
    drop:=MakeDrop(FDropFileName);
    if drop<>0 then begin
      PostMessage(wnd, WM_DROPFILES, drop, 0);
    end;
    GlobalFree(drop);
  end;
end;
A TDragInfoA struktúra feltöltéséhez a GlobalAlloc-al foglalunk memóriaterületet, majd a GlobalLock hívással zároljuk is ezt addig, amíg adatokkal töltjük fel.
function TDropData.MakeDrop(FileName: string): THandle;
begin
  size:=SizeOf(TDragInfoA)+1;
  inc(size, Length(FileName)+1);
  result:=GlobalAlloc(GHND or GMEM_SHARE, size);
  if result<>0 then begin
    data:=GlobalLock(result);
    if data<>nil then begin
      try
A struktúra uSize mezőjében adjuk meg a struktúra méretét. Az lpFileList mezőbe kerül a kiválasztott állományt.
        data.uSize:=SizeOf(TDragInfoA);
        p:=PChar(@Data.grfKeyState)+4;
        data.lpFileList:=p;
        size:=Length(FileName);
        Move(Pointer(FileName)^, p^, size);
        ...
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
3047WindowsAz XML bemutatása1. rész
3059WindowsAz XML bemutatása2. rész
3068WindowsAz XML bemutatása3. rész
3077WindowsAz XML bemutatása - deklarációk4. rész
3086WindowsAz XML bemutatása - MSXML, XSLT5. rész
3094WindowsAz XML bemutatása - DTD6. rész
3105WindowsXML adatok megjelenítése Excel-ben7. rész
3114WindowsDokumentum hivatkozások az XML-ben8. rész
3123WindowsXML adattípusok9. rész
3132WindowsXML adatok HTML oldalakon10. rész
3141WindowsXML Notepad11. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 633. 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 |