تبلیغات
برنامه نویسی و الکترونیک - دلفی :: ارسال آرایه به حافظه ی Clipboard
 
منوی اصلی


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

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

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

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


سفارش پروژه

E-Mail :
Mahmood_Mehri@Hotmail.com

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


موضوعات

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

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

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

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


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

 : " دلفی :: ارسال آرایه به حافظه ی Clipboard " :
 

سلام ، بعد از مدتی که در فاز برق بودیم ! ، کمی برمی گردیم به فاز دلفی !

در این پست قصد داریم یک آرایه ی Static را به حافظه ی Clipboard ارسال نماییم ! و سپس مقدار آن را از حافظه ی Clipboard خوانده و نمایش دهیم . ( چرا آخه ؟!    )

قبل از هرچیز برای استفاده از توابع و دستورات کار با حافظه ی Clipboard باید یونیت Clipbrd را به قسمت Uses اضافه نمایید ، برای شروع کار ابتدا یک آرایه به عنوان یک Type تعریف کنید :

type
 TMyArray = array[0..9] of Integer;

دستور بالا را در قسمت Interface و بعد از قسمت Uses بنویسید.

در این برنامه ما قصد داریم که مقدار آرایه را از Clipboard بخوانیم ، پس باید یک نوع Format خاص برای آرایه ی خود به عنوان Format ای از حافظه ی Clipboard ثبت کنیم تا بتوانیم بررسی کنیم که آیا مقدار موجود در حافظه ی Clipboard از نوع آرایه ی مورد نظر ما هست یا خیر ، بدین منظور باید از تابع RegisterClipboardFormat استفاده نماییم ، این تابع یک نام به عنوان نام Format دریافت کرده و بعد از قبت Format جدید یک مقدار عددی به عنوان شناسه ی Format ثبت شده بر می گرداند ، قبل از ثبت آرایه ما به یک متغیر نیاز داریم که مقدار عددی مربوط به شناسه ی Format ثبت شده را در آن قرار دهیم ، پس یک متغیر به نام MyArrayFormat از نوع Cardinal به صورت Global ( در قسمت Var  مربوط به Unit ) تعریف میکنیم ، علاوه بر این متغیر، ما به یک متغیر Cardinal دیگر به عنوان Handle اطلاعات مورد نظر ( که همان آرایه هست ) و همچنین یک متغیر Pointer که اشاره گری به نوع داده ای آرایه ی ما باشد ( یعنی TMyArray ) نیز ، نیاز مندیم ، پس متغیر های زیر را در به صورت Global تعریف می کنیم :

var
 MainFrm: TMainFrm;
 MyArray : TMyArray;
 AHandle, MyArrayFormat : Cardinal;
 APointer : ^TMyArray;

implementation

...

  • MyArray : یک نمونه از آرایه ی مورد نظر ما
  • AHandle : به عنوان Handle اطلاعات که باید به Clipboard ارسال شود
  • MyArrayFormat : نگهدارنده ی شناسه ی Format آرایه
  • APointer : اشاره گری به نوع داده ای TMyArray که همان آرایه ی مورد نظر ما است

روش کار به این صورت است که ابتدا یک نمونه از آرایه خود را مقدار دهی میکنیم ، سپس یک Format برای آرایه خود ثبت می کنیم ، در ادامه باید فضایی از حافظه به اندازه ی آرایه ی خود را رزرو نموده و سپس مقدار آرایه را دروئ فضای رزرو شده قرار دهیم و در نهایت فضای در نظر گرفته شده را به همراه Format مشخص شده برای حافظه ی Clipboard به آن بفرستیم.

یک دکمه برای ارسال آرایه به Clipboard ، یک دکمه برای دریافت مقدار آرایه از Clipboard و یک Edit بر روی فرم قرار دهید و در رویداد OnClick دکمه ی مربوط به ارسال آرایه دستورات زیر را بنویسید :

procedure TMainFrm.SendBtnClick(Sender: TObject);
var
 I: Integer;
begin
 for I := 0 to 9 do
  MyArray[I] := I;

 MyArrayFormat := RegisterClipboardFormat('CF_MYARRAY');

 if not OpenClipboard(Handle) then
  begin
   ShowMessage('Unable to open the Clipboard !');
   Exit;
  end;

 EmptyClipboard;

 AHandle := GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, SizeOf(TMyArray));
 APointer := GlobalLock(AHandle);
 APointer^ := MyArray;
 GlobalUnlock(AHandle);

 SetClipboardData(MyArrayFormat, AHandle);

 CloseClipboard;

 for I := 0 to 9 do
  MyArray[I] := 0;

 ValueEdit.Text := IntToStr(MyArray[2]);
end;

همانطور که توضیح داده شد ، ابتدا آرایه را مقدار دهی می کنیم ، سپس یک Format ثبت کرده و شناسه ی آن را درون MyArrayFormat قرار میدهیم ، سپس باید Clipboard با اصطلاحا باز کنیم ، در هنگام باز کردن Clipboard بررسی میکنیم که اگر موفقیت آمیز نبود از دستورات خارج می شویم ، برای ثبت مقدار جدید در Clipboard باید ابتدا آن را خالی کنیم که با دستور EmptyClipboard این کار انجام می شود ، در مرحله ی بعد AHandle را برابر فضایی از حافظه قرار می دهیم که توسط تابع GlobalAlloc رزرو می شود و اندازه ای برابر با اندازه نوع داده ای TMyArray دارد ، در ادامه حافظه ی رزرو شده را به نوعی قفل میکنیم تا شیء یا برنامه ی دیگری از آن استفاده نکند و تداخل ایجاد نشود ، سپس مقدار آرایه را درون اشاره گری که به فضای رزرو شده اشاره میکند قرار می دهیم و در نهایت به وسیله ی تابع SetClipboardData مقدار آرایه که در فضای AHandle قرار دارد را به همراه شناسه ی Format آرایه در Clipboard قرار می دهیم ، در پایان کار با Clipboard هم باید آن را ببندیم که به وسیله ی دستور CloseClipboard این کار انجام خواهد شد.

چون می خواهیم یک دور مقدار آرایه را از clipboard بخوانیم ، در پایان کار مقدار عناصر آرایه را برابر صفر قرار می دهیم تا بعد از خواندن مقدار و قرار دادن آن در آرایه تفاوت مشخص شود ! ، در پایان دستورات هم مقدار Text مربوط به Edit روی فرم را برابر با مقدار عنصر شماره ی 2 آرایه قرار می دهیم.

حال نوبت به خواندن اطلاعات می رسد ، در رویداد OnClick مربوط به دکمه ی دریافت کننده ! ، به صورت زیر دستورات را بنویسید :

procedure TMainFrm.ReceiveBtnClick(Sender: TObject);
begin
 if not Clipboard.HasFormat(MyArrayFormat) then
  begin
   ShowMessage('Data in ClipBoard have no "MyArrayFormat" Format');
   Exit;
  end;
 if not OpenClipboard(Handle) then
  begin
   ShowMessage('Unable to open the Clipboard !');
   Exit;
  end;

 AHandle := GetClipboardData(MyArrayFormat);
 APointer := GlobalLock(AHandle);
 MyArray := APointer^;
 GlobalUnlock(AHandle);

 CloseClipboard;

 ValueEdit.Text := IntToStr(MyArray[2]);
end;

در ابتدای دستورات ، نوع Format اطلاعات درون Clipboard را بررسی میکنیم ، اگر نوع مورد نظر ما نبود از دستورات خارج می شویم ، در ادامه Clipboard را Open میکنیم ، بعد از باز کردن Clipboard ، به وسیله ی تابع GetClipboardData مقدار درون Clipboard که Format آن مطابق با MyArrayFormat است را درون AHandle قرار می دهیم ، سپس فضای اختصاص داده شده به AHandle را قفل کرده و اشاره گری که تعریف کرده بودیم را برابر با آدرس فضای آن قرار می رهیم ، در ادامه مقدار آرایه را برابر با اطلاعات درون فضای اشاره گر قرار داده و در نهایت فضای قفل شده AHandle را آزاد میکنیم ، در پایان کار با Clipboard هم آن را Close میکنیم ، در پایان کار مقدار عنصر شماره ی 2 آرایه را درون Edit روی فرم نمایش میدهیم ، همانطور که مشاهده میکنید آرایه دوباره مقدار دهی شده است .

برنامه نمونه ی این پست رو هم از لینک زیر می تونید دریافت کنید :

موفق باشید ...

 

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

مطالب اخیر

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


صفحات وبلاگ :