لدي برنامج واريد من الملف التنفيذي ان يعمل ثلاث مرات على الجهاز ومن ثم يطالب المستخدم بالرقم السري ارجوا الافادة عن ذلك مع وضع مثال اذا امكن
التشفير
يمكن ان تضع هذه القيمة فى الرجيسترى للويندوز ويقوم البرنامج بقرائتها عند بداية التشغيل ويذيدها واحد الى ان تصل الى الرقم المحدد يمنع البرنامج من التشغيل الى ان يسجل المستخدم
معلومة ممكن ان تكون تلك القيمة فى ملف خارجى او الرجيسترى اوى ما تريد بشرط انها تكون مخفية وشكرا
{ربى زدنى علما}
ارجوا التوضيح اكثر وليكن بالصور
الرجاء التوضيع
هذا عملتة لك :
procedure TForm1.FormCreate(Sender: TObject);
var inifile:tinifile;
num:string;
intnum:integer;
begin
inifile:=tinifile.Create(ExtractFilePath(ParamStr(0)) +'exe.ini');
num:= inifile.ReadString('Main','Num','0');
intnum:=strtoint(num);
if intnum>3 then
Application.Terminate
else
inifile.WriteString('Main','Num',inttostr(intnum+1));
inifile.Free;
end;اذا ممكن مثال بسيط لو سمحت حيث ان الكود لم يزبط معاي
السلام عليكم
المثال واضح يا ابو زياد .... فقط اضف inifiles الى اليوزس
ياخوان الله يعطيكم العافية على الردود الممتازة على المشاركة ولكن انا خبرتي في الدلفي بسيطة جدا حيث ارجع الى الاخ عروة او الاشاوس الموجودين في المنتدى الرائع باستفسارات واجد الحل الفوري ولكن في هذه المشاركة التي تعتبر مهمة لكل مبرمج وسؤال يبحث عن اجابتة الكثير اريد شرحا مفصلا لكود الاخ عروة او مثال يبين ماهو الملف المراد ربط الكود به وماهي صيغة او اداة الربط
ولكم مني جزيل الشكر والامتنان على رحابة صدوركم.
مرفق مثال للكود الذي وضعة عروة
وتحتاج يا ابوزياد ... ان تحاول اكثر من مرة وإلا لن تتقدم في البرمجة .... المثال سهل جدآ
والملف الذي تسئل عنة اسمة exe.ini وسوف تجدة في نفس المجلد بعد تشغيل البرنامج
والملف كل مرة تشغل البرنامج يضيف رقم الى الرقم الموجود حتى يصل الى العدد الذي تحددة
وبعدها اذا تلاحظ
if intnum>3 then
Application.Terminate
شفت كيف الشرط ؟؟؟ اذا القيمة المسجلة في ملف الـــ ini اكبر من العدد المحدد وهو 3
سوف يتم اقفال البرنامج ولن يعمل
وبنفس الفكرة يا ابو زياد تسطيع ان تخزن في الريجستري او في ملف نصي
ان اردت ان تحدد صلاحية البرنامج بعدد مرات التشغيل او التاريخ
وتحتاج الى ان تخفي الملف في اي مكان غير واضح
ومستقبلآ تحتاج الى اكثر من هذا ... تشفير وافكار اخرى
اتمنى لك التوفيق
يعطيك الف عافية على المجهود والروح العالية
كلام سليم لكن اذا اردت من الكود ان يغلق نموذج الدخول ويفتح نموذج كلة السر كيف سيكتب الكود
أستبدل
if intnum>3 then
Application.Terminate
ب
if intnum>3 then
begin
form1.close;
form2.show;
end;
انا اريد ان اخفي ال inifile بحيث لايمك معرفة مكانها ولتكن مثلا داخل مجلد الوندوز او السيستم كيف يكون شكل الكود حيث ان الكود السابق يقوم بانشاء الملف في نفس مجلد البرنامج وهذا واضح لاي شخص ارجوا التوضيح
اخي الكريم التابع GetSystemDirectory يعيد مسار المجلد الذي يوجد فيه مجلد ال System 32
يمكنك استخدامه ليصبح المثال كاملا على الشكل التالي
procedure TForm1.FormCreate(Sender: TObject);
var
inifile:tinifile;
num:string;
intnum:integer;
CH:PAnsiChar;
begin
new(CH);
inifile:=tinifile.Create(GetSystemDirectory(CH,100) +'\exe.ini');
num:= inifile.ReadString('Main','Num','0');
intnum:=strtoint(num);
if intnum>3 then
begin
form1.close;
form2.show;
end
else
inifile.WriteString('Main','Num',inttostr(intnum+1));
inifile.Free;
end;و ستجد ملف ال Ini داخل المجلدSystem 32 في مجلد الويندوز
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
بارك الله فيك هذا ماينقصني
حدث خطا اثناء التنفيذ وهو
[Hint] Unit210.pas(73): Value assigned to 'blah' never used
[Warning] Unit210.pas(96): Return value of function 'RegChecker' might be undefined
[Error] Unit210.pas(173): Incompatible types: 'String' and 'Cardinal'
[Error] Unit210.pas(180): ';' not allowed before 'ELSE'
[Fatal Error] badanyh.dpr(82): Could not compile used unit 'Unit210.pas'
الرجاء التوضيح
اظن ان هناك خطأ في الكود الذي كتبته قم بتحويل الكود الى ما يلي
procedure TForm1.FormCreate(Sender: TObject);
var
inifile:tinifile;
num:string;
intnum:integer;
CH:PAnsiChar;
begin
new(CH);
GetSystemDirectory(CH,100);
inifile:=tinifile.Create(CH +'\exe.ini');
num:= inifile.ReadString('Main','Num','0');
intnum:=strtoint(num);
if intnum>3 then
begin
form1.close;
form2.show;
end
else
inifile.WriteString('Main','Num',inttostr(intnum+1));
inifile.Free;
end;اسف لم اجرب الكود بشكل جيد
ارجو ان تنحل المشكلة
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
لم ينجح الكود الرجاء تطبيقة على مثال الاخ عروة ثم تزويدنا بالنتائج وشكرا لكم
اخي الكريم سوف اقوم بذلك الرجاء الانتظار قليلاً
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
اليك الملف المعدل يعمل تمت التجربة
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
يعطيني رسالة خطا مفادها
unable to write to c:\windo
اسف يا اخي يبدو اني اعطيتك المجلد الخاطئ
جرب هذا
لقد تم تجربته إن شاء الله يعمل 100%
لقد تم اضافة كود عند ال Destroy للفورم ليتم انقاص عدد الفورم عند الخروج
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
مازال الامر مدوخني يظهر لي رسالة مفادها
[Hint] Unit210.pas(79): Value assigned to 'blah' never used
[Warning] Unit210.pas(102): Return value of function 'RegChecker' might be undefined
[Error] Unit210.pas(177): Incompatible types: 'String' and 'Integer'
[Error] Unit210.pas(178): Undeclared identifier: 'intnum'
[Error] Unit210.pas(178): Incompatible types: 'String' and 'Integer'
[Warning] Unit210.pas(179): Comparing signed and unsigned types - widened both operands
[Error] Unit210.pas(32): Unsatisfied forward or external declaration: 'TPasswordDlg.FormDestroy'
[Fatal Error] badanyh.dpr(82): Could not compile used unit 'Unit210.pas'
يا اخي المثال الذي اعطيتك اياه يعمل بدون اي مشاكل
ارجوا ارفاق برنامجك ليتم تصليح الاخطاء التي تحدثت عنها
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
هذا الموضوع مغلق.