Problema criptografia senha update

Delphi

27/01/2011

Bom dia!!!

Tenho um formulario de cadastro de usuario e utilizo uma rotina para criptografar a senha.

Utilizo o componente ZQuery.

Quando incluo o usuario esta ok, a senha grava no banco criptografada, mas quando faço uma alteracao neste usuario esta acontecendo que criptografa a senha ja criptografada novamente. Como devo proceder para corregir isso.

o beforepost coloquei esta linha

  Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);

fico no aguardo.
Iramar Junior

Iramar Junior

Curtidas 0

Respostas

Marcelo Diniz

Marcelo Diniz

27/01/2011


Bom dia!!!

Tenho um formulario de cadastro de usuario e utilizo uma rotina para criptografar a senha.

Utilizo o componente ZQuery.

Quando incluo o usuario esta ok, a senha grava no banco criptografada, mas quando faço uma alteracao neste usuario esta acontecendo que criptografa a senha ja criptografada novamente. Como devo proceder para corregir isso.

o beforepost coloquei esta linha

  Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);

fico no aguardo.

 
 





Na alteração verifique se a senha foi alterada pelo usuário ou não, se não retire o campo senha do update, se foi pegue o novo valor e salve ele.
Ex.: Var SenhaAtual, NovaSenha : string;
SenhaAtual :=   Ado_Usuario.FieldByName('SENHA').AsString;NovaSenha := DBEdSenha.text ;
if SenhaAtual <> NovaSenha then  Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);



GOSTEI 0
Marcelo Diniz

Marcelo Diniz

27/01/2011


 
Corrigindo o código acima.
Var SenhaAtual, NovaSenha : string;
SenhaAtual :=   Ado_Usuario.FieldByName('SENHA').AsString;NovaSenha :=   Encrypt(EditSenha.Text, chave);
if SenhaAtual <> NovaSenha then  Ado_Usuario.FieldByName('SENHA').AsString := NovaSenha;


GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

outra opção é testar o dataset , se trata de uma Edição desconsidere   eu não trabalho com o ZQuery mas considerando as boas práticas de programação , este evento OnBeforePost tem a mesma assinatura do que a classe Herdade , portanto deve ter o parametro DataSet  
procedure TSeuFormulario.SeuDataSetTQUERY1BeforePost(DataSet: TDataSet);
begin
if DataSet.State in [DsInsert] then
      DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
end;

GOSTEI 0
Wilson Junior

Wilson Junior

27/01/2011

No evento OnBeforeUpdate (acho que é este):

DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);



E no evento OnBeforePost:
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);


Espero ter colaborado.
GOSTEI 0
William Galleti

William Galleti

27/01/2011

Concordo com o pessoal acima...

Acho que a melhor pratica mesmo é a questão de comparação de senhas.
Eu faço assim...
No AfterOpen do ClientDataSet alimento uma variável global SenhaOld : string.
No botão gravar eu verifico se a senha é igual a da variável SenhaOld . Se não for, mando criptografar e boa...
//codigo afteropen  SenhaOld := cdsPadraoPasswd.AsString;

//codigo btnGravar    if SenhaOld <> edtSenha.Text then    begin      cdsPadrao.Edit;      cdsPadraoPasswd.AsString := MD5.MD5Print(MD5String(cxDBTextEditSenha.Text));      cdsPadrao.Post;    end;

No meu caso ta com ClientDataSet, adeque a sua necessidade


Espero ter ajudado.
GOSTEI 0
Efraim Santana

Efraim Santana

27/01/2011

concordo com  William Galleti.
apenas um ajuste no codigo.


//codigo afteropen  SenhaOld := cdsPadraoPasswd.AsString;

//codigo btnGravarvar    novasenha : String;
    novasenha := MD5.MD5Print(MD5String(cxDBTextEditSenha.Text));
    if SenhaOld <> novasenha then    begin      cdsPadrao.Edit;      cdsPadraoPasswd.AsString := novasenha;      cdsPadrao.Post;    end;


GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

Oh gente eu não costumo rebater idéias pq idéias são livres , tanto para fornecer qnt para receber.
Mas ou Vcs não entenderam o problema dele ou eu não entendi . Será que eu entendi tão errado assim ???
Me corrijam  :
1) Quando incluo o usuario esta ok ... Ele esta inserindo sem problema nehum
2)mas quando faço uma alteracao esta acontecendo que criptografa a senha ja criptografada novamente. pq esta ocorrendo isto ????? Ora pq beforepost esta Criptogravando o valor do EditSenha.Text , que pode estar em branco ou conter um Lixo qualquer porque pode ser uma simples alteração de Telefone por exemplo.. Ele não esta Reclamando de Alteração De Senha Então durante um processo de alteração (não de Senha) ele não pode executar a instrução
Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave); So isso gente !!!!! nada mais do que isso Agora a alteração de senha é um processo que não foi tratado pq não foi pedido , pelo menos a meu ver . Para Alteração de senha sugiro um Form separado com algumas particularidades . O Paulista mandou tb uma opção que para mim ele entendeu o espirito da dúvida . Ele coloca no valor do Edit um Valor Descriptografado no evento e depois o Criptograva , não aterando o seu conteudo .Tb funciona . So que o evento mais indicado para isto seguindo a sua iéia é o evento BeforeEdit e sem testar para mim é a solução que não precisa de outros arranjos  
No evento OnBeforeEdit(acho que é este):
DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);


E no evento OnBeforePost:
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);


Espero ter colaborado.
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

Obrigado pela ajuda de todos, mas o Marco Antonio entendeu o meu problema, é isso mesmo.

Fiz todos os testes e nao consegui resolver o problema, pelo visto vou ter modificar meu projeto deixando cadastrar os usuarios e desenvolver um form para cadastro e alteracao da senha.

Acho que foi isso a ideia que o Marco teve também.

Algum de vcs teria uma exemplo de como poderia fazer isso sem ter que alterar muito no meu projeto?

Minha ideia seria verificar se o campo senha é nulo, se for so ira pedir a senha e repetir a senha e confirmar, senao, será solicitado a senha atual e so depois de validar a senha que sera solicitado a nova senha e repetir para confirmar a alteracao.

Continuo esperando ajuda e sugestoes.


Obrigado
GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

Mas antes de partir para os finalmente vamos primeiro aos entretantos...     Qnd vc fez este teste indicado pelo Paulista o que teve de errado ou o que não te agradou ????     Citação:
No evento OnBeforeEdit(acho que é este):
#Código
DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);


E no evento OnBeforePost:
#Código
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);


Espero ter colaborado.

Na minha opinião ... Errado esta pq qualquer um Pode alterar a senha de qualquer um Deste que coloque o DataSet em modo de edição e coloque um Valor para o Edit   Mas certo esta , porque resolveu o seu problema inicial ???? Acredito eu   Então estamos 50% para lá e 50% para cá .   Pergunto isto , pq será mais fácil atacar o problema desse ponto , sem ter que efetuar muitas alteraçoes no codigo   Ultima pergunta ... Patrocineo perto de muriaé ??? Mg
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

Marco, blz...

Resolveu em parte, pq só e decriptografado caso o cursor passar pelo edit, caso contrario continua criptografando a senha que ja esta criptografada....


Sem duvida creio que a solucao esta em criar outro form...

Cidade Patrocinio proxima a Uberlandia


GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

Marco, blz...
Resolveu em parte, pq só e decriptografado caso o cursor passar pelo edit, caso contrario continua criptografando a senha que ja esta criptografada....
    Mas parece que o codigo esta errado... Fui olhar a idéia e esqueci da lógica   Veja o evento  OnBeforeEdit é chamado imediatamente qnd vc coloca o dataset em edição beste momento o codigo do Paulista estava assim DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);  
Ta errado ... O Certo é assim
 
EditSenha.Text:= Descrypt(DATASET.FieldByName('SENHA').AsString,chave);
 
Isto é , o conteudo do edit recebe o conteudo do campo senha descriptografada
 
Agora sim , na hora de gravar o campo recebe o conteudo do edit Criptografado
 
E no evento OnBeforePost:
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
  então de fato ouve um erro de lógica porque me peguei no entendimento e não analizei a lógica   Porque estou insistindo nisso .. Porque a partir dai acho mais fácil a continuação da rotina de alteraççao de senha  
  Patrocicineo perto de uberlandia .. Sei ja ouvi falar . Aqui perto de minha cidade tem uma cidade com o mesmo nome da sua
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

bom, resolvi o problema da seguinte forma:

Quando clico no botao editar ja faz a decriptografia da senha, assim sendo quando gravo, mesmo sem alterar a senha ela é criptografada corretamente.

Nao gostaria que fosse assim pq existem programas que consegue ver a senha mesmo estando mascarada com qualquer caracter, mas em tese resolveu o problema.

Continuo com a ideia inicial de criar um form separado somente para cadastrar e alterar a senha, como vc (Marco) mesmo disse anteriormente, so nao entendi o que quiz dizer com algumas particularidades.

Gostaria de me ajudar a desenvolver este form?

Agradeço.
GOSTEI 0
Wilson Junior

Wilson Junior

27/01/2011

Para este form sitado, eu utiizo da seguinte maneira...
Tenho um form para alteração dos dados do usuário e neste tenho um botão q chama outro form para alterar a senha, quando entro neste, peço a senha atul e a nova senha e sua confirmação da nova senha. ao dar OK neste form, descriptografo a senha atual para comparar com a senha atual informada, se for igual, atribuo a nova senha ao campo do ClientDataSet, sendo assim ele sempre irá criptografar a nova senha, mas para o caso de alterar os dado do usuário e não alterar a senha, utilizo, sempre o evento OnBeforeEdti, conforme o Marco citou, como maneira de desripitografar q senha, pois assim sempre tenho o contéudo da senha, mas sem mostrar para o usuário.

Espero ter colaborado.
GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

bom, resolvi o problema da seguinte forma: Quando clico no botao editar ja faz a decriptografia da senha, assim sendo quando gravo, mesmo sem alterar a senha ela é criptografada corretamente.
usando que foi postado . pegando a idéa do Paulisat e Alterando o evento e corrigindo o codigo

Nao gostaria que fosse assim pq existem programas que consegue ver a senha mesmo estando mascarada com qualquer caracter, mas em tese resolveu o problema.
Tb acho que não deve ser assim ... Mas isto so foi feito para resolver o problema inicial

Continuo com a ideia inicial de criar um form separado somente para cadastrar e alterar a senha, como vc (Marco) mesmo disse anteriormente, so nao entendi o que quiz dizer com algumas particularidades.
  Bem , vc aclopou muito o seu codigo . Isto dificulta .   Perceba que no evento BeforeEdit e BeforePost do DataSet tem um componente chamado EditSenha   esta dizendo que seu eventos so vão funcionar se tiver este editForm pertencente a tal formulário   mas nao vamos estender muito nisso , so to te dando um toque , para vc ver o problema e não faze-lo futuramente   Vamos as idéas levando em conta este Aclopamento   1) Na edição se não for da senha , edição de outros dados , o edit precisa ficar
visivel ?????  .... Resposta é Não .. So precisa ficar Visivel na Inserção de novo usário   vamos continuar o aclopamento .. No before Insert Coloque o Edit como Visibel:=True e No AfterPost Coloque o Edit Como Visible:=False e  no AfterCancel tn o Edit Como Visible:=False   Pronto seu problema com programas que consegue ver a senha esta Resolvido . O Conteudo do Edit com a senha não aparecera mais ...   Agora vamos a criação do Form para Alterar a Senha   Crie um Formulario com Tres edites e dois Butoes .... o Primeiro é onde o usuário ira informar a Senha Atual O Segundo a Alteracao e o Terceiro a nova senha   Para cada um dos botoes Altere a propriedade modalResult para mrOk e para o segundo altere para mrCancel   Define para este formulario  
 private
    { Private declarations }
    FOldsenha:String;
  public
    { Public declarations }
    constructor Create(Aowner:Tcomponent;out StrSenha:String);reintroduce;
  end;
var
  FrmSenha: TFrmSenha;
implementation
{$R *.dfm}
{ TForm1 }
constructor TFrmSenha.Create(Aowner:Tcomponent;out StrSenha:String);
begin
  inherited Create(Aowner);
  FoldSenha:=StrSenha;
end;

  Ainda não esta implementado o metodo que ira conferir se altera ou não a senha ..Ainda não   Voltemos aoformulario , anterior   1) passo de uses a esta Nova Unit que contera este formulario   2) Num Botão que será para alterar a senha especifica de um Usuario ( ) vc faz    
procedure TForm6.Button2Click(Sender: TObject);
var
formulario:Tform;
oldSenha:String;
begin
   oldSenha:= SeuDataSet.FieldByName('Senha').AsString;  
   formulario:=TFrmSenha.Create(nil,oldSenha);
   try
      if formulario.ShowModal = mrOk then
        begin
             editSenha.text:=oldSenha;
             SeuDataSet.Edit;
             SeuDataSet.Post;
        end;
   finally
       formulario.Free;
       formulario:=nil;
   end;
end;

  O proximo e ultimo passo é a Rotina de alteração da senha ... Mas ate aqui da para vc ir testando o que foi passado . Espero que siga corretamente o Script , para não ficarmos indo e vindo Não esqueça de Alterar a visibilidade nos Eventos acima
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

Blz, o formulario esta criado, falta a autenticacao da senha atual e as alteracoes da nova senha.


GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

Vc recebeu o meu Emeil de alguras alteraçoes que fiz pessoal ???? Tornando-a Publico subscrevo:   Iramar tem um erro bobo , mas foi distração minha no metodo que lhe passei   Minha Unit AlterarSenha esta assim   unit USenha;   interface   uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;   type
  TFrmSenha = class(TForm)
    btnValidar: TButton;
    btnSair: TButton;
    edtSenhaAtual: TEdit;
    edtNovaSenha: TEdit;
    edtConfirmarSenha: TEdit;
    procedure btnValidarClick(Sender: TObject);
  private
    { Private declarations }
    FOldsenha:String;
  public
    { Public declarations }
    constructor Create(Aowner:Tcomponent;
               const  StrSenha:String);reintroduce;
    property OldSenha:String read FOldsenha write FoldSenha;
  end;   var
  FrmSenha: TFrmSenha;   implementation   {$R *.dfm}   { TForm1 }  
procedure TFrmSenha.btnValidarClick(Sender: TObject);
begin
 modalResult:=mrCancel;
 //NA verdade a comparacao Tem que ser assim  edit1.Text = Descriptogrvar(FOldsenha)
if not (edtSenhaAtual.Text = FOldsenha) then
  begin
    Showmessage('Senha incorreta ..');
    //Faz Alguma coisa .. Comuinca depois de um Nmero de Tentativas
    exit;
  end;
if edtNovaSenha.Text = edtConfirmarSenha.Text then
  begin
    FOldsenha:=edtNovaSenha.Text;
    modalresult:=mrOk;
  end;
end;
 
constructor TFrmSenha.Create(Aowner:Tcomponent;const StrSenha:String);
begin
  inherited Create(Aowner);
  FoldSenha:=StrSenha;
end;
 
end.

    Meu Botao AlterarSenha no Form Principal esta ssim     procedure TForm6.btnAlterarSenhaClick(Sender: TObject);
var
formulario:Tform; oldSenha:String; begin
   oldSenha:= SeuDataSet.FieldByName('Senha').AsString;
   formulario:=TFrmSenha.Create(nil,oldSenha);
   try
      if formulario.ShowModal = mrOk then
        begin              SeuDataSet.Edit;  // a ordem desse evento é importante no contexto
             editSenha.text:=TfrmSenha(formulario).OldSenha;
             SeuDataSet.Post;
             Showmessage('Senha Alterado com Sucesso !!!');
        end;
   finally
       formulario.Free;
       formulario:=nil;
   end;
end;     Acho que é isso ai , não tem mais erro .. Pode ter melhorias Testei aqui , esta dando Certo   Não esqueça dos Eventos
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

Marco, nao recebi nenhum email teu.....

estou testando os codigos que me passou, ainda nao consegui fazer funcionar...

caso tenha talk me add

iramar.ads@gmail.com
GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

O Emai que lhe mandei é este   iramar@cmpatrocinio.mg.gov.br   ta errado ???   ads Não num tem não   mas o que esta pegando.. ???
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

Marco veja o que fiz?

  modalResult:=mrCancel;
  if not (encrypt(edit1.Text, chave) = foldsenha) then
  begin
     showmessage('A senha não confere com a original!!!');
     exit;
     Edit1.SetFocus;
  end;
  if (edit2.Text = '') then
  begin
     showmessage('A nova senha não foi informada!!!');
     edit2.SetFocus;
  end;
  if (edit3.Text = '') then
  begin
     showmessage('Repetição da nova senha não foi informada!!!');
     edit3.SetFocus;
  end;
  if (alltrim(edit2.Text) <> alltrim(edit3.Text)) then
  begin
     showmessage('A repetição da senha não confere com a original!!!');
     edit2.SetFocus;
  end
  else
  begin
     FoldSenha := encrypt(edit3.text, chave);
     ModalResult:=mrOk;
  end;


funcionou perfeito para alterar a senha, mas acontece que se der algum erro para exibir qualquer dessas mensagens nao retorna ao formsenha, ele é fechado e retorna ao form que o chamou, sendo necessario que clique no botao para chamar o formsenha.

Nao sei se deu para entender, mas o que gostaria é que mesmo que aconteca algum erro, depois que exibir a mensagem retorne ao formsenha e no focus onde ocorreu o erro, compreendeu?????


O email é este mesmo mas nao recebi nada....

Me reenvia para este: iramar.ads@gmail.com

Agradeco
GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

Marco veja o que fiz?

  modalResult:=mrCancel;
  if not (encrypt(edit1.Text, chave) = foldsenha) then
  begin
     showmessage('A senha não confere com a original!!!');
     exit;
     Edit1.SetFocus;
  end;
  if (edit2.Text = '') then
  begin
     showmessage('A nova senha não foi informada!!!');
     edit2.SetFocus;
  end;
  if (edit3.Text = '') then
  begin
     showmessage('Repetição da nova senha não foi informada!!!');
     edit3.SetFocus;
  end;
  if (alltrim(edit2.Text) <> alltrim(edit3.Text)) then
  begin
     showmessage('A repetição da senha não confere com a original!!!');
     edit2.SetFocus;
  end
  else
  begin
     FoldSenha := encrypt(edit3.text, chave);
     ModalResult:=mrOk;
  end;


funcionou perfeito para alterar a senha, mas acontece que se der algum erro para exibir qualquer dessas mensagens nao retorna ao formsenha, ele é fechado e retorna ao form que o chamou, sendo necessario que clique no botao para chamar o formsenha.

Nao sei se deu para entender, mas o que gostaria é que mesmo que aconteca algum erro, depois que exibir a mensagem retorne ao formsenha e no focus onde ocorreu o erro, compreendeu?????


O email é este mesmo mas nao recebi nada....

Me reenvia para este: iramar.ads@gmail.com

Agradeco
é muito simples .... Vc altere a propriedade modalResult do Primeiro Botao para mrNome (Padrao) e fala apenas um pequeno ajuste no codigo    modalResult:=mrCancel;
  if not (encrypt(edit1.Text, chave) = foldsenha) then
  begin
     showmessage('A senha não confere com a original!!!');
     exit;
     Edit1.SetFocus;
  end;
  if (edit2.Text = '') then
  begin
     showmessage('A nova senha não foi informada!!!');
     edit2.SetFocus;
  end;
  if (edit3.Text = '') then
  begin
     showmessage('Repetição da nova senha não foi informada!!!');
     edit3.SetFocus;
  end;
  if (alltrim(edit2.Text) <> alltrim(edit3.Text)) then
  begin
     showmessage('A repetição da senha não confere com a original!!!');
     edit2.SetFocus;
  end
  else
  begin
     FoldSenha := encrypt(edit3.text, chave);
     ModalResult:=mrOk;      close;  //Acho que so ISSO funciona
  end;
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

nao funcionou com a alteracao que me passou


GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

vo testar . Peguei so o seu codigo e tcham
GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

fiz ajuste no codigo que vc postou   Mas deixe o botao de confirmar com a propriedade ModaResult mrNone (Padrao)   Codigo Fica:  
procedure TFrmSenha.btnValidarClick(Sender: TObject);
begin
  if not (edtSenhaAtual.Text = foldsenha) then
  begin
     showmessage('A senha não confere com a original!!!');
     EdtSenhaAtual.SetFocus;
     exit;
  end;
  if (edtNOvaSenha.Text = '') then
  begin
     showmessage('A nova senha não foi informada!!!');
     edtNovaSenha.SetFocus;
     exit;
  end;
  if (edtConfirmarSenha.Text = '') then
  begin
     showmessage('Repetição da nova senha não foi informada!!!');
     edtConfirmarSenha.SetFocus;
     exit;
  end;
  if edtNovaSenha.Text <> edtConfirmarSenha.Text then
   begin
     showmessage('A repetição da senha não confere com a original!!!');
     edtConfirmarSenha.SetFocus;
   end
   else
    begin
       FoldSenha := edtConfirmarSenha.text;
       ModalResult:=mrOk;
  end;
   
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

Funcionou ai com vc????

Marco,
Nao tem nem msn???? ficaria bem mais facil de comunicarmos....


aguardo
GOSTEI 0
Iramar Junior

Iramar Junior

27/01/2011

Blz, agora funcinou aki perfeitamente do jeito que gostaria, valew muito pela ajuda....


So mais uma coisa, gostaria que ao abrir o formsenha o seu caption ficasse assim:

      frmsenha.Caption     := 'Mudança de senha para o usuário ''' + Usuario.Text + '''.';


fiz varias mudanças mas nao consigo fazer isso, sei que coisa boba, mas estou apanhando.....



GOSTEI 0
Marco Salles

Marco Salles

27/01/2011

Blz, agora funcinou aki perfeitamente do jeito que gostaria, valew muito pela ajuda....

So mais uma coisa, gostaria que ao abrir o formsenha o seu caption ficasse assim:

      frmsenha.Caption     := 'Mudança de senha para o usuário ''' + Usuario.Text + '''.';

fiz varias mudanças mas nao consigo fazer isso, sei que coisa boba, mas estou apanhando.....
  O certo de fazer isto ( tem outras maneiras )  mas uma das mais indicadas é vc passar o Parametro Usuario.Text ( quem deve ser um campo do seu BD) , no constructor do Formulario Senha   Assim altere o contructor para   constructor Create(Aowner:Tcomponent;out StrSenha:String;Const StrUsuario:String);reintroduce;   na Implementacao do Médodo Contructor Adicione     constructor TFrmSenha.Create(Aowner:Tcomponent;const StrSenha:String);
begin
  inherited Create(Aowner);
  FoldSenha:=StrSenha;
  self.Caption     := 'Mudança de senha para o usuário  " '+StrUsuario+' "'; end;   Na hora de Instanciar o formulario faça    
procedure TForm6.btnAlterarSenhaClick(Sender: TObject);
var
formulario:Tform;
oldSenha:String;
UserName:String;
begin
     oldSenha:= SeuDataSet.FieldByName('Senha').AsString;
     User:=SeuDataSet.FieldByName('CampoComNomeUsuario').AsString;   
     formulario:=TFrmSenha.Create(nil,oldSenha,UserName);
   try
......................Segue o Codigo sem alteração
  ps) Coloque o tópico como resolvido   ps) tenho direito de um pouco de merchandising não tenho ??? http://marcosalles.wordpress.com/


 
 
GOSTEI 0
POSTAR