delphi4arab منتديات دلفي للعرب
سحب وأفلات الصور من Windows explorer إلى تطبيقك - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6)
+--- قسم : دلفي والتعامل مع النظام و الذاكرة (https://delphi4arab.net/forum/forumdisplay.php?fid=20)
+--- الموضوع : سحب وأفلات الصور من Windows explorer إلى تطبيقك (/showthread.php?tid=1425)



سحب وأفلات الصور من Windows explorer إلى تطبيقك - issamdnn - 22-12-2009

1 - أنشئ تطبيق جديد.
2- ضع على الفورم عنصر TPanel
3- ضع ضمن البانيل عنصر Timage
5- ضع الكود التالي بدل كامل الكود في الوحدة:
PHP كود :
unit Unit1;

interface

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

type
   TForm1 
= class(TForm)
     
Panel1: TPanel;
     
Image1: TImage;
     
procedure FormCreate(Sender: TObject) ;
   private
     
originalPanelWindowProc : TWndMethod;
     
procedure PanelWindowProc (var Msg : TMessage) ;
     
procedure PanelImageDrop (var Msg : TWMDROPFILES) ;
   public
     { Public 
declarations }
   
end;

var
   
Form1: TForm1;

implementation
{$R *.dfm}

uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject) ;
begin
   originalPanelWindowProc 
:= Panel1.WindowProc;
   
Panel1.WindowProc := PanelWindowProc;

   
DragAcceptFiles(Panel1.Handle,true) ;
   
//إعلام ويندوز بأن البانيل تقبل إفلات الملفات فوقها
end;

procedure TForm1.PanelWindowProc(var Msg: TMessage) ;
begin
// معالجة الرسالة
   
if Msg.Msg = WM_DROPFILES then
     PanelImageDrop
(TWMDROPFILES(Msg))
   else
     
originalPanelWindowProc(Msg) ;
end;

procedure TForm1.PanelImageDrop(var Msg: TWMDROPFILES) ;
var
   
numFiles : longInt;
   
buffer : array[0..MAX_PATH] of char;
begin
   numFiles 
:= DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0) ;
   if 
numFiles > 1 then
   begin
     ShowMessage
('يمكنك فقط إسقاط صورة واحدة على البانل ') ;
   
end
   
else
   
begin
     DragQueryFile
(Msg.Drop, 0, @buffer, sizeof(buffer)) ;
     try
     
// تحميل الصورة من الملف
       
Image1.Picture.LoadFromFile(buffer) ;
     
except
       on EInvalidGraphic 
do ShowMessage('ملف صورة غير مدعوم ') ;
     
end;
   
end;
end;

end. 

الشرح:

لكي يكون تطبيقك متقبلاً للملفات المسحوبة من مستكشف ويندوز .يتوجب عليك أن تجعل ويندوز يعرف بأن تطبيقك يقبل الملفات المسحوبة وذلك بإستدعاء إجرائية DragAcceptFiles من الوحدة ShellApi
بعد ذلك ينبغي على تطبيقك الإستجابة لحدث الإفلات والسحب وذلك بإنشاء إجرائية تستجيب لرسالة WM_DROPFILES
إن إجرائية DragAcceptFiles تقبل مقبظ النافذة كأول بارمتر لها, وبإعتبار أن العنصر Timage لا يعطي مقبظ تم اللجوء إلى البانيل .


والله الموفق للجميع.


سحب وأفلات الصور من Windows explorer إلى تطبيقك - I_Tiger - 22-12-2009

شكرا على المعلومة لكن هل تنطبق هذه الطريقة على انواع الملفات الاخرى ?


سحب وأفلات الصور من Windows explorer إلى تطبيقك - issamdnn - 22-12-2009

بالطبع تنطبق عزيزي. بشرط وجود مقبظ للنافذة.