PDA

View Full Version : سوال: مشکل در minimize کردن فرم



amir-m
چهارشنبه 06 مرداد 1389, 19:22 عصر
سلام
من یه برنامه نوشته ام که دو تا فرم داره. فرم اول برای Login هست.زمانی که برنامه اجرا میشه فرم اول نمایش داده میشه و کاربر user و pass خودش را وارد می کنه.در صورت صحت user و pass وارد شده، خاصیت visible فرم اول false میشه و فرم دوم show میشه. (فرم دوم فرم اصلی برنامه است که منوها و سایر امکانات برنامه روی اون قرار داره)
حالا مشکل اینجاست که زمانی که کاربر روی دکمه ی minimize فرم دوم کلیک می کنه، پنجره روی taskbar ویندوز جمع نمیشه و روی Desktop در قسمت پایین سمت چپ (بالای کلید start) جمع میشه که نمای قشنگی نداره.
دلیل این موضوع هم احتمالاً باز بودن فرم اول هست.
ضمناً درصورتی که فرم اول را در هر کجای برنامه close کنم، کل برنامه close میشه.
به نظر شما برای اینکه minimize فرم های برنامه روی Taskbar انجام بشه، چکار میشه کرد؟
با تشکر

pezhvakco
چهارشنبه 06 مرداد 1389, 19:49 عصر
درود :
دلفی به صورت پیش فرض فرم 1 را فرم اصلی در نظر میگیره .
شما دو روش داری >
1 - همیشه با فرم 1 کار کن و بقیه کار ها را روی بقیه فرم ها قرار بده .
2 - در منوی Project و قسمت Options ، فرم اصلی رو تغییر بده .

فکر خوش .

amir-m
چهارشنبه 06 مرداد 1389, 20:03 عصر
درود :
دلفی به صورت پیش فرض فرم 1 را فرم اصلی در نظر میگیره .
شما دو روش داری >
1 - همیشه با فرم 1 کار کن و بقیه کار ها را روی بقیه فرم ها قرار بده .
2 - در منوی Project و قسمت Options ، فرم اصلی رو تغییر بده .

فکر خوش .

اگر از بخش Options منوی Project برای تغییر Main form استفاده کنم، در اصل ترتیب Createفرم ها را تغییر داده ام، چون فرمی که اول Create بشه اول هم اجرا میشه . در صورتی که فرم اول من که پنجره ی Login هست که باید اول اجرا (ایجاد) بشه.

ahmadi3d_ali
چهارشنبه 06 مرداد 1389, 20:08 عصر
فکر کنم بهتره فرم 1 را فرم اصلی بگیری! در اون مورد هم تو on show برای form1 بنویس form2 را باز کنه و visible را هم False کن ! بعدش م دیگه خودت می دونی ...

SAASTN
چهارشنبه 06 مرداد 1389, 23:15 عصر
دلفی به صورت پیش فرض فرم 1 را فرم اصلی در نظر میگیره .
دلفی اولین فرمی که از طریق Application.CreateForm ایجاد بشه رو فرم اصلی می گیره. شما باید فرم User\Pass رو از طریق Project\Options\Forms از حالت AutoCreate خارج کنی و توی Source پروژه قبل از فرم اصلی و از طریق کد ایجادش کنی.
program Project1;

uses
Forms, Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Form2 := TForm2.Create(nil);
if Form2.ShowModal <> mrOk then
Application.Terminate
else
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

amir-m
پنج شنبه 07 مرداد 1389, 13:34 عصر
... و توی Source پروژه قبل از فرم اصلی و از طریق کد ایجادش کنی.
program Project1;

uses
Forms, Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Form2 := TForm2.Create(nil);
if Form2.ShowModal <> mrOk then
Application.Terminate
else
Application.CreateForm(TForm1, Form1);
Application.Run;
end.


میشه لطفا بگین منظورتون از سورس پروژه دقیقاً کجاست؟ (من کجا باید این کد را بنویسم تا فرم در Run time ایجاد بشه؟)

SAASTN
پنج شنبه 07 مرداد 1389, 13:53 عصر
توی منوی Project گزینه View Source رو بزنید.

amir-m
پنج شنبه 07 مرداد 1389, 18:17 عصر
به خط 12 قطعه کد خطا میده.
بی زحمت یه نگاهی به برنامه بندازید:
http://www.persiangig.com/pages/download/?dl=http://amir9004.persiangig.com/Sample.zip

Daren-shan
پنج شنبه 07 مرداد 1389, 19:25 عصر
راه اول به جای اینکه ویزیبل فرم رو فالس کنی ، فرم رو تخریب کن و در زمان تخریب فرم دوم رو درست کن(اینو خودم خوب بلد نیستم)
راه دوم : به جای دو تا فرم از دو تا Frame استفاده کن.اون طوری میتونی Frame اول که مربوط به لاگین هستش رو تخریب کنی یا ویزیبل ش رو فالس کنی.
(برای تخریب فکر کنم به جای دستور Create دستور destroy رو باید نوشت.و میتونی تو event ondestroy فرم اول درست شدن(create) فرم دوم رو تعریف کنی)

SAASTN
شنبه 09 مرداد 1389, 07:51 صبح
به خط 12 قطعه کد خطا میده
خط 12 که Application.Initialize ه! احتمالا برای شما روی خط بعدی خطا داره:

Application.MainFormOnTaskbar := True;
فکر می کنم تو دلفی7 هنوز MainFormOnTaskbar اضافه نشده بود. حذف بشه درست میشه، جای فرمها هم باید عوض می شد، اصلاحش کردم:

amir-m
یک شنبه 10 مرداد 1389, 14:54 عصر
بله. من با دلفی 7 کار میکنم
برنامه ی اصلاح شده هم همچنان همون شکل را داره!!!

baran_2005
سه شنبه 12 مرداد 1389, 15:13 عصر
از کد زیر هم میتونید استفاده کنید
کافیه در داخل فرمی که می خواهید در taskbar نمایش داده شود قرار گیرد .

uses
ShellApi;

private
procedure CreateParams(var Params: TCreateParams) ; override;

........

procedure TForm1.CreateParams(var Params: TCreateParams) ;
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent :=ParentWindow ;
end;

SAASTN
سه شنبه 12 مرداد 1389, 23:22 عصر
بله. من با دلفی 7 کار میکنم
برنامه ی اصلاح شده هم همچنان همون شکل را داره!!!
من کامپایل کردم و اجرا شد، همون مشکل یعنی کدوم مشکل؟ متن خطا چیه؟