تضمين ملف في الملف التنفيذي في Resource
#2
الآن إلى الأهم بعدما أنشئنا الملف res كيف نستدعيه

نضيفه كما هو مبين في الصورة بعد {$R *.dfm} ، ملاحظة مهمة ملف res يرفق مع المشروع و ليس مع الملف التنفيذي

ملاحظة : إذا تم ادراج من الدلفي ، كما هو مبين في الطريقة رقم 3 ، نستغني على هذه المرحلة

[صورة: 545565978.jpg]

* في هذا المثال سأشرح إدراج الخط :

- أولا اثبيت الخط في جهازي حتى يسهل إعطاء إسمه لكل مكون ، للتثبيت الضغط مرتين الخط المحمل ،   1 إسم الخط و 2 قفل الثبيت
[صورة: 406957637.jpg]

في حالة عدم تثبيته سيتوجب عليا كتابة لكل مكون كمثال
كود :
Button1.Font.Name := 'arbfonts.com-Bukra Bold';

مثال:
[صورة: 476271583.jpg]


* للان الاستدعاء :

يمكن إستخراجه من الملف للتنفيذي و وضعه بجانبه

ولاستداعاء الخط أو الملف يكفي معرفة الفهرس للموجود في و إسمه أو رقمه

كود :
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 بالضغط على الزر الايمن ثم حذف

[صورة: 148040955.jpg]

النتيجة ، الخط بدون تثييت الخط

[صورة: 249922622.jpg]
في الاخير كلمة طيبة تكفي
‏اللّهمّ فرّج أُموراً ضَاقت بها صُدورنا وعجزت بها حيلتنا وقلّ بها صَبرنا الّلهمّ أَسعِد قلوبنا بما أنتَ أعْلَمُ بِهِ مِنّا
[-] كل من 4 users say قال شكرا ل larbiparadox على المشاركة المفيدة
  • أبو معاذ, Delphi4Us, Mr.DOS, محمد عبد العزيز
الرد


الردود في هذا الموضوع
RE: تضمين ملف في الملف التنفيذي في Resource - بواسطة larbiparadox - 29-08-2021, 08:10 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم