![]() |
|
تضمين ملف في الملف التنفيذي في Resource - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13) +--- الموضوع : تضمين ملف في الملف التنفيذي في Resource (/showthread.php?tid=11482) |
تضمين ملف في الملف التنفيذي في Resource - larbiparadox - 29-08-2021 باسم الله الرحمان الرحيم السلام عليكم ورحمة الله وبركاته كيفية دمج ملف سواء كان : خط ، dll ، او صوت ، صورة ، ايقونة يوجد من سبقني في شرح هذا الموضوع ، لكن أردت أضع له لمسة خاصة بي كيفية إضافة خط في الملف التنفيذي مواضيع سابقة : http://delphi4arab.net/forum/showthread.php?tid=39 https://delphi4arab.net/forum/showthread.php?tid=2303&highlight=Resource 01 - قبل دمج أي ملف يجب إنشاء ملف res ، الملف المسؤول عن إنشاء هذا ملف هو brcc32.exe الموجود في ملفات الدلفي يختلف المسار حسب نسخة الدلفي المثبة مثال 10.4 كود : C:\Program Files (x86)\Embarcadero\Studio\21.0\binقبل إنشاء هذا الملف نشرح كيف يكون في الملف التنفيذي : نفتح الملف التنفيذي بواسطة برنامج Resource Hacker لتحميل البرنامج http://www.angusj.com/resourcehacker/ ![]() في هذا المثال يوجد فهارس كل فهرس يحتوي على مجموعة من الملفات مضمنة ، لا أريد أشرحها كلها ، كما يمكن لهذا البرنامج إعادة إستخراج إقونات و حفظها أو إضافة صور أخرى أو حذفها ، أو تعديل على الفورم * الآن كيف أنشئ ملف res توجد عدة طرق 01 - بواسطة برنامج Resource Hacker ![]() 1 لفتح نافذة الاضافة 2 نختار الملف المراد إظافته 3 إسم الفهرس الذي أضيف له الملف ، يمكن أن نختار الفهرس الخاص بالملف التنفيذي RCDATA أو إسم جديد 4 ادراج الملف في الاخير نضغط على حفظ نعطي اسم للملف لكن التبع يكون res الطريقة رقم 02 بواسطة برنامج تحرير النصوص notepad أو note bloc نكتب داخل الصفحة كود : MyFont1 FONT1 "bukra-bold.ttf"
MyFont2 FONT1 "bukra-regular.ttf"نشرح الكتابة : Font1 هو إسم الفهرس و MyFont1 و MyFont2 هو الملف المخزن بهذا الاسم بعدها نحفظه على ملف تابعه rc يكون كالتالي MyFont.rc عن طرق أوامر cmd كما ذكرنا في البداية الملف المسؤول عن إنشاء res هو brcc32.exe كود : brcc32.exe myFont.rcتنفيذ يدوي رقم 1 ندخل المسار و بعدها 2 امر التنفيذ مع اسم ملف rc ![]() او طريقة سهلة انشاء ملف bat و وضع فيه الكود ، عند الضغط عليه مرتين ينشأه مباشرة الطريقة رقم 03 . السهلة . بواسطة الدلفي ![]() بعد الدخول 1 و 2 بعد إدخال الملف صورة أو إقونة أو خط تكون النتيجة كما مبين في رقم 3 ، رقم 4 نوع الملف ، رقم 5 يكون للملف اسم أو id حتى يمكننا استدعائه RE: تضمين ملف في الملف التنفيذي في Resource - larbiparadox - 29-08-2021 الآن إلى الأهم بعدما أنشئنا الملف res كيف نستدعيه نضيفه كما هو مبين في الصورة بعد {$R *.dfm} ، ملاحظة مهمة ملف res يرفق مع المشروع و ليس مع الملف التنفيذي ملاحظة : إذا تم ادراج من الدلفي ، كما هو مبين في الطريقة رقم 3 ، نستغني على هذه المرحلة ![]() * في هذا المثال سأشرح إدراج الخط : - أولا اثبيت الخط في جهازي حتى يسهل إعطاء إسمه لكل مكون ، للتثبيت الضغط مرتين الخط المحمل ، 1 إسم الخط و 2 قفل الثبيت ![]() في حالة عدم تثبيته سيتوجب عليا كتابة لكل مكون كمثال كود : Button1.Font.Name := 'arbfonts.com-Bukra Bold';مثال: ![]() * للان الاستدعاء : يمكن إستخراجه من الملف للتنفيذي و وضعه بجانبه ولاستداعاء الخط أو الملف يكفي معرفة الفهرس للموجود في و إسمه أو رقمه كود : procedure TForm1.FormCreate(Sender: TObject);
var
ResStream : TResourceStream;
sFileName : string;
begin
sFileName:=ExtractFilePath(Application.ExeName)+'bukra-bold.ttf';
ResStream:=nil;
try
ResStream:=TResourceStream.Create(hInstance, 'MyFont1', 'FONT1');
try
ResStream.SaveToFile(sFileName);
except
on E:EFCreateError Do ShowMessage(E.Message);
end;
finally
ResStream.Free;
end;
AddFontResource(PChar(sFileName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;بعد غلق البرنامج نقوم بحذفه كود : procedure TForm1.FormDestroy(Sender: TObject);
var
sFile:string;
begin
sFile:=ExtractFilePath(Application.ExeName)+'bukra-bold.ttf';
if FileExists(sFile) then
begin
RemoveFontResource(PChar(sFile));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
DeleteFile(sFile);
end;
end;لكن الطريقة المفضلة لإستخراجه في الذاكرة و لن نحتاج الى حذفه عند الخروج كود : procedure TForm1.FormCreate(Sender: TObject);
var
LStream : TResourceStream;
cFonts: DWord;
begin
LStream := TResourceStream.Create(HInstance, 'MyFont1', 'FONT1');
try
cFonts:= 0;
AddFontMemResourceEx(LStream.Memory, Cardinal(LStream.Size), nil, @cFonts);
finally
LStream.Free;
end;
end;* بعدما أكملنا البرنامج لتأكد منه ، نحذف خط الكتابة أو تجربته في جهاز أخر لحذفه من الجهاز ، 1 مسار مجلد الخطوط ، 2 بالضغط على الزر الايمن ثم حذف ![]() النتيجة ، الخط بدون تثييت الخط ![]() في الاخير كلمة طيبة تكفي RE: تضمين ملف في الملف التنفيذي في Resource - أبو معاذ - 29-08-2021 بارك الله فيك يا غالي.
RE: تضمين ملف في الملف التنفيذي في Resource - Delphi4Us - 30-08-2021 كفيت ووفيت جزاك الله خيرا |