PDA

View Full Version : سوال: بدست آوردن نام پروسیجر و فرم در داخل همان پروسیجر



hadisalahi2
یک شنبه 17 آذر 1392, 11:25 صبح
سلام به همگی دوستان

بچه ها ، آیا روشی هست که در داخل یک پروسیجر ، نام اون پروسیجر رو در هنگام اجرا فهمید؟

ببینید ، من یک تیکه کد دارم که هر خطایی در اون پروسیجر اتفاق می افته رو در جدول ذخیره میکنه
حالا برای هر پروسیجر ، باید نام فرم و نام پروسیجر رو دستی بنویسم

تیکه کد زیر رو ببینید :


procedure TCompanyForm.SearchButtondClick(Sender: TObject);
begin
Try
if IDSE.Text='' Then Exit;
CodeBaseUnit.Search(IDSE,KeyS,InsertSP,Tag,Company Form);
if InsertSP.RecordCount=0 then Exit;
ID.Caption:=InsertSP['ID'];
//==========================================
Somi(nil);
except on E: Exception do
DBForm.InsertToException('','',e.Message);
end;
end;


در این خط :

DBForm.InsertToException('','',e.Message);

اگه دقت کنید ، دو تا پارامتر از نوی رشته ای وجود داره ، که اولی نام پروسیجری هستش که خطا توی اون رخ داده و دومی نام فرمی هست که پروسیجر در اون قرار داره.

من به صورت دستی مثلا به صورت زیر ، نام پروسیجر و فرم رو می نویسم:

DBForm.InsertToException('SearchButtondClick','TCo mpanyForm',e.Message);

حالا من میخوام ، به جای اینکه ، خودم میام دستی این کا رو در هر پروسیجر انجام بدم ،
نام پروسیجر و فرم ، مثل یک پارامتر ، همراه پروسیجر من فراخوانی بشه ، تا دیگه نیازی به جایگذاری دستی مقادیر پارامتر نباشه.

امیدوارم تونسته باشم ، منظورم رو برسونم.

یوسف زالی
یک شنبه 17 آذر 1392, 13:17 عصر
سلام.
اسم فرمت که میشه Self یا پرنت فرم Self
اسم پروسیجر رو هم مدتها پیش سوال کردم، راه ساده ای نداره. اما فکر می کنم اگر Published باشه یا RTTI داشته باشه می شه یه کارایی کرد.

hadisalahi2
یک شنبه 17 آذر 1392, 15:04 عصر
اسم فرم که ردیفه Self.name
مشکل اصلی که توی نام پروسیجر یا فانکشنه

اما این دو مورد یعنی چی؟

اگر Published باشه یا RTTI

یوسف زالی
یک شنبه 17 آذر 1392, 15:10 عصر
Run Time Table Information رو سرچ کن

tiphooo
سه شنبه 26 آذر 1392, 02:30 صبح
از کتابخانه های JCL استفاده کن توی JclDebug تابعی به اسم ProcByLevel دارد که با فراخوانی آن با پارامتر صفر اسم پروسیجر یا تابع جاری را بر می گرداند
لینک دانلود http://sourceforge.net/projects/jcl/
علاوه بر اینها توابع کاربردی خیلی زیادی دیگری هم دارد که ممکن است برایتان جالب باشد

hadisalahi2
سه شنبه 26 آذر 1392, 11:24 صبح
عزیزم منظورت این کامپوننته؟

JvDebugHandler1

این کامپوننت پروسیجری به نام ProcByLevel نداره :افسرده:

tiphooo
سه شنبه 26 آذر 1392, 23:09 عصر
عزیزم منظورت این کامپوننته؟ (عزیزم!!!!)

unit JclDebug.pas
نه کامپوننت JvDebugHandler1

hadisalahi2
چهارشنبه 27 آذر 1392, 10:54 صبح
تابعی به اسم ProcByLevel دارد که با فراخوانی آن با پارامتر صفر اسم پروسیجر یا تابع جاری را بر می گرداند

من همین تابع رو با صفر فراخوانی کردم ، اما هیچی برنمیگردونه