تبليغاتX
دلفی باز - بررسي فشردن كليد توسط كاربر در هنگام اجراي يك حلقه
دلفی_مهندسی عمران
 زماني كه شما از حلقه ها يا همان Loop در برنامه خود استفاده مي كنيد
در برخي مواقع شايد لازم باشد كه كاربر بتواند اين حلقه را در هر لحظه اي
متوقف سازد. در اكثر برنامه هاي ديده شده اين عمل انجام نمي شود و كاربر
بايد زمان طولاني براي رسيدن به آخر حلقه صبر كند.

به طور مثال فرض كنيد برنامه شما مي خواهد يك سري اعداد اتفاقي توليد كند
و به كاربر نمايش دهد. تعداد اين اعداد شايد به صدهزار عدد برسد. حال فرض
كنيد حلقه اي بسازيد كه براي كاربر ، اين اعداد را يكي يكي نشان دهد.

شايد كاربر شما در حين كار خسته شود و بخواهد اين عمل را لغو كند.
اما اگر به صورت معمول اين حلقه را اجرا كنيد ، وي مجبور است تا انتهاي حلقه
صبر كند و اين كار بسيار خسته كننده اي مي باشد.

اين بدان خاطر است كه دلفي ، دستورات را يكي پس از ديگري اجرا مي كند.
يعني تا زماني كه حلقه مذكور تمام نشود ، دلفي دستور بعدي را اجرا نمي كند.

اما را حل چيست ؟ آيا راهي وجود دارد كه به كاربر اجازه دهد تا عمليات را
در هر زماني لغو كند ؟

جواب اين سوال در استفاده از دستور ProcessMessages خلاصه مي شود.
به كار بردن اين دستور باعث مي شود تا دلفي متوجه باشد كه ديگر دستورات
برنامه را حين عمليات زير نظر بگيرد و آنها را اجرا كند.

به طور مثال با به كار بردن اين دستور ، دلفي مي تواند فشار دادن يك كليد
توسط كاربر را هنگام اجراي حلقه متوجه شود و آن را اجرا كند.

اما در صورتي كه از اين دستور استفاده نكنيم ، دلفي فشاردادن كليد را متوجه
مي شود ، اما صبر مي كند تا حلقه تمام شود و سپس دستورات بعدي را
اجرا مي كند.

اين دستور ، به صورت Application.ProcessMessages به كار مي رود.

حال به كد زير دقت فرماييد :

procedure TForm1.Button1Click(Sender: TObject);
var
LoopAborted: Boolean;
i: Integer;
begin
LoopAborted := False;
i := 0;
repeat

Label1.Caption := IntToStr(i);
Application.ProcessMessages;

if GetKeyState(VK_Escape) and 128 = 128 then
begin
LoopAborted := True;
Break;
end;

Inc(i);
until i = 100000;
if LoopAborted then
ShowMessage('User has aborted the loop!');
end;


همان طور كه ملاحظه مي كنيد دستور ذكر شده در داخل حلقه گنجانده
شده تا فشار دادن كليد ESC توسط كاربر در زمان اجراي حلقه شناخته شود.

اين دستور به كاربر اين امكان را مي دهد تا هر لحظه اي كه تمايل داشت
اجراي حلقه را لغو كند.

توجه داشته باشيد كه به كار بردن دستور ProcessMessages تنها محدود به
حلقه ها نمي باشد و در كل هر جايي كه لازم باشد تا چندين دستور به همراه
هم اجرا شوند ، اين دستور نقش اصلي را ايفا مي كند.

موفق باشي
+ نوشته شده در  یکشنبه سیزدهم فروردین 1385ساعت 1:16  توسط حمید رادان  |