با سلام خدمت دوستان
اگه امکان داره
نحوه ایجاد و ساخت پیغام های "لطفا منتظر بمانید..... " را توضیح بدید.
اگر دوستان محبت کنند به صورت یک مثال کامل ارائه کنند ممنون می شوم.
با تشکر از همه
با سلام خدمت دوستان
اگه امکان داره
نحوه ایجاد و ساخت پیغام های "لطفا منتظر بمانید..... " را توضیح بدید.
اگر دوستان محبت کنند به صورت یک مثال کامل ارائه کنند ممنون می شوم.
با تشکر از همه
با سلام
بستگی دارد آن را چطور بخواهید
بعضی از وقتها ما آن را در StatusBar قرار می دهید و موقعی دیگر در یک Lableساده.
قبل از شروع دستورات این کد را می نویسیم.
StatusBar1.Panels[0].Text := 'لطفا منتظر بمانید';
StatusBar1.Refresh;
و سپس دستورات برنامه را بعد ازآن می نویسیم و در پایان دستورات مقدار را پاک می کنیم.
StatusBar1.Panels[0].Text := '';
StatusBar1.Refresh;
این یک مثال خیلی خیلی ساده بود.
در کنار این شما می توانید از Animate نیز استفاده کنید.
این چیزی که شما می خواهید بیشتراز اینکه برنامه نوبسی بخواهد خلاقیت می خواهد.
فکر کنم بهتره از یک فرم مخصوص این پیغام استفاده کنی و هروقت میخوای کار زمان گیری انجام بدی اون فرم رو show (و نه showmodal) کنی و در انتهای اون متد (پیشنهاد میدم از try... finally استفاده کنی و در قسمت finally) اون فرم رو ببندی
و برای هر متد هم میتونی پیغام مناسب رو توش بارگذاری کنی
فقط یادت نره حتما بعد show شدن اون فرم یکبار اون رو repaint کنی
با سلام
با تشکر از راهنمائی های شما دوستان
هدف من از پرسیدن این سئوال این بود که چطور میشه این پیغام را به صورت یک فرم صدا زد که تا موقعی که عملیات پشت پرده ما در حال اجرا هست این فرم نمایش داده بشه و بعد از اتمام عملیات بسته بشه ومثلا در برنامه های حسابداری وقتی می خواهیم محاسباتی مثل تراز گرفتن از حساب ها را انجام بدیدم نیاز به یک سری عملیات پشت پرده داریم حالا چطوری این پیغام نمایش داده شود ........
به عنوان مثال :
procedure TReport_HD.Button1Click(Sender: TObject);
begin
messageForm.showmodal.... or Show;
messageform.repaint;
.
.
.
.
messageform.close;
Reportform.showmodal;
end;
اما من با این روش جواب نگرفتم،امکان داره ربطی به روش مالتی ترد داشته باشه.
حالا تصور کنید که بخواهیم روند اجرای این عملیات را د داخل این فرم با progressbar بخواهیم نمایش دهیم........
باتشکر لطفا بیشتر توضیح دهید.
با سلام
شما می توانید یک فرم بسازید و ProgressBarخود را روی آن قرار دهید.
سپس فرم خود را show کنید.
و هر جا که نیاز بود به ProgressBar خود یک واحد اضافه کنید.
و در آخر آن را Close کنید.
// شروع برنامه
Form1.Show
ProgressBar1.Max := 100;
While i < 100 Do
Begin
Inc(i);
From1.ProgressBar1.Position := ProgressBar1.Position + 1;
End;
Form1.Close;
در مثال بالا بنده یک حلقه ایجاد کردم که 100 بار تکرار می شود و هر بار یک واحد به ProgresBar اضافه کرده و در آخر پنجره فوق را می بندد.
مسئله دیگر این است که بخواهید شما همگام با فعالیتی که در پشت پرده انجام می دهید progresbar نیز به صورت واقعی جلو برود برای این کار من دو راه به ذهنم می رسد
1- یک متغییر سراسری گذاشته سپس در فرم منتظر بمانید هر چند ثانیه یک بار اون رو پک کنید اگر تغییر نموده به پروگرس یک .احد اضافه نمایید (البته روش دلچسبی نیست)
2- یه تابع بنویسید که با صدا زدن اون فرم منتظر بمانید رو فعال کنه
بعد در بدنه فعالیت پشت صحنه ات به progr یک واحد اضافه کنprocedure showwait(var progr:Tguge // or progres)
Form1:=Form.create(application);
progr:=form1.progres1;
form1.show; //hatman show basheh na showmodal
end;
قبل از شروع محاسبات فرم ProgressBar که ساخته شده رو باز کن و بعد
ProgressBar1.Position را در حلقه محاسبات خود نسبت به تعداد رکوردهای محاسباتی افزایش دهید و بعد از اتمام کار ProgressBar را ببندید
محاسباتی که در ان از ترد استفاده شده انجام این کار ساده تر و معقول تر است.
در غیر این صورت مثلا در هنگامی که حلقه ای محاسبه ای را انجام می دهد یک دیالوگ را نشون بده تا حلقه به پایان برسد(برای راحتی از فرم دوم استفاده کن.)
فقط یاد تون رفته فرم رو بعد از عملیاد مرتب update کنید