PDA

View Full Version : سوال: بالا قراردادن پنجره ای از یک برنامه دیگر که در زیز پنجره های باز دیگر است



atf_1379
چهارشنبه 29 شهریور 1396, 22:25 عصر
سلام دوستان
در فایل ضمیمه دو برنامه قرار دارد ، ابتدا لطفاً دو فرم اجرائی دو پوشه به عناوین Prj1.exe و Prj2.exe را اجرا نمائید سپس فرم 2 (فرم کوچکتر) را در زیر یک پنجره مثل Documents قرار بدهید و بعد بر روی فرم 1 ( فرم بزرگتر) کلیک نمائید ؛ خواهید دید که فرم 2 بالا آمده و بر روی پنجره Documents قرار می گیرد .
من کد فعال نمودن فرم 2را با بدست آوردن هندل آن در تایمر فرم 1 قرار داده ام و می خواهم تایمر وقتی به یک عددی رسید فرم 2 که در زیر است بالا قرار گیرد .
این اتفاق می افتد ولی به شرطی که فرم 1 فعال باشد و اگر فوکوس بر روی پنجره ای دیگر باشد یا اینکه فرم 1 بصورت مخفی اجرا شود این اتفاق نمی افتد .
اساتید عزیزلطفاً راهنمائی فرمایند که با چه راهکاری که اگر فرم 1 بصورت مخفی باز و عدد تایمر برابر یا بزرگتر از مقداری گردید فرم شماره 2 فعال شده
با تشکر

www.pc3enter.tk
جمعه 31 شهریور 1396, 16:00 عصر
ببین ، فقط ببخشیدا
من سوالت را خواندم ولی درست متوجه نشدم روی چه چیزی مشکل داری.
و دیگر این که میخواهی اصلا تو برنامه ات چه کار کنی و ، و اون برنامه ات کارش چیست که مجبور به استفاده همچین کاری میخواهی بشی.

atf_1379
شنبه 01 مهر 1396, 02:10 صبح
ببین ، فقط ببخشیدا
من سوالت را خواندم ولی درست متوجه نشدم روی چه چیزی مشکل داری.
و دیگر این که میخواهی اصلا تو برنامه ات چه کار کنی و ، و اون برنامه ات کارش چیست که مجبور به استفاده همچین کاری میخواهی بشی.

سلام
به تصویر ضمیمه که از صفحه یک سایت گرفته ام و راهکار بستن یک پنجره با گرفتن عنوان آن را آموزش داده توجه بفرمائید

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

vbhamed
شنبه 01 مهر 1396, 10:31 صبح
سلام
منظورتون رو دقیق توضیح ندادین ولی تصور میکنم این تابع بتونه کار شما رو راه بندازه
دقت کنید فقط یکبار فراخوانی تابع SetOnTop کافیه و لازم نیست دائم در تایمر فراخوانی بشه مگر اینکه فرم بسته بشه یا بخواین حالتش رو عوض کنین

atf_1379
شنبه 01 مهر 1396, 11:52 صبح
سلام
منظورتون رو دقیق توضیح ندادین ولی تصور میکنم این تابع بتونه کار شما رو راه بندازه
دقت کنید فقط یکبار فراخوانی تابع SetOnTop کافیه و لازم نیست دائم در تایمر فراخوانی بشه مگر اینکه فرم بسته بشه یا بخواین حالتش رو عوض کنین
سلام جناب استاد فرجام فر
بابت عنایتتون به این تاپیک بسیار ممنونم
با توجه به اینکه من میخواهم فرم استارت آپ اکسس را از داخل فایل vb اجرا کنم و تابع جنابعالی چون مربوط به بالا قرار دادن فرمی در همان برنامه وی بی است برای برنامه من کاربردی نبود .
باتشکر

eb_343
سه شنبه 04 مهر 1396, 00:35 صبح
سلام
به تصویر ضمیمه که از صفحه یک سایت گرفته ام و راهکار بستن یک پنجره با گرفتن عنوان آن را آموزش داده توجه بفرمائید

منظور بنده این است که با کدهای فوق در داخل یک تایمر زمانی میتوانید یک پنجره را ببندید که خود فرمی که تایمر در آن قرار دارد درحالت فعال باشد و اگر فوکوس بر روی پنجره دیگری باشد پنجره مورد نظر بسته نخواهد شد.
و سوالم هم این است که آیا راهکاری وجود دارد که اگر خود فرمی که تایمر در آن قرار دارد فعال نباشد پنجره مورد نظر بسته شود؟
سلام
اگر میخواهید فرمی که تایمر در آن قرار دارد فعال باشد و همزمان دیده نشود یک راهکار این است که آن فرم را در سایز خیلی کوچک و بصورت شیشه ای در بیاورید و بعد از بالا قرارگرفتن فرم مورد نظرت دستور end (برای بسته شدن آن ) در همان رخداد تایمر وارد کنید .
یا علی

atf_1379
سه شنبه 04 مهر 1396, 01:26 صبح
سلام
اگر میخواهید فرمی که تایمر در آن قرار دارد فعال باشد و همزمان دیده نشود یک راهکار این است که آن فرم را در سایز خیلی کوچک و بصورت شیشه ای در بیاورید و بعد از بالا قرارگرفتن فرم مورد نظرت دستور end (برای بسته شدن آن ) در همان رخداد تایمر وارد کنید .
یا علی


راهکارت عالی بود جناب بهرامی!
متشکرم

vbhamed
سه شنبه 04 مهر 1396, 07:42 صبح
سلام

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

راه اصولی اینه که هندل همون فرمی که قراره ببندینش رو بدست بیارید و با توابع Api مثل SendMessage پیام بستن رو بهش ارسال کنید، اینطوری دیگه نیاز به بالا بودنش هم نیست

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

atf_1379
سه شنبه 04 مهر 1396, 15:38 عصر
سلام

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

راه اصولی اینه که هندل همون فرمی که قراره ببندینش رو بدست بیارید و با توابع Api مثل SendMessage پیام بستن رو بهش ارسال کنید، اینطوری دیگه نیاز به بالا بودنش هم نیست

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

سلام جناب استاد فرجام فر
شاید در پست هایم نتوانسته ام منظور و خواسته خودم را دقیق بیان کنم ؛ هدف بستن یک فرم که بر روی پنجره های دیگر است نیست بلکه هدف بالا آوردن پنجره ای است که در زیر پنجره های باز دیگر پنهان شده است.
من از داخل فرم vb ، برنامه اکسس را اجرا می کنم اما چون اکسس را باید در حالت مخفی اجرا نمایم بخاطر همین فرم استارت آپ آن در زیر پنجره های دیگر که باز هستند پنهان میشود .مثلاً اگر پنجره My Computer بر روی صفحه دسکتاپ باز باشد و من اقدام به اجرای برنامه اکسس نمایم فرم اولیه اکسس باز میشود ولی در زیر پنجره My Computer .
یکی از کارهای که برای رفع این مشکل انجام دادم این بود که در رویداد Load و یا رویداد time فرم استارت آپ اکسس از توابع فوق استفاده کردم ولی تاثیری نداشت ؛ بعد آمدم از داخل فرم vb که صرفاً بعنوان لودر فایل اکسس از آن استفاده می کنم با بدست آوردن هندل فرم اکسس از توابع فوق استفاده کردم ولی باز هم بی تاثیر بود چون همانطور که اشاره کردم اگر همان فرم vb در حالت مخفی اجرا شود دستور کار نمی کند .
اینکه راهکار آقای بهرامی راهگشا بود این است که فرم vb را بصورت نامرئی که در عین حال هم فعال است اجرا می کنم و بعد با شرط بالا آمدن فرم اکسس با دستور end آن را می بندم (چون بعد از این به فایل وی بی احتیاجی ندارم )
با تشکر