PDA

View Full Version : با مشاهده ی پیام برنامه به روال عادی خود ادامه دهد



dkhatibi
دوشنبه 23 بهمن 1385, 21:12 عصر
هنگامی که showmessage پیامی را به کاربر نشان می دهد ؛ برنامه تا جواب کاربر متوقف می ماند.
چی کار کنیم این کار انجام نشود یعنی برنامه منتظر ان نماند که کاربر دکمه ی OK را فشار دهد و بقیه ی کارها رو انجام دهد.

Valadi
دوشنبه 23 بهمن 1385, 22:05 عصر
سوال جالبی است !!!!
یعنی کاربر هیچ ؟؟؟؟؟؟؟

nasr
دوشنبه 23 بهمن 1385, 22:44 عصر
از Message های Timer دار استفاده کن.

MNosouhi
دوشنبه 23 بهمن 1385, 23:38 عصر
وقتی شما تابع ShowMessage رو صدا میزنید در واقع دارید از تابع MessageDlgPosHelp که در یونیت dialogs هستش استفاده می کنید و تعریف تابع MessageDlgPosHelp هم به این صورت هست :

function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string): Integer;
begin
with CreateMessageDialog(Msg, DlgType, Buttons) do
try
HelpContext := HelpCtx;
HelpFile := HelpFileName;
if X >= 0 then Left := X;
if Y >= 0 then Top := Y;
if (Y < 0) and (X < 0) then Position := poScreenCenter;
Result := ShowModal;
finally
Free;
end;
end;
به قسمتی که با رنگ قرمز مشخص کردم توجه کنید ، میبینید که از showModal استفاده کرده و تعریف ShowModal هم طبق راهنمای دلفی اینه :


Use ShowModal to show a form as a modal form. A modal form is one where the application can’t continue to run until the form is closed. Thus, ShowModal does not return until the form closes.
خب ، پس شما در واقع کار خاصی نمی تونید انجام بدید مگر اینکه همین تابع رو دست کاری کنید یعنی در تابع بالا ShowModal رو به Show تیدیل کنید و قسمت free را هم غیر فعال کنید و خودتون به صورت دستی فضا رو آزاد کنید (قبلش باید مسیر قرار گرفتن یونیت Dialogs رو به دلفی معرفی کنید ) که البته کار معقولی هم نیست ، چون همونطوری که می دونید تقریبا همه متدهایی که پیغامی رو نشون میدن و از جمله MessageDlg که بسیار پرکاربرد هست هم از همین تابع MessageDlgPosHelp استفاده میکنن و تغییر اون میتونه دردسر ساز بشه .
شاید بهتر باشه که خودتون فرم نمایش پیغام ها رو طراحی کنید.

mzjahromi
سه شنبه 24 بهمن 1385, 07:16 صبح
گفته آقای نصوحی درسته ولی توجه داشته باشید دوستمون چی میخواد
@dkhatibi
دوست عزیز باید از ترفندهای مختلف برنامه نویسی استفاده کنید ولی در مورد MessageBox و امثال اون همونطوری که دوستمون گفتن صبر میکنه تا کاربر اقدامی بکند
میتونید همونطور که یکی از دوستان گفتند از تایمر استفاده کنی یا اینکه یه فرم خودت طراحی کنی یا هر روش ابتکاری که خودت میدونی

vcldeveloper
سه شنبه 24 بهمن 1385, 08:33 صبح
شخصا ترجیح میدم برای نمایش پیغامی که نباید در کار کاربر اخلال ایجاد کنه، از بالون در System Tray استفاده کنم (همونطور که ویندوز این کار رو میکنه).

dkhatibi
سه شنبه 24 بهمن 1385, 12:50 عصر
گفته آقای نصوحی درسته ولی توجه داشته باشید دوستمون چی میخواد
@dkhatibi
دوست عزیز باید از ترفندهای مختلف برنامه نویسی استفاده کنید ولی در مورد MessageBox و امثال اون همونطوری که دوستمون گفتن صبر میکنه تا کاربر اقدامی بکند
میتونید همونطور که یکی از دوستان گفتند از تایمر استفاده کنی یا اینکه یه فرم خودت طراحی کنی یا هر روش ابتکاری که خودت میدونی

اضافه کردن فرم دردسر بیشتری داشته و حجم برنامه را افزایش می دهد.
به نظر میرسه تایمر هم جواب نمی دهد.در اصل هنگامیکه پیام نشان داده شد تایمر یه جورایی متوقف است. شاید من اشتباه می کنم.

شخصا ترجیح میدم برای نمایش پیغامی که نباید در کار کاربر اخلال ایجاد کنه، از بالون در System Tray استفاده کنم (همونطور که ویندوز این کار رو میکنه).

ممنون از جوابتون.
چون برنمه ی مورد نظرم به طور کاملا مخفی در حافظه اجرا می شود . لذا نشان دادن بالون تا حدی ممکن نیست و بعلاوه چون با شروع ویندوز برنمه اجرا می گردد شاید کاربر اونو نبینه و ...

منتظر راهنماییهای بیشتر هستم.