Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu estou fazendo um programa para criptografar arquivos mas quando eu vou colocar o serial para realizar a random, da erro no programa e ele não aceita edit só 'testo';
function Crypt(Action, Src: String): String;
Label Fim;
var
KeyLen : Integer;
Edit1: TEdit;
KeyPos : Integer;
OffSet : Integer;
Dest: String;
Key : String;
SrcPos : Integer;
SrcAsc : Integer;
TmpSrcAsc : Integer;
Range : Integer;
begin
if (Src = '') Then
begin
Result:= '';
Goto Fim;
end;
// Key := StrToIntDef(Edit1.Text); //:= Crypt( Key, Edit1.Text );
// Key := (Edit1.Text);
Key :='A'; /// AQUI NÃO ACEITA EDIT SÓ TEXTO.
Dest := '';
KeyLen := Length(Key);
KeyPos := 0;
SrcPos := 0;
SrcAsc := 0;
Range := 256;
if (Action = UpperCase('C')) then
begin
Randomize;
OffSet := Random(Range);
Dest := Format('%1.2x',[OffSet]);
for SrcPos := 1 to Length(Src) do
begin
Application.ProcessMessages;
SrcAsc := (Ord(Src[SrcPos]) + OffSet) Mod 255;
if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1;
SrcAsc := SrcAsc Xor Ord(Key[KeyPos]);
Dest := Dest + Format('%1.2x',[SrcAsc]);
OffSet := SrcAsc;
end;
end
Else if (Action = UpperCase('D')) then
begin
OffSet := StrToInt('$' + copy(Src,1,2));//<--------------- adiciona o $ entra as aspas simples
SrcPos := 3;
repeat
SrcAsc := StrToInt('$' + copy(Src,SrcPos,2));//<--------------- adiciona o $ entra as aspas simples
if (KeyPos < KeyLen) Then KeyPos := KeyPos + 1 else KeyPos := 1;
TmpSrcAsc := SrcAsc Xor Ord(Key[KeyPos]);
if TmpSrcAsc <= OffSet then TmpSrcAsc := 255 + TmpSrcAsc - OffSet
else TmpSrcAsc := TmpSrcAsc - OffSet;
Dest := Dest + Chr(TmpSrcAsc);
OffSet := SrcAsc;
SrcPos := SrcPos + 2;
until (SrcPos >= Length(Src));
end;
Result:= Dest;
Fim:
end;Aqui esta o erro
Key :='A'; /// AQUI NÃO ACEITA EDIT SÓ TEXTO.
Ali eu fiz várias tentativas diferentes pra ve se eu conseguia resolver este erro, então deixei comentado as que não deram certo
mas o erro esta ai nessa linha
o Key só aceita 'texto'; e não edit.
Ai entra a questão que comentei acima..... o edit não é uma variável de texto, é um componente de edição. Seu código, em nenhum momento, cria o edit que declarou localmente na função que postou e também não atribui valor a ele. Logo, mesmo que tenha no formulário um componente edit nomeado como edit1, o fato de ter declarado um componente Edit1 localmente na sua função faz com que o delphi tente usar o valor da variável local ao invés do edit do formulário entende? Não seria este o seu problema?
E sim, o Key só aceita textos, porque é uma variável String. Ele só aceitaria o valor da propriedade Text do Edit, não fazer algo do tipo: Key := Edit1; ou Key := StrToIntDef(Edit1.Text); ... sacou?
Eu agora fiquei perdido de vez, eu intendi mais ou menos oque você quis dizer mas como eu poderia fazer pra o key aceitar os valores do edit1.
Eu teria que mudar algo a mais na function,para que eu quando abrir o programa e digitar a chave de geração no edit e não direto no código da função?
A questão principal é: o Edit1 que usa no código comentado, é criado em tempo de execução ou foi um Edit que colocou no form? Se esta no form, tem que ser retirado da declaração da função o Edit1: TEdit; para que possa usar o valor digitado nele, capturando a partir da propriedade Text. Se é criado em runtime (tempo de execução), tem que por os métodos para criar o edit dentro da função e gerar o valor da sua propriedade text, pois ele sendo criado em runtime não será visível no formulário sem que faça uma série de outros tratamentos. Explique melhor como está fazendo.
O edit que eu estou usando no código foi colocado diretamente no form. O problema é que eu já retirei a declaração da função do Edit1:TEdit; e continua dando o mesmo erro.
A questão é que eu não sei como fazer para o key aceitar o valor do edit colocado diretamente no form, eu vou até disponibilizar a source para você dar uma olhada, o programa esta muito mais muito simples, eu fiz ele para conseguir arrumar este erro.
Se você puder baixar eu agradeço...
Resumindo, a minha ideia do criptografador é quando e entro no form, eu coloco o texto no edit e ele gere o ramdon.
A linha em questão com o problema seria esta?
Key := StrToIntDef(Edit1.Text);
Se sim, aqui tem um erro seu de programação básico, pois o Text de um edit por padrão já é uma string, e você aqui está tentando jogar um valor inteiro (StrToIntDef) a uma string (Key), o que já daria erro de execução.
Outra dúvida: porque o edit está sendo declarado como variável local da função? Ele é um componente, para usá-lo localmente você tem que criá-lo (o que é feito pelo delphi quando o coloca no formulário, mas não quando declarado como variável local). Além de não ver onde estaria criando o edit no seu código, também não vejo onde está atribuindo os valores a ele antes de tentar utilizá-lo e não informou também qual o erro que ocorre.