delphi4arab منتديات دلفي للعرب
كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ (/showthread.php?tid=4671)

الصفحات: 1 2


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - you_per7 - 28-10-2012

كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟
فأنا أود ارسال ملفات من برنامجي إلى القرص القابل للإزالة الخاص بالمستخدم مع احتمال تواجد أكثر من قرص قابل للازالة على جهاز الحاسوب؟


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - DAMAX2010 - 28-10-2012

استعمل copy للملفات

لن تحتاج الى أكثر من هذا


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - you_per7 - 29-10-2012

شكرا جزيلا اخي العزيز....
لكن هذا الاجراء يتطلب معرفة القرص القابل للإزالة الموجود على الجهاز كي تتم عملية النسخ.
افترض أنه يوجد 3 أقراص على الجهاز
1 عمر
2 زيد
3 أحمد
أود ارسال ملفا معينا للقرص القابل للإزالة الخاص بأحمد
ما أدراني أنه هو القرص e أو f أو g
سوف يتطلب مني الذهاب إلى My computer لمعرفة الحرف.
عموما أردت ادراج صورة لشرح الاشكال
لكنني بصراحة أجهل الطريقة

صورة البرنامج
[صورة: attachment.php?attachmentid=3712&d=1351502394]
أحاول اظهار قائمة منسدلة بمجرد الضغط بالزر الأيمن للفأرة على الكتاب
القائمة المنسدلة تحاكي نافذة send to في الويندوز


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - Najy Ibraheem - 29-10-2012

السلام عليكم...

في المرفقات مشروع بـ Delphi 2010 يلبي طلبك إن شاء الله.

البرنامج عبارة عن نافذة بها Popup Menu و ListBox (فارغة، فهي فقط لتجربة الـ Popup Menu).

عند النقر على الـ ListBox بالزر الأيمن للفأرة تظهر Popup Menu بها أسماء أقراص الـ USB المتصلة حالياً بالحاسوب، بالإضافة إلى أمر ثابت في آخر القائمة للسماح للمستخدم باختيار قرص أو مجلد آخر حتى إذا لم يكن هناك أقراص USB متصلة بالحاسوب.

الجزء الأول من الكود (أكواد التعرف على أقراص USB) مأخوذة من موقع آخر مع إجراء بعض التعديلات عليها لتتناسب مع هذا الغرض. أما بقية الأكواد فكتبتها بنفسي.

نرجو الاستفادة و السلام.

* نرجو من أحد الإخوة أن يخبرنا عن كيفية إدراج صورة في المشاركة (و ليس كمرفق).


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - محمد عبد العزيز - 29-10-2012

وعليكم السلام
إقتباس :عن كيفية إدراج صورة في المشاركة (و ليس كمرفق)
1-المرفق احسن، يدوم دوام المنتدى
2- رفع الصورة بموقع رفع مثل imageshack.us وادراج الرابط بين
[img] و [/img]


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - you_per7 - 29-10-2012

جزاك الله خيرا أخي Najy Ibraheem ..... لقد فهمت سؤالي مئة بالمائة.... و قد فاجئتني بهذا الجواب الكافي..
جربت البرنامج على دلفي 7 و قد حدث خطأ أثناء التشغيل... لكن تم تجاوزه.
سأحاول تحليل الكود و فهمه.... و قد استشيرك فيما استعصى علي.


بالنسبة لادراج صورة في المنتدى....
شكرا جزيلا للأخ B.M.AbdelAziZ على التوضيح.


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - you_per7 - 29-10-2012

السلام عليكم
أخي Najy Ibraheem
هل توجد طريقة لاظهار اسم القرص إلى جانب الحرف
مثلا:
Ahmed(HSmile
فعادة ما يقوم المستخدمين باعطاء اسم أو وصف للأقراص القابلة للازالة الخاصة بهم..

عموما. فهمت من الخاصية الأخيرة... أختيار قرص أو مجلد للنسخ اليه... كحل جزئي للسؤال أعلاه...
فإن كنت تملك خيارات أخرى..فنرجو منك شرحها حتى تعم الفائدة......
والسؤال مطروح لجميع الاخوة الكرام...


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - Najy Ibraheem - 29-10-2012

السلام عليكم...

معك حق، و هي نقطة مفيدة. و لهذا قمت بتعديل كود الحدث OnPopup للمكون TPopupMenu ليكون بالشكل التالي (أعتذر عن إعادة رفع المشروع، و لكن يكفي تتبع الكود و إجراء التعديلات أو الإضافات، أو حتى فقط نسخ هذا الكود و لصقه بدل الكود السابق):

كود :
procedure TFMainWin.popSendToPopup(Sender: TObject); var AItem: TMenuItem; AList: TStringList; Idx: Integer; // ============= متغيرات جديدة ============= VolName: array[0..MAX_PATH] of WideChar; PVolName: PWideChar; MaxCompLen, FSFlags: Cardinal; AVolumeLabel: string; // ========================================= begin try while popSendTo.Items.Count > 2 do popSendTo.Items.Delete(1); AList := TStringList.Create; GetUsbDrives(AList); // سطر معدل if AList.Count > 0 then begin PVolName := @VolName[0]; // سطر جديد AItem := TMenuItem.Create(Self); AItem.Caption := '-'; AItem.Tag := 1; popSendTo.Items.Insert(1, AItem); AItem := nil; for Idx := 0 to AList.Count - 1 do begin // ======================== كود جديد =========================== GetVolumeInformation(PWideChar(AList[Idx]), PVolName, MAX_PATH + 1, nil, MaxCompLen, FSFlags, nil, 0); AVolumeLabel := PVolName; if AVolumeLabel = '' then AVolumeLabel := ' (قرص قابل للإزالة)' else AVolumeLabel := ' (' + AVolumeLabel + ')'; // ============================================================= AItem := TMenuItem.Create(Self); AItem.Caption := ' ' + AList[Idx] + AVolumeLabel; // سطر معدل AItem.OnClick := popSendToSelectClick; AItem.Tag := 1; popSendTo.Items.Insert(1, AItem); AItem := nil; end; end; finally AList.Free; end; end;

الكود بعد التعديل يقوم بإظهار اسم القرص إذا كان له اسم، و إلا فإنه يظهر عبارة (قرص قابل للإزالة) طبعاً مع حرف القرص.

نرجو الاستفادة و السلام.


كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - you_per7 - 30-10-2012

شكرا جزيلا على التفاعل
لكن البرنامج يتعثر عند هذا السطر
كود :
GetVolumeInformation(PWideChar(AList[Idx]), PVolName, MAX_PATH + 1, nil, MaxCompLen, FSFlags, nil, 0);



كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟ - Najy Ibraheem - 30-10-2012

السلام عليكم...

ما هي رسالة الخطأ التي تظهر عند تعثر البرنامج.

سلام.