PDA

View Full Version : جلوگيري از نمايش فرم در on active يا on show



rahjoya
یک شنبه 01 دی 1387, 14:31 عصر
ميخواهم در event فرم، on active يا on show يك شرط را بررسي كنم و اگر كه آن شرط برقرار نبود فرم بسته شود اما اجازه استفاده از form.close در اين eventها نيست. آيا راهي هست كه وقتي شرطي برقرار نبود فرم باز نشود؟

Answer
یک شنبه 01 دی 1387, 15:58 عصر
گفته شما درست نیست در هر دو اونت ذکر شده میتوان از close استفاده کرد شاید مشکل از جای دیگری از کد برنامه باشد

accpascal
یک شنبه 01 دی 1387, 19:56 عصر
گفته شما درست نیست در هر دو اونت ذکر شده میتوان از close استفاده کرد شاید مشکل از جای دیگری از کد برنامه باشد
لطفا اگر میشه بگویید چگونه می توان استفاده کرد من هم همین مشکل را دارم

merced
یک شنبه 01 دی 1387, 21:29 عصر
ميتوني يه تابع توي خود فرم بنويسي كه اون فرم رو برات Show‌ كنه



procedure TForm2.Show1 ;
begin
if istrue then Show ;
end ;


البته تابع رو در public‌ تعريف كن كه بتوني اونو صدا بزني

Answer
یک شنبه 01 دی 1387, 21:55 عصر
نمیدونم مشکلتون تو کدوم قسمته اما در اونت on active يا on show میشه هر فرمی یا حتی خود اون فرم رو بست و براحتی از دستور form.close استفاده کرد اگه مشکل خاصی هست سورس رو آپلود کنید تا جوابتون رو بدم

rahjoya
دوشنبه 02 دی 1387, 08:20 صبح
procedure TfrmEdarehRec.FormShow(Sender: TObject);
begin
with dm do
begin
str:= ' select * from Ostan where ActiveFlag=1 ';
with qOstan do
begin
if Active then Close;
SQL.Clear;
SQL.Add(str);
Open;
end;

str:= ' select * from City where ActiveFlag=1 and OstanId=' + ''''+qOstanOstanId.AsString+'''';
with qCity do
begin
if Active then Close;
SQL.Clear;
SQL.Add(str);
Open;
end;

if qCity.RecordCount>0 then
frmEdarehRec.Caption:='استان '+'>>>'+qOstanNameOs.AsString+ ' '+'شهر' +' '+qCityNameCi.AsString
else
begin
ShowMessage(لطفا ابتدا استان و شهر را تعريف كنيد');
frmEdarehRec.Close;
end

end;
end;


لازم به توضيح است كه ميخواهم دربرنامه ابتدا استان سپس شهر و سپس اداره تعريف شود براي اينكه اين سلسله مراتب رعايت شود ميخواهم اگر كه كاربر بدون تعريف استان و شهر يكهو رفت سراغ تعريف اداره، برنامه پيغام مناسب داده و فرم اداره را ببندد. اما بعد از ok كردن پنجره showmessage نه تنها فرم اداره را نمي بندد بلكه آنرا نمايش ميدهد.

merced
دوشنبه 02 دی 1387, 18:04 عصر
كجا دستور Show يا ShowModal اين فرم ‌رو نوشتيد؟ تمام كد بالا رو به قبل از اون ببريد.

accpascal
دوشنبه 02 دی 1387, 22:40 عصر
ميتوني يه تابع توي خود فرم بنويسي كه اون فرم رو برات Show‌ كنه


موضوع اینه که میخواهیم هنگام show شدن فرم چیزی چک شود

accpascal
دوشنبه 02 دی 1387, 22:44 عصر
نمیدونم مشکلتون تو کدوم قسمته اما در اونت on active يا on show میشه هر فرمی یا حتی خود اون فرم رو بست و براحتی از دستور form.close استفاده کرد اگه مشکل خاصی هست سورس رو آپلود کنید تا جوابتون رو بدم

لطف کنید و این کد ساده را خودتان امتحان کنید

TForm1.FormShow(Sender: TObject);
begin
form1.close;
end;

accpascal
دوشنبه 02 دی 1387, 22:49 عصر
لطف کنید و این کد ساده را خودتان امتحان کنید

TForm1.FormShow(Sender: TObject);
begin
form1.close;

end;

البته یادآوری کنم form1 فرم اصلی برنامه نباشد

Answer
جمعه 06 دی 1387, 18:08 عصر
--------اول اینکه شما نگفته بودید که کدوم قصد بستن کدوم فرم رو دارید
========================
راه منطقی اینه که قبل از نمایش فرم تمام شروط رو انجام داد در صورت درست بودن فرم رو نمایش بدیم.
اما یک راه غیر منطقی جالب اینه که با استفاده از یک تایمر این کارو انجام بدیم
یک تایمر با اینتروال پایین روی فرم قرار داده و اون رو غیرفعال کنیم (Timer.Enable:=false) و در اونت آن فرم رو (form.close)ببندیم و درonshow فرم پس از مقایسه شرطها تایمر رو فعال کنیم(Timer.Enable:=true)