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

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 luckyjan 的 blog

/////////////////////  (一)项目文件  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

本文关键:合理应用用户登录界面,用户登录时不必创建其他窗体
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top