PDA

View Full Version : نحوه ساخت پیغام های "لطفا منتظر بمانید"



ALIreza_nil
جمعه 01 تیر 1386, 02:35 صبح
با سلام خدمت دوستان

اگه امکان داره
نحوه ایجاد و ساخت پیغام های "لطفا منتظر بمانید..... " را توضیح بدید.
اگر دوستان محبت کنند به صورت یک مثال کامل ارائه کنند ممنون می شوم.


با تشکر از همه

SYNDROME
جمعه 01 تیر 1386, 07:23 صبح
با سلام
بستگی دارد آن را چطور بخواهید
بعضی از وقتها ما آن را در StatusBar قرار می دهید و موقعی دیگر در یک Lableساده.
قبل از شروع دستورات این کد را می نویسیم.


StatusBar1.Panels[0].Text := 'لطفا منتظر بمانید';
StatusBar1.Refresh;

و سپس دستورات برنامه را بعد ازآن می نویسیم و در پایان دستورات مقدار را پاک می کنیم.


StatusBar1.Panels[0].Text := '';
StatusBar1.Refresh;

این یک مثال خیلی خیلی ساده بود.
در کنار این شما می توانید از Animate نیز استفاده کنید.
این چیزی که شما می خواهید بیشتراز اینکه برنامه نوبسی بخواهد خلاقیت می خواهد.

object
جمعه 01 تیر 1386, 11:15 صبح
فکر کنم بهتره از یک فرم مخصوص این پیغام استفاده کنی و هروقت میخوای کار زمان گیری انجام بدی اون فرم رو show (و نه showmodal) کنی و در انتهای اون متد (پیشنهاد میدم از try... finally استفاده کنی و در قسمت finally) اون فرم رو ببندی
و برای هر متد هم میتونی پیغام مناسب رو توش بارگذاری کنی
فقط یادت نره حتما بعد show شدن اون فرم یکبار اون رو repaint کنی

ALIreza_nil
جمعه 01 تیر 1386, 15:44 عصر
با سلام
با تشکر از راهنمائی های شما دوستان
هدف من از پرسیدن این سئوال این بود که چطور میشه این پیغام را به صورت یک فرم صدا زد که تا موقعی که عملیات پشت پرده ما در حال اجرا هست این فرم نمایش داده بشه و بعد از اتمام عملیات بسته بشه ومثلا در برنامه های حسابداری وقتی می خواهیم محاسباتی مثل تراز گرفتن از حساب ها را انجام بدیدم نیاز به یک سری عملیات پشت پرده داریم حالا چطوری این پیغام نمایش داده شود ........
به عنوان مثال :



procedure TReport_HD.Button1Click(Sender: TObject);
begin
messageForm.showmodal.... or Show;
messageform.repaint;
.
.
.
.
messageform.close;
Reportform.showmodal;
end;

اما من با این روش جواب نگرفتم،امکان داره ربطی به روش مالتی ترد داشته باشه.
حالا تصور کنید که بخواهیم روند اجرای این عملیات را د داخل این فرم با progressbar بخواهیم نمایش دهیم........



باتشکر لطفا بیشتر توضیح دهید.

SYNDROME
جمعه 01 تیر 1386, 16:04 عصر
با سلام
شما می توانید یک فرم بسازید و 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 اضافه کرده و در آخر پنجره فوق را می بندد.

AFTABGARDAN2006
شنبه 02 تیر 1386, 00:19 صبح
مسئله دیگر این است که بخواهید شما همگام با فعالیتی که در پشت پرده انجام می دهید progresbar نیز به صورت واقعی جلو برود برای این کار من دو راه به ذهنم می رسد
1- یک متغییر سراسری گذاشته سپس در فرم منتظر بمانید هر چند ثانیه یک بار اون رو پک کنید اگر تغییر نموده به پروگرس یک .احد اضافه نمایید (البته روش دلچسبی نیست)
2- یه تابع بنویسید که با صدا زدن اون فرم منتظر بمانید رو فعال کنه


procedure showwait(var progr:Tguge // or progres)
Form1:=Form.create(application);
progr:=form1.progres1;
form1.show; //hatman show basheh na showmodal
end;

بعد در بدنه فعالیت پشت صحنه ات به progr یک واحد اضافه کن

a_b_toops
شنبه 02 تیر 1386, 09:26 صبح
قبل از شروع محاسبات فرم ProgressBar که ساخته شده رو باز کن و بعد
ProgressBar1.Position را در حلقه محاسبات خود نسبت به تعداد رکوردهای محاسباتی افزایش دهید و بعد از اتمام کار ProgressBar را ببندید

dkhatibi
شنبه 02 تیر 1386, 17:16 عصر
محاسباتی که در ان از ترد استفاده شده انجام این کار ساده تر و معقول تر است.
در غیر این صورت مثلا در هنگامی که حلقه ای محاسبه ای را انجام می دهد یک دیالوگ را نشون بده تا حلقه به پایان برسد(برای راحتی از فرم دوم استفاده کن.)

ahmadbh
چهارشنبه 18 مرداد 1391, 15:32 عصر
با سلام
شما می توانید یک فرم بسازید و 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 اضافه کرده و در آخر پنجره فوق را می بندد.
من آزمایش کردم جواب نمیده

me.enik
چهارشنبه 25 مرداد 1391, 14:09 عصر
من آزمایش کردم جواب نمیده

خب یعنی چی جواب نمیده ... !؟
منطق صحبت ایشون که درسته و روش کلی انجام میتونه همون باشه.
حالا اگر سورس کد مشکل داره که بعید میدونم, باید سورس رو اصلاح کرد و به راحتی هم میشه این کار رو انجام داد.

میشه واضح تر بگید که منظورتون از جواب نمیده دقیقا چیه !؟

gholami146
پنج شنبه 26 بهمن 1391, 18:42 عصر
فقط یاد تون رفته فرم رو بعد از عملیاد مرتب update کنید