20-06-19, 10:21 PM
(آخر تعديل لهذه المشاركة : 20-06-19, 10:25 PM {2} بواسطة أبوبكر سويدان.)
فورم تسجيل الدخول في العادة يكون أول فورم يبدأ به تشغيل البرنامج ، ولذلك لو أغلقته حتماً سيتم غلق البرنامج ككل.
الحل أنك تخفيه فبل استدعاء الشاشة الرئيسية.
وفي حدث
للفورم الرئيسي، قم بإظهار رسالة تتأكد من قرار المستخدم هل يريد فعلا إغلاق البرنامج أم لا.
في حالة قرر الإغلاق، اكتب:
وقبلها في زر الإغلاق اكتب:
التسلسل في تنفيذ الأحداث بيكون أولا برمجة الزر الخاص بالإغلاق، ثم يتبعه الحدث CloseQuery الخاص بالفورم.
إذا اختار المستخدم أن لا يغلق البرنامج، فاجعل قيمة البارامتر CanClose =
وإلا
وهذا مثال (من لازاروس):
الحل أنك تخفيه فبل استدعاء الشاشة الرئيسية.
وفي حدث
كود :
FormCloseQuery(Sender: TObject; var CanClose: Boolean);للفورم الرئيسي، قم بإظهار رسالة تتأكد من قرار المستخدم هل يريد فعلا إغلاق البرنامج أم لا.
في حالة قرر الإغلاق، اكتب:
كود :
Application.Terminate;وقبلها في زر الإغلاق اكتب:
كود :
Close;التسلسل في تنفيذ الأحداث بيكون أولا برمجة الزر الخاص بالإغلاق، ثم يتبعه الحدث CloseQuery الخاص بالفورم.
إذا اختار المستخدم أن لا يغلق البرنامج، فاجعل قيمة البارامتر CanClose =
كود :
CanClose := False;وإلا
كود :
CanClose := True;
Application.Terminate;وهذا مثال (من لازاروس):
كود :
procedure TFMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
var
user, pass, database, dir, Target_File_Name :String;
Backup_Counter:Integer;
begin
FConfirm.TMessage.Caption:= Sys_User_Name + '.. ' + 'هل تريد تسجيل الخروج من النظام؟';
FConfirm.ShowModal;
if FConfirm.Confirmation_ID = 0 then
begin
CanClose:= false;
exit;
end
else
begin
begin
user :=conn.UserName;
pass :=conn.Password;
database:=conn.DatabaseName;
dir := application.Location;
// get counter
OpQuery.close;
OpQuery.DataBase:=fmain.conn;
OpQuery.Close;
OpQuery.SQL.Text:='SELECT Backup_Counter FROM backup_counter WHERE ID=1';
OpQuery.Open;
opDataSource.DataSet:=OpQuery;
// 2- invoice number +1
Backup_Counter:=opDataSource.DataSet.FieldByName('Backup_Counter').AsInteger + 1;
Target_File_Name:=application.Location + 'dumps\' + inttostr(Backup_Counter) +'.sql';
// update counter
OpQuery.Close;
OpQuery.SQL.Text:='UPDATE backup_counter SET Backup_Counter=:Backup_Counter WHERE ID=1';
OpQuery.ParamByName('Backup_Counter').AsInteger:=Backup_Counter;
OpQuery.ExecSQL;
Trans.Commit;
//showmessage(Target_File_Name);
if pass<>'' then pass:=' --password='+pass;
SetEnvironmentVariable(PChar('Path'),PChar(Dir));
ShellExecute(Handle, 'open', PChar('cmd.exe'),
pchar('/c mysqldump --user='+user+pass+ ' ' +database+' >"'+Target_File_Name+'"'),nil,0);
conn.Close(true);
Application.Terminate;
end;
end;
end;
