PDA

View Full Version : سوال: مشکل در Minimize



mbshareat
پنج شنبه 25 فروردین 1390, 00:10 صبح
با سلام خدمت دوستان عزیز
من یک برنامه دارم که چند فرم بدون لبه دارد. و برای Minimize باید در ناحیه ای از Image در فرمها ماوس را فشار داد.
مشکل من این است که Applicatio.Minimize هیچ کاری انجام نمی دهد و Self.WindowState=wsMinimized هم فرم را به ناحیه گوشه سمت چپ دسکتاپ و بالای دکمه Start می برد و نوار عنوان کوچکی از فرم را نمایش می دهد.
من می خواهم برنامه به نوار وظیفه منتقل شود و نمی دانم چطور به هدفم برسم. یک فرم خالی آزمایشی هم درست کردم دیدم چنین مشکلی ندارد. برنامه ام هم آنقدر حجیم است که نمی توانم در سایت بگذارم.
کسی پیشنهادی نداره؟

tdkhakpur
پنج شنبه 25 فروردین 1390, 00:34 صبح
مطمئن هستید Applicatio.Minimize کار نمیکنه!

mbshareat
پنج شنبه 25 فروردین 1390, 13:38 عصر
با سلام
بله مطمئنم که کار نمی کنه.در همون جایی که WindowState رو تنظیم می کنم دستور Minimize رو هم دارم.اولی کار می کنه دومی نه.
من در FormResize هم کد نوشته بودم به توضیحات تبدیلش کردم باز مشکل حل نشد.
توی Help نوشته شده از Application.Minimize الکی استفاده نکنین و از WindowState استفاده کنین اما چون انگلیسیم ضعیفه (و مترجم هم همیشه نمیتونه کمک کنه) نتونستم دلیلی که توضیح داده بود بفهمم.

Felony
پنج شنبه 25 فروردین 1390, 16:09 عصر
توی Help نوشته شده از Application.Minimize الکی استفاده نکنین و از WindowState استفاده کنین اما چون انگلیسیم ضعیفه (و مترجم هم همیشه نمیتونه کمک کنه) نتونستم دلیلی که توضیح داده بود بفهمم.
گفته وقتی میخواین فقط یک فرک خاص رو Minimize کنید لازم نیست الکی متد Minimize شئ Application رو فراخوانی کنید و برنامه رو درگیر کنید ، کافیه مقدار WindowState اون فرم رو تغییر بدید .

tdkhakpur
جمعه 26 فروردین 1390, 20:43 عصر
مطمئنم که کار نمی کنه.در همون جایی که WindowState رو تنظیم می کنم دستور Minimize رو هم دارم.اولی کار می کنه دومی نه
این کد رو امتحان کنید


SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);

mbshareat
شنبه 27 فروردین 1390, 15:09 عصر
با سلام
جناب tdkhakpur کد شما هم تاثیری نداره.
نمی دونم چرا Application.termitae رو اجرا میکنه ولی Application.Minimize رو نه.
نمی دونم کجای برنامم رو باید بررسی کنم.اگه ممکنه راهنماییم کنین کجای برنامم رو بررسی کنم.
تو برنامم برای FormResize هم کد داشتم ولی وقتی کاملا کد داخل این متد رو برمی دارم باز هم Application.terminate و کد جناب tdkhakpur عمل نمی کنه.
اگه به من بفرمایین که چه کار کنم که با همین WindowSatate برنامه رو به نوار وظیفه ببرم برام کافیه یادمه توی یه تاپیک هم در مورد این وضعیت صحبت شده بود.نمی دونم چطور جستجو بدم و آیا جوابم توی او تاپیک هست یانه؟

عقاب سیاه
شنبه 27 فروردین 1390, 17:21 عصر
سلام دوست عزيز
با اجازه از استاديد: :لبخند:
من هم قبلا توي يك تاپيك همين مشكل را مطرح كردم، نتيجه اين شد كه:
Minimize به آن شكل كه شما انتظار داريد فقط از طريق فرم اصلي mainform برنامه امكان پذير است و اگر تابع هاي مرتبط در مين فرم اجرا بشوند كل فرم ها Minimize مي شوند ولي در ساير فرم ها همان كوچك شدن اتفاق مي افتد.! :متفکر:

ببخشيد!!! :کف:

Felony
شنبه 27 فروردین 1390, 19:32 عصر
نمی دونم چرا Application.termitae رو اجرا میکنه ولی Application.Minimize رو نه.
برای برنامه Message Handler ننوشتید که پیغام ها رو هندل کنه و مانع پردازش اونها توسط Default Handler برنامه بشه ؟

tdkhakpur
یک شنبه 28 فروردین 1390, 00:44 صبح
نمی دونم چرا Application.termitae رو اجرا میکنه ولی Application.Minimize رو نه.


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

mbshareat
دوشنبه 29 فروردین 1390, 08:44 صبح
با سلام خدمت سروران گرانقدر
من Minimize رو در OnMouseDown یک Image استفاده کردم.
من برنامه نویس مبتدی هستم از من بعیده که از Message Handler استفاده کنم.(بدم نمیاد در موردش بیشتر بدونم فقط نمی دونم از کجا باید لیست Message ها رو بدست آورد)
در برنامه ام هم مطمئنم استفاده نکردم.
من فرم اصلی رو یه کم سبک کردم و براتون می ذارم. از دوستان بزرگوار که می دونم مهارت خوبی در برنامه نویسی به زبان دلفی دارند درخواست می کنم نگاهی به TQuranMain.TitlePicMouseDown بیندازند و اگر راهی به ذهنشون رسید من رو راهنمایی کنند.:قلب:

A.Nemati
دوشنبه 29 فروردین 1390, 13:00 عصر
کمی دارید به بیراهه می روید. یکی از دوستان در چند پست قبل جواب را گذاشته است

من هم قبلا توي يك تاپيك همين مشكل را مطرح كردم، نتيجه اين شد كه:
Minimize به آن شكل كه شما انتظار داريد فقط از طريق فرم اصلي mainform برنامه امكان پذير است و اگر تابع هاي مرتبط در مين فرم اجرا بشوند كل فرم ها Minimize مي شوند ولي در ساير فرم ها همان كوچك شدن اتفاق مي افتد.!

tdkhakpur
دوشنبه 29 فروردین 1390, 13:41 عصر
من Minimize رو در OnMouseDown یک Image استفاده کردم.

ایراد همین جاست وقتی event برای down به کار میبرید رویداد up باعث میشه فرم همچنان سرجاش بمونه به همین دلیل این رویداد رو داخل TitlePicMouseUp بنویسید


procedure TQuranMain.TitlePicMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
W,H:SmallInt;
begin
W:=Screen.Width;
H:=Screen.Height;
If (X>=Round((8/1023)*W)) and (X<=Round((40/1023)*W)) then
Begin
IF (Y>=Round((7/768)*H)) and (Y<=Round((38/768)*H)) then
//Application.terminate bitmap ra free nemi-konad!
Close
Else IF (X<=Round((34/1023)*W))
and (Y>=Round((47/768)*H)) and (Y<=Round((72/768)*H)) then
Begin
Application.Minimize;
// Hide;
// Show;
End;
End;
end;

به طور کلی برای کار با تصاویر شما روش سختی رو استفاده کردید پیدا کردن مختصات کار مشکلیه میتونید برای این نوع کارها با استفاده از Image و لود کردن هر تصویر یا دگمه برای کلیک در image جداگانه این کار رو انجام بدید و رویداد click اون رو استفاده کنید.

mbshareat
دوشنبه 29 فروردین 1390, 23:46 عصر
سلام خدمت سروران گرانقدر
جناب tdkhakpur :قلب:از راهنماییتون ممنونم.فکر نمی کردم مشکل حل شدنی باشه.
اون روشی هم که برای راحت تر کردن کارم فرمودین درسته.
اگه میشه بیشتر در مورد اشکال کارم صحبت بفرمایین. من هنوز متوجه نشدم چرا باید از MouseUp استفاده کنم نه MouseDown .:گیج:

tdkhakpur
سه شنبه 30 فروردین 1390, 00:08 صبح
اگه میشه بیشتر در مورد اشکال کارم صحبت بفرمایین. من هنوز متوجه نشدم چرا باید از MouseUp استفاده کنم نه MouseDown .

خب برای اینکه پیغام repaint برای فرم و یک سری تنظیمات دیگه منتظر up شدن mouse میشه.
البته این مشکل مربوط به کار شما نمیشه شاید یک سری نواقصی باشه که شرکت سازنده دلفی باید رفع کنه و شاید برای خودشون یک سری دلیل داشته باشند که این روش رو پیاده سازه کردن.