PDA

View Full Version : تبدیل از حالت مینیمایز فرم اصلی برنامه به حالت ماکزیمایز



khoshblagh
یک شنبه 20 دی 1388, 07:35 صبح
با سلام خدمت دوستان
من با کد زیر از اجرای دوباره یک برنامه جلوگیری مینمایم.بعضی وقتها کاربر برنامه با مینیمایز کردن فرم اصلی برنامه اقدام به اجرای دوباره برنامه مینماید که کد زیر مانع از اینکار میشود. حالا من میخواهم وقتی فرم اصلی برنامه مینیمایز میباشد و کاربر اشتباها اقدام به اجرای برنامه نماید. فرم اصلی از حالت مینیمایز به حالت ماکزیمایز تبدیل شود. متشکرم


{$R *.res}
var
hmutex:THandle;
begin
hmutex:=CreateMutex(nil,False,'OneCopyMutex');
if waitforsingleObject(hmutex,0)<>wait_timeout then
begin
Application.Initialize;
Application.Title := 'ÓíÓÊã ˜äÊÑá ÑæŽå';
Application.CreateForm(TfrmRamz, frmRamz);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TData, Data);
Application.Run;
end;
end.

دلفــي
یک شنبه 20 دی 1388, 09:12 صبح
ShowWindow(FindWindow('TMainForm','MainForm'), SW_SHOWMAXIMIZED) ;

khoshblagh
یک شنبه 20 دی 1388, 13:04 عصر
با تشکر از پاسختان . ولی متاسفانه مشکل حل نشد!!!!


var



hmutex:THandle;
begin
hmutex:=CreateMutex(nil,False,'OneCopyMutex');
if waitforsingleObject(hmutex,0)<>wait_timeout then
begin
Application.Initialize;
Application.Title := 'ÓíÓÊã ˜äÊÑá ÑæŽå';
Application.CreateForm(TfrmRamz, frmRamz);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TData, Data);
Application.Run;
end else
ShowWindow(hmutex, SW_SHOWMAXIMIZED) ;
end.

Felony
یک شنبه 20 دی 1388, 13:39 عصر
var

hmutex:THandle;
begin
hmutex:=CreateMutex(nil,False,'OneCopyMutex');
if waitforsingleObject(hmutex,0)<>wait_timeout then
begin
Application.Initialize;
Application.Title := 'ÓíÓÊã ˜äÊÑá ÑæŽå';
Application.CreateForm(TfrmRamz, frmRamz);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TData, Data);
Application.Run;
end else
ShowWindow(hmutex, SW_SHOWMAXIMIZED) ;
end.
این کد اشتباه هستش ، hMutex هندل شئ Mutex ساخته شده رو برمیگردونه نه فرم برنامه رو .

khoshblagh
یک شنبه 20 دی 1388, 13:48 عصر
این کد اشتباه هستش ، hMutex هندل شئ Mutex ساخته شده رو برمیگردونه نه فرم برنامه رو .

با تشکر میشه کد صحیح این مشکل را ارائه نمایید؟ متشکرم

Felony
یک شنبه 20 دی 1388, 13:53 عصر
یه نمونه کد براتون نوشتم ، خودتون تغیرات دلخواه رو درش اعمال کنید :


var
hMutex, Hand: THandle;
begin
hmutex:=CreateMutex(nil,False,'OneCopyMutex');
if waitforsingleObject(hmutex,0)<>wait_timeout then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end else
begin
Hand:= FindWindow('TForm1','Form1');
ShowWindow(Hand,SW_Normal);
end;

khoshblagh
دوشنبه 21 دی 1388, 07:39 صبح
با سلام خدمت SilverSoft
متاسفانه فرم اصلی برنامه با این کد ماکزیمایز نمیشود!!!
لطفا بررسی مجدد بفرمائید.

Felony
دوشنبه 21 دی 1388, 08:13 صبح
من کد رو برای نمونه نوشتم ، حداقل یه نگاهی بهش مینداختید !
کافی بود به جای SW_Normal بنویسید SW_ShowMaximized ، یه نمونه براتون ضمیمه کردم .

khoshblagh
دوشنبه 21 دی 1388, 12:54 عصر
من کد رو برای نمونه نوشتم ، حداقل یه نگاهی بهش مینداختید !
کافی بود به جای SW_Normal بنویسید SW_ShowMaximized ، یه نمونه براتون ضمیمه کردم .

با سلام خدمت جنابعالی
اتقاقا بعد از بی نتیجه بودن آن کد شخصا اقدام به استفاده از SW_ShowMaximized نمودم که باز هم بی نتیجه بود. پس اقدام به زدن پست 7 همین تاپیک نمودم .
حالا هم نمونه ارسالی شما را امتحان کردم که نتیجه درست بود. ولی همچنان این مشکل برای من باقی ماند. من کد را برای بررسی در اینجا قرار میدهم. لطفا آنرا ببینید . متشکرم


var
hMutex, Hand: THandle;
begin
hmutex:=CreateMutex(nil,False,'OneCopyMutex');
if waitforsingleObject(hmutex,0)<>wait_timeout then
begin
Application.Initialize;
Application.Title := 'ÓíÓÊã ÇÌÇÑå ÎæÏÑæ';
Application.CreateForm(TfrmRamz, frmRamz);
Application.CreateForm(TData, Data);
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end else
begin
Hand:= FindWindow('TMainForm','MainForm');
ShowWindow(Hand,SW_SHOWMINIMIZED);
End;

Felony
دوشنبه 21 دی 1388, 13:10 عصر
اگر میتونید پروژتون رو قرار بدید یا یک نمونه با همین جزیئات بنویسید و اینجا قرار بدید تا بررسی کنیم .

tdkhakpur
دوشنبه 21 دی 1388, 13:59 عصر
ممکنه Hand:= FindWindow('TMainForm','MainForm' برنامه جاری را که جدیدا اجرا میشود را پیدا کند.
در این مورد روش دیگری را برای پیدا کردن فرم مورد نظر استفاده کنید.
تاپیک بالا را به اشتباه حذف شد.

Felony
دوشنبه 21 دی 1388, 14:08 عصر
ممکنه Hand:= FindWindow('TMainForm','MainForm' برنامه جاری را که جدیدا اجرا میشود را پیدا کند.
در این مورد روش دیگری را برای پیدا کردن فرم مورد نظر استفاده کنید.
تاپیک بالا را به اشتباه حذف شد.

خیر این امکان نداره ، چون با توجه به کدی که نوشتم اگر برنامه اجرا شده باشه فرم جدید ساخته نمیشه که بخواد به اشتباه پیدا بشه .

دلفــي
دوشنبه 21 دی 1388, 15:55 عصر
program Project1;
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
Unit1 in 'Unit1.pas' {MainForm},
Unit2 in 'Unit2.pas' {frmRamz},
Unit3 in Unit3.pas' {Data};
{$R *.res}
var
hMutex: THandle;
begin
hmutex:=CreateMutex(nil,False,'OneCopyMutex');
if waitforsingleObject(hmutex,0)<>wait_timeout then
begin
Application.Initialize;
Application.Title := 'سیستم اجاره خودرو';
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TfrmRamz, frmRamz);
Application.CreateForm(TData, Data);
Application.Run;
end else
begin
ShowWindow(FindWindow('TMainForm','MainForm'),SW_S HOWMAXIMIZED);
End;
end.

دلفــي
دوشنبه 21 دی 1388, 16:05 عصر
اين هم فايل اجرايي برنامه