Buscar

Imputbox com senha e tentativas de erros

Código

Essa é uma função que limita o acesso com senha a um form. Pode ser usado como entrada num sistema ou como acesso interno de um form(exemplo:  Cadastros de usuários).

function PasswordInputBox(const ACaption, APrompt:string): string;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
  Value: string;
  I: Integer;
  Buffer: array[0..51] of Char;
begin
  Result := '';
  Form := TForm.Create(Application);
  with Form do
  try
    Canvas.Font := Font;
    for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
    for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
    GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(DialogUnits));
    DialogUnits.X := DialogUnits.X div 52;
    BorderStyle := bsDialog;
    Caption := ACaption;
    ClientWidth := MulDiv(180, DialogUnits.X, 4);
    ClientHeight := MulDiv(63, DialogUnits.Y, 8);
    Position := poScreenCenter;
    Prompt := TLabel.Create(Form);
    with Prompt do
    begin
      Parent := Form;
      AutoSize := True;
      Left := MulDiv(8, DialogUnits.X, 4);
      Top := MulDiv(8, DialogUnits.Y, 8);
      Caption := APrompt;
    end;
    Edit := TEdit.Create(Form);
    with Edit do
    begin
      Parent := Form;
      Left := Prompt.Left;
      Top := MulDiv(19, DialogUnits.Y, 8);
      Width := MulDiv(164, DialogUnits.X, 4);
      MaxLength := 255;
      PasswordChar := '*';
      SelectAll;
    end;
    ButtonTop := MulDiv(41, DialogUnits.Y, 8);
    ButtonWidth := MulDiv(50, DialogUnits.X, 4);
    ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
    with TButton.Create(Form) do
    begin
      Parent := Form;
      Caption := 'OK';
      ModalResult := mrOk;
      Default := True;
      SetBounds(MulDiv(38, DialogUnits.X, 4),ButtonTop, ButtonWidth,ButtonHeight);
    end;
    with TButton.Create(Form) do
    begin
      Parent := Form;
      Caption := 'Cancel';
      ModalResult := mrCancel;
      Cancel := True;
      SetBounds(MulDiv(92, DialogUnits.X, 4),ButtonTop, ButtonWidth,ButtonHeight);
    end;
    if ShowModal = mrOk then
    begin
      Value := Edit.Text;
      Result := Value;
     end;
  finally
    Form.Free;
    Form:=nil;
     end;
 end;

Como chamar a função:

procedure TF_Menu.Usuario1Click(Sender: TObject);
begin
 if PasswordInputBox('Senha','Digite sua senha:') = ' sua senha' then  // Aqui chama a função, caso a senha esteja correta abre o form
   Try
  F_Usuario:=TF_Usuario.Create(Application);
  F_Usuario.ShowModal;
  Finally
  F_Usuario.Release;
  F_Usuario:= nil;
       end
    else
    if Application.MessageBox('Senha inválida!'+#13+ 'Você tem mais 2 tentativas!', ' A V I S O' ,mb_iconexclamation + mb_OK)= idOK then  //se senha errada mostra aviso de tentativas.
    if PasswordInputBox('Senha','Digite sua senha:') = 'sua senha' then
    begin
    try
     F_Usuario:=TF_Usuario.Create(Application);
     F_Usuario.ShowModal;
   Finally
     F_Usuario.Release;
     F_Usuario:= nil;
           end
       end
    else
    if Application.MessageBox('Senha inválida!'+#13+ 'Última tentativa!', ' A V I S O' ,mb_iconexclamation + mb_OK)= idOK then  //senha errada fecha o ImputBox.
    if PasswordInputBox('Senha','Digite sua senha:') = 'sua senha' then
    begin
     Try
  F_Usuario:=TF_Usuario.Create(Application);
  F_Usuario.ShowModal;
  Finally
  F_Usuario.Release;
  F_Usuario:= nil;
     end;
  end;
end;

Meio bizarro mais funciona.
Se alguém puder melhorar evitando a repetição.

geovalsilva@ig.com.br
 

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Forms
Adicionada dia: 14/08/08
Por: Geoval Silva Guerra
Visualizada: 4795 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009