مشاهدة النسخة كاملة : كيف يحتفظ البرنامج بأخر شكل بعد التغييرات عليه
issamdnn
04-01-2010, 10:20 AM
كثيراً ما يغيير المستخدم شكل البرنامج كألوان العناصر أو الخطوط أو أي شيء في البرنامج وهذه طريقة الإحتفاظ بهذه التغييرات في التشغيل التالي للبرنامج :
1- أضف في القسم public التصريح التالي:
public
{ Public declarations }
constructor Create(AOwner: TComponent); override; // (1)
procedure BeforeDestruction; override; // (2)
2-أضغط على Ctrl+Shift+C لتعبئة قلب الإجرائيتن:
procedure TForm1.BeforeDestruction;
begin
inherited;
with TFileStream.Create(PreservePath + ClassName + '.sav', fmCreate) do
try
WriteComponent(Self);
finally
Free;
end;
و
constructor TForm1.Create(AOwner: TComponent);
begin
PreservePath := ExtractFilePath(Application.ExeName) +
'Preserve';
if not DirectoryExists(PreservePath) then
CreateDir(PreservePath);
PreservePath := PreservePath + '\';
if FileExists(PreservePath + ClassName + '.sav') then
begin
CreateNew(AOwner, 0);
with TFileStream.Create(PreservePath + ClassName + '.sav',
fmOpenRead or fmShareDenyWrite) do
try
ReadComponent(Self);
finally
Free;
end;
end
else
inherited Create(AOwner);
end;
وبذلك سيتم حفظ الإعدادات في مجلد PreservePath و بملف بلاحقة .sav في نفس مجلد البرنامج.
والله الموفق للجيمع.
AL-MOB4RM3G
04-01-2010, 11:07 AM
بارك الله لك اخ عصآم, جميل,
لكن هل لك ان ترفق مثآل بارك الله لك, ؟
وهل يحتفظ البرنآمج بكل التغيّيرآت لكل المكمبننتات ؟ (لا يوجد لووب يعيد الكود على كل الكومبننتات)
شكرا لك, وبارك الله فيك,
issamdnn
04-01-2010, 01:24 PM
لعيونك أخي العزيز :
1- في المثال التالي جرب إحداث تغيير على العناصر الموجودة في الفورم ثم أغلق البرنامج وأعد تشغيله من جديد وستجد بأن ألوان البانيلات قد أحتفضت باللون السابق وكذلك عناصر ال checkboxs
وفقك الله .
issamdnn
04-01-2010, 01:45 PM
جرب إضافة عنصر TEdit على الفورم وأكتب داخلها وستشاهد أن البرنامج أحتفظ حتى بالكتابة الموجودة داخل العنصر السابق دون الحاجة لملفات ال ini لحفظ الأعدادات وهذه الطريقة تحتفظ بكل التغييرات على كل العناصر .
وفقكم الله . وأفاد بعلمكم الجميع
nabilkeb
04-01-2010, 04:32 PM
راجع أيضا الروابط الموجودة هنــــــــــــــــــا :
http://www.delphi4arab.com/forum/showthread.php?t=2246
issamdnn
05-01-2010, 08:35 AM
عفواً ولكني شاهت الموضوع السابق وهو يختلف إختلاف جذري عن الموضوع الذي ذكرته أنا .
فأستخدام الرجستري وارد وكذلك ملفات ال ini ولكن هنا الموضوع مختلف تماماً.
تحياتي للجميع .
nabilkeb
05-01-2010, 10:33 AM
مشكووور أخي على المشاركة الرائعة ، و لكنني فقط أردت أن ألفت انتباه كل قارئ لهذا الموضوع ، لمواضيع أخرى شبيهة و تصب في نفس الوادي.
أكيد هناك اختلاف كما تقدمت أخي لكن الهدف واحـــــد : _ حفظ إعدادات البرنـــــامج _
بالتوفيق.
issamdnn
05-01-2010, 11:29 AM
على عيوني أخي العزيز . وشكراً جداً على مشاركتك .
وفقك الله .
AL-MOB4RM3G
05-01-2010, 05:33 PM
لعيونك أخي العزيز :
في الحقيقة, شئ مذهل,
لم اتوقع هذه السهولة ما شاء الله, اسهل من الرجستري و اسهل من ملفآت ال Ini
اخي الكريم, هل ممكن اثتثنآء مكون او مكونات من حفظ المعلموت ؟
شكرا لك اخ عصآم, :bye1:
issamdnn
06-01-2010, 10:06 AM
في الحقيقة اخي أنا لم أجرب أن أقوم بإستثناء لبعض العناصر لكن الخاصية WriteComponent(Self)
والتي تأخذ الوسيط Self يمكن إستبدالها بالكود
for i:=0 to ComponentCount-1 do
WriteComponent(Components[i]);
والتي تسمح بإستثناء بعض العناصر حسب قيمة المتحول i وكذلك الأمر بالنسبة للإجرائية
ReadComponent(Self);
وفقك الله والجيمع .
kachwahed
06-01-2010, 11:25 AM
السلام عليكم
اخي الكريم, هل ممكن اثتثنآء مكون او مكونات من حفظ المعلموت ؟
لاستثناء أحد المكونات حاول تدميره قبل القيام بعملية الحفظ، بشيء مثل:
Button1.Free;
WriteComponent(Self);
تعني Self هنا المكون TForm الحالي، وWriteComponent إجراء StreamingObject يقوم بتخزين المكون وأبنائه بكل خصائصه إلى Stream.
AL-MOB4RM3G
06-01-2010, 02:16 PM
جزآك الله خيرا اخي الكريم كاشوآحد,
لاستثناء أحد المكونات حاول تدميره قبل القيام بعملية الحفظ، بشيء مثل:
جربت طريقتك اخي الكريم, فحتفظ البرنآمج بالتدمير :cryss:
بعد عمل Free وبعدها عمل Build للبرنآمج مرة اخرى, يكون المكون الذي عملت له Free مختفي,
يعني يجب عمل Create للكومبننت مرة اخرى عند OnFormCreate ان اردت ان استرجعه, (لم اجربها بعد)
على كل حال, بارك الله لكم
mohfa
06-01-2010, 03:26 PM
اخي لماذا كل هذا استعمل ملف ini او استعمل registry ولما ملف xml
الامر في غاية البساطة , لما كل هذا التعقيد
kachwahed
06-01-2010, 05:51 PM
بعد عمل Free وبعدها عمل Build للبرنآمج مرة اخرى, يكون المكون الذي عملت له Free مختفي,
توقعت ذلك :D، بل بمجرد إعادة تشغيله
يعني يجب عمل Create للكومبننت مرة اخرى عند OnFormCreate ان اردت ان استرجعه, (لم اجربها بعد)
لا داعي لذلك، هذه تجارب فقط.... ObjectStreaming يستخدم في حالات خاصة
لاحظ أننا نقوم بحفظ المكون بأكمله ونحن في الحقيقة لا نحتاج سوى Caption !
وقد تحدث مشاكل عند تحديث المكونات بنسخ أحدث، حيث تضاف خصائص جديدة
في مثل هذه الحالات نكتفي بما أشار أخي Mohfa
الامر في غاية البساطة , لما كل هذا التعقيد
هكذا تأتي الاكتشافات :D
AL-MOB4RM3G
06-01-2010, 08:15 PM
توقعت ذلك ، بل بمجرد إعادة تشغيله
هكذا تأتي الاكتشافات
:clap2:
بالتوفيق اخي الحبيب
issamdnn
07-01-2010, 08:23 AM
أخوتي الأعزاء لقد كنت قد شاهدت الموضوع السابق حول إستخدام ملفات ال ini وأنا نفسي كنت أستخدم مسجل النظام لحفظ إعدادات البرنامج ولذلك قمت بوضع هذه الطريقة التي على ما أضن بأنها أفضل بكثير من الطرق السابقة وفيما يتعلق بإزلة إستعادة الإعدادات عن أحد الكمبونتتس فأضن بأن هذا ليس موضوع ذو أهمية عن تحقيق غاية أكبر وهي حفظ أخر التغييرات على البرنامج كما أن طريقة الأخ MOHFA تحتاج إلى كتابة الكود لكل عنصر بنفسه وأما طرقتي السابقة فهي تحفظ كل الإعدادات للوسيط SELF الذي يكون عادة نفس الفورم بكامل عناصره التي يمتلكها
والله الموفق للجيمع .
vBulletin® , Copyright ©2008-2012