![]() |
|
HomeWork_10 تمرين تطبيقي - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : تمارين دلفي وحلول (https://delphi4arab.net/forum/forumdisplay.php?fid=16) +--- الموضوع : HomeWork_10 تمرين تطبيقي (/showthread.php?tid=1292) |
HomeWork_10 تمرين تطبيقي - STRELiTZIA - 28-10-2009 السلام عليكم و رحمة الله التمرين التطبيقي الخاص بالدرس رقم 10 ينقسم الى ثلاثة اقسام : 1- يوجد في الدرس خطأ عمدي... ما هو ؟ تمت الاشارة اليه في رسالة لمن تتبع الدرس... 2- برمجة تطبيق يعمل بخاصية Open with، يعني يتم ربط نوع من انواع الملفات بايقونة التطبيق و يفتح هذا الملف بالتطبيق فقط. نوع الملف : نصي و امتدادة : .D4A 3- ربط التطبيق بخيار Uninstall، يعني عند الذهاب الى Add/Remove programs في Control panel نجد اسم التطبيق هناك... مع اضافة معلومات مثل : رقم اصدار التطبيق، الشركة، رابط التحميل الخ... بالتوفيق ان شاء الله HomeWork_10 تمرين تطبيقي - Goblin - 29-10-2009 السلام عليكم و رحمة الله و بركاته STRELiTZIA كتب :1- يوجد في الدرس خطأ عمدي... ما هو ؟ تمت الاشارة اليه في رسالة لمن تتبع الدرس... لم اجده ! :oops: STRELiTZIA كتب :2- برمجة تطبيق يعمل بخاصية Open with، يعني يتم ربط نوع من انواع الملفات بايقونة التطبيق و يفتح هذا الملف بالتطبيق فقط. نوع الملف : نصي و امتدادة : .D4A ساتركه لغيري. :tong: STRELiTZIA كتب :3- ربط التطبيق بخيار Uninstall، يعني عند الذهاب الى Add/Remove programs في Control panel نجد اسم التطبيق هناك... مع اضافة معلومات مثل : رقم اصدار التطبيق، الشركة، رابط التحميل الخ... [COLOR="RoyalBlue"]هذا ما عملت عليه, فكرته كالاتي:- - يقوم البرنامج باضافة نفسه فى"Add/Remove programs" من خلال تسجيل اسم البرنامج و بعض البيانات المطلوبة (مثل رقم الاصدار و اسم الشركة و موقع الشركة) فى السجل "Registry" فى العنوان:[/COLOR] كود : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\بعد ذلك ستجد البرنامج فى قائمة "Add/Remove programs". - ملحوظة: عند حذف الرنامج من قائمة "Add/Remove programs" لاول مرة, سيحذف البرنامج و لكن سيبقي اسم البرنامج فى القائمة. لحذف اسم البرنامج, احذف البرنامج مرة اخري من القائمة. السبب فى ذلك ان بعد حذف البرنامج لاول مرة, لا يتم حذف القيم الموجودة فى السجل الخاصة بالاصدار و اسم الشركة, الخ.. - عذرا اذا كانت الطريقة دون المستوي.[/COLOR] HomeWork_10 تمرين تطبيقي - STRELiTZIA - 30-10-2009 السلام عليكم و رحمة الله إقتباس :لم اجده ! هذه هي الأوامر التي تحتوي على الخطأ العمدي : PHP كود : function TMain.WriteReg(KeyRoot: HKEY; Key, Value, NewValue: string): Boolean;هذه طريقة الاستدعاء : PHP كود : ReportMmo.Lines.Add(ReadReg(HKEY_LOCAL_MACHINE, '\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', 'Shell'));لملاحظة الخطأ يتطلب فقط بعض التركيز البسيط :brow: إقتباس :السبب فى ذلك ان بعد حذف البرنامج لاول مرة, لا يتم حذف القيم الموجودة فى السجل الخاصة بالاصدار و اسم الشركة, الخ..الفكرة التي وضعتها اخي Goblin هي المعمول بها مع بعض الاضافات الخفيفة : كود : Reg.WriteString('UninstallString', Application.ExeName + ' [COLOR=red]Uninstall[/COLOR]');كود : if ParamStr([COLOR=red]1[/COLOR]) = '[COLOR=red]Uninstall[/COLOR]' then
begin
Action 01 = Stop and delete installed files... (Location 'Current folder' and 'System folder' and...)
Action 02 = Delete all Registry values...
Action 04 = ....
Action 05 = ....
Action 06 = ....
Action 07 = Make and run 'Suicide.bat' to delete last file and empty folder or
tell system to delete on reboot last file.
end;هذه الأوامر تخص التقاط براميتر واحد فقط و تتجاهل البرامترات الأخرى، في حالة ارادة معالجة كل البرامترات الممررة على التطبيق نقوم بعمل حلقة تلتقط كل ما يمرر للتطبيق ليتم معالجته.. كود : var
x: integer;
begin
for x := 1 to [COLOR=red]ParamCount[/COLOR] do
begin
if paramStr([COLOR=red]x[/COLOR]) = 'Uninstall' then
begin
end;
end;يمكن ايضا استعمال ملف خارجي يحتوي على التعليمات التي يجب عملها للالغاء التنصيب بنجاح و دون اخطاء، هذه التعليمات تكون منظمة تحت اقسام واضحة او مشفرة... إقتباس :عذرا اذا كانت الطريقة دون المستوي.لا يا اخي Goblin حلك جيد ![]() --- هيا... هل من حلول... الأمور اصبحت اكثر وضوحا
HomeWork_10 تمرين تطبيقي - Goblin - 30-10-2009 [COLOR="RoyalBlue"]استاذ STRELiTZIA لقد حاولت تطبيق تلك الطريقة, لكن لم استطع جعل البرنامج يحذف نفسه.[/COLOR] HomeWork_10 تمرين تطبيقي - STRELiTZIA - 30-10-2009 Goblin كتب :[COLOR="RoyalBlue"]استاذ STRELiTZIA اذا كنت تريد استعمال ملف BATCH يجب وضع امر الحذف في حدث OnDestroy لكي يستطيع حذف البرنامج و من الأفضل انشاء ملف الــ Batch في مجلد الــ Temp ليقوم بتنظيف المجلد الفارغ ايضا... وضع الأمر في حدث OnDestroy يجب ان يتأثر بنتيجة الــ Parameter الممرر للتطبيق لكي لا ينفذ امر الحذف في كل حالات OnDestroy. و اذا اردت ان تستعمل الرجيستري، يكفي الاطلاع على المشاركة التالية : http://www.delphi4arab.net/forum/showthread.php?tid=1699 او استعمال مفتاح : RunOnce ليتم تشغيل محتواه مرة واحدة عن تشغيل النظام... HomeWork_10 تمرين تطبيقي - TF6M - 02-11-2009 السلام عليكم ممكن ... الخطأ : 1- كود : KeyRoot: HKEY;- لأن RootKey خاصية لها نفس إسم المتغير (للضليل ؟؟؟) . كود : property RootKey: HKEY read FRootKey write SetRootKey;HomeWork_10 تمرين تطبيقي - STRELiTZIA - 02-11-2009 و عليكم السلام و رحمة الله طالت غيبتك اخي TF6M ![]() نعم... ملاحظة جيدة : الخطأ العمدي خاص بالمتغير : Rootkey حيث الدالة يجب ان تتاثر بالقيمة التي تمرر اليها... في حالة التمرين : كود : function TMain.WriteReg([color=Red]KeyRoot[/color]: HKEY; Key, Value, NewValue: string): Boolean;
var
Reg: TRegistry;
begin
Result := False;
Reg := TRegistry.Create;
Reg.RootKey := [color=red]HKEY_LOCAL_MACHINE[/color];
if Reg.OpenKey(Key, True) then
begin
if not (Reg.ReadString(Value) = NewValue) then
begin
Reg.WriteString(Value, NewValue);
Result := True;
end;
end
else
begin
Result := False;
end;
Reg.CloseKey;
Reg.Free;
end;الكتابة الصحيحة : كود : function TMain.WriteReg([color=red]KeyRoot[/color]: HKEY; Key, Value, NewValue: string): Boolean;
var
Reg: TRegistry;
begin
Result := False;
Reg := TRegistry.Create;
Reg.RootKey := [color=red]KeyRoot[/color];
if Reg.OpenKey(Key, True) then
begin
if not (Reg.ReadString(Value) = NewValue) then
begin
Reg.WriteString(Value, NewValue);
Result := True;
end;
end
else
begin
Result := False;
end;
Reg.CloseKey;
Reg.Free;
end;يعني في الحالة الأولى اننا مهما غيرنا القيمة الممررة للمتغير فانه يعالج فقط الــ Hive الخاص بــ Local machine لانه موجود داخل الدالة بصفة قيمة ثابتة... و الحالة الثانية تعطي القابلية التامة لتمرير كل انواع الــ Hive الموجودة في النظام و معالجتها... بالتوفيق ان شاء الله HomeWork_10 تمرين تطبيقي - TF6M - 02-11-2009 بارك الله فيك أستاذ ... في ما يخص السؤال التاني تم الإجابة عنه + يبقى السؤال التالث أتركه للبقية :bye1: (الحل مرفق تحت ) ملاحظة : يجب ان يكون البرنامج ثابت مثلا في C:\ بالتوفيق ,, HomeWork_10 تمرين تطبيقي - Goblin - 02-11-2009 [color="royalblue"]السلام عليكم و رحمة الله و بركاته Goblin كتب :ساتركه لغيري. :tong:غيرت رأيي ! :tong: - التطبيق عبارة عن مفكرة بسيطة تقوم بقراءة و كتابة ملفات نصية ذات امتداد "D4A", ثم يعطيها ايقونة مميزة. -- لمزيد من التفاصيل, حمل المرفقات.[/color] |