如何在程序开始前加入一个密码框,原理是什么?程序要怎么写?最好能有例子.
解决方案 »
- 求助
- Delphi / C++Builder Beta 7.5 Build 16.0.4217.41600
- 为Delphi的代码完成功能伸冤
- 求返回子串在字符串中的位置的函数,大家有知道的吗
- DBGridEh中为某列增加EditButton后该列无法再编辑,要怎么改?
- 关于Pbytearray的问题,高分相送,大家一定要帮帮我。。
- 谁有开发经验并且有正式的开发文档?
- delphi7.0用ADO与SQL server连接出错?
- 在数据库中设了一个主键,在程序运行时都会按主键的须序排序.我现在不需要它排序怎么办.
- 我想写一个测试局域网性能的软件,谁有兴趣?
- 用TTreeView编了似资源管理器的树形目录,顶层“我的电脑”图标怎样取到?100分!
- 在panel上动态生成控件后,如何获得这些控件的属性,并调节、控制?
夏青虫在我们编制Delphi应用程序,常常需要提供一个密码验证框,对应用程序的使用者进行身份核对。如果能有一个通用的密码验证框,便能够为我们的工作节约不少的时间,更能使我们编制的程序小而快。以下的程序为你提供了这样的一个DLL文件。
//文件名为CheckPasswordForm.dpr;
编译此文件生成CheckPasswordForm.dll
library CheckPasswordForm;
uses
XcqCheck in 'XcqCheck.pas' {XcqForm};
exports
CheckPassword name 'CheckPassword';//dll入口
begin
end.
//文件名为XcqCheck.pas
unit XcqCheck;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, Menus;
type
TXcqForm = class(TForm)
XcqEdit: TMaskEdit;//密码输入框
OkBtn: TButton;
procedure OkBtnClick(Sender: TObject);
end;
var
XcqForm: TXcqForm;
Check: Boolean;//验证输入密码的正确性
function CheckPassword: Boolean;export;
//本dll文件的关键实现
implementation
{$R *.DFM}
procedure TXcqForm.OkBtnClick(Sender: TObject);
begin
if XcqEdit.Text = 'xcq' then
Check := True;
Close;
end;
function CheckPassword;export;
begin
Check := False;
XcqForm := TXcqForm.Create(Application);
//创建密码输入框
XcqForm.ShowModal;//显示密码输入框;
注意:不能用XcqForm.Show!
Result := Check;//返回给调用本dll的应用程序判断
XcqForm.Free;//释放本dll文件所占资源
end;
end.---- 在调用以上dll中CheckPassword函数的应用程序中只需加入以下语句在implementation 后,function CheckPassword: Boolean; external 'CheckPasswordForm.dll' name 'CheckPassword';在需要进行密码验证的地方加入下面的条件语句就完全实现了密码验证的功能。
if CheckPassword then
begin
...//如XcqQuery.Open;
end;---- 上面的程序只是一个简单的密码验证框,我们可以将密码以写入注册表或文件的方式保存,动态修改,更可以利用算术算法对密码进行简单的加密等,使要保密的数据更安全。 ---- 其实,上文中如何在dll中实现窗口让我走了不少弯路,我觉得此法对大家更有意义,这是避免程序庞大的一种有效方法,不妨试试。 ---- 以上程序在Windows98/Delphi3下编译通过。欢迎大家批评指正。
suipack控件包在哪里?
procedure TFLogin.BtnLoginClick(Sender: TObject);
begin
with dmHis.adoQLogin do
begin
Close;
Sql.Clear;
Sql.Add('select * from emp where (empid=:myid) and (password=:mypass)');
Parameters.ParamByName('myid').Value:=myid;
Parameters.ParamByName('mypass').Value:=mypass;
Open;
if RecordCount=1 then
begin
oper:= FieldByName('name').Value;
Close;
with TFmain.Create(Application) do
begin
Show;
FLogin.Hide;
end
end else begin
MessageDlg('密码错误!请检查您的工号和密码!',mtError,[mbOk],0);
edEmpid.SetFocus;
end;
end;
end;
var
Target,Source:TFileStream;
MyFileSize:integer;
begin
try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
try
Target.Seek(0,soFromEnd);//往尾部添加资源
Target.CopyFrom(Source,0);
MyFileSize:=Source.有了上面的基础,我们应该很容易看得懂这个函数。其中参数SourceFile是要添加的文件,参数TargetFile是被添加到的目标文件。比如说把a.exe添加到b.exe里面可以:Cjt_AddtoFile('a.exe',b.exe');如果添加成功就返回True否则返回假。
根据上面的函数我们可以写出相反的读出函数:
Function Cjt_LoadFromFile(SourceFile,TargetFile :string):Boolean;
var
Source:TFileStream;
Target:TMemoryStream;
MyFileSize:integer;
begin
try
Target:=TMemoryStream.Create;
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
try
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
Source.Seek(-MyFileSize,soFromEnd);//定位到资源位置
Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源
Target.SaveToFile(TargetFile);//存放到文件
finally
Target.Free;
Source.Free;
end;
except
Result:=false;
Exit;
end;
Result:=true;
end;
其中参数SourceFile是已经添加了文件的文件名称,参数TargetFile是取出文件后保存的目标文件名。比如说Cjt_LoadFromFile('b.exe','a.txt');在b.exe中取出文件保存为a.txt。如果取出成功就返回True否则返回假。
打开Delphi,新建一个工程,在窗口上放上一个Edit控件Edit1和两个Button:Button1和Button2。Button的Caption属性分别设置为“确定”和“取消”。在Button1的Click事件中写代码:
var S:string;
begin
S:=ChangeFileExt(Application.ExeName,'.Cjt');
if Edit1.Text='790617' then
begin
Cjt_LoadFromFile(Application.ExeName,S);
{取出文件保存在当前路径下并命名"原文件.Cjt"}
Winexec(pchar(S),SW_Show);{运行"原文件.Cjt"}
Application.Terminate;{退出程序}
end
else
Application.MessageBox('密码不对,请重新输入!','密码错误',MB_ICONERROR
[email protected]
谢了先!
你的是密码表是保存在一个数据库里的,
如果是这样别人很容易得到你的数据库,
打开后密码就没有用了
安全性不高