Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Areaportal

String não aceita edit

Recommended Posts

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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

 

link normal

link mega

 

Resumindo, a minha ideia do criptografador é quando e entro no form, eu coloco o texto no edit e ele gere o ramdon.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.