首先制作一个Password窗体,并且将这个窗体设为启动时创建的唯一窗体,接下来判断用户输入的密码,如果正确,使用Application.CreateForm方法创建主窗口,如果密码不正确……你自己看着办吧。
解决方案 »
- 请问一个Tstringlist内存分配问题
- 8位的最新商品条码规则是什么?还有11位的?怎么计算?
- 请教各位大侠:根据文件修改时间对文件名进行排序的问题
- 菜鸟提问:delphi中“=”和“:=”的区别是什么?
- NMUDP控件接收消息问题
- 在sql server下,如何保证有一字段值自动增加1而且不重复?请不要说用"自动增加"字段功能,因为该内容有时候要重新从"0"开始计数
- 怎样在delphi中通过程序出错地址查对应代码行?
- 关于编写DLL的问题.
- 怎样暂停递归,去打开另一个窗口?
- 什么是三层结构/两层结构(需要详解)
- install shield for delphi5 的安装程序在哪里?
- 简单问题:进程(copy或load文件时)怎样控制?
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;
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]
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]
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]
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.试试看。
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的窗口调用,然后判断即可.
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]
FrmPassword = TFrmPassword.Create(Self);
FrmPassword.ShowModal();
if (FrmPassword.Passed)
{
ShowMessage("欢迎使用此软件!");
}
else
{
ShowMessage("您没有使用权限不能进入该系统!");
Application.Terminate();
}
FrmPassword.Release();
FrmPassword = TFrmPassword.Create(Self);
FrmPassword.ShowModal();
if (FrmPassword.Passed)
{
ShowMessage("欢迎使用此软件!");
}
else
{
ShowMessage("您没有使用权限不能进入该系统!");
Application.Terminate();
}
FrmPassword.Release();[email protected]
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.
万分感谢
SLS
delphi和BCB编码严谨、归整,易于调试和阅读,即使是汇编代码也是“结构化”的,对于开发除错极为有利,哪怕优化后也保持了这样良好的作风。
而VC就不同了,不知是否是全力优化的结果,但其汇编代码之混乱、难于阅读真是首屈一指(连windows自身的代码都会跳转到代码的中间;直接修改栈中间的内容和返回地址的作风更是恶劣----试问这还叫栈吗?)。并且,这样做并没有带来明显的速度优势,反而与当今RAD的潮流背道而驰。
但利弊总是相对的,我相信任何一个cracker都会同意我的观点:delphi和BCB编译的程序与VC的相比,真实太好Crack了。请各位在IDE里看看“财智家庭理财”这个注册费50元、比较流行的共享软件的汇编码,在2-4-8小时内crack她成什么license code都行的人应不少吧?
因此,fyje, wsf, wingsun, meijg, chenjiang的方法都是好方法,若这个密码框关系到各位的利益,请各位在IDE里看看汇编出的代码,真令人怀疑这样的密码框是否有用?!本来这一个小小的问题轮不到我来说,一来这个密码框本身就不那么重要,二来各位大虾自必然有更好的方法;就当是凑个热闹吧,呵呵。