PDA

View Full Version : فعال کردن پنجره



Mahdi_Delphi
پنج شنبه 11 آبان 1385, 13:07 عصر
سلام

چطور میشه یک پنجره دلخواه رو که Handle اون رو داریم همیشه فعال نگهداریم ؟

من توی یه تایمر کدهای زیادی رو تست کردم از

Form1.WindowState:=wsMaximized;گرفته تا فرستادن پیام


SendMessage(Form1.Handle,WM_ACTIVATE,WA_ACTIVE,0);

و چند تا دستور دیگه ، ولی نتیجه نگرفتم !

میخوام وقتی کاربر WinKey+D رو هم میزنه برنامه بعد از مینیمایز شدن دوباره اکتیو بشه.

خیلی ممنون

Mahdi_Delphi
جمعه 12 آبان 1385, 09:08 صبح
اصلاً چنین کاری امکان داره یا من دارم تلاش بیهوده میکنم؟!

soroush_vs
جمعه 12 آبان 1385, 10:05 صبح
میتونید از اپتدا خیلی ساده خاصیت alwaysOnTop رو True کنید

Mahdi_Delphi
جمعه 12 آبان 1385, 18:01 عصر
میتونید از اپتدا خیلی ساده خاصیت alwaysOnTop رو True کنید

سلام دوست عزیز
خاصیت FormStyle رو روی Stay On Top تنظیم کردم ولی این فقط واسه اینه که اگه چند تا پنجره باز بود فرم ما روی اونها قرار بگیره اما مشکل من اینه :


میخوام وقتی کاربر WinKey+D رو هم میزنه برنامه بعد از مینیمایز شدن دوباره اکتیو بشه.

ممنون

babak_delphi
جمعه 12 آبان 1385, 21:38 عصر
در ایونت OnReSize بگو اگه Minimize شد Restore کنه

Mahdi_Delphi
شنبه 13 آبان 1385, 09:16 صبح
فکر نمیکنم مینیمایز شدن در رویداد Resize اثر داشته باشه.

حتی یک تایمر با interval=1 روی فرم گذاشتم که با تابع IsIconic چک میکنه اگه فرم مینیمایز باشه WM_ACTIVE یا WM_SETFOCUS رو به برنامه ارسال میکنه،اما جواب نگرفتم.

ممنون

vcldeveloper
شنبه 13 آبان 1385, 09:18 صبح
ببینید مدیریت پیام هایی مثل WM_WINDOWPOSCHANGING , WM_SIZE یا WM_NCACTIVATE می تونه کمکی بهتون بکنه یا نه.

babak_delphi
دوشنبه 15 آبان 1385, 23:36 عصر
تا جایی که من یادمه Minimize کردن ، ایونت OnResize رو صدا میزنه.
امتحان کن

Mahdi_Delphi
سه شنبه 16 آبان 1385, 09:30 صبح
تا جایی که من یادمه Minimize کردن ، ایونت OnResize رو صدا میزنه.
امتحان کن

Maximize کردن و Restore کردن رویداد OnResize را فراخوانی می کنند ولی Minimize کردن خیــر.

به هر حال ممنون.


ببینید مدیریت پیام هایی مثل WM_WINDOWPOSCHANGING , WM_SIZE یا WM_NCACTIVATE می تونه کمکی بهتون بکنه یا نه.

تست می کنم و جوابش رو میگم.

ممنون

Mahdi_Delphi
سه شنبه 16 آبان 1385, 09:48 صبح
یک تایمر با interval=1 روی فرم گذاشتم که با تابع IsIconic چک میکنه که فرم مینیمایز شده یا نه.

اما کد حتی مینیمایز شدن پنجره رو تشخیص نمیده.

من یک فرم دیگه به برنامه اضافه کردم و وقتی اون فرم (Form2) رو مینیمایز میکنم تابع IsIconic که داخل پروسجر Timer فرم یک هست مینیمایز شدن رو تشخیص میده (نمی دونم چرا مینیمایز شدن خود فرم یک رو تشخیص نمیده)، ولی نمیتونم فرم رو از حالت Minimize خارج کنم!!

ممنون

sarvestan
چهارشنبه 17 آبان 1385, 10:47 صبح
توجه بفرمایید که در زمانی که فرم اصلی برنامه Minimized میشوند کنترل هایی همچون Timer کار نمیکنند و event های آنها تا بازگشت به وضعیت نرمال Cashe میشوند!!!
برای کار بررسی وضعیت فرم اصلی برنامه از یک Thread در کنار Thread اصلی برنامه استفاده بفرمایید!

شاد باشید

Mahdi_Delphi
چهارشنبه 17 آبان 1385, 11:09 صبح
توجه بفرمایید که در زمانی که فرم اصلی برنامه Minimized میشوند کنترل هایی همچون Timer کار نمیکنند و event های آنها تا بازگشت به وضعیت نرمال Cashe میشوند!!!
برای کار بررسی وضعیت فرم اصلی برنامه از یک Thread در کنار Thread اصلی برنامه استفاده بفرمایید!

ممنون دوست عزیز

ولی من توی برنامه 2 فرم به کار بردم و تایمر رو توی فرم 1 گذاشتم ولی باز هم نمی دونم با فرستادن چه پیامی میشه فرم 2 رو از حالت مینیمایز خارج کرد!

ممنون

sarvestan
یک شنبه 28 آبان 1385, 08:31 صبح
SendMessage(Form2.Handle,WM_SYSCOMMAND,SC_RESTORE, 0);