المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : إستخدام ملفات الريسورس في دلفي


TF6M
10-11-2009, 12:33 AM
السلام عليكم و رحمة الله و بركاته
درس مختصر يشرح كيفية إنشاء ملف ريسورس و إستخدامه مع بعض الحيل .
بالتوفيق للجميع :bye1: .

Unprogramme
10-11-2009, 07:13 AM
جزاك الله خيرا و جعله في موازين حسناتك.

kachwahed
10-11-2009, 10:13 AM
وعليكم السلام ورحمة الله وبركاته
الله يحفظك أخي TF6M ، مجهود كبير يثمر عن درس رائع...
إضافة لإثراء الموضوع...
في نسخ Delphi الجديدة يمكن إضافة ملفات الرسورس مباشرة من القائمة Project
للمزيد:
http://www.delphi4arab.com/forum/showthread.php?t=1802&page=2
شكرا كثيرا.

TF6M
10-11-2009, 12:01 PM
او على الأقل, صعب جدا القرآئة بهذا الخط المستعمل

تفضل أخي الكريم هدا الدرس بصيغته الأصلية و أيضا office2003
عدل عليه كما تشاء .

TF6M
10-11-2009, 12:04 PM
في نسخ delphi الجديدة يمكن إضافة ملفات الرسورس مباشرة من القائمة project

نعم أخي ... إظافة جميلة سبق و أطلعت على الدرس ... بارك الله فيك .
لكن كان هدفي تصميم + إستخدام هدا النوع من الملفات .
بالتوفيق ,,

kachwahed
01-12-2009, 10:12 PM
إثراءا للموضوع...
أولا: يمكن الاستغناء عن كتابة اللاحقة في التوجيه
{$R ResFile.res}
مباشرة:
{$R ResFile}
لأن الموجه R$ أصلا مخصص لملفات الرسورس.
ثانيا: هذه لم تعمل معي !
PlaySound(PChar('10'), HInstance, SND_SYNC or SND_RESOURCE);
استخدمت Delphi2010 ثم Delphi7
+ لماذا كتبت في الدرس 10 دون علامات تنصيص أليس المطلوب PChar أو PWideChar !
جربت أيضا باستخدام دالة Windows كما يلي:
var
h1, h2: THandle;
p: pointer;
begin
h1:=FindResource(HInstance, 'MYWAVE', 'WAVE');
h2:=LoadResource(HInstance,h1);
p:=LockResource(h2);
sndPlaySound(p, SND_ASYNC or SND_MEMORY);
if (h2 <> 0) then begin
UnlockResource(h2);
FreeResource(h2);
end;
end;
سؤال أخير :) لماذا يتم التحقق بالمقارنة إلى
DWORD(-1)
هذا الـ Cast يعيد أكبر قيمة لـ DWORD التي تطابق الثابت INVALID_HANDLE_VALUE، أليس من المفروض أن تقارن إلى 0 بدلا عن ذلك؟
أضيف RCDATA... بنفس الطريقة يمكن تحميل ملف من أي نوع على ملف Binary، مثال تحميل ملف RTF إلى TRichEdit
نقوم بصناعة ملف (RtfRes.rc) الرسورس كما يلي:
rtf RCDATA "LoadRtf.rtf"
لا ننسى Compile
brcc32 RtfRes.rc
كما لا ننسى إضافة الرسورس:
{$R RtfRes}
ثم الاستدعاء بهذا الشكل:
var
rs: TResourceStream;
begin
rs := TResourceStream.Create(HInstance, 'rtf', RT_RCDATA);
RichEdit1.Lines.LoadFromStream(rs);
rs.Free;
end;
من الأفضل حماية الحيز Try/Except ربما يطرأ تغيير على البرنامج :)
هذه الطريقة عملية لتخزين نموذج Template من قاعدة البيانات إذا كانت صغيرة.
بالتوفيق.

TF6M
01-12-2009, 10:55 PM
أولا: يمكن الاستغناء عن كتابة اللاحقة في التوجيه ... : جميل جدا !!! .

ثانيا: هذه لم تعمل معي ! .... كيف وضح أكثر :
PlaySound(PChar('10'), HInstance, SND_SYNC or SND_RESOURCE);
راجع هدا الموضوع :
http://delphi4arab.com/forum/showthread.php?t=42

استخدمت Delphi2010 ثم Delphi7 ... : لم أفهم قصدك
(ممكن pchar 2010 = pwidechar 7) ؟؟

+ لماذا كتبت في الدرس 10 دون علامات تنصيص أليس المطلوبar أو PWi PChdeChar !
لم أكتب الدرس 10 ؟؟ .

سؤال أخير .... :صحيح لكن من الممكن أن أعيد القيمة 0 بعد الإنتهاء من العمل بالمقبض
يعني ممكن أحتاج القيمة 0 .

- في ما يخص try/eXCEPT (راجع للمبرمج مهارات كتابة الكود ممكن نستغني عنها).
- في ما يخص إنشاء ملف الريسورس يكفي أن نعطي إسم نوع الريسورس (لايهم)
و الـID .

kachwahed
02-12-2009, 12:03 AM
كيف وضح أكثر
حسنا... أخطأت في كتابة القيمة 10 كان ينبغي ألا أكتبها بين علامتي تنصيص أي '10'، وليس الدرس رقم 10 :laugh:
راجع هدا الموضوع
الموضوع حفظته منذ مدة... ولا بأس بالمراجعة.
استخدمت Delphi2010 ثم Delphi7 ... : لم أفهم قصدك
قصدت أني جربت الكود على D14 وD7 ولم يكن يعمل (ربما لم أسمع الصوت لصغر حجم الملف :kick:)
سؤال أخير .... :صحيح لكن من الممكن أن أعيد القيمة 0 بعد الإنتهاء من العمل بالمقبض
المشكلة أن هذا لا يعمل:
if hRes <> 0 then
وجد الرسورس أم لم يجده، دائما يأخذ hRes القيمة 0 !
شكر كثيرا.

TF6M
02-12-2009, 12:29 AM
لا يا أخي kachwahed فالـ hRes تأخذ قيمة مغايرة لـ 0 في حالة
نجاح تحميل الريسورس ... لقد أرفقت الكود سورس بالدرس ممكن تتطلع عليه ؟؟؟.
+
انا أعمل بالدلفي 7 و نجح معي الامر ؟؟؟ .

kachwahed
02-12-2009, 12:35 AM
لا يا أخي kachwahed فالـ hRes تأخذ قيمة مغايرة لـ 0 في حالة
أجل، هذا ما أظنه دوما...
لكن هنا لم يحدث ذلك، قبل تحميل الصورة جرب:
ShowMessage(IntToStr(hRes));
ربما الخلل في نسخة D14 التي معي لا زالت غير مستقرة.
ربما أرجع إلى D7، معهم حق ناس زمان... الرجوع للأصل فضيلة :oops:

TF6M
02-12-2009, 12:43 AM
لا أعرف أين الخلل ممكن ترفق المشروع كاملا ؟؟
http://img24.imageshack.us/img24/2331/5451z.jpg

kachwahed
02-12-2009, 01:06 AM
أعدته بـ D7 ونفس الشيء يعيد 0، دعك منها لا يهم إذهب للنوم الآن :bye1:.

phpbb3
02-12-2009, 03:30 AM
في Delphi2010 استخدم PAnsiChar بدل PChar

kachwahed
02-12-2009, 10:31 AM
في Delphi2010 استخدم PAnsiChar بدل PChar
بالضبط، وأيضا AnsiChar عوض Char

paix144
25-12-2009, 03:16 PM
السلام عليكم
بارك الله فيك أخي على الدرس
لكن عندي مشكل ،عند محوالة تشغيل البرنامج يظهر هذا الخطأ
Fichier non trouvé'ResFile.RES'

TF6M
25-12-2009, 05:20 PM
و عليكم السلام و رحمة الله و بركاته

بالطبع ... هذا لأنك لم ترفق ResFile.Res للمشروع .
إتبع الخطوات المشار إليها في الدرس و ستنج بالتأكيد .. بالتوفيق ,,

قديم الشوق
07-02-2010, 05:54 PM
السلام عليكم ورحمة الله وبركاته
شكراً لك على الدرس الممتع المشوق

واصل الله يجزاك خير