تبلیغات
برنامه نویسی و الکترونیک - مقاله : ساخت و استفاده از فایلهای رسورس در دلفی
 
منوی اصلی


--------------------------

--------------------------

--------------------------

--------------------------


سفارش پروژه

E-Mail :
Mahmood_Mehri@Hotmail.com

سایت برنامه نویس :  Mahmood_M


موضوعات

دانلود نرم افزار
 
تخصصی برنامه نویسی
  تخصصی برق ( الکترونیک )
  کامپوننت ها و ابزارها
  نرم افزارهای متفرقه
برنامه نویسی
  مباحث عمومی
  آموزش Delphi

  آموزش زبان C++ / C
 
آموزش Matlab

  آموزش زبان Assembly
  آموزش DataBase

الکترونیک
  مباحث عمومی
  مباحث عمومی الکترونیک
  معرفی قطعات الکترونیکی
  کار با مولتی متر
  مدارات الکترونیک
  میکروکنترلر
  میکروکنترلرهای AVR
  پروژه ها
مباحث متفرقه
  آموزشهای متفرقه
  معرفی سایت
  معرفی کتاب
  پاسخ به سئوالات
  مطالب عمومی


لینك دوستان
:: جک :: اس ام اس :: عکس
:: الکترونیک 89 گیلان
:: سورسهای نرم افزاری
:: اینترنت بدون تحریم
:: علمی.کتاب.مجله.نرم افزار.مقاله
:: مبارزات آزاد
:: برنامه نویسی از اهل زمین
:: :: جزیره ی دانلود ::
:: :: کامپیوتر و IT ::
:: بزرگترین پایگاه مدل لباس اینترنتی
:: مرکز دانلود ایرانیان
:: پایگاه علمی مهندسی تراشه
:: تمامی راهکارهای کامپیوتری
:: برنامه نویسی و طراحی وب
:: خرید ساعت دیواری
:: :: فناوری روز ::
:: :: همه چیز واسه موبایل ::
:: آموزش تخصصی کامپیوتر
:: * پیاز داغ اینترنت ! *
:: جدیدترین موزیکها و نرم افزارها
:: دانلود سورس ویژوال بیسیک
:: امپراطور دانلود و آموزش
:: موبایل و کامپیوتر
:: جدیدترین آهنگهای هفته
:: درباره ی دلفی !
:: برنامه نویس
:: پروژه های رایگان و آموزش ++C
:: ابراهیم آنلاین

 : " مقاله : ساخت و استفاده از فایلهای رسورس در دلفی " :
 
با سلام ...
امروز در مورد نحوه ی استفاده از فایلهای رسورس در دلفی بحث خواهیم داشت ...
فایلهای رسورس همانطور که می دانید ، روشی مناسب برای قرار دادن چند فایل در کنار فایل exe برنامه می باشند ، درواقع با این روش ، یک فایل exe خواهیم داشت ، اما چند فایل مورد نیاز را هم در درون آن قرار داده ایم که به راحتی قابل استفاده اند ...
مثل همیشه برای فهم بهتر ، یک پروژه ی نمونه را بررسی میکنیم ...
خوب قصد داریم یک فایل Bmp ، یک فایل Cursor موس ، یک فایل آیکون و یک فایل Mp3 را در داخل فایل Exe خود قرار دهیم ...
ساخت فایل Resource :
برای ساخت و کامپایل یک فایل رسورس دو مرحله ی ساده در پیش داریم :
  • نوشتن لیست فایلها در یک فایل متنی و ساخت فایل RC ( یک فایل Resource Script )
  • کامپایل فایل RC ساخته شده توسط برنامه ی کامپایلر رسورس دلفی ( brcc32.exe ) و ساخت فایل RES نهایی
تنها مطلبی که باید به آن توجه شود ، نحوه نوشتن لیست فایلها در فایل متنی است ، ترتیب نوشتن مشخصات فایل در لیست به صورت زیر است :
ResName   ResType   FileName
توضیح مشخصات بالا را در زیر خواهید یافت ! :
  • ResName : در دلفی ، برای تک تک فایلهای قرار داده شده در فایل Resource باید یک نام انتخاب کنیم ، درواقع نام امکانی برای شناخت فایل در داخل فایل رسورس است ، به عنوان مثال فرض کنید یک فایل BMP در داخل فایل گذاشته اید ، اگر MyBitmap را به عنوان نام فایل در داخل فایل رسورس انتخاب نمایید ، در دلفی به وسیله ی همین نام می توانید به آن دسترسی داشته باشید . پس در ابتدای مشخصات باید نام فایل مورد نظر در فایل رسورس را وارد نماییم ...
  • ResType : دلفی برای هرنوع فایل در فایل رسورس یک " نوع " مشخص میکند ، به وسیله ی این مشخصه ، به دلفی می فهمانیم ! که فایل ما یک نوع خاص است ، به عنوان مثال برای فایلهای BMP نوع BITMAP قرار داده میشود ، انواع مختلف برای فایلهای رسورس را در ادامه خواهید شناخت . پس در قسمت دوم هم باید نوع فایل را مشخص نماییم ...
  • FileName : در این قسمت هم باید نام و مسیر فایلی که می خواهیم در فایل رسورس قرار داده شوند را وارد می نماییم ...
خوب ، میخواستیم یک فایل BMP ، یک کرسر موس ، یک آیکون و یک فایل MP3 را در داخل فایل رسورس قرار دهیم ، لیست زیر بدین منظور مناسب به نظر میرسد :
MYBITMAP BITMAP mybitmap.bmp
MYICON ICON myicon.ico
MYCURSOR CURSOR mycursor.cur
MYMP3 RCDATA mymp3.mp3
به نوع فایلها در لیست بالا توجه کنید ، برای فایلهایی نظیر فایلهای MP3 که اطلاعات در آنها به شکل باینری ذخیره میشود از مقدار RCDATA به عنوان نوع فایل استفاده مینماییم ...
توجه کنید که در لیست بالا فرض را بر این گذاشتیم که تمام فایلهای معرفی شده در پوشه ی پروژه قرار دارند ، یعنی همان پوشه ای که فایل RC در آن خواهد بود ، در غیر اینصورت باید آدرس فایل را به صورت کامل وارد نماییم ، به عنوان مثال :
MYBITMAP BITMAP c:\Windows\mybitmap.bmp
یا
MYBITMAP BITMAP "c:\Windows\mybitmap.bmp"
خوب ، بعد از نوشتن لیست فایلها ، نوبت به ساخت فایل RC می رسد ، ساخت این فایل به سادگی تغییر پسوند یک فایل متنی است !! ...
برای ساخت فایل RC ابتدا فایل متنی حاوی لیست فایلها را ذخیره نمایید ، حال پسوند آن را از txt به rc  تغییر دهید ، بدین صورت فایل RC ساخته می شود ، حال باید دستور ساخت فایل RES را به کامپایلر دلفی ارسال کنیم ...
کامپایلری که فایلهای RC را کامپایل کرده و فایل Resource را می سازد نامش brcc32 است که همراه دلفی و در پوشه ی bin آن قرار دارد ...
برای استفاده از این فایل تنها کافی است برنامه ی Command Prompt ویندوز را اجرا کرده و دستور اجرای فایل brcc32 را همراه با مسیر فایل RC به عنوان پارامتر اجرا به آن بدهیم ...
اگر فرض کنیم که فایل RC در درایو D و در پوشه ی Resources قرار دارد و نامش هم MyResource.rc است ! ، دستور ما به شکل زیر در خواهد آمد :
brcc32 D:\Resources\MyResource.rc
این دستور برنامه ی brcc32 را اجرا کرده و این برنامه دستور فایل Resource شما را در همان پوشه ای که فایل RC قرار دارد خواهد ساخت ...
از مسیر " Start > All Programs > Accessories " برنامه ی Command Prompt را اجرا نمایید و دستور بالا را در آن بنویسید و کلید Enter را بفشارید ... !
برای اجرای برنامه ی Command Prompt همچنین می توانید در پنجره ی Run عبارت cmd را نوشته و کلید Enter را بفشارید ... !!
توجه کنید که برنامه ی brcc32 یک برنامه ی Consol است و در همان پنجره ی Command Prompt اجرا خواهد شد ، پس انتظار روبرو شدن با یک پنجره ی جدا ی مربوط به آن را نداشته باشید ، همچنین اگر خطایی در هنگام کامپایل پروژه اتفاق افتد ، در همان پنجره ی Command Prompt نمایش داده خواهد شد ، به عنوان مثال اگر یکی از فایلهایی که در لیست فایل RC وارد کرده اید ، در مسیر وارد شده وجود نداشته باشد ، پیغامی مانند پیغام زیر در پنجره نمایش داده خواهد شد :
------------------------------------------------------------------

------------------------------------------------------------------
در تصویر بالا همانطور که مشاهده میکنید ، فایل mybitmap.bmp در مسیر وارد شده وجود نداشته و پیغام خطایی به همین منظور نمایش داده شده است ..
اگر تمام مراحل کامپایل به درسی و بدون خطا انجام شود ، با تصویر زیر روبرو خواهید شد ! :
------------------------------------------------------------------

------------------------------------------------------------------
پس از پایان کامپایل ، فایل رسورس با همان نام فایل RC و با پسوند res در همان پوشه ای که فایل RC قرار دارد ساخته خواهد شد ...
خوب ، تا اینجا فایل رسورس را ساختیم ، حال نوبت به استفاده از فایل رسورس میرسد ...

استفاده از فایل Resource
:
اولین قدم در استفاده از فایلهای Resource اطلاع دادن به کامپایلر دلفی در مورد استفاده از فایل Resource است !
برای اینکه یک فایل Resource را در فایل Exe قرار دهیم ، باید آن را همراه برنامه کامپایل نماییم ، بدین منظور باید از دستور زیر استفاده نماییم :

{$R MyResource.res}

با این کار فایل MyResource.res به عنوان یک فایل Resource همراه برنامه کامپایل شده و درون فایل Exe قرار میگیرد ...
اگر به سورس پروژه ی خود توجه کرده باشید ، خطی با مقدار " R *.DFM$ " خواهید یافت ، این دستور به کامپایلر دلفی اعلام میکند که تمام فایلهای DFM همراه پروژه را در درون فایل Exe قرار دهد ، به طور کلی دستور R$ برای اعلام قرار دادن فایل رسورس در برنامه ، به کامپایلر به کار میرود ...
اما در مورد روشهای استفاده از فایلهای درون Resource :
روشهای مختلفی برای استفاده از فایلهای رسورس وجود دارد و نمی توان یک روش کلی بیان کرد ، به طور کلی نحوه استفاده از این فایلها به نوع فایل درون Resource یا کامپوننت یا ابزاری که به فایل قرار داده شده در فایل Resource احتیاج دارد ، بستگی دارد ... !
در اینجا ما چند روش متداول برای استفاده از 4 نوع فایل BMP ، کرسر موس ، آیکون و MP3 را بررسی خواهیم کرد ...
استفاده از فایلهای BMP :
یکی از راههای استفاده از فایلهای BMP به صورت زیر است :

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 MyBmp : TBitmap;
begin
 MyBmp := TBitmap.Create;
 MyBmp.LoadFromResourceName(hInstance, 'MYBITMAP');
end;

کلاس TBitmap تابعی به نام LoadFromResourceName در اختیار میگذارد ، که به وسیله ی آن می توانیم فایلی را از درون فایل Resource لود کرده و درون نمونه ی ساخته شده از نوع TBitmap قرار دهیم ...
در کد بالا ابتدا یک نمونه از نوع TBitmap ساخته می شود و سپس توسط تابع مذکور فایل Bmp لود شده به آن نسبت داده میشود و بعد این کار فایل BMP قابل استفاده خواهد بود ...

به عبارت hInstance در کد بالا توجه کنید ، همانطور که میدانید در تابع مذکورد ، پارامتر اول مربوط به هندلی است که فایل رسورس لود شده در آن قرار دارد ...
اساس کار ویندوز این است که با اجرای یک برنامه به آن آدرسی به عنوان Instance Handle می دهد و برنامه ی اجرا شده هم این مقدار را به عنوان Handle برنامه ( و سایر مواردی که توسط برنامه لود شده اند ) گرفته و در هنگام Create کردن اشیاء ( فرم ها ) این مقدار را در خاصیت hInstance آنها قرار می دهد ( برای اینکه از بحث اصلی دور نشویم ، بهتر است برای کسب اطلاعات بیشتر در این مورد به راهنماهای کثیرالانتشار !! مثل Windows SDK مراجعه کنید ! ) ...
فقط به عنوان یک نکته باید گفته شود که برنامه ما و هر فایل رسورس یا DLL ای که همراه برنامه قرار دارد و توسط آن لود می شود دارای Instance یکسان هستند و همانطور که میدانید ، فایلهای رسورس که همراه برنامه کامپایل شده اند ، با شروع به کار برنامه ، لود شده و Instance به آنها تعلق می گیرد !
امیدوارم با hInstance آشنا شده باشید ، در هنگام استفاده از فایلهای رسورس از این عبارت زیاد استفاده خواهید کرد ...

خوب ، راهی دیگر برای استفاده از فایل BMP درون فایل Resource ، لود مستقیم آن درون یک TImage است :

Image1.Picture.Bitmap.LoadFromResourceName(hInctance, 'MyBitmap');

روش دیگر برای استفاده از فایلهای BMP درون فایل رسورس استفاده از تابع LoadBitmap است که نحوه ی استفاده از آن را در زیر می بینید :

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 MyBmp : TBitmap;
begin
 MyBmp := TBitmap.Create;
 MyBmp.Handle := LoadBitmap(hInstance, 'MYBITMAP');
end;

استفاده از فایلهای Icon :
برای استفاده از فایل Icon می توانید یک نمونه از TIcon را ساخته و سپس با استفاده از LoadIcon آیکون مورد نظر را به آن نسبت دهید :

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 MyIcon : TIcon;
begin
 MyIcon := TIcon.Create;
 MyIcon.Handle := LoadIcon(hInstance, 'MYICON');
end;

بعد از لود آیکون می توانید به راحتی از آن استفاده نمایید ، به عنوان مثال :

Form1.Icon := MyIcon;

استفاده از فایلهای Cursor :
برای استفاده از فایلهای کرسر باید به یک نکته ی مهم توجه نمایید :
دلفی کلاسی به نام Screen را در اختیار ما قرار می دهد ، این کلاس درواقع نوعی رابط بین برنامه ی ما و صفحه ی ویندوز است !
برای اینکه یک Cursor را در برنامه ی خود استفاده نماییم باید ابتدا آن را به یکی از کرسرهای صفحه ی ویندوز توسط Screen مربوط سازیم و سپس آن را به عنوان کرسر برنامه قرار دهیم ، صفحه نمایش ویندوز برای هر کرسر یک مقدار عددی قرار می دهد که برنامه ها به وسیله ی این مقدار عددی کرسر خود را مشخص مینمایند ، به کد زیر دقت کنید :

const
 MyCursor = 2;
...
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Screen.Cursors[MyCursor] := LoadCursor(hInstance, 'MYCURSOR');
 Form1.Cursor := MyCursor;
end;

ابتدا یک ثابت عددی به نام MyCursor تعریف کردیم با مقدار 2 ، در رویداد کلیک یک دکمه ( به عنوان مثال ) کرسر شماره ی 2 Screen را برابر با کرسر مورد نظر در فایل Resource قرار دادیم ( توجه کنید که تایع LoadCursor وظیفه ی لود یک فایل کرسر از فایل رسورس را بر عهده دارد ) ، سپس کرسر فرم خود را به آن نسبت دادیم ...
...

استفاده از فایلهای MP3 ( باینری یا RCDATA ) :
در آخر به نحوه ی استفاده از فایلهای MP3 یا به طور کلی فایلهای از نوع RCDATA می رسیم ...
برای استفاده از فایلهایی که با نوع RCDATA در فایل Resource ذخیره میشوند ، معمولا از یک ResourceStream استفاده میکنیم ، نکته ی دیگر اینکه معمولا باید این فایلها را ابتدا در جایی ذخیره کرده و سپس استفاده نماییم ، به عنوان مثال کد زیر نحوه ی ذخیره ی یک فایل به کمک TResourceStream و TFileStream را نمایش می دهد :

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 RS : TResourceStream;
 FS : TFileStream;
 FileName : string;
begin
 FileName := ExtractFilePath(Application.ExeName)+'MyMP3File.mp3';
 RS := TResourceStream.Create(hInstance, 'MYMP3', RT_RCDATA);
 try
  FS := TFileStream.Create(FileName, fmCreate) ;
  try
   FS.CopyFrom(RS, 0) ;
  finally
   FS.Free;
  end;
 finally
  RS.Free;
 end;
end;

در کد بالا یک نمونه از TResourceStream ساخته و فایل MP3 درون فایل Resource به آن نسبت داده می شود ، سپس یک نمونه از TFileStream ساخته شده و به وسیله ی دستور CopyFrom اطلاعات ResourceStream درون فایل ساخته شده ریخته می شود ، در نهایت هر دو نمونه با دستور Free آزاد شده و چیزی که باقی می ماند یک فایل MP3 ساخته شده درون پوشه ی برنامه است که به مسیر و نام آن به وسیله ی متغیر FileName  دسترسی خواهیم داشت ...

خوب ، به پایان آمد این مقاله ... ، حکایت همچنان ... !

امیدوارم مفید بوده باشه ، موفق و پیروز باشید ...

 

 :: لینك ثابت نویسنده : محمود مهری نظرات Comment

مطالب اخیر

معرفی کانال و گروه های تلگرام
استفاده از Component Template ها در دلفی
مقاله : نحوه ی استفاده از پنل پیامک در نرم افزار
E-Book :: راه اندازی موتورهای DC و پله ای با استفاده از میکرو کنترلر AVR
آشنایی با عملگرهای بیتی ( Bitwise Operators )
تست دیود و ترانزیستور با مولتی متر
دلفی :: ارسال آرایه به حافظه ی Clipboard
یک سایت فوق العاده برای علاقه مندان به علم فیزیک
مداری برای نمایش عبور جریان برق از بدن !!
سال نو مبارک ...
آدرس وبلاگ !
ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A
آشنایی با کاربرد " رله " ( Relay ) در مدار
کار با ماتریسها در Matlab
SQL :: آشنایی با دستور شرطی WHERE


صفحات وبلاگ :