ورود

View Full Version : سوال: كنترل فشردن باتون روي فرم



shpegah
سه شنبه 22 تیر 1389, 08:45 صبح
سلام دوستان
من روي يك فرم دو باتون دارم يكي "اجرا" وديگري "كنسل" داخل "اجرا" يك حلقه لوپ دارم
ميخواهم بتوانم بازدن باتون "كنسل" از آن خارج شوم ولي در حين "اجرا" كنترل به فرم داده نميشود
تابتوانم انتخابش كنم .
ميتوانيد راهنماييم كنيد؟
ممنونم

gbg
سه شنبه 22 تیر 1389, 08:54 صبح
فکر کنم داخل حلقه یه application.processmessage بزاری درست بشه

homayoun_sa
چهارشنبه 23 تیر 1389, 02:25 صبح
من می تونم یک راه پیشنهاد کنم که کلا صورت مسله رو دور بزنی , به جایی که از loop استفاده کنی اون دستورات مورد نظرت رو داخل یک timer بنداز و سرعت تایمر رو هم که می تونی max بذاری و در کلید مورد نظرت هر وقت بخوای امکان این را داری که کار را متوقف کنی نمونه کد را هم می گذارم , شاید بتونه کمک کنه , البته یک روش دیگه هم بود که داخل loop مورد نطر بتونی break کنی ولی دقیقا یادم نیست باید چیکار می کردیم

procedure TForm1.Timer1Timer(Sender: TObject);
begin

دستورات مورد نظر

end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if timer1.Enabled then
timer1.Enabled:=false
else
timer1.Enabled:=true;
end;

majidbestgame
چهارشنبه 23 تیر 1389, 05:37 صبح
من که خیلی متوجه مشگلت نشدم..ولی چک کن که حلقه ای که نوشتی بینهایت نباشه...چون وقتی حلقه بینهایت باشه برنامه یک جورایی هنگ میکنه...ببین اون طوری نیست:متفکر:

Felony
چهارشنبه 23 تیر 1389, 07:04 صبح
یک متغییر به نام Flage از نوع منطقی به صورت سراسری تعریف کنید ، داخل حلقه به صورت زیر عمل کنید :
for i:= 1 to 1000000 do
begin
// Do something here
if Flag= True then Exit;
Application.ProcessMessage;
end;
داخل دکمه ای که میخواین با کلیک بر روی اون از حلقه خارج بشید به Flag مقدار True بدید .

shpegah
چهارشنبه 23 تیر 1389, 09:38 صبح
از همه دوستان ممنونم
از پاسخ جناب gbg استفاده كردم به خوبي جواب داد.فقط قبل از آن باتون كنسل را Enable:=true; وابتداي حلقه False نمودم


فکر کنم داخل حلقه یه application.processmessage بزاری درست بشه