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

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

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


الملفات المرفقة
.jpg   01.jpg (الحجم : 60.4 ك ب / التحميلات : 52)
الرد
#4
السلام عليكم...

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

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

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

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

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

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


الملفات المرفقة
.rar   SendToUSBPopup.rar (الحجم : 34.91 ك ب / التحميلات : 33)
الرد
#5
وعليكم السلام
إقتباس :عن كيفية إدراج صورة في المشاركة (و ليس كمرفق)
1-المرفق احسن، يدوم دوام المنتدى
2- رفع الصورة بموقع رفع مثل imageshack.us وادراج الرابط بين
[img] و [/img]
الرد
#6
جزاك الله خيرا أخي Najy Ibraheem ..... لقد فهمت سؤالي مئة بالمائة.... و قد فاجئتني بهذا الجواب الكافي..
جربت البرنامج على دلفي 7 و قد حدث خطأ أثناء التشغيل... لكن تم تجاوزه.
سأحاول تحليل الكود و فهمه.... و قد استشيرك فيما استعصى علي.


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

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

معك حق، و هي نقطة مفيدة. و لهذا قمت بتعديل كود الحدث 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;

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

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

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

سلام.
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم