View Full Version : نمایش فرم جدید با زدن يك كليد
E.rahimi
سه شنبه 10 خرداد 1384, 12:22 عصر
سلام به همه دوستان
من در یک برنامه فرمی را بصورت Modal نمایش داده ام . می خواهم با زدن کلیدی که در رویداد OnKeyPressed تعریف کرده ام این فرم بسته شده و فرم دیگری نمایش داده شود. در فرم دوم نیز با زدن کلید دیگری این فرم بسته شود و فرم اول نمایش داده شود. هر دو فرم بصورت modal نمایش داده شده اند.
Delphi Skyline
سه شنبه 10 خرداد 1384, 14:53 عصر
من که نفهمیدم چی گفتید :گیج:
اما شاید کمکت کنه
form3.showmodal;
form2.Close;
البته شاید . اگر منظورتون نفهمیدم :sorry:
javidtaheri
سه شنبه 10 خرداد 1384, 16:03 عصر
if key =#13 then
begin
form1.close
form2.ShowModal
end;
Delphi Skyline
سه شنبه 10 خرداد 1384, 16:23 عصر
if key =#13 then
begin
form1.close
form2.ShowModal
end;
اشتباه است . شما وقتی Close می کنی فرم بسته می شه چطوری Show کنه ؟
اینم دستور بدون نقص :
if key =#13 then
begin
form3.ShowModal;
form2.close ;
end;
javidtaheri
سه شنبه 10 خرداد 1384, 17:05 عصر
فکر نکنم فرقی بکنه و دستورات ÷شت سر هم اجرا بشه
اساتید حرفه ای اعلام نظر کنید :mrgreen:
E.rahimi
سه شنبه 10 خرداد 1384, 18:30 عصر
من در رویداد OnkeyDown فرم اول این دستورات را دارم
if key=VK_F5 then begin
form1.close;
form2.ShowModal;
end;
و در رویداد OnkeyDown فرم دوم این دستورات:
if key=VK_F6 then begin
form2.close;
form1.ShowModal;
end;
ولی هیچکدام از فرمها close نمیشه . پس از یک بار اجرا رویدادهای فوق خطای cannot make visible form modal روی صفحه ظاهر می شود
Tarrah
سه شنبه 10 خرداد 1384, 19:26 عصر
باید از modalresult استفاده کنید.تو help دلفی توضیح داده ولی اگه لازم بود بگین بیشتر توضیح بدم. :)
Delphi Skyline
سه شنبه 10 خرداد 1384, 20:25 عصر
فکر نکنم فرقی بکنه و دستورات ÷شت سر هم اجرا بشه
اساتید حرفه ای اعلام نظر کنید
آقا شما می دونی کامپایلر چطوری کد ها را می خونه ؟ :mrgreen:
Touska
سه شنبه 10 خرداد 1384, 20:57 عصر
آره دستورات پشت سر هم اجرا می شوند. البته نه همه جا.
موفق باشید :flower:
Delphi Skyline
سه شنبه 10 خرداد 1384, 21:33 عصر
آره دستورات پشت سر هم اجرا می شوند. البته نه همه جا.
موفق باشید
درسته . یکی از مزیت های کامپایلر ها نسبت به مفسر ها همینه .
vcldeveloper
چهارشنبه 11 خرداد 1384, 02:38 صبح
اینم دستور بدون نقص :
if key =#13 then
begin
form3.ShowModal;
form2.close ;
end;
وقتی که ShowModal رو فراخوانی می کنید، تا زمانی که مقدار ModalResult مشخص نشه، خط بعد اجرا نمیشه. در نتیجه در کد شما همیشه form2.close موقعی اجرا میشه که form3 بسته شده باشه.
من در یک برنامه فرمی را بصورت Modal نمایش داده ام . می خواهم با زدن کلیدی که در رویداد OnKeyPressed تعریف کرده ام این فرم بسته شده و فرم دیگری نمایش داده شود. در فرم دوم نیز با زدن کلید دیگری این فرم بسته شود و فرم اول نمایش داده شود. هر دو فرم بصورت modal نمایش داده شده اند.
وقتی فرمی، فرم دیگه ایی رو بصورت modal فراخوانی مینکه، تا زمان دریافت modalresult منتظر می مونه. میشه form2 رو در داخل متد OnShow از form3 آزاد (free) کرد. اما با بسته شدن form3 مقدار modalresult نمی تونه به form2 که free شده برسه و یک استثناء رخ میده.
پیشنهاد می کنم که به صورت زیر عمل کنید:
procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Form3.ShowModal;
Form2.Close;
end;
end;
procedure TForm3.FormShow(Sender: TObject);
begin
Form2.Hide;
end;
در این حالت، با باز شدن Form3 فرم قبلی (Form2) مخفی میشه و با بسته شدن Form3 هم Form2 بسته میشه.
E.rahimi
چهارشنبه 11 خرداد 1384, 07:13 صبح
چطور میشه در حالت کلی با نمایش یک فرم بصورت modal بقیه فرمها اتوماتیک بسته شوند را پیاده سازی کرد. ( به محض نمایش یک فرم بقیه فرمها نیز که بصورت modal هستند بسته شوند) این کار در حالت کلی انجام شود یعنی اینکه نیازی نباشده حتم من اسم فرم بدونم تا اونرو ببندم.
:oops: :oops:
leylam
چهارشنبه 11 خرداد 1384, 15:06 عصر
چطور میشه در حالت کلی با نمایش یک فرم بصورت modal بقیه فرمها اتوماتیک بسته شوند را پیاده سازی کرد. ( به محض نمایش یک فرم بقیه فرمها نیز که بصورت modal هستند بسته شوند) این کار در حالت کلی انجام شود یعنی اینکه نیازی نباشده حتم من اسم فرم بدونم تا اونرو ببندم.
اگر زمان ایجاد فرم را در run time بگذاریم و بعد از ایجاد هر فرم را free کنیم دیگر احتیاجی به بستن تک تک فرم ها نداریم هر فرم تنها در زمان مورد نیاز ایجاد شده و سپس تخریب میگردد به صورت زیر:
;(form1:=Tform1.Create(owner
form1.Showmodal
form1.Free
امیدوارم منظور شما را درست متوجه شده باشم :)
javidtaheri
چهارشنبه 11 خرداد 1384, 15:26 عصر
اگه این کد نوشته بشه
if key =#13 then
begin
form2.Show
form2.Update;
form1.close
end;
برنامه کار میکنه ولی اگر از ShowModal استفاده بشه نه چرا
مگه کامپایلر وقتی دستور ShowModal اجرا میشود روی این خط توقف میکند؟ :گیج:
ویا عملکردش فرق میکنه :تشویق:
leylam
چهارشنبه 11 خرداد 1384, 15:49 عصر
بر گرفته از helpدلفی :
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. When the form closes, it returns the value of the ModalResult property.
To close a modal form, set its ModalResult property to a nonzero value. :)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.