ورود

View Full Version : Set parent with focus



حمید محمودی
پنج شنبه 22 مهر 1389, 19:28 عصر
سلام،

من براي يه قسمتي از برنامه نيازمند به قرار دادن فرم در يک فرم ديگه شدم، که اومدم مثلا گفتم form2.parent:=form1

اما موضوع اينه که تعداد فرم هاي نمايش پيدا کرده، زياده و يه جورايي قاتي پاتي شده. راهي هست که فرم هايي که در فرم ديگه قرار ميديم رو بتونيم مثل پنجره هاي ديگه باهاشون رفتار کنيم. يعني مثلا فرض کنيد که توي ويندوز دوتا پنجره My computer باز کرديد، حالا اگه روي Title هر کدوم از اين پنجره ها کليک کنيد؛ Titleايني که انتخاب کرديد، پررنگ تر هست. و اوني که از حالت انتخاب خارج شده کم رنگتر هست.

چطور ميشه چنين حالتي رو درست کرد؟

مثلا فرض کنيد در برنامه ممون جمعا سه تا فرم داريم : form1 , form2 , form3
همزمان فرم2 و فرم 3 رو در فرم 1 پارنت کرديم. حالا چطور ميشه همين حالتي که من براي My Computer مثال زدم رو پياده سازي کرد؟؟

لازم به ذکره که MDI رو نمیخوام/نمیتونم استفاده کنم.

MohsenB
جمعه 23 مهر 1389, 22:55 عصر
سلام

توی ویندوز نمیشه بیشتر از یک پنجره در حالت فعال باشه .

تو این کاری که شما کردین پنجه پرنت که فعاله ، دیگه نمی تونه یه پنجه دیگه هم فعال بشه .

اگه توجه کرده باشین تو این حالت نمی تونید از اشیائی مثل "کادر متن" بصورت معمولی استفاده کنین .

به نظر من تنها راهتون همون پنجره ی MDI هستش .

مشکلتونو با MDI بگین شاید حل شد .

حمید محمودی
شنبه 24 مهر 1389, 00:36 صبح
مشکلتونو با MDI بگین شاید حل شد .
مشکل خاصی نبود؛ راستش از اول کل پروژه رو غیر MDI گرفتم و الان هم دیگه ....
ضمن اینکه برنامه طوی بود که بایستی فرم اصلی MDI، توش کامپوننت هایی قرار میگرفت تا به کاربر نشون داده بشه، که فکر کنم با اصول طراحی MDI اینکار نخونه...
همچنین یه بار امتحان کردم دیدم جالب در نیومد(از Scrollbar عمودی و افقی در خود پنجره پدر گرفته تا ... ) و دوباره به حالت قبل برش گردوندم.



تو این کاری که شما کردین پنجه پرنت که فعاله ، دیگه نمی تونه یه پنجه دیگه هم فعال بشه .
پنجره ای که پرنت شده، نه، فعال نیست. نمونه ای که قرار دادم رو نگاه کنید، مشکلی داره؟؟



اگه توجه کرده باشین تو این حالت نمی تونید از اشیائی مثل "کادر متن" بصورت معمولی استفاده کنین .
متوجه منظورتون نشدم.. :متفکر:

///
همین برنامه ای که ضمیمه کردم رو ببنید، چطور میشه وقتی دوتا فرم 2و3 توی فرم اصلی پرنت شدن، هر کدوم رو که انتخاب کردیم فقط همون فرم فعال باشه(به نظر برسه)؟؟

یکمی سرچ کردم، دیدم گفته شده میشه موقع پرنت با استفاده از کد زیر فرم رو فعال نشون داد. اما به هر حال موقعی که فرم از حالت انتخاب خارج میشه نمیدونم چکار باید کرد؟؟
البته این کد رو توی OnActive فرمی که میخواد پرنت بشه نوشتم ولی عملی نشد...



SendMessage(Form2.Handle, WM_NCACTIVATE, Ord(True), 0);
راستی :
معادل کد بالا برای غیر فعال کردن(DeActive) فرم چیه؟
و اینکه چرا Self.Hide توی ApplicationEvent فرم3 در نمونه برنامه عمل نمیکنه؟

nilidelphi
شنبه 24 مهر 1389, 12:33 عصر
پنجره های استاندارد MDI در ویندوز Hide یا Close نمی شن.
برای این کار باید در رویداد OnClose فرم فرزند پارامتر Action رو مدیریت کنی.
برای استفاده از این ویژگی هم می تونی Action رو تو این رویداد تایپ کنی و انتخاب کنی و F1 رو بزنی خود Help دلفی کمک می منه.

موفق باشی.

حمید محمودی
یک شنبه 25 مهر 1389, 13:47 عصر
ممنون از پاسختون؛



پنجره های استاندارد MDI در ویندوز Hide یا Close نمی شن.

ولی برنامه ای که من ضمیمه کردم، MDI نبود که، کدوم پنجره رو میگین؟؟ :متفکر:



برای این کار باید در رویداد OnClose فرم فرزند پارامتر Action رو مدیریت کنی.
برای استفاده از این ویژگی هم می تونی Action رو تو این رویداد تایپ کنی و انتخاب کنی و F1 رو بزنی خود Help دلفی کمک می منه.

برای کدوم کار؟ Close کردن یا Hide کردن فرم رو میگید؟ که به عنوان مثال بیایم بگیم Action:=caFree یا caHide یا ....

اگه منظورتون اینه که باید بگم، راستش اول اینکه، قصد ندارم MDIکار کنم(دلایلشم توی پست قبلی عرض کردم)
و اینکه اون قضیه Hide کردن که گفتم، زمانی بود که فرم Minimize میشد، نه اینکه Close میشد، که بیایم در OnClose فرم بیایم بگیم فرم رو Hide کن یا Free.


گویا Set parent with focus امکان پذیر نیست؟! نه؟؟ :متفکر:

nilidelphi
دوشنبه 26 مهر 1389, 12:34 عصر
شرمنده دوست عزیز سوالتون رو کامل متوجه نشدم داشتم به چند پست جواب میدادم گیج شدم.

بازم معذرت.

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

موفق باشید.