Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Windows Gezgininden (DRAG DROP)
#1
Merhabalar Ben listbox ın içine form dışından(Windows Gezgininden) dosyaları sürükleyip bırakınca adreslerin alınmasını istiyorum..
bunu internet den baktım Api (ShellApi) ile yapılmış bende yaptım ama çok karmaşık bunun daha kolay yolu var mı acaba?
Cevapla
#2
(21-12-2020, Saat: 23:07)woywod Adlı Kullanıcıdan Alıntı: Merhabalar Ben listbox ın içine form dışından(Windows Gezgininden) dosyaları sürükleyip bırakınca adreslerin alınmasını istiyorum..
bunu internet den baktım Api (ShellApi) ile yapılmış bende yaptım ama çok karmaşık bunun daha kolay yolu var mı acaba?

Merhabalar,

Aşağıda ki kod ile deneyebilirsiniz.

Kolay gelsin.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 protected
   procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

uses ShellAPI;

procedure TForm1.FormCreate(Sender: TObject);
begin

   DragAcceptFiles(Form1.Handle, true);

   ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);
   ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);
   ChangeWindowMessageFilter ($0049, MSGFLT_ADD);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DragAcceptFiles(Form1.Handle, False);
end;

procedure TForm1.WMDropFiles(var Msg: TMessage);
var
 hDrop: THandle;
 FileCount: Integer;
 NameLen: Integer;
 I: Integer;
 S: string;

begin
 hDrop:= Msg.wParam;
 FileCount:= DragQueryFile (hDrop , $FFFFFFFF, nil, 0);

 for I:= 0 to FileCount - 1 do begin
   NameLen:= DragQueryFile(hDrop, I, nil, 0) + 1;
   SetLength(S, NameLen);
   DragQueryFile(hDrop, I, Pointer(S), NameLen);

   Listbox1.Items.Add (S);
 end;

 DragFinish(Msg.WParam);
end;

end.

veya
Farklı örnek de mevcut..
https://github.com/delphidabbler/article-demos
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
(21-12-2020, Saat: 23:25)hi_selamlar Adlı Kullanıcıdan Alıntı:
(21-12-2020, Saat: 23:07)woywod Adlı Kullanıcıdan Alıntı: Merhabalar Ben listbox ın içine form dışından(Windows Gezgininden) dosyaları sürükleyip bırakınca adreslerin alınmasını istiyorum..
bunu internet den baktım Api (ShellApi) ile yapılmış bende yaptım ama çok karmaşık bunun daha kolay yolu var mı acaba?

Merhabalar,

Aşağıda ki kod ile deneyebilirsiniz.

Kolay gelsin.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 protected
   procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

uses ShellAPI;

procedure TForm1.FormCreate(Sender: TObject);
begin

   DragAcceptFiles(Form1.Handle, true);

   ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);
   ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);
   ChangeWindowMessageFilter ($0049, MSGFLT_ADD);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DragAcceptFiles(Form1.Handle, False);
end;

procedure TForm1.WMDropFiles(var Msg: TMessage);
var
 hDrop: THandle;
 FileCount: Integer;
 NameLen: Integer;
 I: Integer;
 S: string;

begin
 hDrop:= Msg.wParam;
 FileCount:= DragQueryFile (hDrop , $FFFFFFFF, nil, 0);

 for I:= 0 to FileCount - 1 do begin
   NameLen:= DragQueryFile(hDrop, I, nil, 0) + 1;
   SetLength(S, NameLen);
   DragQueryFile(hDrop, I, Pointer(S), NameLen);

   Listbox1.Items.Add (S);
 end;

 DragFinish(Msg.WParam);
end;

end.
Tesekur ederim.. Benden buna benzer yaptım.. ..C# daki gıbı daha kolay yolu var mı?
Cevapla
#4
Merhabalar.
şurada toplasan 10 satır kod var.. bundan daha basiti ne olabilir ki? gayet anlaşılır bence.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#5
Wink 
(22-12-2020, Saat: 12:41)mcuyan Adlı Kullanıcıdan Alıntı: Merhabalar.
şurada toplasan 10 satır kod var.. bundan daha basiti ne olabilir ki? gayet anlaşılır bence.

Merhaba Bende Bu yollan yapmıştım Gayet guzel calısıyor. Baska yolu varmı dıye merak ettım Shy
Cevapla
#6
Microsoft, Delphiyi satın aldığında tek amacı, yolunda ki en büyük engeli kaldırmaktı 2000 li yıllarda. Başardı da. O rezalet VB'i dayattı geliştiricilere. Birçoğumuz Win tabanlı uygulama geliştiriyoruz. Kısacası Microsoft'a yazılım geliştiriyoruz. Elbette ki microsoft kendi uygulamasına imtiyazlar geçecek Smile
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#7
(22-12-2020, Saat: 21:08)mcuyan Adlı Kullanıcıdan Alıntı: Microsoft, Delphiyi satın aldığında tek amacı, yolunda ki en büyük engeli kaldırmaktı 2000 li yıllarda. Başardı da. O rezalet VB'i dayattı geliştiricilere. Birçoğumuz Win tabanlı uygulama geliştiriyoruz. Kısacası Microsoft'a yazılım geliştiriyoruz. Elbette ki microsoft kendi uygulamasına imtiyazlar geçecek Smile

Gayet açıklayıcı oldu.. Tesekur ederım  Shy
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ) Hsavci 8 395 08-04-2021, Saat: 01:01
Son Yorum: Hsavci
  MessageDialog'ları windows a bağlı kalmadan Türkçe yapmak nuheroglu 0 135 04-04-2021, Saat: 20:56
Son Yorum: nuheroglu
  Dbgrid Drag&Drop İle Satır Sıralama TheEAK 6 957 18-03-2021, Saat: 14:50
Son Yorum: TheEAK
  windows üzerinde çalışan programları gruplamak yanniosman 2 273 17-03-2021, Saat: 18:39
Son Yorum: yanniosman
  $IFNDEF {$IFDEF WINDOWS} hk. sadikacar60 2 244 17-03-2021, Saat: 09:17
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi