التعرف على مسار MyDocuments برمجيا
#1
السلام عليكم ورحمة الله

يمكننا أن نتعرف برمجيا عن مسار المجلد MyDocuments أي في أي جزء من القرص الصلب موجود بالضبط مع مساره الكامل،
في الأول نضيف ShlObj إلى قائمة Uses ثم نكتب ما يلي:

كود :
function GetMyDocuments: string;
var
r: Bool;
path: array[0..Max_Path] of Char;
begin
r := ShGetSpecialFolderPath(0, path, CSIDL_Personal, False) ;
if not r then raise Exception.Create('Could not find MyDocuments folder location.') ;
Result := Path;
end;

ثم نقوم بالضغط مرتين على Form ونكتب الكود التالي:

كود :
var
  myDocFolder : string;
begin
myDocFolder := GetMyDocuments;
label2.caption:=(Format(' "%s"',[myDocFolder])) ;

Label2 هنا تعني لنا المكون الذي سيظهر لنا فيه مسار MyDocuments .
وللمزيد من المعلومات حمل السورس في المرفقات


الملفات المرفقة
.rar   MyDocuments Folder.rar (الحجم : 4.59 ك ب / التحميلات : 478)
[-] كل من 1 user says قال شكرا ل ضيف على المشاركة المفيدة
  • wadoud
الرد
#2
أشكرك أخي الكريم على موضوعك
لكن إسمح لي فأنا أرى أن بعض المواضيع في المنتدى مثل موضوعك تحتوي على الكود لكن لا يوجد شرح للكود
فمثلا ماذا تمثل كل من 0, path, CSIDL_Personal, False
فهناك المبتدئيين الجدد في عالم دلفي عندما يجدون الأكواد غير مفهومة يعتزلون البرمجة لأنهم يرون أنها كطلاسم يجب أن تحفظ على ظهر قلب و هذا مفهوم خاطئ لأنه يجب فهم الاكواد وليس حفظها و بالتالي فهذا الامر لا يشجع المبرمجين الجدد على التواصل مع عالم البرمجة
المعذرة و أتمنى أن لا تأخذ إنتقادي هذا على أنه إساءة فهو مجرد رأي فقط
[-] كل من 1 user says قال شكرا ل mourad39 على المشاركة المفيدة
  • mohamed49
الرد
#3
يا اخي صبرك لا تستعجل البرمجة لازمها طول نفس

و الاخوة كثر خيرهم قايمين و زيادة

لذلك ترى هذه الاعداد الكبيرة من الناس يبدؤن لكن القليل فقط يكملون

لذا انصحك بدراسة لغة الباسكال "delphi = visual pascal" جيدا اذا اردت قرائه الهيروغليفية الديلفاوية

اهم جزئ هو ان تستمتع
لا إله إلا الله محمد رسول الله
الرد
#4
إقتباس :يجدون الأكواد غير مفهومة يعتزلون البرمجة
هذا كلام صحيح...
إقتباس :من الناس يبدؤن لكن القليل فقط يكملون
وهذا أيضا صحيح...

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

نعود للموضوع
ان قلت لك : ShGetSpecialFolderPath هي API
فهل تعرف ما معنى ذلك او يعني لك شيئ ؟ (اجبني لكي اكمل)
الرد
#6
شكرا لك
وهذه اجرائية من برمجتي لا تنسوا إضافة registry في قائمة uses
كود :
function GET_DOC_PATH():string ;
var s:array[0..255] of char;   Reg:TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_USERS;
Reg.OpenKey('\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders',True);
Result:=Reg.ReadString('Personal');
Reg.free;
ExpandEnvironmentStrings(PChar(Result),s,256);
Result:=s;
end;
الرد
#7
من الأفضل استخدام الدالة SHGetFolderPath بدلا من الدالة ShGetSpecialFolderPath لانها غير مدعومة في نسخ الوينداوز الاحدث ..
From MSDN
إقتباس :[SHGetSpecialFolderPath is not supported. Instead, use ShGetFolderPath.]
لكن رغم هذا يمكن استخدامها ..

يمكن استخدام الدالة SHGetFolderPath مع نسخ دلفي الحديثة و التي تدعم اليونيكود
PHP كود :
function GetSpecialFolder(CSIDL:integer): string;
var
LResultBOOL;
HLResult :HResult;
{
$IFDEF UNICODE}
  
PathTemp:LPWSTR;
 {
$ELSE}
  
PathTemp:LPSTR;
{
$ENDIF}
begin
GetMem
(PathTemp,MAX_PATH);
{
$IF CompilerVersion <= 17}
 
LResult := ShGetSpecialFolderPath(0PathTempCSIDLFalse) ;
 if 
not LResult then raise Exception.Create('Could not find your folder location.') ;
{
$ELSE}
 
HLResult:=SHGetFolderPath (0,CSIDL,0,1,PathTemp);
 if  
HLResult<>S_OK then raise Exception.Create('Could not find your folder location.') ;
{
$IFEND}

 
Result := PathTemp;
 
FreeMem(PathTemp,MAX_PATH);
end
يكفي أن تقوم باختيار ال CSIDL
PHP كود :
edit1.text:= GetSpecialFolder(CSIDL_Personal); 
[-] كل من 2 users say قال شكرا ل SMP3 على المشاركة المفيدة
  • wadoud, mohamed49
الرد
#8
:pبارك الله فيك
الرد
#9
إقتباس :بعض الأكواد يصعب شرحها، أو يتطلب وقتا طويلا أو موضوعا منفصلا
فنكتفي بسردها دون شرح ولمن أراد الشرح عليه بالمراجع
كون بعض المبتدئين لا يفهمها لا يدفعنا إلى عدم سردها
وإلا لما كان هناك منتدى أصلا لأن هناك من لا يفهم أي شيء فيه!
والله أعلم.

كلامك صح و بارك الله فيك فلبد من سرد ما يتوجب سرده لكن لدي اقتراح...
لما لا يكون هناك تهميش او وصلة من الجزء الغير واضح اما لموضوع و اما شرح في تذيل في ذات الموضوع لأنني ممن بعض الطلاسم هنا هههه
الرد
#10
كود :
السلام عليكم
للإفادة هنا  قائمة من  الثوابت  CSIDL) Constant special items ID List) وما يقابلها من المسارات.
 يمكن الإطلاع عليها هنا:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494(v=vs.85).aspx
الخوف من أي محاولة جديدة طريق حتمي للفشل.
الرد


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


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