合理应用用户登录界面,用户登录时不必创建其他窗体

原创 2004年10月09日 09:06:00

/////////////////////  (一)项目文件  test.dpr //////////////////////
program SerialGet;

uses
  Forms,
  UMain in 'UMain.pas' {frmMain},
  ULogin in 'ULogin.pas' {frmLogin},
  UDataModule in 'UDataModule.pas' {DataModule1: TDataModule},

{$R *.res}

begin
  Application.Initialize;

  if CreateMutex then                 //创建句柄,判断此应用程序是否在运行
  begin
    //调用全局函数,创建并显示登陆界面
    if doLogin then                   //登陆成功
    begin
      Application.CreateForm(TfrmMain, frmMain);
      //数据模块文件不须在这儿创建,因为 ULogin.pas 中已创建
      //Application.CreateForm(TDataModule1, DataModule1);
      Application.Run;
    end else                          //登陆不成功
    begin
      try
        DataModule1.free;
        Application.terminate;
      except
      end;
    end;
  end else
  begin
    DestroyMutex;                     //释放句柄
  end;
end.

////////////////  (二)登陆窗体 ULogin.pas  ULogin.dfm //////////////////
unit ULogin;

interface
uses ......
type
  ... ... ...
  private
    function checkPsw:integer;
  public
  end;

var
  frmLogin: TfrmLogin;

  function doLogIn:boolean;          // 全项目公用函数
  function CreateMutex: Boolean;     // 全项目公用函数
  procedure DestroyMutex;            // 全项目公用函数

implementation
uses UDataModule;  //引用数据模块
var Mutex: hWnd;

{$R *.dfm}

function doLogIn:boolean;                 //由项目文件调用此函数
begin
  with TfrmLogin.create(application) do   //创建并显示登陆界面
  begin
    //窗体的ShowModal属性
    if ShowModal = mrok then result := true else result := false;
    free;
  end;
end;

procedure DestroyMutex;
begin
  if Mutex <> 0 then CloseHandle(Mutex);
end;

function CreateMutex: Boolean;
var
  PrevInstHandle: THandle;
  AppTitle: PChar;
begin
  AppTitle := StrAlloc(100);
  StrPCopy(AppTitle, Application.Title);
  Result := True;
  Mutex := Windows.CreateMutex(nil, False, AppTitle);
  if (GetLastError = ERROR_ALREADY_EXISTS) or (Mutex = 0) then begin
    Result := False;
    SetWindowText(Application.Handle, '');
    PrevInstHandle := FindWindow(nil, AppTitle);
    if PrevInstHandle <> 0 then begin
      if IsIconic(PrevInstHandle) then
        ShowWindow(PrevInstHandle, SW_RESTORE)
      else
        BringWindowToTop(PrevInstHandle);
      SetForegroundWindow(PrevInstHandle);
    end;
    if Mutex <> 0 then Mutex := 0;
  end;
  StrDispose(AppTitle);
end;

// -1: 密码不对  1:数据库不对  2:没有此用户  3:合法
function TfrmLogin.checkPsw:integer;
var name,sPsw,SQL,sValue:string;
begin
  Application.CreateForm(TDataModule1, DataModule1);  //此处创建了数据模块
  if not DataModule1.ConnOK then
  begin result := 1;   exit;  end;

  name := lowercase(editName.text);  //文本框
  sPsw := lowercase(editPass.text);  //文本框
  sql := 'select * from maker where name="'+name+'"';
  if openSQL(SQL,DataModule1.dsDataSet) <=0 then
  begin result := 2; exit;  end;

  DataModule1.dsDataSet.First ;
  sValue := lowercase(DataModule1.dsDataSet.fieldbyName('loginPsw').asString);
  if sValue<>sPsw then result := -1 else result := 3;
end;

/////////////////////  (三)数据模块 UDataModule.pas //////////////////////
... ... ... ...
type
  public
    ConnOK:boolean;
  end;
var
  DataModule1: TDataModule1;
  function OpenSQL(s: string;query:TADODataSet):integer;
  function DoSQL(s: string;query:TADOQuery):boolean;
 
implementation

{$R *.dfm}

procedure TDataModule1.DataModuleCreate(Sender: TObject); //连接ADOConnection
var SQL,pwd:string;
begin
  try
    pwd := 'deliSerial';
    SQL := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
         extractfilepath(paramstr(0))+'SerialInfo.mdb'+
         ';Persist Security Info=False;'  +
         'Jet OLEDB:Database Password="'+pwd+'"';
    ADOConnection1.Connected := false;
    ADOConnection1.ConnectionString := SQL;
    ADOConnection1.Connected := true;
    ConnOK:=true;
  except
    ConnOK:=false;
  end;
end;

function OpenSQL(s: string;query:TADODataSet):integer; //查询SQL
var old_Cursor:TCursor;
begin
  old_Cursor:=screen.cursor;
  screen.cursor:=crSQLWait;
  try
    try
      with query do
      begin
        close; commandtext:=s; open;
        result:=query.recordcount;       //返回结果集记录数
      end;
    except
     result:=0;
    end;
  finally
    screen.cursor:=old_Cursor;
  end;
end;

function DoSQL(s: string;query:TADOQuery):boolean;  //运行 SQL
var old_Cursor:TCursor;
begin
  result:=true;
  old_Cursor:=screen.cursor;
  screen.cursor:=crSQLWait;
  try
    try
      with query do
      begin
        close; SQL.Clear; SQL.Add(s); ExecSQL;
      end;
    except
      result:=false;
    end;
  finally
    screen.cursor:=old_Cursor;
  end;
end;

Ubuntu14.10登录界面隐藏其他用户登录窗口

上次装完MySQL后每次开机登录界面都会有一个mysql用户登录框在管理员用户下边。感觉很碍眼。记得上次在安装MySQL时就屏蔽了mysql用户登录,可为何还会在登录界面显示。比较纳闷了。在网上找很多...
  • u012588561
  • u012588561
  • 2016年08月09日 22:40
  • 1737

使用windows窗体应用程序来实现用户名与密码的登录

使用windows窗体应用程序来实现用户名与密码的登录。在本页面项目下右击选择添加一个新建项选取基于服务器的数据库,弹出的页面取消。本页面左侧会出现服务器资源管理器建表,进行一系列操作。连接数据库时也...
  • wang_yuanyuan1
  • wang_yuanyuan1
  • 2012年02月20日 21:12
  • 3114

ubuntu15.04登陆界面中隐藏指定用户

前几天装了个mongodb,其中配置了一个mongodb帐号,发现出现在登陆的用户列表中,这个比较讨厌,作为特定服务的用户我们并不希望其出现在登陆框中,因此想了个办法把他隐藏掉,发现网上大部分的做法是...
  • cjuexuan
  • cjuexuan
  • 2015年11月02日 20:34
  • 1851

Java Swing界面编程(23)---事件处理:编写用户验证登录用例

LoginCheck: package com.beyole.util; class LoginCheck {//编写登录验证类 private String userName;//用户名 p...
  • xuejiawei123
  • xuejiawei123
  • 2014年05月30日 14:21
  • 3186

Mac系统开发常见问题-Mac登录界面多了一个其他账户选项

最近在给MacbookPro安装许多应用多了,开机登录页面“其他账户”选项,开机及其丑陋,无法忍受,搜索相关文章发现可以这样解决。 方法: 1.系统偏好设置-》用户与群组-》解锁-》登录选项-》自...
  • ILOVESMJ
  • ILOVESMJ
  • 2016年05月30日 22:51
  • 7662

BCB中登陆窗口的实现

方法一:jiang
  • xshy1986
  • xshy1986
  • 2014年07月21日 21:28
  • 124

一个简单的用户登录界面和SQL连接了

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security...
  • sufei1013
  • sufei1013
  • 2008年05月23日 12:45
  • 1281

HTML+JavaScript 用户登录界面

简单的用户登录验证 代码如下: 登录界面 //窗体改变大小时触发事件 window.onresize = setViewSize; var m...
  • qq776306395
  • qq776306395
  • 2014年04月11日 10:44
  • 8256

QT实现登陆界面

代码: MainWindows.h#ifndef MAINWINDOW_H #define MAINWINDOW_H#include #includenamespace Ui { clas...
  • qq_27312943
  • qq_27312943
  • 2016年04月09日 10:35
  • 8429

怎样隐藏Win7中不想出现在登录界面的用户

在Windows系统管理里,我们经常会基于管理目的来建立一些特殊的用户帐号,用它们来赋予程序的运行权限或给资源进行权限设置。 首先打开“计算机管理”建立需要的用户。 这个用户我不想让它出现在你机器的...
  • u012482273
  • u012482273
  • 2014年05月15日 08:48
  • 1163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:合理应用用户登录界面,用户登录时不必创建其他窗体
举报原因:
原因补充:

(最多只允许输入30个字)