انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: برنامه نویسی با Lazarus (پست اول ویرایش شد ۹۳/۰۴/۲۳ )  (دفعات بازدید: 203830 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
انجام پروژه - جلسه اول
« پاسخ #135 : 26 فروردین 1392، 10:58 ق‌ظ »
سلام
این بخش اول شروع برنامه نویسی یک پروژه با لازاروس هستش.
من همین اول بگم که ادعایی تو برنامه نویسی ندارم و ممکنه بعضی جاها کارم بهینه نباشه پس تصور شما این نباشه که چیزی که من میگم تنها راه ممکنه برای حل یک مسئله هستش.  :-k
-------------------------------------------------------
به نظر من انواع برنامه های کامپیوتری برای نوشتن و توسعه به ۴ بخش تقسیم میشن :
۱- برنامه های سیستمی و یا توسعه خود سیستم عامل : این نوع برنامه ها نیازمند این هستن که برنامه نویس تسلط کامل نسبت به سیستم عاملی که برای اون برنامه مینویسه داشته باشه و در عین حال دستورات مخصوص کامپایلری رو که استفاده میکنه برای اون سیستم عامل خاص بلد باشه.نکته دیگه در مورد این برنامه ها اینه که عموما این برنامه ها مستقل از سکو تولید نمیشن و مختص یک سیستم عامل هستن که این به خاطر نوع معماری مختلف سیستم عامل ها هست. تو کشور ما زیاد رونق نداره و شرکت های اندکی هستن که تو این زمینه فعالیت می کنند.
۲- برنامه های کاربردی که برای انواع کاربر مبتدی و حرفه ای طراحی میشن: این برنامه ها استفاده کننده خیلی زیادی دارند. مثلا پخش کننده موزیک و ویدیو یا برنامه ویرایش تصاویر و یا .....  این برنامه ها به صورت ساده و با امکانات کم زیاد استفاده نمی شن مخصوصا تو کشور ما که مثلا فتوشاپ تقریبا رایگان به دست میاد. نکته بعدی اینکه در نسخه های حرفه ای الگوریتم های پیچیده و سختی استفاده میشه که شاید تو تمام دنیا فقط چند نفر قادر به طراحی همچین الگوریتم هایی باشن. مثلا الگوریتم های مورد استفاده تو برنامه فتوشاپ برای ویرایش تصاویر و یا برنامه اتوکد یا 3dMax و ....  این قبیل برنامه ها که استفاده زیادی دارند کار ۲ نفر یا چند نفر نیست و یک شرکت بزرگ با کلی دکتر و مهندس و پروفسور برای ایجاد و توسعه اونها لازمه. خوشبختانه تو کشور ما تو این زمینه وقت هدر نمیدن و نیازی به هزینه کردن برای این کارها نیست چون همه این برنامه ها به صورت رایگان یافت می شود  ;D البته همه این برنامه ها نسخه های متن باز و رایگان هم دارند که برنامه نویس میتونه تو توسعه اونها کمک کنه به شرطی که به زبان طراحی شده اون برنامه آشنا باشه و مهارت کافی برای توسعه داشته باشه.
۳- برنامه هایی که مخصوص کاربر طراحی میشن و عموما برای کار با پایگاه داده و ذخیره و بازیابی اطلاعات مورد استفاده قرار می گیرند. این نوع برنامه ها تو کشور ما رونق خوبی دارند و اغلب شرکت های برنامه نویسی تو این زمینه فعالیت می کنند. هرچند حجم مشتری این نوع برنامه ها قابل قیاس با ۲ نوع قبل نیست ولی برای شرکت ها کار تو این زمینه به صرفه تر و اقتصادی می باشد.
مزیت دیگه این برنامه ها اینکه اغلب اونها مخصوص یک مشتری خاص طراحی می شن که با این کار کپی کردن و استفاده برای دیگری زیاد پیش نمیاد. بعضی هم با استفاده از قفل های سخت افزاری از طریق LPT و جدیدا USB مانع کپی برنامه هاشون می شن.
این نوع برنامه ها معمولا شامل ۲ قسمت مهم میشن که یکی پایگاه داده جهت ذخیره و بازیابی اطلاعات است و دومی خود برنامه اجرایی که رابط بین پایگاه داده و کاربر هستش .
۴- برنامه هایی که تو صنعت استفاده میشن. اغلب کارخونه ها از PLC برای کنترل خط تولید استفاده می کنند. PLC سیستم هایی هستند که مخصوص همین موارد طراحی شدن و با سنسور های مختلف ارتباط دارند و خط تولید کارخونه رو کنترل می کنند. مشکل اینجاست که این تجهیزات برای پشتیبانی و قطعه یدکی زیاد به صرفه نیستن. پس یک PC هرچند برای بیشتر از همچین نیازی طراحی شده ولی به صرفه تر و راه اندازی راحت تری داره. فقط مشکل اینجاست باید برنامه نویسی رو پیدا کنند که بتونه ارتباط بین PC و سنسور های خط تولید و دستورات اونها رو با یک برنامه بر قرار کنه. این زمینه یکم مشکله ولی برنامه نویس هایی هستند که برای کنترل خط تولید با PC برنامه نویسی می کنند. نکته دیگه اینه که این قضیه تقریبا شبیه به برنامه نویسی برای روبات ها هم هست. چون ربات ها هم با استفاده از یک سری سنسور و انجام پردازش باید کاری رو انجام بدن. تفاوت در این هست که تو خط تولید پردازش سنگین کمتر وجود داره ولی تو یک ربات خوب  اغلب پردازش ها سنگین و پیچیده هستن.
-------------------------------------------------------------
خیلی فکر کردم چه برنامه ای برای نمونه بنویسم تا با اون جلو بریم. آخر به این نتیجه رسیدم همون برنامه ای که الان روش کار می کنم تا بعد از تکمیل به صورت متن باز منتشرش کنم رو بزارم تا هم برنامه خودمو توسعه بدم و هم در حین کار آموزش هایی که لازمه اینجا بزارم.
--------------------------------------------------------------
من برنامه نویسی رو  دارای ۲ قسمت مهم میدونم:
۱- اصول و دستورات پایه هر زبان برنامه نویسی (مثل انواع متغیر ها و نحوه تعریف اونها - حلقه های تکرار - شرط ها و ...) : این دستورات زیاد سخت نیستن و تقریبا تو زبان های مختلف شبیه هم هستن. اگه به زبان دیگه ای برنامه نویسی می کنید یاد گرفتن اونها خیلی راحته. این اصول تو همه زبان ها وجود دارن و تا زمانی که به اونها مسلط نشین برنامه نویسی براتون  کار دشواری خواهد بود.
۲- تکنیک یا معماری یا شیوه برنامه نویسی : هر برنامه نویسی مثل یک بازیکن فوتبال میتونه دارای تکنیک باشه  ;D  . شما قواعد بازی فوتبال رو همون اصول اولیه در نظر بگیرید (مثلا تو فوتبال نباید از دستها استفاده کرد - تو لازاروس برای تعریف یک متغیر باید از کلمه var استفاده بشه) و حالا نحوه استفاده و شیوه ای که یک برنامه نویس این دستورات رو کنار هم میچینه تا یک پردازش رو انجام بدن همون تکنیک بازیکن فوتبال میشه.( هرچی برنامه نویس الگوریتمی بهینه در مصرف حافظه و سریع تر بنویسه خب حتما تکنیکی تره  ;) )
--------------------------------------------------------------------------------------
من از قسمت اول میگذرم و بیشتر رو قسمت دوم متمرکز میشم. پس بهتره اصول اولیه و دستورات مهم زبان پاسکال رو بدونید. لازم نیست حتما همه دستورات رو حفظ باشید ولی حداقل یک بار ازشون استفاده کرده باشید تا به چشم و گوشتون آشنا باشن  :) .
قبل از هر چیز مسئله و نیاز رو توضیح می دم تا مشخص بشه چه برنامه ای می خوام بنویسم.شاید این برنامه به درد شما نخوره ولی  شما میتونید از روش هایی که تو این برنامه به کار می برم برای موارد مشابه برنامه های خودتون استفاده کنید.
یک کلینیک مشاوره رو تصور کنید که تعداد زیادی مشاور داره که هر چند وقت عوض میشن و مراجعینی داره که جهت مشاوره و رفع نیاز های روان شناسی و ... به این کلینیک مراجعه میکنند و تشکیل پرونده داده و یک یا چند جلسه با روان شناس جهت حل مشکل خود گفتگو می کنند.
این برنامه قصد داره امور مربوط به این کلینیک و نیاز های اون رو به صورت رایانه ای در بیاره تا هم نگهداری و امنیت اطلاعات راحت تر بشه و هم جستجو داخل اونها کار سختی نباشه و مزایای دیگه .....
بیشتر از این در مورد نوع نیاز های این مورد خاص توضیح نمی دم چون بیشتر هدفم تکنیک های مورد استفاده تو برنامه است نه نیاز سنجی یک کلینیک مشاوره ولی توضیحات تکمیلی رو به وقتش در مورد نیاز هایی که باید برنامه برای این مورد داشته باشه میگم.
خب فکر کنم برا این جلسه زیاد شد بقیش باشه برا جلسه دیگه  ;)
یا حق
« آخرین ویرایش: 28 فروردین 1392، 07:12 ق‌ظ توسط امیر شهریاری »

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
انجام پروژه - جلسه دوم (نیازسنجی و طراحی پایگاه داده)
« پاسخ #136 : 27 فروردین 1392، 10:31 ق‌ظ »
سلام
خب گام اول برای ایجاد یک برنامه نیاز سنجی و بررسی اطلاعاتی است که کاربر سیستم نیاز داره تا اونها رو ذخیره و بازیابی کنه. دلیل این کار برای ایجاد پایگاه داده مرتبط با برنامه هستش .
این کار روشهای مختلفی داره که توصیه می کنم از همه اونها در صورت امکان استفاده کنید.هرچیزی رو که تو مراحل مختلف بررسی می کنید روی کاغذ بنویسید و همه مستندات رو نگه دارید تا زمان طراحی پایگاه از اونها استفاده کنید.
----------------------
ساده ترین روش اینه که برنامه نویس خودشو جای کاربر قرار بده و ببینه چه نیازهایی رو حس می کنه. این روش ابتدایی ترین و ساده ترین راه ممکنه و نیازی نداره برنامه نویس حتی از خونه یا محل کارش بیاد بیرون  ;D این روش راه مطمئن و کاملی نیست و چون معمولا برنامه نویس به همه نیازهایی که کاربر سیستم به اونها احتیاج پیدا میکنه آگاه نیست زیاد کارایی نداره ولی برای شروع خوبه.
----------------------
اولین روش صحیح بررسی مستنداتی هست که کاربر در حالت سنتی اونها رو تکمیل و نگهداری میکنه. مثلا تو برنامه مورد مثال من وقتی مراجع به کلینیک مراجعه می کنه باید فرم پذیرش رو پر کنه که شامل اطلاعاتی در مورد خود مراجع و ... هستش. این فرم قسمت مهمی از اطلاعاتی که باید تو پایگاه داده ذخیره بشن رو به برنامه نویس نشون میده و اغلب این فرمها جداول اصلی پایگاه داده خواهند بود.
همچنین برنامه نویس باید چرخه ها و فرایند هایی که تو اون بروکراسی (کاغذ بازی های اداری) انجام میشه رو به خوبی بررسی کنه و از اونها هم در پایگاه داده استفاده کنه چون همین فرایند ها باید به صورت جداول ارتباطی بین اطلاعات پایه استفاده بشن.(بعدا بیشتر در مورد این نوع جداول توضیح می دم)
-----------------------------------------
روش دوم مصاحبه و گفتگو با کاربران سیستم است. این گفتگو ها پیرامون برنامه و اطلاعاتی هست که کاربر نیاز داره اونها رو ذخیره و یا بازیابی کنه. بعضی مواقع کاربران سیستم به خاطر تجربه نکاتی رو میدونن که برنامه نویس ممکنه سالها برای فهمیدنشون زمان نیاز داشته باشه.
لازمه برنامه نویس خارج از اون محیطی که می خواد برنامه براشون بنویسه مقداری مطالعات هم در اون مورد داشته باشه. مثلا زمانی که می خوایین تو توسعه یک برنامه حسابداری فعالیت کنید حتما باید مقداری از حسابداری و اصول و قواعد اولیه اون سر در بیارید.(من خودم اوایل فارغ التحصیلیم ۲ ماه در توسعه یک برنامه حسابداری با یک شرکت همکاری می کردم فقط ۲ هفته طول کشید تا بتونم بستانکار و بدهکار رو از هم تشخیص بدم  ;D )
من همین روشها الان به خاطرم میاد ولی فکر می کنم بیشتر باشه ولی خب اینها بیشتر کاربردی هستن.
وقتی همه اطلاعات رو جمع آوری کردید باید همه اطلاعات رو کنار هم بزارید و شروع به طراحی پایگاه داده برنامه خودتون بکنید. تو طراحی پایگاه داده خیلی دقت بکنید چون یک پایگاه داده خوب میتونه خیلی تو سرعت برنامه موثر باشه و نوشتن Query ها رو خیلی راحت میکنه و در عوض یک پایگاه داده بد سرعت برنامه رو به خاطر انتقال اطلاعات زیاد پایین میاره و ممکنه یک Query ساده چندین خط و طولانی بشه.
-------------------------------------------------------------
زمان طراحی پایگاه داده نکاتی رو باید مد نظر داشته باشید :
- همیشه سعی کنید از همون ابتدا پایگاه داده و جداولتون نرمال سازی شده باشند.
- تمام اطلاعاتی که در زمان نیاز سنجی جمع آوری کردید رو کنار هم بزارید و اونهایی که به هم مربوط میشن رو تو یک دسته قرار بدید. مثلا اطلاعات شخصی مراجعین به کلینیک تشکیل یک جدول رو میدن که فیلد های مختلف مثل نام-نام خانوادگی- شماره ملی و... رو شامل میشه. برای تشخیص جداول اطلاعات تکراری رو پیدا کنید و ببینید چه چیزی در مورد یک شئ در حال تکرار شدن است. بعد فیلد های اون رو مشخص کنید و با توجه به نیاز کاربر نوع و طول فیلد ها رو مشخص کنید. هرچند پایگاه داده های امروزی طول فیلدها رو متغیر در نظر می گیرند و به اندازه اطلاعات ذخیره شده در اونها طول فیلد تعیین می شود ولی بهتر است شما هم طول فیلد رو چیزی خارج از محدوده قرار ندهید.
- جداول از نظر من ۲ نوع خواهند بود. یکی جداولی که اطلاعات پایه ای رو شامل میشن. مثلا تو یک سیستم انتخاب واحد جدول دانشجویان و جدول درس ها جز جداول پایه پایگاه هستن و ممکنه به صورت مستقیم با هم مرتبط نباشند. دومین نوع جداول ارتباطی هستن که ارتباط بین یک یا چند جدول رو مشخص می کنند. مثلا در همون مثال انتخاب واحد جدول انتخاب واحد ارتباط بین دانشجویان و درسها رو مشخص می کنه.
شما هم باید اطلاعات و جداول خودتون رو به همین روش تقسیم بندی کنید.
- بعضی مواقع بعد از طراحی یک جدول مقداری داده در اون به طور مثال و از خودتون وارد کنید و بعد اطلاعات رو بررسی کنید. ممکنه یک فیلد که از نوع کارکتری در نظر گرفته اید (مثل نام شهر) در برخی رکورد ها در حال تکرار باشه. با مشاهده این موضوع بفهمید که جدولتون نرمال نیست و اطلاعات اضافی و سربار داره. برای حل این موضوع اطلاعات تکراری رو در یک جدول دیگه طراحی کنید و ارتباط اون با جدول اصلی رو از طریق یک فیلد مشخص کنید.(مثلا در مورد همون نام شهر میتونید جدولی با عنوان شهر ها در نظر بگیرید و برای هر کدوم عددی قرار بدید و در جدول اصلی به جای نام شهر فقط اون عدد ذخیره شود. اینجوری حجم رکورد ها خیلی کاهش پدا میکنه و در زمان واکشی اطلاعات سرعت بیشتری نسبت به قبل خواهد داشت.
- سعی کنید نام جداول و فیلد ها رو انگلیسی و کلمات مرتبط قرار بدید و از نام های رزرو شده پایگاه داده استفاده نکنید (مثلا کلمه name در پایگاه داده Mysql یک کلمه رزرو شده است و اگه این نام رو استفاده کنید باید حتما به صورت `name` اون رو فراخوانی کنید).
- بعد از طراحی اولیه پایگاه داده نمودار ERD اون رو رسم کنید و خوب به اون نگاه کنید و چند بار دیگه اون رو نرمال سای کنید.
بحث طراحی پایگاه داده یک درس ۳ واحدی ۱۵ جلسه ای تو دانشگاه هستش و من مطمئنا نمی تونم تو چند خط همه اونها رو به خاطر بیارم و اینجا بنویسم(از حوصله شما هم خارجه  ;D  ) .
این کار ها چیزهایی بود که من خودم به شخصه برای طراحی پایگاه داده هام استفاده می کنم.(میدونم کامل نیست ولی خب از یک کارشناس نرم افزار بیشتر از این انتظار نمیره  ;D)
لینک زیر نمونه ای از نمودار ERD مربوط به همون برنامه کلینیک مشاوره است که در حال کار روی اون هستم. این نمودار با برنامه Mysql Workbench طراحی شده است.
http://ubuntuone.com/6gCcSUE304VYPDtFvvP4S1
یا حق



آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
سلام
چنتا نکته از طراحی پایگاه یادم رفته بود گفتم حداقل یک اشاره ای به این موارد هم بکنم.

اولین قضیه کلید های اصلی و کلید خارجی تو جداول است :
حتما سعی کنید جدول هاتون کلید اصلی داشته باشن. اگه فیلدی وجود داره که امکان وجود مقدار تکراری توش نیست اون رو کلید اصلی قرار بدید و یا بعضی مواقع ۲ و ۳ تا فیلد با هم کلید اصلی هستند.
اگه همچین چیزی وجود نداره و یا می خوایین دست کاربر رو تو ورود اطلاعات تکراری باز بگذارید یک فیلد عددی تعریف کنید و گزینه Auto increment رو در پایگاه برای این فیلد علامت بزنید با این کار جدول شما دارای کلید اصلی خواهد بود و مزاحمتی برای کاربر ایجاد نمیشود. شما هم فقط مقادیر دیگر جدول را هنگام درج وارد می کنید و این فیلد به صورت خودکار مقدار خواهد گرفت.
کلید خارجی هم در مواردی که بخواهید دو جدول را به هم مرتبط کنید استفاده میشه و به وسیله یک فیلد که که در هر دو جدول مقادیر یکسانی خواهند داشت ارتباط بین آنها برقرار می شود.بعضی از دوستان فقط به به تعریف کلید اصلی در جداول بسنده می کنند و کلید خارجی را برای پایگاه داده مشخص نمی کنند. یکی از مزیت های مهم پایگاه های دارای جداول با کلید خارجی هستند در این است که در هنگام حذف اطلاعات پایه ای اگه در جداول واسط این رکورد استفاده شده باشد پایگاه داده به طور خودکار امکان حذف به کاربر نمی دهد و در نتیجه اطلاعات رکورد جدول واسط ناقص نخواهد شد.

قضیه بعدی نوع فیلد ها نسبت به مقادیر داخل آنها است. مثلا وقتی درون یک فیلد باید یک عدد نهایتا ۴ رقمی ذخیره شود دلیلی وجود ندارد که نوع آن را INT یا حتی Varchar تعریف کنید.(نوع Smallint هم میتونه پاسخگو نیاز شما باشه) و یا نوع تاریخ و زمان به خاطر مشکلات ذخیره تاریخ شمسی در پایگاه داده ها عموما به صورت varchar تعریف میشه و توجیه دوستان هم اینه که جواب میده و مشکلی نداشتن ولی فکر اینو نمی کنند که یک مقدار ۱۰ کارکتری چقدر در افزایش حجم پایگاه داده نسبت به یک مقدار ۳ بایتی موثر خواهد بود.برای ذخیره سازی تاریخ شمسی توابع تبدیل تاریخ به راحتی در دسترس است. اگه پایگاه از نوعی باشه که امکان تعریف تابع و یا procedure در اون وجود داشته باشه میشه این تابع تبدیل رو روی سرور ذخیره کرد و شما مقادیر شمسی برای پایگاه اسال و دریافت می کنید ولی پایگاه قبل ذخیره و یا بازیانی اونها رو تبدیل کرده و سپس عملیات را انجام میده. اگر پایگاه از نوعی است که امکان این کار نیست میشه تو خود برنامه توابع نوشته بشه و قبل ارسال و یا بعد از دریافت اطلاعات از پایگاه این کار  تو خود برنامه اجرایی انجام بشه . با این کار هم در افزایش حجم رکورد ها صرفه جویی کرده اید و هم از توابع پایگاه (مثلا اضافه کردن یک روز به روز ذخیره شده- در حالت عادی با یک تابع خیلی راحت انجام میشه ولی در حالت غیر معمول نیازمند نوشتن برنامه ای چند خطی داره) میتوان استفاده کرد.

نکته آخر نوع پایگاه داده و تنظیمات مربوط به اون است. در گذشته نه چندان دور خودم به شخصه از سه نوع رایج پایگاه داده ها استفاده می کردم. یکی MS SQL Server و MS Access و paradox که از نوع اول برای پایگاه داده های شبکه ای و از نوع دوم وسوم برای پایگاه داده های لوکال استفاده می کردم.
چند سال پیش با تغییر سیستم عامل از ویندوز به گنو/لینوکس و دلفی به لازاروس پایگاه داده هم به MySQL و SQLite تغییر کرد. البته گوشه چشمی هم به Firebird و postgresql دارم ولی هنوز موفق به کار با اونها نشدم. مزیت های این پایگاه داده ها اینه که علاوه بر داشتن سرعت و امکانات قابل قبول امکان استفاده در اغلب سیستم عامل ها رو هم داره. البته دنیای متن باز خیلی بزرگتر از این حرفاست ولی دیگه نیازی به استفاده از محصولات مایکروسافت ندارم و خیلی وقته این برنامه ها پایگاه داده های برنامه های منو تشکیل میدن. (به شما هم توصیه می کنم از این موارد استفاده کنید  ;) )
یا حق  :)

آفلاین علی هردان

  • Full Member
  • *
  • ارسال: 243
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #138 : 03 اردیبهشت 1392، 12:21 ق‌ظ »
سلام. خیلی کار خوبی کردید که نوشتن این آموزش رو شروع کردید. سبک نوشتنتون هم واقعا عالی و خودمونی هست. \\:D/ امیدوارم مثل بقیه آموزش ها بی نتیجه نمونه و تا آخر انشالله ادامه پیدا کنه! میدونم که پریدن وسط آموزش کار درستی نیست ولی خب نمیشه  :-X
یه مشکلی هست که تقریبا تمام کاربران لازاروس باهاش مواجه هستن! این مشکل توی لینوکس بیشتر به چشم میاد! مشکل هم اینه که شما وقتی لازاروس رو باز میکنید، تمام بخش های لازاروس به صورت جدا از هم، توی چند پنجره باز میشن! من با مقداری سرچ راه حل این مشکل رو پیدا کردم! پس از انجام مطالبی که توی آموزش حل مشکل گفته شده بود، لازاروس من حالت اصطلاحا Single window (تک پنجره) در اومد. این اسکرین شات از سیستم خودم هست:
http://bayanbox.ir/user/ojzim0/images/Amoozesh/lazarus-single-window/lazarus-single-window.png?view
متأسفانه یادم نیست دقیقا این آموزش رو توی کدوم سایت خوندم، چون برای انجامش به سایت های مختلفی سر زدم!
به این منظور:
۱- لازاروس رو اجرا کنید.
۲- از منوی Package گزینه Open Package File رو انتخاب کنید.
۳- این فایل رو انتخاب کنید:
/usr/share/lazarus/1.0.8/components/anchordocking/design/anchordockingdsgn.lpk۴- داخل پنجره باز شده، روی Use کلیک کنید. از منوی باز شده گزینه Install رو بزنید.
۵- از شما میپرسه که آیا میخواید Lazarus رو دوباره Build کنم؟ بزنید Yes
۶- لازاروس دوباره کامپایل میشه، لازاروس خارج میشه و دوباره اجرا میشه.
۷- عجله نکنید! پنجره ها با هم ادغام شدن ولی ظاهرش هنوز مثل عکسی که دادم نشده. انگار Object Inspector نیستش. از منوی View گزینه Object Inspector رو بزنید تا نمایان بشه. توی پنجره ای که نمایان شده، زیر عنوان پنجره، یه خطی هست با رنگ سفید و طوسی! اون رو انتخاب کنید و بکشیدش توی پنجره اصلی لازاروس! هرجا که دوست داشتید بذاریدش. به همین ترتیب میتونید مکانشون رو مرتب کنید.
۸- وقتی مرتبشون کردید و به حالت دلخواهتون درش آوردید، از منوی Tools گزینه Save window layout as default رو بزنید تا تنظیماتتون ذخیره بشه.
میدونم که خیلی بی ربط بود ولی این مورد واقعا بعضی از دوستان رو اذیت میکرد. لازم بود که مطرح کنم  \\:D/
« آخرین ویرایش: 03 اردیبهشت 1392، 12:23 ق‌ظ توسط ojZim »

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #139 : 03 اردیبهشت 1392، 07:13 ق‌ظ »
سلام. خیلی کار خوبی کردید که نوشتن این آموزش رو شروع کردید. سبک نوشتنتون هم واقعا عالی و خودمونی هست. \\:D/ امیدوارم مثل بقیه آموزش ها بی نتیجه نمونه و تا آخر انشالله ادامه پیدا کنه! میدونم که پریدن وسط آموزش کار درستی نیست ولی خب نمیشه  :-X
یه مشکلی هست که تقریبا تمام کاربران لازاروس باهاش مواجه هستن! این مشکل توی لینوکس بیشتر به چشم میاد! مشکل هم اینه که شما وقتی لازاروس رو باز میکنید، تمام بخش های لازاروس به صورت جدا از هم، توی چند پنجره باز میشن! من با مقداری سرچ راه حل این مشکل رو پیدا کردم! پس از انجام مطالبی که توی آموزش حل مشکل گفته شده بود، لازاروس من حالت اصطلاحا Single window (تک پنجره) در اومد. این اسکرین شات از سیستم خودم هست:
http://bayanbox.ir/user/ojzim0/images/Amoozesh/lazarus-single-window/lazarus-single-window.png?view
متأسفانه یادم نیست دقیقا این آموزش رو توی کدوم سایت خوندم، چون برای انجامش به سایت های مختلفی سر زدم!
به این منظور:
۱- لازاروس رو اجرا کنید.
۲- از منوی Package گزینه Open Package File رو انتخاب کنید.
۳- این فایل رو انتخاب کنید:
/usr/share/lazarus/1.0.8/components/anchordocking/design/anchordockingdsgn.lpk۴- داخل پنجره باز شده، روی Use کلیک کنید. از منوی باز شده گزینه Install رو بزنید.
۵- از شما میپرسه که آیا میخواید Lazarus رو دوباره Build کنم؟ بزنید Yes
۶- لازاروس دوباره کامپایل میشه، لازاروس خارج میشه و دوباره اجرا میشه.
۷- عجله نکنید! پنجره ها با هم ادغام شدن ولی ظاهرش هنوز مثل عکسی که دادم نشده. انگار Object Inspector نیستش. از منوی View گزینه Object Inspector رو بزنید تا نمایان بشه. توی پنجره ای که نمایان شده، زیر عنوان پنجره، یه خطی هست با رنگ سفید و طوسی! اون رو انتخاب کنید و بکشیدش توی پنجره اصلی لازاروس! هرجا که دوست داشتید بذاریدش. به همین ترتیب میتونید مکانشون رو مرتب کنید.
۸- وقتی مرتبشون کردید و به حالت دلخواهتون درش آوردید، از منوی Tools گزینه Save window layout as default رو بزنید تا تنظیماتتون ذخیره بشه.
میدونم که خیلی بی ربط بود ولی این مورد واقعا بعضی از دوستان رو اذیت میکرد. لازم بود که مطرح کنم  \\:D/
1+ ;)
ممنون از راهنماییت. منم اذیت می شدم ولی باهاش کنار اومده بودم. حالا که درست شد خیلی بهتره شده.
فقط یک نکته میشه این بسته رو از طریق گزینه install/uninstall Packages این بسته رو پیدا کنید و به لازاروس اضافه کنید.بعد از انتخاب گزینه install selection رو انتخاب کنید و سپس گزینه save and rebuild IDE رو بزنید.

در انتها بعد از اینکه همه تغییرات تو پنجره ها و چینش اونها تو صفحه رو انجام دادید حتما از منو Tools گزینه Save window layout as defult رو کلیک کنید تا لازاروس بعد هر بار اجرا به همین صورت اجرا بشه.
منم این کار رو کردم خیلی بهتر شده دستت درد نکنه  ;D
اینم لازاروس من بعد تغییر
http://ubuntuone.com/0h9ipIu6r2qWT90EbVhs6f
راجع به آموزش هم باید بگم خیلی خوبه بعضی وقتا برای زنگ تفریح هم که شده دوستان نکات و ترفند هایی که خودشون یاد گرفتن رو بزارند. اینجوری منم میتونم یکم چیز یاد بگیرم و بین پست های آموزشی بیشتر فکر کنم و فرصت بیشتری بدست میارم.
موفق باشی  ;)
« آخرین ویرایش: 03 اردیبهشت 1392، 07:45 ق‌ظ توسط امیر شهریاری »

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #140 : 03 اردیبهشت 1392، 01:31 ب‌ظ »
سلام
می خواستم امروز یک جلسه دیگه رو شروع کنم که یک مشکل بدجور مشغولم کرد.
 ](*,) ](*,) ](*,)
هرچی زور زدم درست نشد آخرش مجبور شدم از یک راه دیگه به هدفم برسم. هرچند یکم طولانی تره ولی مطمئنا جواب میده.
امروز داشتم برا یک برنامه روی یک Query کار می کردم که اطلاعات جدولی رو به روز می کرد.
مشکل این بود که من داشتم Query رو توسط انتظارات کاربر کامل می کردم و برای همین خاصیت Sql.text اون رو تو برنامه با توجه به نیاز های کاربر مقدار می دادم و در نهایت بعد از کامل شدن متن SQL اون پرسجو رو اجرا می کردم.ولی وقتی یک مقدار تاریخ رو تو متن پرسجو قرار می دادم جای سال با روز عوض می شد. مثلا تاریخ ۱۸-۰۴-۱۳ تبدیل می شد به ۱۳-۰۴-۱۸ و این تاریخ معنی نمیداد. البته تو ویندوز همون کد درست کار میکنه و تاریخ رو به طور کامل و صحیح مقدار میداد مثلا ۱۸-۰۴-۲۰۱۳ .
هر کار کردم درست نشد آخرش مجبور شدم سال و ماه و روز رو از تاریخ جداگونه تو یک رشته قرار بدم اونجوری که خودم می خوام و بعد بزارم تو Query  و ازش نتیجه بگیرم.
DataModule1.update_service.SQL.Text:='select * from services where notify_date=';
DataModule1.update_service.SQL.Append(QuotedStr(Datetostr(s_date));
مقدار SQL تو لینوکس برای مثلا تاریخ 2013/۰۴/۱۰ برابر می شد با
select * from services where notify_date='10-04-13'
که این مقدار خروجی مورد نظر رو نداشت. فکر می کنم مربوط به تنظیمات تاریخ در اوبونتو و کوبونتو میشه چون کوبونتو من تاریخش شمسی هستش ولی وقتی اون رو میلادی کردم بازم مشکل حل نشد  ](*,)
در نهایت مشکلم رو با این خط حل کردم
  DataModule1.update_service.SQL.Append(QuotedStr(inttostr(YearOf(s_date))+'-'+inttostr(MonthOf(s_date))+'-'+inttostr(DayOf(s_date)))+';');

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #141 : 03 اردیبهشت 1392، 10:15 ب‌ظ »

بچه ها دارید شرمنده میکنید،تشکر ویژه هم از مهندس شهریاری بابت شروع عالی.

 :)
و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #142 : 03 اردیبهشت 1392، 10:27 ب‌ظ »

بچه ها دارید شرمنده میکنید،تشکر ویژه هم از مهندس شهریاری بابت شروع عالی.

 :)
ممنون علی آقا  :)
از دوست خوبمون ojZim هم تشکر می کنم که این ترفند رو گفتن خیلی محیط لازاروس بهتر میشه اینجوری.
لطفا اینقدر هم نگو مهندس شهریاری  ;D هرکی ندونه فکر می کنه من کی هستم  8)
اینجا پر از مهندس هستش. ما عددی حساب نمیشیم مقابل همه دوستان فروم.
یا حق

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #143 : 04 اردیبهشت 1392، 01:34 ق‌ظ »
و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #144 : 04 اردیبهشت 1392، 07:06 ق‌ظ »

http://forum.ubuntu.ir/index.php/topic,63187.0.html
خیلی عالیه  \\:D/
لازاروس جا برای پیشرفت خیلی زیاد داره و کم کم جای خودشو بین همه باز می کنه  ;)

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
انجام پروژه - جلسه سوم ( ایجاد و تنظیمات اولیه پروژه)
« پاسخ #145 : 04 اردیبهشت 1392، 08:22 ق‌ظ »
سلام
خب بعد از طراحی و ساخت پایگاه داده نصف کار انجام شده و فقط میمونه رابط کاربری که باید تو لازاروس طراحی و توسعه داده بشه.
اول قبل اینکه پروژه رو تو لازاروس شروع کنیم باید محیط رو اماده کنیم. به این معنی که کامپوننت ها و ابزارهایی که لازم داریم رو وارد لازاروس بکنیم. البته میشه اونها رو بعدا وقتی نیاز پیدا کردید به لازاروس اضافه کنید ولی کامپوننت ZEOS که برای ارتباط با پایگاه داده استفاده میشه بهتره از ابتدا تو لازاروس وجود داشته باشه. قبلا نحوه دانلود و نصب اونو تو پست های گذشته گفتم پس ازش می گذریم.
البته باید بگم که بهتره تا حد امکان سعی کنید از ابزارهای استاندارد و معمول تو برنامه هاتون استفاده کنید. مگر اینکه امکانات لازم رو برای شما فراهم نکنند و یا کامپوننت جدیدی به دستتون رسیده که از کارایی و پشتیبانی اون اطمینان پیدا کردید.
///////////////////////////////////////////////////////
در ابتدا بعد از باز کردن لازاروس اگر قبلا روی پروژه دیگه ای کار می کردید باید از منو File گزینه New... رو کلیک کنید تا پنجره زیر باز بشه.



بعد از این کار محیط کار شما چیزی شبیه به فرم زیر خواهد شد.



نکات اولیه هنگام ایجاد پروژه جدید:
- اول اینکه فرم ابتدایی که لازاروس برای شما باز میکنه Main form شما در نظر گرفته میشه و خیلی مهمه.

- دوم سعی کنید نام هایی که روی فرم ها و یونیت هاتون می گذارید مرتبط و هماهنگ باشن تا به راحتی بتونید اونها رو پیدا کنید و از هم تشخیص بدید. من خودم اون اوایل برنامه نویسیم با دلفی فرم ها رو Form1 - Form2 - Form3 و... و یونیت ها رو Unit1-Unit2-Unit3 و ... نامگذاری می کردم یعنی همون چیزی که خود دلفی می گفت. بعد وقتی می خواستم یک فرم رو باز کنم باید یادم میومد شمارش چند بود. این کار تو پروژه های کوچیک شاید ممکن باشه ولی تو یک پروژه بزرگتر خیلی مشکله و اصولا کار حرفه ای نیست که نام ها رو مرتبط قرار ندیم.
مثلا من نام یونیت اصلی برنامه رو Main و نام فرم اون رو main_form قرار میدم.

- سوم اینکه بعضی از تنظیمات برنامه خودتون رو روی فرم اصلی انجام بدید تا فرم های بعدی به طور پیشفرض از اون ارث ببرن و اگه نخواستین بعدا اونها رو عوض کنید. نمونه بارزش فونت استفاده شده تو برنامه است. هر فونتی رو که برای فرم اصلی در نظر بگیرید تو فرم های دیگه هنگام ایجاد به طور پیشفرض در نظر گرفته میشه.

- موقعیت فرم و نوع اون رو حتما بعد از ایجاد مشخص کنید. مثلا Position رو روی حالت poDesktopCenter و یا poScreenCenter قرار بدید تا فرم در مرکز نمایشگر مشاهده بشه و یا اینکه تنظیمات مربوط به تغییر اندازه فرم رو در قسمت border style و border icons مشخص کنید تا برنامه توسط کاربر قابل تغییر سایز باشد یا نه.
همچنین برای حالت فارسی خاصیت BiDiMode را در حالت bdRightToLeft قرار بدهید. هرچند این خاصیت بعضی مواقع روی برخی اشیا به خوبی کار نمی کند و هنوز به خوبی عمل نمی کند(البته برای نسخه ویندوزی  ;D ).

- از اونجایی که اغلب برنامه های کار با پایگاه داده نیاز دارند که فرمی جهت گرفتن نام کاربری و کلمه عبور در ابتدای برنامه ظاهر گردد و در صورت داشتن مجوز به کاربر اجازه ورود به برنامه رو بدهند برای ساخت فرم ورود به برنامه و همچنین Splash screen که هنگام اجرای برنامه نمایش داده می شود عجله نکنید. این موارد بعدا باید ساخت و طراحی شوند و فعلا فرم اصلی برنامه را طراحی کنید.

-برای دسترسی به امکانات برنامه می توانید از اشیای گوناگون استفاده کنید که اولین و پر استفاده ترین آنها MainMenu هستش.کار با اون خیلی راحته و طراحی منو سریع انجام میشه و امکانات خوبی هم به برنامه نویس میده.



نمونه کار شده :



میشه از ابزارهای دیگه هم استفاده کرد که من جدیدا از Pagecontrol برای ساخت منو برای برنامه هام استفاده می کنم. فرقش در اینه که شما برای ساخت منوی اصلی برنامه هاتون میتونید به غیر از کلید ها و چک باکس ها از همه اشیای دیگه هم استقاده بکنید. مثلا کمبوباکس و یا Edit روی منو قرار بدید و .....



دوتا نمونه منوهایی که من با این ابزار برای برنامه هام ساختم در زیر هستند. البته من فقط از دکمه روی اون استفاده کردم ولی میشه اشیای دیگه هم روش گذاشت.نکته دیگه اینکه اون قضیه BiDiMode که گفتم برای فارسی است تو این شی در ویندوز کار نمیکنه ولی تو گنو/لینوکس مشکلی نداره و راست به چپ یا چپ به راست خیلی خوب عمل میکنه. البته تو ویندوز هم با یک روشهایی میشه درستش کرد ولی ظاهر جالبی در نمیاد برا همین فعلا از حالت راست به چپ استفاده نمی کنم.





خب بقیش باشه برای بعد. موفق باشید  ;)
یا حق
« آخرین ویرایش: 05 اردیبهشت 1392، 07:01 ق‌ظ توسط امیر شهریاری »

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
انجام پروژه - جلسه سوم
« پاسخ #146 : 08 اردیبهشت 1392، 09:26 ق‌ظ »
سلام  :)
خب بعد از طراحی فرم اصلی و قرار دادن منو و ابزارهایی که در اون مورد نیاز است باید بریم سراغ مابقی پنجره ها.
امروز می خوام در مورد فرم های splash صحبت کنم. splash فرمی است که در زمان اجرا برنامه تا لود کامل و ظاهر شدن فرم اصلی نمایش داده می شود و معمولا اطلاعاتی در مورد برنامه و نسخه آن و برخی اطلاعات جانبی مثل شرکت سازنده و .... روی آن دیده می شود.
وجود این گونه فرم ها برای برنامه هایی که هنگام اجرا زمان بیشتری برای ظاهر شدن نیاز دارند بسیار مفید است و کاربر متوجه اجرا شدن برنامه می شود و مجددا برنامه رو اجرا نمی کنه.
برای ایجاد فرم splash به برنامه خودتون باید یک فرم جدید ایجاد بکنید و اون رو ذخیره کنید. بعد تصویر و متن و .... که می خواهید در زمان اجرا نمایش داده بشه رو تو اون قرار بدید و سپس از قسمت مشخصه های فرم گزینه FormStyle رو پیدا کنید و اون رو در حالت fsSplash قرار بدید همونطور که در تصویر زیر می بینید.



خب اگه حالا برنامه رو کامپایل و سپس اجرا کنید خواهید دید که ابتدا فرم splash ظاهر میشه و بعد فرم اصلی برنامه نمایش داده میشه. البته تو برنامه های کوچیک و کم حجم این کار خیلی سریع اتفاق میوفته و شاید فقط کسری از ثانیه طول بکشه و زود پنجره رد بشه. نگران این موضوع نباشید چون بعد از اتمام کل برنامه این فرم بهتر دیده خواهد شد. همچنین نوع سیستمی که برنامه رو اجرا میکنه تو نمایش سریع یا کند این فرم موثر هست.
در کل اینجور بگم که هرچی اجرای برنامه شما در فاصله بین کلیک کاربر و نمایش فرم اصلی زمان بیشتری طول بکشه این فرم هم بیشتر دیده میشه و هرچی برنامه سریع تر اجرا بشه این فرم هم زود رد میشه.
سعی نکنید که با کارهای غیر اصولی نمایش این فرم رو طولانی کنید چون شاید در یک یا دوبار اجرا چیز زیادی به چشم شما نیاد ولی برای یک کاربر که برنامه رو هر روز باید چند بار اجرا کنه بعد از مدتی کلافه کننده میشه. پس بگذارید همه چی به روال خودش طی بشه و این فرم کار اصلی خودش رو اگه لازم بود انجام بده.
در بعضی برنامه ها بر روی این فرم شئ ProgressBar استفاده می شود که سرعت روند اجرای برنامه رو نمایش میده و پس از پر شدن اون برنامه اصلی ظاهر میشه. انجام این کار به نوعی بستگی به سلیقه برنامه نویس داره که بخواد همچین عملی تو برنامه اش باشه یا نه. من به شخصه از این تکنیک همیشه استفاده نمی کنم و همون Splash ساده با یک تصویر و متن رو ترجیح میدم.
با این حال برای انجام این کار باید تو یونیت پروژه تغییراتی انجام بدید. در حالت نرمال در این یونیت مشاهده می کنید که تمام فرم ها توسط برنامه ساخته می شوند. در ابتدا فرم اصلی برنامه باید ساخته شود و سپس فرم splash ساخته می شود و بقیه فرم ها به ترتیب پش سر هم ایجاد می شوند. تصویر زیر حالت نرمال پروژه و استفاده از splash را نشان می دهد.



در حالتی که می خواهید بر روی فرم progressbar قرار دهید و پیشرفت اجرای برنامه را نشان دهید باید بعد از ساختن فرم اصلی سپس فرم splash به مقدار progressbar مقادیر مورد نظر را اضافه کنید این مقدار باید به نسبت تعداد فرم ها و مقدار زمان انجام پردازش باید تعیین گردد تا در انتها بعد از تمام فرم ها مقدار Progressbar هم به ۱۰۰ برسد. تصویر زیر کد های نمونه این کار را نشان می دهد.( البته مقادیر نسبت داده شده به progressbar درست نیستند چون در هنگام ایجاد فرم های انتهایی  پیشرفتی در progressbar ایجاد نخواهند کرد چون مقدار آن از ۱۰۰ بیشتر میشه.)



با این کار بعد از اجرای برنامه توسط کاربر فرم splash نشان داده خواهد شد و پیشرفت اجرا نیز در آن مشاهده خواهد شد و بعد از اتمام فرم اصلی ظاهر خواهد شد.
یا حق  ;)
« آخرین ویرایش: 08 اردیبهشت 1392، 09:30 ق‌ظ توسط امیر شهریاری »

آفلاین علی هردان

  • Full Member
  • *
  • ارسال: 243
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #147 : 12 اردیبهشت 1392، 11:58 ب‌ظ »
خیلی خوب میخوام بصورت جدی برم توی کار اتصال برنامه به دیتابیس  \\:D/ تا حالا این کار رو با لازاروس انجام نداده بودم، همیشه اطلاعات رو داخل فایل ذخیره میکردم. ولی دوتا سوال برام پیش اومده:

۱- شما چرا برای اتصال به دیتابیس از کامپونت ZEOS استفاده کردید؟ مگه لازاروس ابزاری برای اتصال به دیتابیس نداره؟ فکر نمیکنید ابزار پیشفرض لازاروس بهتر کار رو انجام بدن؟

۲- مطمئنید که برای اینجور پروژه ها، mysql بهترین گزینست؟ توی لینوکس چیزای بهتری هم پیدا میشه؟ من از mysql زیاد خوشم نمیاد. بنظرم بیشتر برای وب به درد میخوره تا اپلیکیشن های دسکتاپ!

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #148 : 13 اردیبهشت 1392، 09:53 ب‌ظ »
۱- شما چرا برای اتصال به دیتابیس از کامپونت ZEOS استفاده کردید؟ مگه لازاروس ابزاری برای اتصال به دیتابیس نداره؟ فکر نمیکنید ابزار پیشفرض لازاروس بهتر کار رو انجام بدن؟

۲- مطمئنید که برای اینجور پروژه ها، mysql بهترین گزینست؟ توی لینوکس چیزای بهتری هم پیدا میشه؟ من از mysql زیاد خوشم نمیاد. بنظرم بیشتر برای وب به درد میخوره تا اپلیکیشن های دسکتاپ!
سلام
1- چرا لازاروس ابزار های پیشفرضی برای اتصال به چنتا پایگاه ها مختلف داره ولی کار کردن با اونها یکم مشکل تره. امکانات و پایگاه هایی که ZEOS پشتیبانی می کنند و تنوع ابزارهای که در اختیار برنامه نویس قرار میدهد خیلی بیشتر از ابزارهای پیشفرض خود لازاروس هست. ضمنا این کامپوننت متن باز است و قابل اعتماد  ;) .

2- اطمینان در دنیای نرم افزار چیزی نسبی هستش. من توصیه می کنم ولی نمیگم بهترین گزینه است. شاید پایگاه داده ای باشه که تو این حالت بهتر جوابگو باشه.
تو گنو/لینوکس پایگاه های خوب زیاد پیدا میشه ولی چون Mysql جواب خودشو تو وب پس داده و تو زمینه فارسی هم مشکل خاصی نداره و همچنین میشه تواما از از یک پایگاه به صورت وب و دسکتاپ استفاده کرد من بیشتر سراغش میرم. درسته که Mysql تو وب زیاد استفاده میشه ولی این دلیلی برای کارآمد نبودن اون تو برنامه های دسکتاپ نیست.( فراموش نکنید که تو برنامه های وب aspx و مبتنی بر NET . از SQL Server استفاده میشه در حالی که همین پایگاه داده در برنامه های دسکتاپ هم استفاده میشه.)
با این حال جدیدا دارم سعی می کنم با Postgrysql هم کمی جلو برم ولی فعلا Mysql برای من به شخصه گزینه اول هستش.

در ضمن شما میتونید هر پایگاه داده ای خواستید استفاده کنید و فقط در زمان تنظیم شئ Connection باید نوع پایگاه داده رو مشخص کنید و بقیه مسائل تو اغلب پایگاه داده ها مشترک هستن و دستورات SQL در بیشتر اونها یکسان هستند.

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
انجام پروژه - جلسه چهارم
« پاسخ #149 : 16 اردیبهشت 1392، 10:16 ق‌ظ »
سلام
خب تا اینجا پروژه جدیدمون ایجاد شده و دارای یک فرم اصلی و یک فرم Splash هستش.
نکته ای که در قسمت قبل گفته نشد این بود که فرم ها به صورت Auto Create هستند. یعنی ما فرم را طراحی می کنید و همه تنظیمات مربوط به آن را انجام می دهید و در زمان اجرا یکی یکی ساخته می شوند و در حین ایجاد آنها فرم Splash نمایش داده می شود. بعد از این کار در صورتی که فرم را Free نکنید به راحتی قابل نمایش و بسته شدن هستند.
مزیت اصلی این کار راحتی استفاده در اون است ولی اگه فرم هاتون خیلی زیاد باشن حافظه زیادی اشغال می کنند و اگه سیستم از Ram کافی برخوردار نباشه کمی کند خواهد شد.
در این حالت بهتره فرم های ضروری را در حالت Auto Create قرار دهید و بقیه فرم ها را فقط در زمان نیاز ایجاد کنید و بعد از استفاده و بسته شدن آنها را Free کنید. با این روش برنامه شما حافظه کمتری اشغال خواهد کرد.
( هرچند در این زمونه حافظه Ram چندان کم نمیاد و فضای اون اونقدر هست که نیازی به این کارها نباشه.  :) )
برای ساختن و نمایش فرم کافیه همون خطی که فرم در یونیت اصلی پروژه برای ساختن فرم ایجاد میکنه رو قبل از دستور نمایش قرار بدید و بعد از استفاده در رخداد Onclose فرم را Free کنید.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
در فرم اصلی کدنویسی زیادی نداریم چون این فرم بیشتر نقش رابطی برای کاربر و قسمت های مختلف برنامه رو بازی میکنه و خودش کار زیادی انجام نمیده. البته میشه طوری طراحی بشه که همه کارها داخل همین فرم انجام بشه. ولی برای راحت تر شدن برنامه نویسی و همچنین تفکیک عملیات های مختلف بهتره فرم های دیگه ای هم طراحی کنید و از طریق فرم اصلی به اونها دسترسی داشته باشید.
برای استفاده از فرمی در فرم دیگه باید اسم یونیت اون فرم را در قسمت Uses فرم خودتون اضافه کنید. فقط به این نکته توجه داشته باشید که نباید چرخه ( یعنی یک فرم از فرم دیگه استفاده کنه و اون هم از همین فرم بخواد استفاده کنه ) ایجاد بشه چون کامپایلر خطا میگیره و برنامه اجرا نمیشه.
بعد از این کار باید روال Show و یا Showmodal را مثلا در رویداد OnClick دکمه ای فراخوانی کنید.

about_form.ShowModal;

///////////////////////////////////////////////////////////////////////////////////////////
تفاوت Show و Showmodal در اینه که در حالت اول فرم دوم نمایش داده میشه و کاربر به هر دو فرم دسترسی داره و میتونه هر کدام رو فعال (Active) کنه بدون اینکه لازم باشه فرم قبلی رو ببنده.
در حالت Showmodal کاربر فرم نمایش داده شده رو میبینه ولی نمیتونه به فرم قبلی برگرده بدون اینکه فرم جدید رو ببنده. این کار برای این صورت میگیره که شما قصد دارید صفحه شلوغ و پر فرم های مختلف نشه و هر فرمی که کار خودش رو انجام داد بسته بشه و بعد کاربر پنجره جدیدی رو باز کنه.
همچنین استفاده از روال Shownodal این امکان رو میده که بعد از بسته شدن فرم مقداری برای فرم فراخوانی کننده برگردانده بشه تا معلوم کنه چه وضعتی داشته.این کار با متغیر ModalResult انجام میشه و مقدار درون آن می تواند از حالت های mrok یا mrcancel یا ... باشد .
مثلا فکر کنید در فرم اصلی قصد دارید فرمی برای دریافت نام و نام خانوگی کاربر طراحی کنید. بعد از طراحی در فرم اصلی برای اینکه بفهمید کاربر ورود نام و نام خانوادگی را انجام داده است به این صورت باید عمل کنید :
if input_name_form.ShowModal=mrOK then
 begin
 {type your code}
 end;
با این کار وقتی کاربر فرم ورود نام و نام خانودگی را ببیند و کلید تایید را بزند کد های قسمت شرط اجرا خواهند شد و در صورتی که به هر علت در فرم ورود نام و نام خانوداگی مقدار Mrok برگردانده نشود این دستورات اجرا نخواهند شد.
در روال Onclick کلید تایید در فرم ورود نام و نام خانوادگی در انتهای کد ها این دستور باید وجود داشته باشد
ModalResult:=mrOK;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

یا حق :D