ورود

View Full Version : سوال: صفحه سازی در دلفی



lebrahimi
سه شنبه 02 مهر 1387, 14:59 عصر
سلام دوستان
کسی می تونه راهنمایی کنه که چطور می شه کاربر برنامه ای که ما نوشتیم بتونه به برنامه صفحه اضافه کنه در حقیقت بتونه فرم طراحی کنه که مثلا شامل متن تصویر و همه چیزایی که ما موقع برنامه نویسی می تونیم بذاریم روی نوشته ها لینک بذاره و خیلی کارهای دیگه و صفحه ها ذخیره بشن.

چیزی که به نظرم می رسه چیزایی که کاربر اضافه می کنه باید تو دیتا بیس ذخیره بشه ولی اصل اینکه چطوری بهش امکان بدیم که اضافه کنه برام سواله.

ghabil
سه شنبه 02 مهر 1387, 15:29 عصر
یک راه راحتت اینه که یک Toolbar درست کنی که مثلا کامپونتهایی که میخوای مثل لیبل و باتن و این حرفا روش باشند بعد کاربر هرکدوم رو که انتخاب کرد یک فرم بیاری که پراپرتیهایی که میخوای بتونه عوض کنه رو بتونه از روش ادیت بکنه ، بعد هم کاربر جاش رو روی فرم تعیین کنه.
نهایتا هم برای دخیره کردن اطلاعات DFM کامپونتها رو ذخیره کنی و در زمان نمایش فرم هم با همین اطلاعات فرم رو دوباره بسازی.
البته دلفی خودش در زمان Runtime هم این امکان رو داره که فرمها در حالت Design Mode بالا بیان، ولی استفاده از این امکان داستان داره...

lebrahimi
چهارشنبه 03 مهر 1387, 11:14 صبح
ممنون.
همینو روش رو کار می کنم.

اون داستان رو هم اگه بگید بد نیست که بهترین راه رو انتخاب کنم.

دوستان اگه نظر دیگه ای دارن مطرح کنن ... ممنون می شم.

اصغر (پآچ)
چهارشنبه 03 مهر 1387, 17:22 عصر
سلام دوست من

شما می تونی به نظر من بیای فرم هایی از پیش ساخته رو آماده داشته باشی و به کاربرت اجازه بدی خودش از میون مثلا 5 فرم فرم دلخواهش رو برای کار انتخاب کنه این روش خیلی ساده تر و با اطمینان بیشتر همراهه البته این نظر شخصیه منه

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

lebrahimi
شنبه 06 مهر 1387, 08:51 صبح
ممنون
ولی این خوب نیست چون می خوام کاربر به صورت نامحدود بتونه صفحه درست کنه و به هم لینک کنه.

absent
شنبه 06 مهر 1387, 10:06 صبح
یک گزینه این هستش که فرم هایی رو که احتیاج داری به صورت دینامیک ایجاد کنی و بعد به ایجاد کامپپوننت های مورد نیاز روش بپردازی. البته برای این کار به دقت زیادی نیاز داری

lebrahimi
دوشنبه 22 مهر 1387, 08:53 صبح
دوستان کمک کنید
یه نوار ابزار گذاشتم فرض کنید فقط label داره حالا می خوام کاربر بتونه label رو روی فرم حرکت بده. اگه از خاصیت های Dragkind و DragMode استفاده کنم دیگه onclick اون کار نمی کنه و در ضمن از فرم جدا می شه.
ممنون.

vcldeveloper
دوشنبه 22 مهر 1387, 10:29 صبح
نرم افزاری مثل IDE دلفی از RTTI برای بدست آوردن خصوصیات و رویدادهای هر کامپوننت استفاده میکنه. در این نرم افزار هر کامپوننت خودش را در IDE ثبت میکنه، و IDE کامپوننت های ثبت شده را در Components Pallete نمایش میده. هر کامپوننتی که از پلت مربوطه انتخاب بشه و روی فرم انداخته بشه، اطلاعات مربوط به خصوصیات، متدها، و رویدادهایش با استفاده از RTTI بدست میاد، و در داخل Properties Inspector نمایش داده میشه. RTTI نوعی اطلاعات هست که دلفی برای هر کلاس که از TPersistent مشتق شده باشه، یا به هر نحوی RTTI برای آن فعال شده باشه، تولید میکنه. این اطلاعات شامل جزئیات کلاس مربوطه و خصوصیات و رویدادهای آن میشه. البته RTTI فقط برای اطلاعات بخش Published کلاس که مورد استفاده IDE قرار میگیره، تولید میشه. برای استفاده از این داده ها هم یک سری توابع وجود داره، اما ساختار داده های RTTI و توابع مربوط به آنها در دلفی مستند شده نیست، چون ممکن هست این داده ها و توابعشان از یک نسخه به نسخه دیگه تغییر کنند، از طرفی این توابع فقط برای استفاده IDE دلفی طراحی شدند، اما برنامه نویسان زیادی هستند که با سعی و خطا، و بررسی سورس کدهای مربوط به Runtime دلفی مقالات مختلفی درباره RTTI نوشتند و ازش برای کارهای مختلفی استفاده کردند.
شما هم برای برنامه تون نیاز دارید که به نحوی لیست خصوصیات و رویدادهای هر شی ایی که روی فرم میزارید را بدست بیارید. حالا چطور این کار را می کنید، بستگی به خود شما داره، اگر از همین اشیاء دلفی استفاده می کنید، می تونید با مطالعه درباره RTTI خودتون کاری شبیه به IDE دلفی انجام بدید.

مسئله بعدی انجام یکسری کارهای بصوری مثل درگ یا کلیک و غیره هست که خب طبیعی هست برای هر کدوم از این کارها بطور مستقل تحقیق کنید و کد بنویسید، مثلا تنها راه Drag&Drop در دلفی استفاده از DragMode نیست، این راه راحتترین هست، ولی محدودیت های خودش را داره.

بعد از این میرسید به اینکه فرم ساخته شده را چطور ذخیره کنید. اینجا باز هم مسئله بدست آوردن خصوصیات و رویدادهای اشیاء مطرح میشه. می تونید باز از همون RTTI برای بدست آوردن مشخصات اشیاء استفاده کنید، ولی باید یک فکری هم برای ذخیره این مشخصات در یک فایل، و بازیابی این فایل در داخل برنامه بکنید. دلفی برای این کار مکانیزمی را در کلاس TPersistent ایجاد کرده که با استفاده از RTTI اطلاعات فرم و کامپوننت های موجود در آن در یک stream خوانده میشه، و در یک فایل ذخیره میشه. فایل های DFM در دلفی به این شکل ساخته میشند. اگر شما هم از RTTI دلفی استفاده کنید، می تونید از همین مکانیزمی که دلفی آماده کرده، استفاده کنید، وگرنه باید خودتون یک مکانیزمی برای این کار طراحی کنید.

مسئله بعدی کدها هستند؛ یعنی کدهایی که کاربر برای رویدادهای مربوط به هر کامپوننت مینویسه. دلفی کدها را در فایل جداگانه ایی با پسوند Pas ذخیره میکنه، شما هم باید مشخص کنید که میخواید کدهای مربوط به هر فرم به چه شکلی ذخیره بشند. از طرفی باید مشخص کنید که چه بخش هایی از کد باید بطور خودکار توسط شما تولید بشه، چه بخش هایی توسط کاربر. در هر حال باید برای خودتون یک مکانیزمی طراحی کنید که مثلا اگر کاربری کدی برای OnClick یک دکمه نوشت، و شما آن را ذخیره کردید، بتونید دوباره در هنگام لود فرم به برنامه بفهمونید که این کد مربوط به OnClick فلاد دکمه هست، نه فلان Label.
بعد از این میرسیم به پردازش کدها؛ دلفی با خودش یک کامپایلر داره که کدهای نوشته شده را با آن کامپایل میکنه. شما یا باید با برنامه تون کامپایلر دلفی داشته باشید، و کدها را با آن تبدیل به کد اجرایی کنید، یا از یک مکانیزم Scripting بهره ببرید، مثلا الان پیاده سازی های مختلفی از PascalScript وجود داره که به شما امکان این رو میدن که بدون نیاز به کامپایلر، کدهایی را در برنامه خودتون (مثلا در یک Memo) بنویسید، و برنامه شما آن کدها را اجرا کند. نمونه ایی از اینها را می تونید اینجا ببینید:
http://www.tmssoftware.com/site/scriptstudio.asp

مسئله آخر هم خود Editor مربوط به کد هست، یعنی باید یک Editorایی داشته باشید که مناسب کدنویسی باشه و بشه روش قابلیت هایی مثل Syntax Highlighting یا Breakpoint را نمایش داد. برای این کار هم انواع و اقسام کامپوننت ها هست.

vcldeveloper
دوشنبه 22 مهر 1387, 10:33 صبح
الان که پست بالا را فرستادم، دیدم یکی از کاربران تاپیک زیر، کامپوننتی هم برای انجام کارهایی که توضیح دادم، معرفی کرده:
http://www.barnamenevis.org/forum/showthread.php?t=126611

من ازش استفاده نکردم، ولی اگر نمیخواید خودتون هیچکدوم از اون کارهایی که گفتم را انجام بدید، باید بتونه کارتون رو راحت راه بیاندازه. البته فقط Form Designer هست.