delphi4arab منتديات دلفي للعرب
التعرف على مسار MyDocuments برمجيا - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6)
+--- قسم : دلفي والتعامل مع الملفات (https://delphi4arab.net/forum/forumdisplay.php?fid=22)
+--- الموضوع : التعرف على مسار MyDocuments برمجيا (/showthread.php?tid=124)



التعرف على مسار MyDocuments برمجيا - delphi4ever - 01-04-2008

السلام عليكم ورحمة الله

يمكننا أن نتعرف برمجيا عن مسار المجلد 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 .
وللمزيد من المعلومات حمل السورس في المرفقات


التعرف على مسار MyDocuments برمجيا - mourad39 - 26-10-2009

أشكرك أخي الكريم على موضوعك
لكن إسمح لي فأنا أرى أن بعض المواضيع في المنتدى مثل موضوعك تحتوي على الكود لكن لا يوجد شرح للكود
فمثلا ماذا تمثل كل من 0, path, CSIDL_Personal, False
فهناك المبتدئيين الجدد في عالم دلفي عندما يجدون الأكواد غير مفهومة يعتزلون البرمجة لأنهم يرون أنها كطلاسم يجب أن تحفظ على ظهر قلب و هذا مفهوم خاطئ لأنه يجب فهم الاكواد وليس حفظها و بالتالي فهذا الامر لا يشجع المبرمجين الجدد على التواصل مع عالم البرمجة
المعذرة و أتمنى أن لا تأخذ إنتقادي هذا على أنه إساءة فهو مجرد رأي فقط


التعرف على مسار MyDocuments برمجيا - I_Tiger - 26-10-2009

يا اخي صبرك لا تستعجل البرمجة لازمها طول نفس

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

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

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

اهم جزئ هو ان تستمتع



التعرف على مسار MyDocuments برمجيا - kachwahed - 27-10-2009

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

بعض الأكواد يصعب شرحها، أو يتطلب وقتا طويلا أو موضوعا منفصلا
فنكتفي بسردها دون شرح ولمن أراد الشرح عليه بالمراجع
كون بعض المبتدئين لا يفهمها لا يدفعنا إلى عدم سردها
وإلا لما كان هناك منتدى أصلا لأن هناك من لا يفهم أي شيء فيه!
والله أعلم.



التعرف على مسار MyDocuments برمجيا - محمد عبد العزيز - 27-10-2009

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

نعود للموضوع
ان قلت لك : ShGetSpecialFolderPath هي API
فهل تعرف ما معنى ذلك او يعني لك شيئ ؟ (اجبني لكي اكمل)



التعرف على مسار MyDocuments برمجيا - KaSsiMiTec - 02-11-2012

شكرا لك
وهذه اجرائية من برمجتي لا تنسوا إضافة 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;



التعرف على مسار MyDocuments برمجيا - SMP3 - 04-11-2012

من الأفضل استخدام الدالة SHGetFolderPath بدلا من الدالة ShGetSpecialFolderPath لانها غير مدعومة في نسخ الوينداوز الاحدث ..
From MSDN
إقتباس :[SHGetSpecialFolderPath is not supported. Instead, use ShGetFolderPath.]
لكن رغم هذا يمكن استخدامها ..

يمكن استخدام الدالة SHGetFolderPath مع نسخ دلفي الحديثة و التي تدعم اليونيكود
PHP كود :
function GetSpecialFolder(CSIDL:integer): string;
var
LResult: BOOL;
HLResult :HResult;
{
$IFDEF UNICODE}
  
PathTemp:LPWSTR;
 {
$ELSE}
  
PathTemp:LPSTR;
{
$ENDIF}
begin
GetMem
(PathTemp,MAX_PATH);
{
$IF CompilerVersion <= 17}
 
LResult := ShGetSpecialFolderPath(0, PathTemp, CSIDL, False) ;
 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); 



التعرف على مسار MyDocuments برمجيا - العمراوي - 02-06-2014

:pبارك الله فيك


RE: التعرف على مسار MyDocuments برمجيا - mc77s - 10-03-2016

إقتباس :بعض الأكواد يصعب شرحها، أو يتطلب وقتا طويلا أو موضوعا منفصلا
فنكتفي بسردها دون شرح ولمن أراد الشرح عليه بالمراجع
كون بعض المبتدئين لا يفهمها لا يدفعنا إلى عدم سردها
وإلا لما كان هناك منتدى أصلا لأن هناك من لا يفهم أي شيء فيه!
والله أعلم.

كلامك صح و بارك الله فيك فلبد من سرد ما يتوجب سرده لكن لدي اقتراح...
لما لا يكون هناك تهميش او وصلة من الجزء الغير واضح اما لموضوع و اما شرح في تذيل في ذات الموضوع لأنني ممن بعض الطلاسم هنا هههه


RE: التعرف على مسار MyDocuments برمجيا - wadoud - 31-07-2016

كود :
السلام عليكم للإفادة هنا  قائمة من  الثوابت  CSIDL) Constant special items ID List) وما يقابلها من المسارات.  يمكن الإطلاع عليها هنا: https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494(v=vs.85).aspx