PDA

View Full Version : سوال: استفاده از Vcl.Consts دستکاری شده در runtime package



rahro
دوشنبه 27 آبان 1392, 06:27 صبح
با سلام به دوستان و اساتید بزرگوار
بنده پروژه ای را آماده کرده ام که بنا به نیاز آپدیت این پروژه و توصیه های جناب کشاورز از روش runtime package ایجاد داینامیکی فرمها در پروژه ام استفاده کرده ام حال به مشکل ذیل برخورده ام که از دوستان محترم خواهشمنداست راهنمایی نمایند.
در حالت عادی بنده پروژه ای ایجاد می کردم و Vcl.Consts دستکاری شده را در مسیر پروژه اد می کردم و از اون جهت فارسی شدن پیغام ها استفاده می کردم اما در روش دینامیکی بعد از اینکه پکیج مورد نظر را کامپایل می کنم این امکان در دسترس نیست و دلفی مستقیما از کتابخانه خودش استفاده میکنه
با توجه به اینکه این پروژه باید تحویل کارفرما شود خواهشمنداست در پاسخگویی تعجیل نمایید..!
اگر هم تاپیک بنده در محل خود درج نشده عفو نموده و پاسخ دهید.

یوسف زالی
دوشنبه 27 آبان 1392, 09:28 صبح
سلام.
دستکاری یونیت های پیش فرض کار خوبی نیست.
ولی اگر این کار رو کردید، باید تمام یونیت هایی رو که ازش استفاده می کنند رو هم کامپایل کنید. ممکنه بعضی از این یونیت ها بدون سورس باشند که در این صورت راهی به نظرم نمی رسه جز کرک. اما اگر سورس داشتند باید dcu اونها رو پاک کنید.
راههای بهتری هم برای فارسی کردن پیام ها هست، نیست؟
از اونجا که معمولا این پیام ها در حالت ارور نمایش داده می شوند، پس می شه با try اونها رو catch کرد و پیام مورد نظر خودمون رو نمایش داد.
این طوری فکر می کنم اصولی تر باشه.
نکته اینه که شما باید ارور های تمام پروژه رو به یک متد هدایت کنید. می تونید برای این کار از ApplicationEvents استفاده کنید و در رویداد OnException کدهاتون رو بنویسید.

rahro
دوشنبه 27 آبان 1392, 09:44 صبح
با تشکر از You-See عزیز بابت پاسخ
بنده منظورم ارورها نبودند بلکه مسیج باگسی است که جهت انجام عملیات برای کاربر به نمایش گذاشته می شود.
شما گفتید که دستکاری یونیت vcl.consts کاری اصولی نیست علت چیست؟
دوست عزیز و بزرگوار بنده چطور میتوانم vcl.consts دستکاری شده را طوری کنار پکیج یا با ان قرار دهم که به یونیت دستکاری شده خودم دسترسی داشته باشم یعنی برای چنین عملی راه و حلی وجود ندارد.

یوسف زالی
دوشنبه 27 آبان 1392, 11:43 صبح
با تشکر

اگر دوست داشتید از کسی تشکر کنید از دکمه استفاده کنید.


بنده منظورم ارورها نبودند بلکه مسیج باگسی است که جهت انجام عملیات برای کاربر به نمایش گذاشته می شود.

فکر می کنم منظورتون ShowMessage فارسیه. در این صورت هم یونیت Dialogs باید بازنویسی بشه نه Consts. شاید هم من نگرفتم.
اگر این طوره مثالی بزنید.

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

اگر پکیج شما در همون سیستمی کامپایل شده که یونیت دستکاری شده در اونه، نباید مشکلی پیش بیاد.
همون طور که گفتم، باید "تمام" یونیت هایی رو که دارید استفاده می کنید و در اونها Consts در Use هست مجدد کامپایل بشه. اگر از کامپوننت های Third Party استفاده می کنید و سورسش رو ندارید و در اونها هم از Consts استفاده شده، دیگه بدتر.

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

rahro
دوشنبه 27 آبان 1392, 12:51 عصر
فکر می کنم منظورتون ShowMessage فارسیه. در این صورت هم یونیت Dialogs باید بازنویسی بشه نه Consts. شاید هم من نگرفتم.
اگر این طوره مثالی بزنید.
ظاهرا زیاد در رساندن منظور بدلیل وجود حاشیه ها موفق نبوده ام
دوست عزیز بنده ثابت های مربوط به کلید های constes را دستکاری کرده ام لذا کاری با یونیت dialogs آن نداشتم در ضمن جهت نمایش messageDlg

اگر همچنان حرف هم دیگه رو متوجه نمی شیم، مثالی بزنید تا بررسی کنیم.
بنده سوالم را واضح تر مطرح می کنم امید است مورد توجه شما قرار گیرد
بطور مثال :من پروژه جدیدی از نوع package در دلفی xe2 ایجاد کردم و آن را در پوشه x ذخیره کرده ام یونیت دستکاری شده tms.advedit را که پروپرتی و فانکشن های جدید را به آن اظافه کرده ام نیز به پوشه x انتقال دادم
تا قبل از کامپیل کردن package مشکلی موجود نیست و فهرست پروپرتی ایجاد شده بنده قابل نمایش است اما به محض کامپایل و ایجاد tmsdxe2.dcp از سمت دلفی دیگر پروپرتی های بنده قابل رویت نیست یعنی وقتی که تایپ میکنم advedit1.myfunction فانکشن بنده در فهرست یونیت advedit موجود نیست
لذا جهت کامپایل package چنانکه یونیتی دستکاری شده در پوشه x داشته باشیم چه تنظیماتی باید اعمال شود چنانچه هنوز مورد بواضح بیان نشده بفرمائید تا نمونه ای را برای شما ارسال نمایم .

یوسف زالی
دوشنبه 27 آبان 1392, 13:35 عصر
آهان! شما در حقیقت دارید یک کامپوننت درست می کنید؟
پراپرتی هاتون Public هستند یا Published ؟
نمونه تون رو هم بگذارید اگر وقت کنم حتما می بینم.

rahro
دوشنبه 27 آبان 1392, 15:53 عصر
بنده پروژه ای را آماده کرده ام که بنا به نیاز آپدیت این پروژه و توصیه های جناب کشاورز از روش runtime package ایجاد داینامیکی فرمها در پروژه ام استفاده کرده ام
من اول تاپیک موارد را به عرض رساندم مجددا واضح تر عنوان می کنم امید است پاسخی کارگشا شامل حال بنده شود
بنده روی پروژه ای فروشگاهی کار میکنم ، فرم های پروژه را به جای اینکه در فایل exe جمع کنم هر چنداتا از آنها را در pbl=package های جداگانه گذاشته ام یعنی از روش dynamic load form استفاده کرد نه اینکه normal load form . حال مشکل بنده اینجاست که بنده در یونیت advedit مربوط به کامپوننت tms پروپرتی و یا فانکشن های اضافه کرده ام و در کنار package ی که با فایل exe کامپایل باید بشه قرار دادم اما متاسفانه بعد از اینکه package کامپایل میشه تعاریف بنده که در یونیت advedit صورت گرفته بود موجود نیست چیزی که خودم فهمیدم علت ایم است که چون فرم بنده در package قرار داره requires مربوط به پکیج tmsdxe2.dcp مربوطه را از کتابخانه اصلی خود فرا فوانی می کند حال بنده نمی دانم چرا به مانند حالت معمولی که من advedit.pas را در کنار فایل exe قرار میدادم بدون مشکل کار میکرد اما توی روش runtime package روش چگونه است و به چه شکل باید کامپایل را به مسیر advedit.pas که ادیت شده هدایت کرد

meysam_212
سه شنبه 12 خرداد 1394, 17:29 عصر
سلام
تونستی مشکل رانتایم vcl رووقتی consts رو دستکاری کردیبرطرف کنی؟ منم به همین مشکل برخوردم