Hamid
مدیريت كل سایت
پست: 5504
عضو شده در: 31 اردیبهشت 1384
محل سکونت: -::ساوه::-
امتياز: 47846
|
عنوان: در MagicFa ما چگونه تمرکز را به پنجره قبلی برگرداندیم؟+سورس مجیکفا |
|
|
سلام؛
از زمان ارائه مجیکفا تاکنون، کاربران زیادی ایمیلهایی مشابه این ایمیل ارسال کردهاند:
نقل قول: |
من سورسی نوشته بودم که شبیه صفحه کلید ویندوز عمل میکرد، اما مشکلی داشت که به هنگامی که کاربر صفحه کلید را اجرا میکنه فوکوس ویندوز بر روی برنامه من میادد که در این حالت من نمیتونم هندل پنجره فعال قبلی را بدست بیاورم
اگر میشود بنده رو راهنمایی کنید که از چه کدی برای فعال ماندن برنامه قبلی همزمان با فعال شدن برنامه فعلی استفاده کرده اید
تا حالا هزاربار هر کد و ای پی آیی که به نظرم رسیده را به هر ترفندی که بوده امتحان کرده ام اما باز هم با اجرای برنامه ام از روی پنجره ی فعال قبلی برداشته میشه، نمیدونم مشکل از کجاست، حتی با ساختن شورتکاتش و اختصاص دادن یک میانبر به آن باز هم همینطور است، این موضوع خیلی درمانده ام کرده،
میدونم کدی که در یک برنامه از آن استفاده شده موضوعی سری است ولی دیگر ببخشید دیگر نمیدانم چکار کنم، چون دیدم برنامه شما این ویژگی را داشت و من که چاره مشکلم را در پرسیدن از حضور شما میدانم، خواهشا" راهنماییم کنید |
گفتم در یک محل پاسخ دهم و در موارد بعدی، فقط لینک بدهم.
زمانی که برنامه ساده و کوچک MagicFa را مینوشتم، به یک مشکل بسیار بزرگ برخوردم و آن اینکه وقتی برنامه MagicFa اجرا میشد، تمرکز از روی پنجره قبلی برداشته میشد و کاربر باید خودش دو بار Alt+Tab را میزد تا پنجره قبلی فعال شود و این، کار را مشکل میکرد.
بعد از ساعتها جستجو در مورد اینکه چگونه اطلاعاتی را از برنامه خودمان به یک برنامه خارجی بفرستیم، به راهحلهایی رسیدم که پیادهسازی آنها به همین راحتیها نبود.
در نهایت پس از بررسی عملکرد پنجرهها در ویندوز توانستم با یک ترفند، مشکل را رفع کنم.
این ترفند چه بود؟
در حقیقت سؤال این است که:
چگونه بعد از بسته شدن یک پنجره، تمرکز را روی پنجره زیرین آن منتقل کنیم؟
1- یک پنجره که قابلیت تایپ در آن باشد (مثل نوتپد) را باز کنید و در آن یک سری متن بنویسید.
2- دقت کنید که تمرکز فعلاً روی نوتپد است.
3- حالا یک پنجره دیگر (که کوچکتر باشد) را باز کنید. (مثلاً ماشین حساب ویندوز)
4- همانطور که میبینید، تمرکز از روی پنجره قبلی برداشته شد.
5- حالا پنجره ماشینحساب را ببندید.
6- خواهید دید که تمرکز الان روی هیچ پنجرهای نیست! یعنی در حقیقت تمرکز گم شد!
7- یک بار دیگر مراحل 1 تا 4 را انجام دهید.
8- این بار به جای بستن پنجره ماشینحساب، آنرا Minimize کنید.
9- خواهید دید که تمرکز به پنجره قبلی برگشت و میتوانید تایپ کردن را ادامه دهید.
متوجه شدید ترفند چیست؟
به محض اینکه مجیکفا را باز میکنید، کار تصحیح را انجام میدهد، متن تصحیح شده را در حافظه ذخیره میکند و سپس minimize میشود! همین!
به قطعه کدی که در انتهای مجیکفا اجرا میشود دقت کنید:
کد: |
this.WindowState = FormWindowState.Minimized; |
سپس با حذف این خط کد:
کد: |
Application.Run(frm); |
باعث شدیم که فرم پس از انجام مأموریتش، بسته شود. (اگر این خط کد باشد، برنامه دائماً در حال اجرا خواهد ماند)
میتوانید سورس کد مجیکفا را از اینجا دانلود کنید:
http://yourl.ir/magicfa_source
و اما، در جواب به دوستانی که سؤالی شبیه به سؤال بالا دارند باید عرض کنم که نوع کاربرد ما با نوع کاربرد شما متفاوت است.
شما نیاز دارید که از یک برنامه در حال اجرا که فعال است، به برنامه دیگری داده بفرستید که این، بحث پیچیدهای است و با مجیکفا متفاوت است.
مثل اینکه من بخواهم در مجیکفا به برنامه فعال قبلی وصل شوم، متن انتخاب شده را کپی کنم و سپس پس از پردازش، همانجا Paste کنم که این، کار مشکلی بود و بنابراین من کپی و پیست را به کاربر واگذار کردم.
البته به خاطر دارم که آنزمان در جستجوهایم به روشهای ارسال داده از برنامه خود به برنامه دیگر رسیدم که پیادهسازی آنها بیش از حد سنگین بود و ارزش وقت گذاشتن برایم نداشت.
اما به هر حال، اگر شما نیاز دارید، به نتایج این جستجو مراجعه و پیگیری کنید:
https://www.google.com/search?num=50&hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&q=c%23+use+how+to+send+data+to+another+application+from+my+application&oq=c%23+use+how+to+send+data+to+another+application+from+my+application&aq=f&aqi=&aql=&gs_l=serp.3...113925l116932l0l117117l12l8l0l0l0l0l0l0ll0l0.frgbld.
نکته پایانی:
دوستان عزیز، ما در این سایت چیز مخفی در مباحث علمی نداریم. هر کجا احساس کردید یکی از دانستههای ما میتواند به شما کمک کند، سؤال کنید، اگر صلاح و امنیت کاربران و خودمان به خطر نیفتد، به طور کامل در اختیار عموم قرار میدهیم.
موفق باشید.
حمید رضا نیرومند |
|