PDA

View Full Version : حرفه ای: اضافه کردن توابع به کتابخانه توابع FastReport



tiphooo
سه شنبه 25 بهمن 1390, 05:56 صبح
در این تاپیک فصد دارم نحوه اضافه نمودن توابع و روال به FastReport در زبان دلفی را به صورت کاملا ساده و کاربردی توضیح دهم لازم به ذکر است در این روش توابع در دلفی کامپایل شده و در تمامی گزارشات بدون نیاز به هیچ کار اضافه ای قابل استفاده هستند. در سایت جستجو کردم متاسفانه تاپیکهای زیادی در این باره ایجاد شده و همگی یا جواب نگرفته اند و یا به صورت پراکنده اشاراتی شده است. انتظار می رود با استفاده از این روش دوستان اگر توابع کاربردی در دلفی قبلا ایجاد کرده اند با این روش به Fast اضافه کرده تا بقیه دوستان هم بتوانند از آن استفاده کنند
سادترین آنها توابع مربوط به تاریخ (تبدیل میلادی به شمسی و بلعکس ، اسامی روزهای هفته ، اسامی ماهها و.... ) و ، تیدیل عدد به حروف و ...می باشند
این روش اضافه نمودن ارتباطی به نسخه FastReport مورد استفاده ندارد و در کلیه نسخه های آن قابل استفاده است بنده از نسخه 2.52 تا 4.9 از همین روش استفاده کردم

Mask
سه شنبه 25 بهمن 1390, 09:46 صبح
در این تاپیک فصد دارم نحوه اضافه نمودن توابع و روال به FastReport در زبان دلفی را به صورت کاملا ساده و کاربردی توضیح دهم
بسم الله. پس شروع کن.

tiphooo
سه شنبه 25 بهمن 1390, 20:05 عصر
1- در ابتدا فایل fs_isysrtti.pas را پیدا کنید (در مسیر فایلهای نصب شده FastReport) و آن را در دلفی باز کنید
2- متد constructor TfsSysFunctions.Create(AScript: TfsScript); را پیدا کرده و آنجایی که with AScript do دارد در قسمت AddMethod می توانید توابع مربوط به FastReport که در زمان طراحی دیده می شوند را ببینید و قرار است ما هم توابعمان را همینجا اضافه کنیم
3- یک متد برای تابع خود تعریف کنید نیازی به دانش زیادی در این زمینه نیست می توانید یکی از همان قبلی ها را کپی کرده و تغییرات را بر روی آن اعمال کنید مثلا برای تبدیل تاریخ میلادی به شمسی:
AddMethod('function DateToShamsi(e: Extended): String', CallMethod1, FCatConv); می بینید که در اینجا من متد مربوط به تابع DateToStr را به همان شکل کپی کرده ام و فقط یک نام جدید برای تابع خود به نام DateToShamsi تعریف کردم
4- حال تابع CallMethod1 را پیدا کنید که به صورت function TfsSysFunctions.CallMethod1(Instance: TObject; ClassType: TClass;
const MethodName: String; Caller: TfsMethodHelper): Variant; نوشته شده است
5 - در قسمت شرطها (if MethodName = 'INTTOSTR' then) شما یک Else If برای متد خود تعریف کنید در این حالت این شکلی می شود
else if MethodName = 'DATETOSHAMSI' then
Result := StrMToSh(DateToStr(Caller.Params[0]))
6 - در اینجا Result مقدار خروجی شماست که بر حسب پارامتر ورودی شما Caller.Params[0] می باشد
7 - تابع StrMToSh یک تابع برای تبدیل تاریخ است که من در دلفی از آن استفاده می کنم و آن را در یک Unit دیگر تعریف کرده ام و اینجا برای استفاده فقط آن Unit را باید Use کنید
سعی کنید شما هم تمام توابع کاربردی نوشته شده خود را در دلفی در یک Unit مثلا UnitConvert.pas ذخیره کنید و هر کدام را خواستید در FastReport استفاده کنید
8- خوب کار کد نویسی تمام شد حال تغییرات را ذخیره کنید و به سراغ مرحله بعد بروید
9 - فایل fs_isysrtti.pas را بسته و فیل dpk مربوط به FastReport را باز کنید (مثلا برای دلفی 7 فایل frx7.dpk ) و آن را مجددا کامپایل کنید اگر همه چیز را به درستی انجام داده باشید و کامپایل بدون خطا باشد از این به بعد شما در محیط FastReport تابع ایجاد شده را در قسمت توابع استاندارد خود FastReport می توانید ببینید و در همه گزارشات از آن استفاده کنید
10 - دلفی را بسته و مجددا باز کرده و تابع ایجاد شده را تست کنید
نکته : فایل fs_isysrtti.pas تغییر یافته را نگه دارید و زمانی که بر روی یک سیستم دیگر FastReport نصب کردید قبل از نصب فابل آن را با فایل خودتان جایگزینی کنید
هر کدام از توابع استاندارد خود FastReport را نیز می توانید با همین روش تغییر دهید
من سعی کردم که کار را با زبان ساده بیان کنم و دوستان با مشاهده فایل fs_isysrtti.pas و پس از ایجاد یک نمونه ساده قاعدتا خودشان از بقیه موارد سر در آورده و توابع زیادی به این Unit اضافه خواهند کرد
سوالی داشتید بگویید تا راهنمایی کنم

jst
چهارشنبه 26 بهمن 1390, 00:05 صبح
سلام

ایا راهی برای اضافه کردن کامپوننتهای دلفی برای استفاده در دیالوگ رپرت هم وجود دارد ؟

alidehban
شنبه 18 شهریور 1391, 16:23 عصر
با سلام
من در پروژم از fast report بری گزارش سازی استفاده کردم اما فرم پیش نمایش پیش فرض امکانات کافی رو نداره و میخوام امکان ارسال اطلاعاتی که کاربر میبینه رو با یک دکمه به نرم افزار دیگه ای اضافه کنم.
برای اینکار یک کلاس از فرم مربوطه گرفتم و دکمه رو بهش اضافه کردم فقط نمیدونم چطور دلفی یا فست رو مجبور کنم فرم من رو نمایش بده؟
لطفا راهنمایی کنید با تشکر