![]() |
|
استخدام ال VCL Style مع مكتبات ال Dll - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13) +--- الموضوع : استخدام ال VCL Style مع مكتبات ال Dll (/showthread.php?tid=4880) |
استخدام ال VCL Style مع مكتبات ال Dll - SMP3 - 15-01-2013 السلام عليكم و رحمة الله لقد تساؤل أحد الأعضاء حول طريقة استخدام ال VCL Style في مكتبات ال Dll لذلك أحببت طرح هدا الموضوع .. السؤال بصراحة قد لفت انتباهي ... فالسؤال مهم لمادا مهم ؟ يمكن استعمال ال dll ك Plugin لأي تطبيق .. خصوصا وان احتوت على Forms , فمن الجيد أن يكون لنفس ال Plugin ستايل التطبيق أو ستايل محدد !! هناك طريقتين لاستخدام ال VCL Style داخل مكتبات ال dll بالنسبة للتطبيقات التنفيذية exe يمكن عمل ذلك مباشرة بدون استخدام هاتين الطريقتين من خلال Project ثم Options ثم Application ثم Appearance ثم تحديد الستايل , لكن بالنسبة لمكتبات ال Dll فلا يوجد خيار Appearance لتحديد الستايل . أولا و قبل أن نبدأ أنشئ مشروعين : الأول عبارة عن مشروع لل Dll يحتوي على فورم الثاني مشروع تنفيذي exe سيلعب دور الحاضن Host لل Dll الطريقة الأولى : استخدام الستايل من ال Dll : افتح المفكرة من أجل انشاء ملف rc PHP كود : ResourceName ResourceType "Full Resource Path" PHP كود : Auric VCLSTYLE "C:\Program Files\Embarcadero\RAD Studio\10.0\Redist\styles\vcl\Auric.vsf" PHP كود : Auric.RC الآن افتح ال cmd و توجه الى Embarcadero\RAD Studio\10.0\bin كود : cd C:\Program Files\Embarcadero\RAD Studio\10.0\binالآن من خلال ال cmd شغل BRCC32 لانشاء الرسورس PHP كود : BRCC32 "Auric.RC" قم بارفاق الرسورس في ال dll ثم PHP كود : {$R Auric.res}------------------------------------------------------------- الطريقة الثانية : عن طريق استخدام الستايل الخاص بالتطبيق الذي يستخدم ال dll يكفي تمرير مقبض الرسورس الخاص بالتطبيق و اسم الستايل + اسم الستايل في الرسورس مكتبة ال Dll تكون بهدا الشكل : PHP كود : library DllDlg;PHP كود : procedure ShowMyDllForm(ParentInstance:THandle;ResStyleName,StyleName:String;ParentStyle:Boolean);stdcall;external 'C:\Users\Mahdi\Desktop\DllFormTest\Win32\Debug\DllDlg.dll' name 'ShowMyDllForm' ;يجب التحقق من كون الستايل مسجل أو لا عن طريق الدالة IsStyleRegistered ان كان غير مسجل فنقوم بتحميله من الرسورس وتسجيله عن طريق الدالة LoadFromResource أما ادا كان مسجل فليس هناك داعي لتستجيله (والا سيحدث خطأ) لا تنسى بنقل ال Dll الى مجلد التطبيق (أين يتواجد الملف التنفيذي .exe) استخدام ال VCL Style مع مكتبات ال Dll - SMP3 - 16-01-2013 تعديل على الاجراء ShowMyDllForm اجعله هكذا : PHP كود : procedure ShowMyDllForm(ParentInstance:THandle;ResStyleName,StyleName:String;ParentStyle:Boolean);stdcall;external 'DllDlg.dll' name 'ShowMyDllForm' ; استخدام ال VCL Style مع مكتبات ال Dll - ALmuhhnad - 16-01-2013 السلام عليكم ورحمة الله وبركاتة حصلت معي مشكلة تظهر لدي رسالة محتواها كود : Unable to load style 'RUBYGRAPHITE'بعد ان عملت التالي : كود : unit UnitMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,
Vcl.ExtCtrls, Vcl.ImgList, Vcl.Imaging.pngimage,
Vcl.ExtDlgs, Vcl.Themes, Vcl.Styles;
...
...
...
...
var
Main: TMain;
implementation
{$R *.dfm}
{$R VLCSTYLE.res}
procedure TMain.FormCreate(Sender: TObject);
begin
TStyleManager.LoadFromResource(HInstance,'RubyGraphite','VCLSTYLE');
TStyleManager.SetStyle('RubyGraphite');
end;الكود الخاص بالنافذة التي أريـ د تطبيق الستايل عليها ... تأكدت ان Resource المكتبة يحتوي على الستايل يتضح لي ان المشكلة في عدم مقدرته على تحميل الستايل ... لكن لا اعلم ما السبب ؟ استخدام ال VCL Style مع مكتبات ال Dll - ALmuhhnad - 17-01-2013 السلام عليكم ورحمة الله وبركاتة بعد ان اعدت تطبيق الدرس اكثر من مره استطعت حل المشكلة ... رغم اني إلى الآن لم اعرف اين كانت مشكلتي @@" بارك الله فيك وزادك علماً وحققك لك مبتغاك شكراً لك استاذ smp3 مره آخرى استخدام ال VCL Style مع مكتبات ال Dll - SMP3 - 17-01-2013 almuhhnad كتب :رغم اني إلى الآن لم اعرف اين كانت مشكلتيهذه هي المشكلة : أنت قمت بارفاق ال {$R VLCSTYLE.res} يعني قمت بتسجيل الستايل .. أوكي وقمت أيضا بوضع : PHP كود : procedure TMain.FormCreate(Sender: TObject);الحال هو عدم مناداتها : PHP كود : procedure TMain.FormCreate(Sender: TObject);إقتباس :يجدر الذكر ان اسم الستايل ليس اسم الرسورس .. انتبه لهدا |