PDA

View Full Version : سوال: مشکل در نمایش فرم Login قبل از فرم اصلی برنامه



Fastdesign
دوشنبه 07 آذر 1390, 09:22 صبح
سلام
در این زمینه جستجوی زیادی انجام دادم اما اونی که خودم می خواستم دستگیرم نشد.
من برای نمایش فرم Login قبل از فرم اصلی به این صورت عمل می کنم :
هنگام لود شدن برنامه فرم اصلی برنامه را مخفی می کنم و فرم دوم (فرم Login ) را نمایش می دهم.
یعنی فرم اصلی برنامه تا آخر برنامه مخفی است و از فرم دیگه ای به عنوان فرم اصلی بعد از فرم Login استفاده می کنم.
اما این روش در بعضی مواقع برام مشکل پیش میاره.
از دوستان می خوام اگه روش بهینه تری برای نمایش فرم Login یا اسپلش فرم قبل از فرم اصلی دارند از ما بی دریغ نکنند.
متشکرم
یا حق

zidane
دوشنبه 07 آذر 1390, 14:08 عصر
من خودم همیشه یک class function برای فرم لوگین درست می کنم که فرم رو create می کنه و در انتها هم اون رو free می کنه و اگه اطلاعات کاربری درست وارد شده بود مقدار true رو برگشت میده.
بعد هم با کدی شبیه if TfrmLogin.UserOK then ازش استفاده می کنم

daneshmand1354
دوشنبه 07 آذر 1390, 16:10 عصر
سلام
شما باید به منوی Project رفته و سپس View Source را انتخاب کنید
حال باید در اینجا که تنظیمات پروژه است بتوانید کد نویسی کنید
من یک نمونه برای شما میگذارم
فرض کنید فرم اصلی برنامه FormMenu
فرم اسپلش FormAbout
و فرم دریافت لاگین FormUser2
باشد در این قطعه قبل از نمایش فرم اصلی ابتدا فرم اسپلش و سپس فرم لاگین نمایش داده شده و در صورت درست بودن کلمه عبور پروژه با فرم اصلی آن یعنی FormMenu بار میشود

Application.Initialize;

Application.CreateForm(TFormMenu, FormMenu);
Application.CreateForm(TFrmAbout, FrmAbout);
Application.CreateForm(TFormBarkesh, FormBarkesh);
Application.CreateForm(TFormUser2, FormUser2);
FrmAbout.Show;
FrmAbout.Refresh;
Application.CreateForm(TFormTax, FormTax);

//-------------
//-- محل ایجاد بقیه فرمهای برنامه
//-------------

FrmAbout.Close;

FormUser2.ShowModal;
if FormUser2.AllowEnter=false then begin
Application.terminate;
end;
Application.Run;

Fastdesign
جمعه 11 آذر 1390, 13:32 عصر
جناب daneshmand1354 متشکرم از راهنمایی تون .
اگه بخوام تو اسپلش فرم ، یک کنترل تایمر بزارم و اسپلش فرم تو یک مدت زمان خاص برام نمایش بده باید چجوری براش بنویسم.
این کد را روی کنترل تایمر نوشتم:
if Timer1.Enabled=true then begin
Timer1.Enabled:=false;
SplashTimer:=false;
end;
و در قسمت سورس پروژه هم اینجوری براش نوشتم :
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm5, Form5);
//////////
Form3.Show;
Form3.Refresh;
if Form3.SplashTimer=false then begin
Form3.Close;
Form2.ShowModal;
if Form2.AllowEnter=false then
Application.Terminate
else
Application.Run;

end;
در مورد تایمر فرم اسپلش جواب نمیده !!!!
در ضمن :
فرم 3 : اسپلش فرم
فرم 2 : فرم لاگین
فرم 1 :فرم اصلی

Mahmood_M
جمعه 11 آذر 1390, 13:51 عصر
برای نمایش فرم Login یا Splash یا هر فرمی که قبل از نمایش فرم اصلی باید نمایش داده بشه ، باید اون رو قبل از Create شدن فرمهای دیگه نمایش بدید ، به عنوان مثال :
program Project1;

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

{$R *.res}

var
Login : TLoginFrm;
begin
Login := TLoginFrm.Create(Application);
if Login.ShowModal = mrOK then
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
end.

اگه بخوام تو اسپلش فرم ، یک کنترل تایمر بزارم و اسپلش فرم تو یک مدت زمان خاص برام نمایش بده باید چجوری براش بنویسم.
در OnShow مربوط به فرم Splash ، تایمر رو فعال کنید و در OnTimer مربوط به تایمر ، فرم Splash رو ببندید و تایمر رو هم غیر فعال کنید

موفق باشید ...

Fastdesign
جمعه 11 آذر 1390, 15:00 عصر
اینجوری که شما گفتید من برای اینکه یک فرم قبل از فرم اصلی نمایش داده بشه امتحان کردم . ولی وقتی فرم اسپلش را می بندم کل پروژه بسته می شه.
برای اینکه دو تا فرم قبل از فرم اصلی نمایش داده بشه باید چکار کنم . یعنی باید فرم یک(قبل از فرم اصلی) و بعد فرم دو(قبل از فرم اصلی) را Create کنم .
اگه میشه بیشتر راهنمایی کنید.

Mahmood_M
جمعه 11 آذر 1390, 15:52 عصر
باید به این صورت عمل کنید :

program Splash_Login;

uses
Forms, Controls,
MainUnit in 'MainUnit.pas' {MainFrm},
LoginUnit in 'LoginUnit.pas' {LoginFrm},
SplashUnit in 'SplashUnit.pas' {SplashFrm};

{$R *.res}

var
Login : TLoginFrm;
Splash : TSplashFrm;
begin
Splash := TSplashFrm.Create(Application);
Splash.Position := poScreenCenter;
if Splash.ShowModal = mrOK then
begin
Login := TLoginFrm.Create(Application);
Login.Position := poScreenCenter;
if Login.ShowModal = mrOK then
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainFrm, MainFrm);
Application.Run;
end;
end;
end.

برای اینکه فرمهای Login و Splash بعد از انجام وظیفشون Free بشن ، توی رویداد OnClose فرمها دستور زیر رو بنویسید :

Action := caFree;
من در کد بالا به عنوان نمونه مقدار ModalResult رو به عنوان شرط قرار دادم ، می تونید هر شرط دلخواه دیگه ای براش درنظر بگیرید
یک نمونه ضمیمه کردم ، نحوه ی استفاده از Timer در فرم Splash رو هم می تونید در نمونه ی ضمیمه شده مشاهده کنید

موفق باشید ...