PDA

View Full Version : نحوه فراخوانی تابع دلخواه با بروز هر نوع خطا



ali_divsalar
چهارشنبه 14 دی 1384, 11:34 صبح
سلام
آیا دستوری تو دلفی داریم که بواسطه اون با بروز هرخطا(مربوط به هر موضوعی) بشه تابعی رو صدا بزنیم و داخل اون تابع براساس کد خطا پیغام دلخواهمون رو به فارسی صادر کنیم.
(شبیه دستور on error توی foxpro)

mzjahromi
چهارشنبه 14 دی 1384, 12:20 عصر
می تونی با Application.Onexception کار کنی(البته اگه منظورتون رو درست فهمیده باشم)

ali_divsalar
چهارشنبه 14 دی 1384, 14:20 عصر
می خوام بجای Try...Excep...وIoResult و نظایر آنها که دلفی امکان چک کردن خطا به ما می دهد یک فانکشن عمومی بنویسم که با بروز هرنوع خطا فراخوانی شودوما فقط درآن فانکشن براساس کد خطا پیغام مناسب را به فارسی
صادر نماییم.طبیعی است پیغامهایی به فارسی صادر خواهند شد که ما در آن فانکشن معرفی کرده ایم بعبارتی می خواهم جلوی پیغامهایی که لاتین صادر می شود را بگیرم

mzjahromi
چهارشنبه 14 دی 1384, 14:23 عصر
از تب Additional یه ApplicationEvent بذار رو فرم . تو رخداد OnException همه این کارا رو می تونی انجام بدی و دیگه پیغام انگلیسی نذاری رد بشه

ali_divsalar
شنبه 17 دی 1384, 10:36 صبح
ممنونم . امتحان کردم ولی اولا بعد از پیغام لاتین اجرا می شه . دوم اینکه کد خطا را بواسطه پارامتری مثل errno یا مشابه اون می شناسه یا نه(که بشه با دستورات شرطی مثل caseشناسایی کرد و پیغام مرتبط با اونو صادر کرد یا نه؟)

mzjahromi
شنبه 17 دی 1384, 10:57 صبح
ممنونم . امتحان کردم ولی اولا بعد از پیغام لاتین اجرا می شه . دوم اینکه کد خطا را بواسطه پارامتری مثل errno یا مشابه اون می شناسه یا نه(که بشه با دستورات شرطی مثل caseشناسایی کرد و پیغام مرتبط با اونو صادر کرد یا نه؟)
اگر درست کنترلش کنی دیگه پیغام لاتین نمی ده
شماره خطا رو هم بر می گردونه

ali_divsalar
شنبه 17 دی 1384, 11:58 صبح
شرمنده ,حقیقتش تو این زمینه کار نکردم اگه بیشتر راهنمایی کنیدکهچطور اینکار رو کنم ممنون می شم

mzjahromi
شنبه 17 دی 1384, 12:01 عصر
procedure TMainForm.AppException(Sender: TObject;
E: Exception);
begin
// ShowMessage(E.ClassName);
if E.ClassType=EInvalidOperation then//E.Message='Cannot make a visible window modal' then
MB.ShowMessage('äÌÑå ãæÑÏ äÙÑ åã Çßäæä ÝÚÇá ÇÓÊ')
Else if E.ClassType=EVariantArrayLockedError then
MB.ShowMessage('ÑÏíÝ ãæÑÏ äÙÑ ÝÇÞÏ ÇØáÇÚÇÊ ãí ÈÇÔÏ')
Else
MB.ShowMessage(E.Message);
end;

Naficy
شنبه 17 دی 1384, 12:07 عصر
پیشنهاد می کنم برای فارسی کردن پیغامها، به جای اینکه با این روالها ور برین، اینگونه عمل کنین:
به Project->Language->Add مراجعه کنید و یک زبان جدید اضافه کنید. پس از انجام این کار شما امکان تغییر و ترجمه کلیه پیغامهای سیستمی را خواهید داشت.

mzjahromi
شنبه 17 دی 1384, 12:19 عصر
پیشنهاد می کنم برای فارسی کردن پیغامها، به جای اینکه با این روالها ور برین، اینگونه عمل کنین:
به Project->Language->Add مراجعه کنید و یک زبان جدید اضافه کنید. پس از انجام این کار شما امکان تغییر و ترجمه کلیه پیغامهای سیستمی را خواهید داشت.
درسته
اینجوری دردسرت خیلی کمتره

ali_divsalar
شنبه 17 دی 1384, 12:21 عصر
E.ClassType جواب سوال اول منو داد و لی جلو پیغام لاتین رو نگرفتم