PDA

View Full Version : سوال: انجام محاسبات در نمايش كليه فرمهاي برنامه



danesh1351
چهارشنبه 18 دی 1392, 08:51 صبح
ميخوام در زمان نمايش تمامي فرمهاي برنامه يك كار خاصي انجام بشه .
تقريبا 200 فرم در برنامه دارم .
ميخوام در فرم اصلي با نوشتن سورس اين كار براي همه فرمها انجام بشه .
اگه كسي رو اين قضيه كار كرده . ممنون ميشم ...

Mask
چهارشنبه 18 دی 1392, 09:09 صبح
اگه این سوال رو قبل از ساخت فرمها کرده بودید، خیلی بهتر بود و راحتتر میشد روش کار کرد:
مثلا در فرم اصلی کدهایی که میخواستید رو مینوشتید و بقیه فرمها رو ازش Template میگرفتید
یا
فرم مادری میساختید و بقیه فرمها از اون مشتق میشدند .
اما حالا که ساختید : پیشنهاد میکنم ، کدهاتون رو در یه Unit نوشته و در فرمها USES کنید.
البته شاید دوستان راههای بهتری هم سراغ داشته باشند.

hadisalahi2
چهارشنبه 18 دی 1392, 09:49 صبح
میشه بگی مثلا چه کاری؟

یوسف زالی
چهارشنبه 18 دی 1392, 09:50 صبح
سلام.
در حال حاضر روشهای زیر به دردتون می خوره:
- هک کردن کامپوننت TForm و تغییر متد Show یا ShowModal اون
- استفاده از روش MasterForm

همین حالا هم که 200 تا فرم دارید می تونید در عرض کمتر از پنج دقیقه همه رو از مستر فرم مشتق کنید. یعنی طوری اونها رو اصلاح کنید که انگار از روز اول از مستر فرم ساخته شده بودند.
روش کار به این صورته که باید با استفاده از یک برنامه Replacer (من برای خودم یکی نوشته بودم) باید تمامی Pas ها رو سرچ کرده و تعریف فرم ها رو از (Class(TForm تغییر بدید به چیزی که می خواهید.
بعد تمام Dfm ها رو سرچ کرده و object Formxxx: TForm1 ها رو تبدیل کنید به inherited Formxxx: TForm1
(این نکته ای بود که بعدها فهمیدم چه تاثیری در زمان اجرا داره)
نکته آخر هم این که بعد از این کارها باید پروژه رو باز کرده و تمام فرم ها رو هم باز کنید و کمی جابجا کنید و ذخیره کنید تا دلفی ایرادات احتمالی رو با رفرش کردن اصلاح کنه.

موفق باشید.

یوسف زالی
چهارشنبه 18 دی 1392, 09:54 صبح
هادی جان پستت رو الان دیدم،


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

danesh1351
چهارشنبه 18 دی 1392, 10:22 صبح
ضمن سپاس از دوستان
همه اين راهها رو آشنائي دارم .
من دنبال يك روش هستم كه هر وقت يك فرم نمايش داده ميشه يكه كار خاصي انجام بشه . و اين كار براي همه فرمهاي برنامه مصداق داره .
حالا ميخوام بدونم با استفاده از كلاسهائي مانند TScreen يا TApplication يا توابع Api ميشه همچين كاري كرد يا نه

Mahmood_M
چهارشنبه 18 دی 1392, 11:03 صبح
کار مورد نظر شما باید توسط فرم ساخته شده انجام بشه یا صرفا یک محاسبات مثلا برای مدیریت فرمهای نمایش داده شدست ؟
راه حل این مشکل دقیقا به کاری که قصد دارید انجام بدید بستگی داره ، مثلا در چه زمانی باید انجام بشه ، شما می تونید Message های Activate یا Created یا ... رو تشخیص بدید اما مهم اینه که کدومش به دردتون می خوره و کار مورد نظر شما باید در چه مرحله ای انجام بشه یا اصلا در چه مرحله ای امکان انجامش وجود داره !
لیست Message های ویندوز (http://wiki.winehq.org/List_Of_Windows_Messages) رو نگاه کنید
اگر فرمهاتون به صورت Modal نمایش داده میشن ، می تونید از رویداد OnModalBegin و OnModalEnd مربوط به کامپوننت TApplicationEvent استفاده کنید
در غیر اینصورت ، مثلا می تونید در زمانهای خاصی فرمهای برنامه رو بمارید و از تغییر تعدادشون مطلع بشید
این صفحه (http://stackoverflow.com/questions/11575699/delphi-detect-when-a-new-form-has-been-created) رو هم ببینید

hadisalahi2
چهارشنبه 18 دی 1392, 15:59 عصر
من موقعی که یک پروژه میسازم ، اول شکل کلی فرم های اصلی رو طراحی میکنم و بعد یا ازش یک Template میسازم تا اینکه از روش برای فرم های بعدی Save As میگیرم و بعد به پروژه اضافه میکنم.


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

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

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

خیلی دوست دارم ، روشهایی رو که به سرعت طراحی کمک میکنند رو یاد بگیرم :لبخند:

firststep
چهارشنبه 18 دی 1392, 18:27 عصر
سلام -------------
یک راه حل عالی که من استفاده کردم و می کنم استفاده از کلاس هلپر class helper
بسیار عالی عمل می کنه به این شکل که من کلاس هلپیری برای کلاس فرو مثلاً ایجاد می کنم وبعد اون رو use می کنم توی تمامی فرم هام (من اصولاً کلاس هلپر رو درون لایه ای که دیتابیس هام قرار دارن ، از اونجایی که تقریباٌ تمامی فرم های رو به اون دیتا ماژله use کردم پس دیگه نیاز به Use مجدد هم نیست) حالا اون متد رو که می خوام رو توش باز نویسی می کنم اینجوری خیلی بهتره
----------------------------------