PDA

View Full Version : مشکل نمایش فرم ناخواسته به هنگام Minimize و Maximize شدن برنامه



ariobarzan
سه شنبه 17 مرداد 1396, 23:44 عصر
با سلام
من فرمی دارم که ابتدای برنامه از کاربر نام کاربری و کلمه عبور می گیره و بعد از چک کردن پسورد فرم اصلی برنامه و در صورت لزوم فرمهای دیگه را باز می کنه
در هر لحظه فقط یک فرم باز هست
حالا وقتی برنامه را Minimize می کنیم و بعد دوباره اون را میاریم روی صفحه بطور نا خواسته فرم نام کاربر و کلمه عبور ظاهر میشه در صورتی که اصلا فرم صدا زده نشده
اگر کاربر کلمه عبور و پسورد را بزنه دوباره نرم افزار اجرا میشه
اگر Cancel بزنه کلا برنامه بسته میشه (یعنی همون فرمی که Minimize شده بود )
اگر بیخیال نام کاربری و کلمه عبور بشه و بزاره یه گوشه دسکتاپ اون وقت میتونه با فرم Minimize شده کار کنه
چه راه حلی برای این که دوباره فرم نام کاربری و کلمه عبور الکی ظاهر نشه هست؟

persia_hrn
شنبه 21 مرداد 1396, 11:55 صبح
سلام ، اول شما مشخص کنید فرمی که در اون کلمه عبور رو دریافت میکنید فرم اصلی (MainForm) هست یا خیر ؟
بعد باید مشخص کنید که فرم پسورد بعد از اینکه پسورد رو گرفت و تأیید کرد بسته میشه و فرم های بعدی نمیاش داده میشه یا اینکه Hide میشه ؟
توی خاصیت OnActivate فرم اصلی برنامه چی نوشتین ؟

ariobarzan
سه شنبه 07 شهریور 1396, 18:04 عصر
با سلام
بله فرم اصلی هست
بعد از گرفتن پسورد این فرم Hide میشه و فرم بعدی که صفحه اصلی نرم افزار هست نشون داده میشه
توی خاصیت OnActivate فرم اصلی هم چیزی ننوشتم

Mask
سه شنبه 07 شهریور 1396, 19:06 عصر
از کدام نسخه دلفی استفاده میکنید؟

ariobarzan
سه شنبه 07 شهریور 1396, 19:57 عصر
برنامه را با دلفی 7 نوشتم

Mahmood_M
چهارشنبه 08 شهریور 1396, 10:21 صبح
از فرم اصلی نباید برای گرفتن نام کاربری استفاده کنید، باید در یونیت اصلی پروژه یک فرم جداگانه قبل از ساخت فرم اصلی برنامه بسازید و اون رو نمایش بدید
یک نمونه ضمیمه کردم که هم فرم Splash داره و هم فرم Login
توجه کنید که "اولین" فرمی که در یونیت اصلی پروژه با دستور "Application.CreateForm" ساخته میشه، از نظر دلفی فرم اصلی پروژه درنظر گرفته میشه

ariobarzan
یک شنبه 12 شهریور 1396, 22:32 عصر
با سلام
برنامه این پیام خطا را میده
[Fatal Error] ChildUnit.pas(6): File not found: 'Winapi.Windows.dcu'

persia_hrn
پنج شنبه 16 شهریور 1396, 13:06 عصر
دوست عزیز واسه اینکار اصلاً نیازی به کامپوننتهای جانبی ندارید ، شما اول که باید فرم اصلی برنامتون MainForm باشه و فرم دریافت پسورد فرم جانبی باشه و 2 حالت واسه دریافت پسورد بهتون پیشنهاد میکنم :
1- فرم اصلی برنامه نمایش داده و سپس بلافاصله فرم دریافت پسورد نمایش داده بشه . ( راحتتر انجام میشه )
2- فرم اصلی برنامه بعد از دریافت پسورد نمایش داده بشه .

شما کدوم حالت رو میخوای تا کدش رو برات بذارم همینجا .

khorsandreza
جمعه 17 شهریور 1396, 15:29 عصر
از فرم اصلی نباید برای گرفتن نام کاربری استفاده کنید، باید در یونیت اصلی پروژه یک فرم جداگانه قبل از ساخت فرم اصلی برنامه بسازید و اون رو نمایش بدید
یک نمونه ضمیمه کردم که هم فرم Splash داره و هم فرم Login
توجه کنید که "اولین" فرمی که در یونیت اصلی پروژه با دستور "Application.CreateForm" ساخته میشه، از نظر دلفی فرم اصلی پروژه درنظر گرفته میشه
سلام
روش خوبی هست برای فرم لاگین ولی من به یک مشکل برخورد کردم من فرم Model دارم دیتابیس و دیتا ست ها در ان فرم است موقع ساخته شدن فرم بر اساس ریجستری من کانکشن ها برقرار میشه و سپس فرم لاگین از فرم اصلی در ONShow فراخوانی می کنم ولی در این روش چون قبل از ساخته شدن فرم مدل فرم لاگین ساخته میشه عملا ارتباط با دیتابیس برقرار نمیشه شکل دستورات

Application.MainFormOnTaskBar := True;
GetPasswordForm := TGetPasswordForm.Create(Application);
GetPasswordForm.Position := poScreenCenter;
if GetPasswordForm.ShowModal = mrOK then
begin
Application.Initialize;
TStyleManager.TrySetStyle('Luna');
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TDM, DM);
Application.Run;
end;

Mahmood_M
دوشنبه 20 شهریور 1396, 02:32 صبح
با سلام
برنامه این پیام خطا را میده
[Fatal Error] ChildUnit.pas(6): File not found: 'Winapi.Windows.dcu'



اگر از نسخه های قدیمی دلفی استفاده می کنید عبارت WinApi رو از نام یونیت حذف کنید

Mahmood_M
دوشنبه 20 شهریور 1396, 02:33 صبح
سلام
روش خوبی هست برای فرم لاگین ولی من به یک مشکل برخورد کردم من فرم Model دارم دیتابیس و دیتا ست ها در ان فرم است موقع ساخته شدن فرم بر اساس ریجستری من کانکشن ها برقرار میشه و سپس فرم لاگین از فرم اصلی در ONShow فراخوانی می کنم ولی در این روش چون قبل از ساخته شدن فرم مدل فرم لاگین ساخته میشه عملا ارتباط با دیتابیس برقرار نمیشه شکل دستورات

Application.MainFormOnTaskBar := True;
GetPasswordForm := TGetPasswordForm.Create(Application);
GetPasswordForm.Position := poScreenCenter;
if GetPasswordForm.ShowModal = mrOK then
begin
Application.Initialize;
TStyleManager.TrySetStyle('Luna');
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TDM, DM);
Application.Run;
end;



وقتی هنوز کاربر وارد برنامه نشده، نباید Connection اصلی و DataModule لود بشه
روی فرم لاگین یک کانکشن جداگانه بذارید و فقط برای بررسی اطلاعات کاربر به بانک وصل بشید