第一个问题: 在主窗体的show事件里加入登录窗体(fmLogin,含确定和取消按钮)的创建和显示 ,如果用户按了确定按钮并且通过验证的话则继续运行,否则程序退出。 procedure TfmMain.FormShow(Sender: TObject); begin fmLogin:=TfmLogin.Create(Application); if fmlogin.showmodal<>mrok then Application.Terminate; end; 登录窗体的程序的程序... unit Login;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, DBCtrls, Mask, ToolEdit, RxLookup, jpeg;type TfmLogin = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Edit2: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; ComboBox1: TRxLookupEdit; Image1: TImage; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end;var fmLogin: TfmLogin;implementationuses Main, DMBBQ_ZNJCS;{$R *.DFM}procedure TfmLogin.BitBtn1Click(Sender: TObject); Var SQLString:String; begin if ComboBox1.Text='' then begin Application.MessageBox('您没有选择登录操作员,请重选!','错误',MB_OK OR MB_ICONEXCLAMATION); ComboBox1.SelectAll; exit; end; Try if (ComboBox1.Text='BBQ_ZNJCS') AND (Edit2.Text='BBQ_ZNJCS') then Begin fmMain.CurrentOperatorCode:='BBQ_ZNJCS'; fmMain.CurrentOperatorCode:=ComboBox1.LookupValue; fmMain.StatusBar.Panels[0].Text:='系统处于就绪状态...'; fmMain.StatusBar.Panels[2].Text:=ComboBox1.Text; fmMain.StatusBar.Panels[3].Text:=DateToStr(Date); ModalResult := mrOK; Exit; end; DMStoreManage.Query1.Close; DMStoreManage.Query1.SQL.Clear; SQLString:='SELECT * FROM TOPERATOR WHERE OPERATORCODE=:OPERATORCODE AND OPERATORNAME=:OPERATORNAME'; If Edit2.Text<>'' Then SQLString:=SQLString+' AND OPERATORPWD='''+Edit2.Text+'''' Else SQLString:=SQLString+' AND OPERATORPWD IS NULL'; DMStoreManage.Query1.SQL.Add(SQLString); DMStoreManage.Query1.ParamByName('OPERATORCODE').AsString:=ComboBox1.LookupValue; DMStoreManage.Query1.ParamByName('OPERATORNAME').AsString:=ComboBox1.Text; DMStoreManage.Query1.Open; If DMStoreManage.Query1.RecordCount>0 then Begin DMStoreManage.Query1.First; fmMain.CurrentOperatorCode:=ComboBox1.LookupValue; fmMain.StatusBar.Panels[0].Text:='系统处于就绪状态...'; fmMain.StatusBar.Panels[2].Text:=ComboBox1.Text; fmMain.StatusBar.Panels[4].Text:=DateToStr(Date); ModalResult := mrOK; end Else Begin Application.MessageBox('您输入的用户名或密码错误,请重输!','错误',MB_OK OR MB_ICONEXCLAMATION); Edit2.SelectAll; Exit; end; Except Application.MessageBox('试图进行安全性检验时出错!','错误',MB_OK OR MB_ICONSTOP); end; end;procedure TfmLogin.BitBtn2Click(Sender: TObject); begin if Application.MessageBox('确实要退出本系统吗?','提示',MB_YESNO OR MB_ICONQUESTION)=IDYES then Begin ModalResult := mrCancel; Close; end else Exit; end;procedure TfmLogin.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end;procedure TfmLogin.FormCreate(Sender: TObject); begin try DMStoreManage.TOPERATOR.Open; Edit2.Clear; except Application.Messagebox('试图打开数据库中的系统操作员信息表时出错!','错误',MB_OK OR MB_ICONEXCLAMATION); Application.Terminate; end;end;procedure TfmLogin.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ActiveControl <> nil) and (Key = VK_RETURN) then Begin if ssShift in Shift then Begin if ActiveControl is TMemo then begin ; end else ActiveControl := FindNextControl(ActiveControl as TWinControl,False, True,False) End else ActiveControl := FindNextControl(ActiveControl as TWinControl, True, True, False); End; end;end. 第二个问题: 子窗体可以用以下方式创建: fmChild:=TfmChild.Create(Application); fmChild.Show; 第三个问题: 建议你使用Data Module,这样使用数据库操作比较方便。
try
Formi.showmodule;
finally
Formi.free...;
end;
Forms,
Main in 'MAIN.PAS' {MainForm},
Log in 'Log.pas' {LoginForm};{$R *.RES}begin
Application.Initialize;
Application.ShowMainForm:=false; // Here!!
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TLoginForm, LoginForm);
Application.Run;
end.unit Log;interfaceuses
Windows, ...type
TLoginForm = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
LoginForm:TLoginForm;implementation{$R *.DFM}uses
Main;procedure TLoginForm.BitBtn1Click(Sender: TObject);
begin
if Edit1.Text='' then
begin
MessageDlg('请输入密码!',mtConfirmation,[mbOK],0);
exit;
end;
if ValidatPwd(Edit1.Text)=false then //密码验证过程
begin
MessageDlg('密码错误,请重新输入!',mtConfirmation,[mbOK],0);
exit;
end;
MainForm.Show; // Here!!
Free;
end;
procedure TLoginForm.BitBtn2Click(Sender: TObject);
begin
Application.Terminate; //退出程序
end;end.
问题三:楼上同学意见不错.创建一个数据模块,将您的表放到其中,在需要操作表的单元中只需引用该模块,然后try datamodel1.table1.open ;except datamodel1.table1.close;就ok了
在主窗体的show事件里加入登录窗体(fmLogin,含确定和取消按钮)的创建和显示 ,如果用户按了确定按钮并且通过验证的话则继续运行,否则程序退出。
procedure TfmMain.FormShow(Sender: TObject);
begin
fmLogin:=TfmLogin.Create(Application);
if fmlogin.showmodal<>mrok then
Application.Terminate;
end;
登录窗体的程序的程序...
unit Login;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons, DBCtrls, Mask, ToolEdit, RxLookup, jpeg;type
TfmLogin = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ComboBox1: TRxLookupEdit;
Image1: TImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;var
fmLogin: TfmLogin;implementationuses Main, DMBBQ_ZNJCS;{$R *.DFM}procedure TfmLogin.BitBtn1Click(Sender: TObject);
Var
SQLString:String;
begin
if ComboBox1.Text='' then
begin
Application.MessageBox('您没有选择登录操作员,请重选!','错误',MB_OK OR MB_ICONEXCLAMATION);
ComboBox1.SelectAll;
exit;
end;
Try
if (ComboBox1.Text='BBQ_ZNJCS') AND (Edit2.Text='BBQ_ZNJCS') then
Begin
fmMain.CurrentOperatorCode:='BBQ_ZNJCS';
fmMain.CurrentOperatorCode:=ComboBox1.LookupValue;
fmMain.StatusBar.Panels[0].Text:='系统处于就绪状态...';
fmMain.StatusBar.Panels[2].Text:=ComboBox1.Text;
fmMain.StatusBar.Panels[3].Text:=DateToStr(Date);
ModalResult := mrOK;
Exit;
end;
DMStoreManage.Query1.Close;
DMStoreManage.Query1.SQL.Clear;
SQLString:='SELECT * FROM TOPERATOR WHERE OPERATORCODE=:OPERATORCODE AND OPERATORNAME=:OPERATORNAME';
If Edit2.Text<>'' Then
SQLString:=SQLString+' AND OPERATORPWD='''+Edit2.Text+''''
Else
SQLString:=SQLString+' AND OPERATORPWD IS NULL';
DMStoreManage.Query1.SQL.Add(SQLString);
DMStoreManage.Query1.ParamByName('OPERATORCODE').AsString:=ComboBox1.LookupValue;
DMStoreManage.Query1.ParamByName('OPERATORNAME').AsString:=ComboBox1.Text;
DMStoreManage.Query1.Open;
If DMStoreManage.Query1.RecordCount>0 then
Begin
DMStoreManage.Query1.First;
fmMain.CurrentOperatorCode:=ComboBox1.LookupValue;
fmMain.StatusBar.Panels[0].Text:='系统处于就绪状态...';
fmMain.StatusBar.Panels[2].Text:=ComboBox1.Text;
fmMain.StatusBar.Panels[4].Text:=DateToStr(Date);
ModalResult := mrOK;
end
Else
Begin
Application.MessageBox('您输入的用户名或密码错误,请重输!','错误',MB_OK OR MB_ICONEXCLAMATION);
Edit2.SelectAll;
Exit;
end;
Except
Application.MessageBox('试图进行安全性检验时出错!','错误',MB_OK OR MB_ICONSTOP);
end;
end;procedure TfmLogin.BitBtn2Click(Sender: TObject);
begin
if Application.MessageBox('确实要退出本系统吗?','提示',MB_YESNO OR MB_ICONQUESTION)=IDYES then
Begin
ModalResult := mrCancel;
Close;
end
else
Exit;
end;procedure TfmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;procedure TfmLogin.FormCreate(Sender: TObject);
begin
try
DMStoreManage.TOPERATOR.Open;
Edit2.Clear;
except
Application.Messagebox('试图打开数据库中的系统操作员信息表时出错!','错误',MB_OK OR MB_ICONEXCLAMATION);
Application.Terminate;
end;end;procedure TfmLogin.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ActiveControl <> nil) and (Key = VK_RETURN) then
Begin
if ssShift in Shift then
Begin
if ActiveControl is TMemo then
begin
;
end
else
ActiveControl := FindNextControl(ActiveControl as TWinControl,False, True,False)
End
else
ActiveControl := FindNextControl(ActiveControl as TWinControl, True, True, False);
End;
end;end.
第二个问题:
子窗体可以用以下方式创建:
fmChild:=TfmChild.Create(Application);
fmChild.Show;
第三个问题:
建议你使用Data Module,这样使用数据库操作比较方便。