PDA

View Full Version : بستن کامل برنامه در هنگام اجرای یک Procedure ...



Mahmood_M
چهارشنبه 07 آذر 1386, 20:42 عصر
با سلام ...
من در OnCreate فرم اصلی برنامم ، یک شرطی گذاشتم که اگه این شرط برقرار نبود ، باید برنامه بسته بشه ، اما مشکل اینجاست که اگه از Application.Terminate برای بستن برنامه استفاده کنم ، برنامه کل فرمها رو Create می کنه و سپس برنامه بسته میشه ! ...
از دستور Halt و سپس Application.Terminate هم استفاده کردم اما انگار Thread برنامه کاملا حذف نمیشه و پنجره Error Rporting ( همون Dont Send معروف !! ) ظاهر میشه ...

می خواستم ببینم کسی از دوستان راهی می دونه که بشه کاملا در چنین مواقعی از برنامه خارج شد ؟
شرطی که در OnCreate گذاشتم به صورت زیر هست :


begin
if MyCondition = False then
begin
Halt;
Application.Terminate;
end;
...
...
end;

OR

begin
if MyCondition = False then
begin
Application.Terminate;
end;
...
...
end;


همونطوری که میبینید در کد بالا بعد از این که شرط چک میشه ، عبارت Else رو نیاوردم که تا بقیه کد هم جزئی از شرط باشه ، به نظرتون اگه این کار رو بکنم ( یعنی بقیه کد رو توی else بنویسم ) ممکنه که مشکل حل بشه ؟

با تشکر از همگی ، منتظر جواب دوستان هستم ...

...

SYNDROME
چهارشنبه 07 آذر 1386, 21:20 عصر
به این شکل بنویس ببین مشکل حل می شود.


Halt(0);

موفق باشید

ghabil
چهارشنبه 07 آذر 1386, 22:09 عصر
از Halt نمیخواد استفاده کنی ! برو توی یونیت پروژت مثل Project1.dpr پایینش دستوری که فرم اصلی رو میسازه بردار بیار بزار اولین فرمی که ساخته میشه....

vcldeveloper
پنج شنبه 08 آذر 1386, 00:58 صبح
پایینش دستوری که فرم اصلی رو میسازه بردار بیار بزار اولین فرمی که ساخته میشه
فرمی که به عنوان فرم اصلی انتخاب میشه، همیشه قبل از سایر فرم ها Create میشه. می تونی توی همون فایل DPR پروژه قبل یا بعد از Create شدن فرم اصلی، شرط را چک کنی و در صورت لزوم با یک Exit ساده از برنامه خارج بشی

Mahmood_M
پنج شنبه 08 آذر 1386, 20:22 عصر
شرط را چک کنی و در صورت لزوم با یک Exit ساده از برنامه خارج بشی
بابت پاسخها ممنونم ...
من بعد از Create شدن فرم اصلی ، شرط رو چک می کنم ، و اگر شرط صدق نکرد ، با یک Exit خارج میشم ، اما باز هم پنجره Error Reporting ظاهر میشه و باید حتما از توی Task Manager برنامه رو End Process کنم تا بسته بشه ...
کدی که نوشتم اینه :


Application.Initialize;
Application.Title := '...';
Application.CreateForm(TMainFrm, MainFrm);
if not MainFrm.Lock.Connected then
Exit;
Application.CreateForm(TAboutFrm, AboutFrm);
...


نکته خاصی رو باید رعایت کنم ؟!

...

vcldeveloper
جمعه 09 آذر 1386, 02:07 صبح
نکته خاصی رو باید رعایت کنم ؟!
نباید مشکل خاصی وجود داشته باشه. شاید در هنگام ساخت فرم، یا Initialization بعضی از یونیت ها اتفاق خاصی میافته!

ghabil
جمعه 09 آذر 1386, 02:35 صبح
فرمی که به عنوان فرم اصلی انتخاب میشه، همیشه قبل از سایر فرم ها Create میشه.

در مورد فرمها کاملا حرفت درسته و دلفی هم خودش فرم اصلی رو بالای بقیه قرار میده ولی با توجه به خطایی که می گیره احتمال دادم شاید دیتا ماژولی داره که قبل از فرمها ساخته میشه و اون میتونه خطا رو هم ایجاد کنه چون دیتاماژول میتونه قبل از فرم اصلی ساخته بشه.

Cave_Man
جمعه 09 آذر 1386, 12:56 عصر
بابت پاسخها ممنونم ...
من بعد از Create شدن فرم اصلی ، شرط رو چک می کنم ، و اگر شرط صدق نکرد ، با یک Exit خارج میشم ، اما باز هم پنجره Error Reporting ظاهر میشه و باید حتما از توی Task Manager برنامه رو End Process کنم تا بسته بشه ...
کدی که نوشتم اینه :


Application.Initialize;
Application.Title := '...';
Application.CreateForm(TMainFrm, MainFrm);
if not MainFrm.Lock.Connected then
Exit;
Application.CreateForm(TAboutFrm, AboutFrm);
...
نکته خاصی رو باید رعایت کنم ؟!

...
من حدس میزنم که تعداد فرم زیادی در پروژه داری مثلا بیش از 20 تا یا حتی خیلی بیشتر درسته؟
این خیلی مهمه.

Mahmood_M
جمعه 09 آذر 1386, 13:20 عصر
من حدس میزنم که تعداد فرم زیادی در پروژه داری مثلا بیش از 20 تا یا حتی خیلی بیشتر درسته؟
بله درسته ، بیش از 40 فرم توی برنامه دارم ...

...

Cave_Man
جمعه 09 آذر 1386, 13:34 عصر
بله درسته ، بیش از 40 فرم توی برنامه دارم ...

...
فرمهاتون رو بصورت Dynamic یعنی در زمان مورد نیاز Create کنید. و هنگام خروج از فرم ها هم اونها رو Release کنید.

Mahmood_M
جمعه 09 آذر 1386, 20:20 عصر
فرمهاتون رو بصورت Dynamic یعنی در زمان مورد نیاز Create کنید. و هنگام خروج از فرم ها هم اونها رو Release کنید.
ممنون ...
این موضوع چه ارتباطی میتونه داشته باشه ؟ ، چک کردن شرط قبل از ایجاد فرمهای دیگه انجام میشه و هنگامی که اونها هنوز Create نشدن ، از عملیات خارج میشم ( با Exit ) ...

اگه امکان داره توضیح بیشتری بدید ...

...

merced
جمعه 09 آذر 1386, 23:08 عصر
توی یونیت پروژه




var
setingForm : TfSetting ;
reg : TRegistry ;

{$R *.res}
{$Optimization On}

begin

try
setingform := TfSetting.Create(nil);
setingForm.lblfirstTime.Visible := True ;
setingform.ShowModal ;
if setingform.ModalResult = 1 then
////
else begin
ShowMessage('///');
Exit ;
end ;
ShowMessage('// Welcome');
end ;
finally
setingform.Free ;
end ;

Mahmood_M
شنبه 10 آذر 1386, 15:30 عصر
ممنون از همه دوستان ، مشکل حل شد ...
باید قبل از Exit ، فرم اصلی ساخته شده رو Free می کردم ...

...