首先制作一个Password窗体,并且将这个窗体设为启动时创建的唯一窗体,接下来判断用户输入的密码,如果正确,使用Application.CreateForm方法创建主窗口,如果密码不正确……你自己看着办吧。

解决方案 »

  1.   

    项目文件中
      Application.Initialize;
      Application.CreateForm(TfrmDbM1, frmDbM1);
      Application.CreateForm(Tfrmmain, frmmain);
      Application.CreateForm(Tfrmdy, frmdy);
      klsf:=false;
      frmlogin:=Tfrmlogin.create(application);//password窗口
      frmlogin.ShowModal;
      frmlogin.free;
      Application.Run;
      

  2.   

    项目文件中
      Application.Initialize;
      Application.CreateForm(TfrmDbM1, frmDbM1);
      Application.CreateForm(Tfrmmain, frmmain);
      Application.CreateForm(Tfrmdy, frmdy);
      klsf:=false;
      frmlogin:=Tfrmlogin.create(application);//password窗口
      frmlogin.ShowModal;
      frmlogin.free;
      Application.Run;
    [email protected]
      

  3.   

    项目文件中:
      Application.Initialize;
      Application.CreateForm(TfrmDbM1, frmDbM1);
      Application.CreateForm(Tfrmmain, frmmain);
      Application.CreateForm(Tfrmdy, frmdy);
      klsf:=false;
      frmlogin:=Tfrmlogin.create(application);//password窗口
      frmlogin.ShowModal;
      frmlogin.free;
      Application.Run;[email protected]
      

  4.   

    项目文件中:
      Application.Initialize;
      Application.CreateForm(TfrmDbM1, frmDbM1);
      Application.CreateForm(Tfrmmain, frmmain);
      Application.CreateForm(Tfrmdy, frmdy);
      
      frmlogin:=Tfrmlogin.create(application);//password窗口
      frmlogin.ShowModal;
      frmlogin.free;
      Application.Run;[email protected]
      

  5.   

    program app;uses
      Forms,
      Main in 'MAIN.PAS' {MainForm},
      
    {$R *.RES}begin
      passForm := TpassForm.Create(Application);
      passForm.Showmodal;
      Application.CreateForm(TMainForm, MainForm);
      passForm.Hide;
      passForm.Free;
      Application.Run;
    end.或者,在mainform的onshow事件中显示passform.试试看。
      

  6.   

    如下:
    program Project1;uses
      Forms,Windows,
      Main in 'Main.pas' {FrmMain},
      Password in 'Password.pas' {FrmPassword};{$R *.RES}begin
      Application.Initialize;
      Application.CreateForm(TFrmMain, FrmMain);
      FrmPassword:=TFrmPassword.Create(Application);
      if FrmPassword.ShowModal=idOk then
        Application.Run;
    end.
    在Application模块中将Password的窗口调用,然后判断即可.
      

  7.   

    两种方法:
    1、在project主文件中创建password窗口,判断密码,再控制程序进程
    2、在主form的onshow事件中,创建password窗口    
       frmlogo:=Tfrmlogo.Create(Application);
        try
          frmlogo.ShowModal;
          if not frmlogo.Found then
          Close;  //如果不对就关闭主窗口
        finally
           frmlogo.Free;
           frmlogo:=nil;
        end;
    e-mail:[email protected]
      

  8.   

    在主Form的OnShow或OnCreate事件中创建password窗口并对密码进行确认:
      FrmPassword = TFrmPassword.Create(Self);
      FrmPassword.ShowModal();
      if (FrmPassword.Passed)
      {
        ShowMessage("欢迎使用此软件!");
      }
      else
      {
        ShowMessage("您没有使用权限不能进入该系统!");
        Application.Terminate();
      }
      FrmPassword.Release();
      

  9.   

    在主Form的OnShow或OnCreate事件中创建password窗口并对密码进行确认:
      FrmPassword = TFrmPassword.Create(Self);
      FrmPassword.ShowModal();
      if (FrmPassword.Passed)
      {
        ShowMessage("欢迎使用此软件!");
      }
      else
      {
        ShowMessage("您没有使用权限不能进入该系统!");
        Application.Terminate();
      }
      FrmPassword.Release();[email protected]
      

  10.   

    1.建一个新的Form,为"Login"窗口,在MainForm中create.
    2.给一个简单的MIS登录的例子 :
    MainForm  :
    unit main;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Menus, DBTables;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses pubdataUnit, loginUnit;{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
      if TPubDataFrm <> Nil then
        TPubDataFrm.Free();
      TPubDataFrm := TTPubDataFrm.Create(Self);    //creat PubDataFrm  LoginDlgFrm := TLoginDlgFrm.Create(self);   //creat LoginDlgFrm
      LoginDlgFrm.ShowModal;
    end;
    end.LoginForm*____________________________*
    unit loginUnit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, DBTables, StdCtrls, ExtCtrls,
      pubdataUnit;type
      TLoginDlgFrm = class(TForm)
        Panel1: TPanel;
        Label1: TLabel;
        Label2: TLabel;
        edName: TEdit;
        qryLogin: TQuery;
        btnSure: TButton;
        Query: TQuery;
        edPsw: TEdit;
        procedure btnSureClick(Sender: TObject);
        procedure edPswKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure edNameKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        LoginTimes :integer; //登录次数
      public
        { Public declarations }
        constructor Create(AOwner: TComponent);
      end;var
      LoginDlgFrm: TLoginDlgFrm;implementationuses Main;{$R *.DFM}constructor TLoginDlgFrm.Create(AOwner: TComponent );
    begin
      inherited Create(AOwner);
    end;procedure TLoginDlgFrm.btnSureClick(Sender: TObject);
    var
      Result  :integer;
    begin
      Result := 0;  if TPubDataFrm.DB.Connected = True then
        TPubDataFrm.DB.Connected := False;  TPubDataFrm.DB.Params.Clear;
      TPubDataFrm.DB.Params.Add('USER NAME=***');
      TPubDataFrm.DB.Params.Add('PASSWORD=***');  try
        TPubDataFrm.DB.Connected := True;
        TPubDataFrm.DB.Open;
        Result := 1;
      except
        TPubDataFrm.DB.Params.Clear;
        TPubDataFrm.DB.Connected := False;    Result := -1;
        Application.Terminate;
      end;  with Query do
      begin
        Close;
        Sql.Clear;
        Sql.Add('SELECT CODE ');
        Sql.Add('FROM USER U');
        Sql.Add('WHERE U.CODE = :pCODE ');
        ParamByName('pCODE').AsString := edName.Text;
        Open;
        if RecordCount <= 0 then
        begin
          ShowMessage('人员'+edName.Text+'没有权限,请重新登录!');
          TPubDataFrm.DB.Connected := False;
          edName.Clear;
          edPsw.Clear;
          edName.SetFocus;
          exit;
        end
        else begin
          Close;
          Sql.Clear;
          Sql.Add('SELECT U.CODE, U.PASS ');
          Sql.Add('FROM USER U');
          Sql.Add('WHERE U.CODE = :pCODE AND U.PASS = :pPASS');
          ParamByName('pCODE').AsString := edName.Text;
          ParamByName('pPASS').AsString := edPsw.Text;
          open;      if RecordCount <= 0 then
          begin
            ShowMessage('口令错误,请重新登录!');
            TPubDataFrm.DB.Connected := False;
            edName.Clear;
            edPsw.Clear;
            edName.SetFocus;
            exit;
          end
          else
            ModalResult := mrOK;
          Close;
        end;
      end;
    end;procedure TLoginDlgFrm.edPswKeyDown(Sender: TObject; var Key: Word;
                  Shift: TShiftState);
    begin
      if key =VK_RETURN then
      begin
        btnSure.SetFocus;
        btnSureClick(Self);
      end;
    end;procedure TLoginDlgFrm.edNameKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if key =VK_RETURN then edPsw.SetFocus;
    end;procedure TLoginDlgFrm.FormCreate(Sender: TObject);
    begin
      TPubDataFrm.DB.Connected := False;
    end;procedure TLoginDlgFrm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if TPubDataFrm.DB.Connected = False then
        Application.Terminate;
    end;procedure TLoginDlgFrm.FormDestroy(Sender: TObject);
    begin
      LoginDlgFrm:=nil;
    end;end.
      

  11.   

    非常感谢各位的帮忙此问题已经基本解决分数如数奉上,WSF的方法基本可以如果有其他问题再请教.
    万分感谢
    SLS
      

  12.   

    我来从“聪明的程序员”和cracker的角度说说这个问题,请各位大虾海涵。delphi和BCB的编译器比VC棒许多,看看他们编译出来的汇编代码就知道。
    delphi和BCB编码严谨、归整,易于调试和阅读,即使是汇编代码也是“结构化”的,对于开发除错极为有利,哪怕优化后也保持了这样良好的作风。
    而VC就不同了,不知是否是全力优化的结果,但其汇编代码之混乱、难于阅读真是首屈一指(连windows自身的代码都会跳转到代码的中间;直接修改栈中间的内容和返回地址的作风更是恶劣----试问这还叫栈吗?)。并且,这样做并没有带来明显的速度优势,反而与当今RAD的潮流背道而驰。
    但利弊总是相对的,我相信任何一个cracker都会同意我的观点:delphi和BCB编译的程序与VC的相比,真实太好Crack了。请各位在IDE里看看“财智家庭理财”这个注册费50元、比较流行的共享软件的汇编码,在2-4-8小时内crack她成什么license code都行的人应不少吧?
    因此,fyje, wsf, wingsun, meijg, chenjiang的方法都是好方法,若这个密码框关系到各位的利益,请各位在IDE里看看汇编出的代码,真令人怀疑这样的密码框是否有用?!本来这一个小小的问题轮不到我来说,一来这个密码框本身就不那么重要,二来各位大虾自必然有更好的方法;就当是凑个热闹吧,呵呵。