password form main form 160分!!!160分!!!

sls 2000-07-06 04:32:00
各位高手,
有一程序MDI,如何设置PASSWORD窗口在MAINFORM之前显示.最好有具体的例子.如果解决
定当重谢!!!
最好附上您的email.
sls
...全文
325 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zealy 2000-07-08
  • 打赏
  • 举报
回复
我来从“聪明的程序员”和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里看看汇编出的代码,真令人怀疑这样的密码框是否有用?!

本来这一个小小的问题轮不到我来说,一来这个密码框本身就不那么重要,二来各位大虾自必然有更好的方法;就当是凑个热闹吧,呵呵。
wsf 2000-07-07
  • 打赏
  • 举报
回复
既然这样,为什么不给点鼓励。
sls 2000-07-07
  • 打赏
  • 举报
回复
非常感谢各位的帮忙此问题已经基本解决分数如数奉上,WSF的方法基本可以如果有其他问题再请教.
万分感谢
SLS
sls 2000-07-07
  • 打赏
  • 举报
回复
sorry wsf
AiFei 2000-07-06
  • 打赏
  • 举报
回复
1.建一个新的Form,为"Login"窗口,在MainForm中create.
2.给一个简单的MIS登录的例子 :
MainForm :
unit main;

interface

uses
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;

implementation

uses 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;

interface

uses
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;

implementation

uses 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.
chenjian 2000-07-06
  • 打赏
  • 举报
回复
在主Form的OnShow或OnCreate事件中创建password窗口并对密码进行确认:
FrmPassword = TFrmPassword.Create(Self);
FrmPassword.ShowModal();
if (FrmPassword.Passed)
{
ShowMessage("欢迎使用此软件!");
}
else
{
ShowMessage("您没有使用权限不能进入该系统!");
Application.Terminate();
}
FrmPassword.Release();
chenjian 2000-07-06
  • 打赏
  • 举报
回复
在主Form的OnShow或OnCreate事件中创建password窗口并对密码进行确认:
FrmPassword = TFrmPassword.Create(Self);
FrmPassword.ShowModal();
if (FrmPassword.Passed)
{
ShowMessage("欢迎使用此软件!");
}
else
{
ShowMessage("您没有使用权限不能进入该系统!");
Application.Terminate();
}
FrmPassword.Release();

chenjian712@sina.com
meijg 2000-07-06
  • 打赏
  • 举报
回复
两种方法:
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:meijg@elong.com
Wingsun 2000-07-06
  • 打赏
  • 举报
回复
如下:
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的窗口调用,然后判断即可.
wsf 2000-07-06
  • 打赏
  • 举报
回复
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.试试看。
fyje 2000-07-06
  • 打赏
  • 举报
回复
对不起,系统出错了,出现5个回复
fyje 2000-07-06
  • 打赏
  • 举报
回复
项目文件中:
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;

fyje@netease.com
fyje 2000-07-06
  • 打赏
  • 举报
回复
项目文件中:
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;

fyje@netease.com
fyje 2000-07-06
  • 打赏
  • 举报
回复
项目文件中
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;


fyje@netease.com
fyje 2000-07-06
  • 打赏
  • 举报
回复
项目文件中
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;
windoze 2000-07-06
  • 打赏
  • 举报
回复
首先制作一个Password窗体,并且将这个窗体设为启动时创建的唯一窗体,接下来判断用户输入的密码,如果正确,使用Application.CreateForm方法创建主窗口,如果密码不正确……你自己看着办吧。

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧