📄 u_logon.pas
字号:
unit U_Logon;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Db, DBTables, EnBmpGr;
type
TFm_Logon = class(TForm)
Label1: TLabel;
Label3: TLabel;
Ed_Name: TEdit;
Ed_Password: TEdit;
Bevel1: TBevel;
But_Ok: TButton;
But_Cancel: TButton;
Image1: TImage;
DS: TDataSource;
DQuery: TQuery;
UpSQL: TUpdateSQL;
CmbBox_Name: TComboBox;
procedure But_OkClick(Sender: TObject);
procedure Ed_NameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CmbBox_NameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
public
LogonPass: integer;
procedure InitGloabVar;
end;
var
Fm_Logon: TFm_Logon;
function Show_Logon: Boolean;
implementation
uses IniFiles, U_GlobalVar, U_GlobalProc, U_DM, U_Main; {全局变量}
{$R *.DFM}
function Show_Logon: Boolean;
var
i: integer;
tmQuery: TQuery;
begin
Result := False;
Fm_Logon := TFm_Logon.Create(Application);
with Fm_Logon do
try
//S_DataPath := S_ExePath + '\Data';
//建立目录
if not FileExists(S_DataPath + '\nul') then
CreateDir(S_DataPath);
if not FileExists(S_DataPath + '\Bmp\nul') then
CreateDir(S_DataPath + '\Bmp');
if not FileExists(S_SysPath + '\nul') then
CreateDir(S_SysPath);
if not FileExists(S_TmpPath + '\nul') then
CreateDir(S_TmpPath);
if Si_LogonStyle = 1 then
begin
CmbBox_Name.Visible := True;
Ed_Name.Visible := False;
end
else
begin
CmbBox_Name.Visible := False;
Ed_Name.Visible := True;
end;
LogonPass := 0;
DQuery.DatabaseName := SysDBase;
DQuery.Open;
if DQuery.IsEmpty then
begin
with DQuery do
begin
Append;
FieldByName('s_rydm').AsString := '001';
FieldByName('s_ryxm').AsString := S_SchoolControl;
FieldByName('s_rykl').AsString := '';
Post;
ApplyUpdates;
end;
tmQuery := TQuery.Create(Application);
with tmQuery do
try
DataBaseName := SysDBase;
// 人员权限
SQL.Text := 'INSERT INTO czryqx SELECT d1.s_rydm, d2.s_cddm, ''1'', ' +
'''1'' FROM "czry.db" d1, "cdgn.db" d2 ' +
'WHERE d1.s_rydm=''001''';
ExecSQL;
finally
Free;
end;
end;
DQuery.First;
if CmbBox_Name.Visible then
begin
while not DQuery.Eof do
begin
CmbBox_Name.Items.Add(DQuery.FieldByName('s_ryxm').AsString);
DQuery.Next;
end;
CmbBox_Name.ItemIndex := 0;
end;
{tmUserCode := DQuery.FieldByName('s_rydm').AsString;
tmUserName := DQuery.FieldByName('s_ryxm').AsString;
tmUserPassWord := DQuery.FieldByName('s_rykl').AsString;}
if (Fm_Logon.ShowModal = mrOk) then
begin
for i := Fm_Main.MDIChildCount - 1 downto 0 do
Fm_Main.MDIChildren[i].Close;
InitGloabVar; //初始化全局变量
Result := True;
end;
// 操作权限
SetUserPower(S_UserCode);
finally
DQuery.Close;
Free;
end;
end;
procedure TFm_Logon.But_OkClick(Sender: TObject);
var
tmName: string;
begin
if CmbBox_Name.Visible then
tmName := CmbBox_Name.Text
else
tmName := Ed_Name.Text;
if DQuery.Locate('s_ryxm;s_rykl',
VarArrayOf([Trim(tmName), Trim(Ed_Password.Text)]), []) then
begin
//tmUserCode := DQuery.FieldByName('s_rydm').AsString;
S_UserCode := DQuery.FieldByName('s_rydm').AsString; //操作员代码
S_UserName := DQuery.FieldByName('s_ryxm').AsString; //操作员姓名
S_UserPassWord := DQuery.FieldByName('s_rykl').AsString; //口令
ModalResult := mrOk;
end
else
begin
LogonPass := LogonPass + 1;
if LogonPass >= 3 then
begin
U_GlobalProc.Show_ErrorMess('你输入的操作人员或者密码不对,请核对后再运行本系统。');
ModalResult := mrCancel;
Exit;
end
else
begin
Show_ErrorMess('你输入的操作人员或者密码不对,请再输入一次。');
Ed_Password.Text := '';
if CmbBox_Name.Visible then
CmbBox_Name.SetFocus
else
begin
Ed_Name.Text := '';
Ed_Name.SetFocus;
end;
end
end;
end;
procedure TFm_Logon.InitGloabVar;
var
i: integer;
begin
with TIniFile.Create(S_SysPath + '\' + StudentIniFile) do
try
// 数据库名, 服务器名
S_DBaseName := ReadString('系统参数', '数据库名', '');
S_ServerName := ReadString('系统参数', '服务器名', '');
// 学校代码, 学校名称, 负责人
S_SchoolCode := ReadString('系统参数', '学校代码', '');
S_SchoolName := ReadString('系统参数', '学校名称', '');
S_SchoolControl := ReadString('系统参数', '负责人', '');
// 系统是否启用
B_BeginUse := ReadBool('系统参数', '启用', False);
// 系统 启用年份、启用学期
W_StartYear := ReadInteger('系统参数', '启用学年', 0);
W_StartTerm := ReadInteger('系统参数', '启用学期', 0);
// 当前年份、月份
W_CurYear := ReadInteger('系统参数', '当前学年', 0);
W_CurTerm := ReadInteger('系统参数', '当前学期', 0);
S_CurTermCode := IntToStr(W_CurYear) + IntToStr(W_CurTerm);
// 总年级数、各年级班数、各年级班号
SI_GradeCount := ReadInteger('系统参数', '总年级数', 3);
if SI_GradeCount > 6 then
SI_GradeCount := 6;
if SI_GradeCount > 0 then
SetLength(SI_Classes, SI_GradeCount);
//SetLength(SA_ClassCode, SI_GradeCount);
for i := 0 to SI_GradeCount - 1 do
begin
SI_Classes[i] := ReadInteger('系统参数', GradeNames[i] + '年级', 1);
//SetLength(SA_ClassCode[i], SI_Classes[i]);
end;
// 系统当前日期
D_CurDate := Date;
// 文件类型 1 - DBF 2 - TXT 其他保留
// 对齐方式 1 - 左对齐 2 - 居中 3 - 右对齐
SI_FileType := ReadInteger('系统参数', '文件类型', 1);
SI_AlignType := ReadInteger('系统参数', '对齐方式', 1);
finally
Free;
end;
end;
procedure TFm_Logon.Ed_NameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
begin
Key := 0;
if Shift = [] then
SelectNext(ActiveControl, True, True)
else if Shift = [ssShift] then
SelectNext(ActiveControl, False, True)
else
Key := 13;
end;
end;
procedure TFm_Logon.CmbBox_NameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) and (not (Sender as TComboBox).DroppedDown) then
begin
Key := 0;
SelectNext(ActiveControl, True, True);
end;
if (Key = VK_DOWN) and (not (Sender as TComboBox).DroppedDown) then
begin
Key := 0;
(Sender as TComboBox).DroppedDown := TRUE;
end;
if (key = VK_LEFT) or (Key = VK_RIGHT) then
begin
if Key = VK_LEFT then
SelectNext(ActiveControl, False, True)
else
SelectNext(ActiveControl, True, True);
Key := 0;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -