كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟
فأنا أود ارسال ملفات من برنامجي إلى القرص القابل للإزالة الخاص بالمستخدم مع احتمال تواجد أكثر من قرص قابل للازالة على جهاز الحاسوب؟
استعمل copy للملفات
لن تحتاج الى أكثر من هذا
شكرا جزيلا اخي العزيز....
لكن هذا الاجراء يتطلب معرفة القرص القابل للإزالة الموجود على الجهاز كي تتم عملية النسخ.
افترض أنه يوجد 3 أقراص على الجهاز
1 عمر
2 زيد
3 أحمد
أود ارسال ملفا معينا للقرص القابل للإزالة الخاص بأحمد
ما أدراني أنه هو القرص e أو f أو g
سوف يتطلب مني الذهاب إلى My computer لمعرفة الحرف.
عموما أردت ادراج صورة لشرح الاشكال
لكنني بصراحة أجهل الطريقة
صورة البرنامج
![[صورة: attachment.php?attachmentid=3712&d=1351502394]](http://www.delphi4arab.net/forum/attachment.php?attachmentid=3712&d=1351502394)
أحاول اظهار قائمة منسدلة بمجرد الضغط بالزر الأيمن للفأرة على الكتاب
القائمة المنسدلة تحاكي نافذة send to في الويندوز
السلام عليكم...
في المرفقات مشروع بـ Delphi 2010 يلبي طلبك إن شاء الله.
البرنامج عبارة عن نافذة بها Popup Menu و ListBox (فارغة، فهي فقط لتجربة الـ Popup Menu).
عند النقر على الـ ListBox بالزر الأيمن للفأرة تظهر Popup Menu بها أسماء أقراص الـ USB المتصلة حالياً بالحاسوب، بالإضافة إلى أمر ثابت في آخر القائمة للسماح للمستخدم باختيار قرص أو مجلد آخر حتى إذا لم يكن هناك أقراص USB متصلة بالحاسوب.
الجزء الأول من الكود (أكواد التعرف على أقراص USB) مأخوذة من موقع آخر مع إجراء بعض التعديلات عليها لتتناسب مع هذا الغرض. أما بقية الأكواد فكتبتها بنفسي.
نرجو الاستفادة و السلام.
* نرجو من أحد الإخوة أن يخبرنا عن كيفية إدراج صورة في المشاركة (و ليس كمرفق).
جزاك الله خيرا أخي Najy Ibraheem ..... لقد فهمت سؤالي مئة بالمائة.... و قد فاجئتني بهذا الجواب الكافي..
جربت البرنامج على دلفي 7 و قد حدث خطأ أثناء التشغيل... لكن تم تجاوزه.
سأحاول تحليل الكود و فهمه.... و قد استشيرك فيما استعصى علي.
بالنسبة لادراج صورة في المنتدى....
شكرا جزيلا للأخ B.M.AbdelAziZ على التوضيح.
السلام عليكم
أخي Najy Ibraheem
هل توجد طريقة لاظهار اسم القرص إلى جانب الحرف
مثلا:
Ahmed(H

فعادة ما يقوم المستخدمين باعطاء اسم أو وصف للأقراص القابلة للازالة الخاصة بهم..
عموما. فهمت من الخاصية الأخيرة... أختيار قرص أو مجلد للنسخ اليه... كحل جزئي للسؤال أعلاه...
فإن كنت تملك خيارات أخرى..فنرجو منك شرحها حتى تعم الفائدة......
والسؤال مطروح لجميع الاخوة الكرام...
السلام عليكم...
معك حق، و هي نقطة مفيدة. و لهذا قمت بتعديل كود الحدث 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;
الكود بعد التعديل يقوم بإظهار اسم القرص إذا كان له اسم، و إلا فإنه يظهر عبارة (قرص قابل للإزالة) طبعاً مع حرف القرص.
نرجو الاستفادة و السلام.
شكرا جزيلا على التفاعل
لكن البرنامج يتعثر عند هذا السطر
كود :
GetVolumeInformation(PWideChar(AList[Idx]), PVolName, MAX_PATH + 1, nil, MaxCompLen, FSFlags, nil, 0);
السلام عليكم...
ما هي رسالة الخطأ التي تظهر عند تعثر البرنامج.
سلام.