PDA

View Full Version : از بین بردن منابع فرم ها و مقادیر متغییر ها



اصغر (پآچ)
شنبه 29 تیر 1387, 21:03 عصر
سلام دوستان
من یه برنامه دارم که اطلاعات رو توی بانک ذخیره می کنه اما موقع خروج از این فرم باید مقدار تمام Edit ها و بقیه عناصری رو که اطلاعات رو میگیرن به صورت دستی به حالت اول برگردونم تا موقع مراجعه بعدی به این فرم اون اطلاعات قبلی نمایش داده نشه.

من برای رفع این مشکل تمام فرم هام رو بغیر از فرم اولیه و DataModule از حالت AutoCreate خارج کردم و بردم به حالت Available اما یه مشکل دیگه پیدا کردم من وقتی میخوام یه فرم رو نشون بدم از دستور زیر استفاده می کنم

Frm_Add := TFrm_Add.Create(Owner);
Frm_Add.Show;
Frm_Main.Hide;

و در فرم اضافه یه دکمه برای خروج گذاشتم که کد زیر توش نوشته شده:

Frm_Main.Show;
Frm_Add.Close;

و در OnDestroy فرم Frm_Add نوشتم :


Frm_Add.Free;

تا اینجا مشکلی نیست اما وقتی برنامه رو اجرا می کنم دفعه اول فرم رو نشون ولی دفعه دوم پیام Access Volation یا Abstract Error میده هر چی هم که با Step by Step برنامه رو چک کردم نفهمیدم مشکل کجاست.

اگه ممکنه راهنمایی کنید یا یه روش بهتر برای از بین بردن منابع و صفر کردن متغییر ها و مقادیر عناصر روی یک فرم پیشنهاد بدید ممنون میشم.

موفق و موید باشید

SYNDROME
شنبه 29 تیر 1387, 22:16 عصر
دوست عزیز بهتر است در رویداد OnShow مربوط فرمتان Edit های مربوطه را پاک کنید.
موفق باشید

اصغر (پآچ)
شنبه 29 تیر 1387, 22:40 عصر
سلام علی جان
ببین یعنی غیر از پاک کردن دستی عناصر راهی نداره که مقدار اونها رو به حالت پیشفرض تغییر بدم؟ آخه نزیک سی تا Edit با کلی CheckBox و کلی متغییره که مقدارشون باید False بشه.

موفق و موید باشی

Hsimple11
یک شنبه 30 تیر 1387, 00:22 صبح
کامپوننتها را پیدا کنید و برای هر 30 تا یکبار False کنید.

babak_delphi
یک شنبه 30 تیر 1387, 02:42 صبح
من در بخش نکات دلفی ، پروسیجری نوشتم که دقیقا همین کار رو انجام میده
یه سر به اونجا بزن
شاید مشکلتو حل کنه

Hamid_PaK
یک شنبه 30 تیر 1387, 09:29 صبح
در رویداد OnClose فرم add متغیر TAction را برابر با caFree مقدار دهی کنید و این باعث خواهد شد که در هنگام بسته شدن فرم بصورت خودکار فرم آزاد شود.

یا حق ...

Loveski
یک شنبه 30 تیر 1387, 09:39 صبح
سلام
براینکه این قدر دردسر نکشی بهتره در فرم اصلیت Form Style را به صورت fsMDIForm تعریف کنید و در فرم های دیگه Form Style را به صورت fsMDIChild تعریف کن هر وقت فرم بازمیشه تمام Edit هایتان به صورت پیش فرض در می آید.

Mahyaa
یک شنبه 30 تیر 1387, 10:03 صبح
سلام دوستان
من یه برنامه دارم که اطلاعات رو توی بانک ذخیره می کنه اما موقع خروج از این فرم باید مقدار تمام Edit ها و بقیه عناصری رو که اطلاعات رو میگیرن به صورت دستی به حالت اول برگردونم تا موقع مراجعه بعدی به این فرم اون اطلاعات قبلی نمایش داده نشه.

من برای رفع این مشکل تمام فرم هام رو بغیر از فرم اولیه و DataModule از حالت AutoCreate خارج کردم و بردم به حالت Available اما یه مشکل دیگه پیدا کردم من وقتی میخوام یه فرم رو نشون بدم از دستور زیر استفاده می کنم

Frm_Add := TFrm_Add.Create(Owner);
Frm_Add.Show;
Frm_Main.Hide;
و در فرم اضافه یه دکمه برای خروج گذاشتم که کد زیر توش نوشته شده:

Frm_Main.Show;
Frm_Add.Close;
و در OnDestroy فرم Frm_Add نوشتم :


Frm_Add.Free;
تا اینجا مشکلی نیست اما وقتی برنامه رو اجرا می کنم دفعه اول فرم رو نشون ولی دفعه دوم پیام Access Volation یا Abstract Error میده هر چی هم که با Step by Step برنامه رو چک کردم نفهمیدم مشکل کجاست.

اگه ممکنه راهنمایی کنید یا یه روش بهتر برای از بین بردن منابع و صفر کردن متغییر ها و مقادیر عناصر روی یک فرم پیشنهاد بدید ممنون میشم.

موفق و موید باشید


اگر میخواهی Modal less فرم رو نمایش بدید یعنی با استفاده از متد Show که خودتون نوشتید . همون کاری که دوست عزیز در پست شماره 6 گفتند :


در رویداد OnClose فرم add متغیر TAction را برابر با caFree مقدار دهی کنید و این باعث خواهد شد که در هنگام بسته شدن فرم بصورت خودکار فرم آزاد شود.

یا حق ...

اما اگر ShowModal کنید بهتره توی بلاک Try ... Finally ، فرم رو Create و بعد از اون ShowModal و در بخش آخر هم Free کنید .

اینکه شما فرم Add رو Show کردید و فرم قبلی اون یعنی Main رو مخفی کردید ، به نظرم یک کمی عجیب اومد و من حدس زدم شاید چون میخواهید کاربر به فرم اصلی دسترسی نداشته باشه این کار رو کردید . اگر حدس من درسته بهتره برای نمایش فرمتون هم از ShowModal استفاده کنید .

موفق باشید .

as13851365
یک شنبه 30 تیر 1387, 17:10 عصر
می تونی از یه حلقه FOR استفاده کنی این حلقه به تعداد کامپوننت های Edit موجود در فرم تکرار می شه که شما می توانید در هر تکرار این Edit ها رو خالی کنی

کدش دقیقا یادم نیست ولی اگه پیدا کردم اینجا قرار می دم

Loveski
یک شنبه 30 تیر 1387, 18:26 عصر
می تونی از یه حلقه FOR استفاده کنی این حلقه به تعداد کامپوننت های Edit موجود در فرم تکرار می شه که شما می توانید در هر تکرار این Edit ها رو خالی کنی

کدش دقیقا یادم نیست ولی اگه پیدا کردم اینجا قرار می دم

سلام
کدی رو که دوستمان گفته اینه :

For i:= 0 to ComponentCount do
if (Components[i] is TsuiEdit)then
begin
TsuiEdit(Components[i]).Clear ;
end;

SYNDROME
یک شنبه 30 تیر 1387, 18:57 عصر
ببین یعنی غیر از پاک کردن دستی عناصر راهی نداره که مقدار اونها رو به حالت پیشفرض تغییر بدم؟ آخه نزیک سی تا Edit با کلی CheckBox و کلی متغییره که مقدارشون باید False بشه.

می توانی چنین کدی را برای فراخوانی فرم استفاده کنی تا در زمان فراخوانی فرم ، فرم مانند حالت اولیه نمایش داده شود.


Form1 := TForm1.Create(Owner);
Form1.ShowModal;
Form1.Free;

زمانی که فرم را فراخوانی می کنید Create می شود و بعد از بستن فرم Fee می شود.
موفق باشید

اصغر (پآچ)
یک شنبه 30 تیر 1387, 23:42 عصر
سلام دوستان
با تشکر از همه که راهنمایی فرمودند. مشکلم با این دو پستی که ازشون تشکر کردم راحت تر از بقیه روشها حل شد. ولی ازهمه تشکر می کنم.