نمایش نتایج 1 تا 14 از 14

نام تاپیک: قرار گرفتن یک فرم زیر تمام فرمهای پروژه

  1. #1

    Question قرار گرفتن یک فرم زیر تمام فرمهای پروژه

    سلام دوستان

    اگر بخواهیم یک فرم همیشه زیر تمام فرم های بعدی که روی آن باز خواهد شد قرار بگیرد و هیچ هنگام روی فرمی که از طریق آن باز می شود قرار نگیرد چه باید بکنیم ؟

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

    به نظر شما راه حل چیست که جلوی این موضوع گرفته شود ؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    در رویداد Onactive فرم Bringtofront , Bringtoback را امتحان کنید.

  3. #3
    مشکل اینجاست که Bringtoback اساسا وجود ندارد! یا من پیداش نکردم ...
    Bringtofront هست اما مشکل رو حل نمیکنه چون هدف اینه که این فرم همیشه زیر فرمهای بعدی که باز میشن قرار بگیره ...

    ممنونم از توجهتون.

  4. #4
    کاربر دائمی آواتار sarvestan
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    سروستان
    پست
    162
    خاصیت FormStyle فرمهایی که می خواهید همیشه رو باشند را به fsStayOnTop تغییر دهید!


    پ. ن : چرا از قابلیت فرم های پدر و فرزند استفاده نمی کنید؟

  5. #5
    با نکته ای که شما فرمودید تا حدی مشکل حل شد ولی هنوز یه مشکل وجود داره و اون اینه که اگر در حین کار کردن با فرمهای دیگه کاربر اتفاقی روی فرم background کلیک کنه فرم رویی زیر background قرار میگیره و باز همون مشکل تکرار میشه ...

    در مورد فرم های پدر و فرزند لطف میکنین بیشتر توضیح بدین و اینکه چطور میشه فرم های فعلی که تو پروژه وجود داره رو به اون شکل تبدیل کرد و آیا مشکلات فوق حل خواهد شد ؟

  6. #6
    کاربر دائمی آواتار MNosouhi
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان
    پست
    883
    فکر کنم که بهتره از MdiForm و MdiChild استفاده کنید.

  7. #7
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    نقل قول نوشته شده توسط alireza_63
    مشکل اینجاست که Bringtoback اساسا وجود ندارد! یا من پیداش نکردم ...
    Bringtofront هست اما مشکل رو حل نمیکنه چون هدف اینه که این فرم همیشه زیر فرمهای بعدی که باز میشن قرار بگیره ...

    ممنونم از توجهتون.
    درسته SendToBack درستشه

  8. #8
    کاربر دائمی آواتار sarvestan
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    سروستان
    پست
    162
    یه نگاهی به این Sample بنداز
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: zip MDI.zip‏ (6.7 کیلوبایت, 17 دیدار)

  9. #9
    dkhatibi عزیز
    متاسفانه مشکل به کمک SendToBack حل نشد ....

    Pesare_khob عزیز
    اگر دقیقا متوجه چگونگی انجام این کار بشم این موضوع رو امتحان میکنم ...

    سروستان عزیز
    ممنونم از sample ای که در اختیارم گذاشتید ... اما مثال بسیار مبهمی بود! نکته مبهمش هم این بود که چطور میشه از طریق فرم 1 اجزاء موجود در فرم 2 رو صدا زد و تغییرشون داد ؟ تا اونجایی که من امتحان کردم در این مورد موفق نشدم به اجزاء فرم 2 از طرق فرم 1 دسترسی پیدا کنم... ( با وجودی که Unit2 به uses اضافه شده بود )

    مسئله ی دیگه ای که وجود داره در مورد message box هست ....
    گاهی وقتها پیش میاد که در هنگام نمایش یه message box بعد از انجام یک سری عملیات ، پیام به زیر فرم میره و برای کاربر دردسر ایجاد میکنه ... چون کاربر فکر میکنه برنامه از کار افتاده در حالی که پیامی ظاهر شده و او باید روی ok کلیک کنه تا برنامه مجدد فعال بشه ولی کاربر پیام رو به دلیل اینکه زیر فرم رفته نمی بینه ...
    آیا راهی برای جلوگیری از بروز این اشکال وجود داره ؟

  10. #10
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    من هم همین مشکل رو داشتم اما خوشبختانه حل شد
    اول اینکه باید در رویداد OnShow مربوط به فرم هایی که رو قرار میگیرند دودستور بنویسید
    BackForm.Show
    MainForm.Show
    و در رویداد OnActivate مربوط به فرم بک گران یا BackForm یک دستور اصافه کنید
    MainForm.Show

    من دیگه شاید نیام چک کنم پاسخ ها رو اما من با این دونکته ساده مشکلم حل شد البته شاید بازم نیاز داشته باشید کد اضافه کنید اما خیلی ساده است.

  11. #11
    soroush_vs عزیز
    این کار مشکل رو حل نمیکنه ... چون همیشه mainform قرار نیست رو باشه ... بلکه ممکنه صفحات دیگه ای فعال بشن و اونها باید رو باشن ... در حالی که در روش شما همیشه در هنگام فعال شدن background صفحه mainform در رو قرار میگیره ...

  12. #12
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    برای قرار دادن دیالوگ در روی فرمها از تابع زیر استفاده کن!

    MessageBox(Application.handle,'Your Message','Your Caption',mb_Topmost);

    قاعدتا اگر هر فرم به جز فرم مورد نظر که می خواید در زیر قرار بگیره خاصیت FormStyle را به FsStayOnTop تغییر دهید (در Property ها وجود داره) نباید به مشکلی برخورد کنید.

  13. #13
    همونطوری که دوستات گفتند راه حل اصولی استفاده از فرمهای MDI هست، خود دلفی هم براشون مثال داره مطمئن باشید اگر به جای اینکه سعی کنید چرخ رو دوباره خودتون اختراع کنید به خودتون زحمت رانندگی یادگرفتن رو بدیند نه تنها زودتر به مقصد میرسید بلکه از اون مهمتر میتونید مطمئن باشید که به مقصد میرسید

    برای نمونه برید New>>Other>>Projects>>MDI Application

  14. #14
    dkhatibi عزیز

    میشه گفت مشکل تقریبا به کمک همون StayOnTop که آقای سروستان هم بهش اشاره کرده بودند حل شد ...

    در مورد دیالوگ روی فرم ها هم ازتون ممنونم...

    قابیل عزیز

    حق با شماست!
    ممنونم از توجهتون.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •