PDA

View Full Version : مقاله: حافظه موقت ( Clipboard ) در دلفی



Felony
یک شنبه 26 اردیبهشت 1389, 12:12 عصر
به نام خدا ،

حافظه موقت ویندوز ( Clipboard ) جعبه ای برای نگهداری متن و گرافیک و ... است که از برنامه ای Cut یا Copy و در برنامه ای Paste میشوند.این مقاله در به کار بردن شئ Clipboard برای پیاده سازی عملیات های Cut ، Copy و Paste در برنامه های دلفی به شما کمک میکند.
حافظه موقت میتواند فقط قسمتی از اطلاعات را برای انجام عملیات ( های ) Cut ، Copy و paste در یک زمان واحد ذخیره کند و فقط توانایی ذخیره یک داده از نوع مشخصی را در یک زمان واحد دارد( مثلا نمیتوان 2 عکس مختلف را در یک زمان واحد در حافظه موقت ضمیمه کرد ). اگر داده جدید از نوع داده ای که قبلا در حافظه موقت وجود داشته را در حافظه موقت کپی کنیم ، فایلی که قبلا آن نوع داده را در حافظه موقت داشته را از دست میدهیم ( فایل قبلی حذف و فایل جدید جایگزین میشود ).
برای استفاده از حافظه موقت در برنامه ها باید کتابخانه ClipBrd را به قسمت uses برنامه اضافه کنید ، این قاعده در مورد کامپوننت هایی که به طور پیش فرض دارای توابع کار با حافظه موقت هستند صدق نمیکند ، مانند : TEdit و TMemo )
کتابخانه ClipBrd به صورت اتوماتیک یک شئ از کلاس TClipBoard میساز و نیازی به ساخت شئ به صورت دستی نیست .
برای ارتلابط با حافظه موقت متدهای CopyToClipboard , CutToClipboard , PasteFromClipboard , HasFormat و Clear در نظر گرفته شده اند.

ارسال و بازیابی متن
برای ارسال یک متن به حافظه موقت از متد AsText شئ Clipboard استفاده میشود. به عنوان مثال برای ارسال محتوای متغییر رشته ای StrText به حافظه موقت به صورت زیر عمل میکنیم :

Uses
ClipBrd;
...
Clipboard.AsText:= StrText;

و برای دریافت متن ذخیره شده در حافظه موقت به صورت زیر عمل میکنیم :

Uses
ClipBrd;
...
StrText:= Clipboard.AsText;

همانطور که قبلا هم گفته شد کنترل هایی که به طور پیشفرض دارای متدهای کار با حافظه موقت هستند از این قاعده مستثنى هستند ، مثلا برای ارسال متن داخل یک Edit به حافظه موقت نیازی به اضافه کردن کتابخانه Clipbrd نیست و میتوان به ثورت زیر عمل کرد :
Edit1.CopyToClipboard;

البته دقت کنید که متد CopyToClipboard متن انتخاب شده در شئ Edit را در حافظه موقت کپی میکند پس برای ارسال تمام متن موجود در Edit میتوان به صورت زیر عمل کرد :
Edit1.SelectAll;
Edit1.CopyToClipboard;

عکس در حافظه موقت
برای دریافت عکس از حافظه موقت در دلفی باید نوع عکس ذخیره شده در حافظه موقت را تشخیص داد همینطور برای ارسال عکس به حافظه موقت برنامه باید نوع عکس ارسالی را به حافظه موقت اعلام کنید.
تعدادی از انوع رایج فرمت های قابل پذیرش برای حافظه موقت در زیر آورده شده ، برای دیدن لیست کامل این نوع های داده ای به این لینک (http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/dataexchange/clipboard/clipboardformats.asp) مراجعه کنید.


CF_Text
CF_Bitmap
CF_MetaFilePicT
CF_Picture
CF_Object

تابع HasFormat برای بررسی نوع داده داخل حافظه موقت است و اگر فایلی با نوع داده مورد نظر ما در حافظه موقت وجود داشت مقدار بازگشت داده شده توسط این تابع True خواهد بود :
if Clipboard.HasFormat(CF_Bitmap) then
ShowMessage('Clipboard has Bitmap file');

برای ارسال ( اختصاص ) یک عکس به حافظه موقت باید از متد Assign استفاده کرد. به عنوان مثال کد زیر عکسی با نوع دادهای Bitmap را از شئ Image1 در حافظه موقت کپی کیند :
Clipboard.Assign(Image1.Picture.Bitmap);

برای دریافت یک عکس از حافظه موقت ابتدا باید نوع داده مورد نظرمان رابررسی کنیم و اگر فایلی با این نوع داده در حافظه موقت وجود داشت آن را فراخوانی کنیم در غیر این صورت با پیغام خطا مواجه خواهیم شد :
if Clipboard.HasFormat(CF_Bitmap) then
Image1.Picture.Bitmap.Assign(ClipBoard);

:لبخندساده: برگرفته از سایت Delphi.About و ترجمه خودم .