Drag&Drop problem

Drag&Drop problem

offline
  • Pridružio: 13 Okt 2005
  • Poruke: 26

Zelim da omogucim prevlacenje fajlova u jednu edit komponentu, i imam
proceduru WMDropFiles(var Msg: TMessage); message wm_DropFiles;
koja bi trebalo da radi taj posao, ali je nisam nigde eksplicitno pozivala u programu jer sam kontala da se ona sama poziva kad se spusti neki fajl na formu, al to je ocigledno bilo glupo posto drag & drop i dalje nije moguc :]] Pitanje je sta sad ja da uradim sa tom proc, gde da je zovnem da bi mogla da prevucem fajl u taj edit Question



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

procedure FileIsDropped(var Msg: TMessage); message WM_DropFiles; procedure TfrmEditor.FileIsDropped(var Msg: TMessage); var   hDrop                  : THandle;   fName                  : array[0..254] of CHAR;   fCounter               : INTEGER;   Mpoint                 : Tpoint; begin   hDrop := Msg.WParam;   fCounter := 0;   while DragQueryFile(hDrop, fCounter, fName, 254) > 0 do   begin     dragquerypoint(hdrop, mpoint);     if (mpoint.x > ActiveEditor.left) and        (mpoint.x < (TRichEdit(pageControl1.activepage.Controls[0]).left           + ActiveEditor.Width))       and (mpoint.y > ActiveEditor.top) and       (mpoint.y < TRichEdit(pageControl1.activepage.Controls[0]).top           + ActiveEditor.height) then       ShowFile(fname);     Inc(fCounter);   end;   DragFinish(hDrop); end;

--Procedura ShowFile je moja procedura koja ucitava fajl

Edit by Srki_82: koristi code tag za pisanje koda



offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Edit1: TEdit;     procedure FormCreate(Sender: TObject);   private     { Private declarations }     OldWndProc: TWndMethod;     procedure EditWndProc(var Message: TMessage);   public     { Public declarations }   end; var   Form1: TForm1; implementation {$R *.dfm} uses   ShellAPI; procedure TForm1.EditWndProc(var Message: TMessage); var   S: String; begin   if Message.Msg = WM_DROPFILES then   begin     SetLength(S, MAX_PATH);     SetLength(S, DragQueryFile(Message.WParam, 0, PChar(S), MAX_PATH));     Edit1.Text := S;     Message.Result := 0;   end   else     OldWndProc(Message); end; procedure TForm1.FormCreate(Sender: TObject); begin   DragAcceptFiles(Edit1.Handle, True);   OldWndProc := Edit1.WindowProc;   Edit1.WindowProc := EditWndProc; end; end.

Da bi kontrola uopste mogla da primi WM_DROPFILES poruku mora se registrovati pozivom funkcije DragAcceptFiles. Ova funkcija uzima handle prozora koji treba da sluzi za prihvatanje pustenih fajlova i jednu boolean vrednost koja ako je True registruje, a ako je False brise prozor iz liste onih koji mogu da prime fajl.

Najlaksi nacin da se izmeni procedura koja obradjuje poruke za kontrole je da im se promeni vrednost property-a WindowProc. Ta procedura se poziva kad god postoji neka poruka za kontrolu. Pre promene, bitno je sacuvati staru vrednost tako da se kasnije moze pozvati i default WindowProc za tu kontrolu.

Da bi ovaj kod radio potrebno je na formu postaviti jednu TEdit kontrolu i ako se fajl prevuce i pusti na nju Text property ce uzeti putanju tog fajla. Uzima se putanja samo prvog fajla ako se prevuce vise fajlova odjednom.

@beshtija
Dobrodosla na MyCity Smile

offline
  • Pridružio: 13 Okt 2005
  • Poruke: 26

E Srki bas to mi je trebalo, sad sve funkcionise nevidjeno Smile hvala...

p.s. dobro da sam vas nasla :]]

Ko je trenutno na forumu
 

Ukupno su 1121 korisnika na forumu :: 36 registrovanih, 11 sakrivenih i 1074 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Aleksandar Tomić, AMCXXL, Areal84, Asparagus, Bane san, bojcistv, DonRumataEstorski, GandorCC, Georgius, Goran 0000, goxin, hooraay, ikan, ivan1973, Karla, kihot, kybonacci, ladro, Luka Blažević, milos.cbr, Mlav, NoOneEver Dreams, oldtimer, ostoja, Pikac-47, prashinar, Ripanjac, sasa87, shadower78, simazr, Sirius, stegonosa, Toper, vathra, VJ, Vlada78