delphi4arab منتديات دلفي للعرب

نسخة كاملة : التعرف على مسار MyDocuments برمجيا
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .

delphi4ever

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

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

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

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

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

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

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

نعود للموضوع
ان قلت لك : ShGetSpecialFolderPath هي API
فهل تعرف ما معنى ذلك او يعني لك شيئ ؟ (اجبني لكي اكمل)
شكرا لك
وهذه اجرائية من برمجتي لا تنسوا إضافة 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;
من الأفضل استخدام الدالة 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); 
:pبارك الله فيك
إقتباس :بعض الأكواد يصعب شرحها، أو يتطلب وقتا طويلا أو موضوعا منفصلا
فنكتفي بسردها دون شرح ولمن أراد الشرح عليه بالمراجع
كون بعض المبتدئين لا يفهمها لا يدفعنا إلى عدم سردها
وإلا لما كان هناك منتدى أصلا لأن هناك من لا يفهم أي شيء فيه!
والله أعلم.

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