كيف استطيع محاكاة نافذة send to الخاصة بالويندوز عن طريق دلفي ؟
#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;

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

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


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

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


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