• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Monky

Esconder Password Em Delphi + Guardar Configuraçoes em Ficheiro Ini

28 mensagens neste tópico

Boas Pessoal SOu novo por estas andanças....

Sei algumas coisas de delphi mas ainda sou um mero iniciante, a minha duvida é a seguinte, quando inicio o programa pela primeira vez será pedido ao utilizador que coloque uma pass e esta aparece em asteriscos, mas depois nas outras vezes que corro o programa ja tenho a pass defenida logo é so preciso colocar a pass e entrar, mas nesse campo tenho um memo, como é que faço para esconder a pass no memo???

Outra questao, queria colocar uma checkbox, para quando esta ficasse la com o certo, em vez de aparecer a os asteriscos aparecia mesmo a palavra passe...

Alguem pode ajudar???

Os Melhores CUmprimentos

Monky

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em relação aos * na memo: não metes. Essa é uma propriedade específica de um componente. A não ser que troques mesmo a password por *, mas ai são * literais.

Quando ligas e desliga o check da checkbox, creio que basta trocar o caracter da password de * para string vazia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou colocar aqui o programa para dares uma olhada e para me aconselhares...

Faz Download Dos Ficheiros Em baixo...

Programa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Monky, vais-me desculpar mas infelizmente não tenho para fazer essas análises...

O tipo de ajuda que posso dar neste momento não vai muito além do que escrevi no post anterior...

Se tiveres mais dúvidas, coloca-as e tentarei ajudar no que souber (já lá vão muitos anos desde que deixei o Delphi)...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok....

As minhas questoes sao as que já referi em cima, mas vendo o programa era muito mais facil veres o que eu queria em concreto...

Será que me podes facultar o codigo para eu fazer isso da checkbox???

Muito Obrigado Pela TUa DIsponibilidade...

Os Melhores CUmprimentos

Monky

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código que tens de fazer é simples: apanhas o evento de click da checkbox e colocas a propriedade do caraceter da password = ''.

Desculpa mas não te posso dar código, como te disse, já lá vão muitos anos e nem sequer tenho Delphi instalado na máquina...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu no programa tenho uma cenas para o utilizador alterar o fundo e o tipo de letra ao seu gosto, mas quando ele fecha e abre novamente o programa volta tudo ao normal, será que nao á uma maneira de essas alterações ficarem guardadas???

Outra coisa, como é que eu ponho a opção do o utilizador escolher uma imagem para o fundo, e que esta fique tambem guardada para que quando se fechar e abrir o programa ela esteja guardada???

Os Melhores comprimentos

Monky

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para guardares os settings, aconselho-te a usares uma coisa simples como um ficheiro .ini, "google it", vais encontrar sem grandes dificuldades.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, não sendo apologista de dar a solução, neste caso é algo simples e acho que escapa :)

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then begin
    Edit1.PasswordChar := #0;
  end else
    Edit1.PasswordChar := #42;
end;

Este código é o evento da checkbox, sendo que Edit1 é a caixa de texto onde aparece a password.

PasswordChar define o carácter que aparece a substituir o texto, quando define como #0, carácter zero ou string vazia, não é feita substituição, quando defines com outro carácter então esse vai ser usado na substituição das letras da password. Neste exemplo usei o '*' que possui o código ASCII 42.

Quanto a guardares as definições, como o M6 disse usa ficheiros INI, tens bons métodos para aceder à informação. Esse não te vou dar, vais ter de procurar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E não existe maneira de esconder a pass usando um memo???

OU em alternativa como faço compraçao entre dois campos edit para que este posso ver se a pass é a correcta ou a errada???

Os Melhores Cumprimentos

Monky

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um componente TMemo não possui a funcionalidade para substituir automaticamente o texto por um caracter que tu definas, terias de implementar o código todo para essa acção, o que pode ser mais complicado do que o que vale. Se puderes usa um TEdit, aliás, se estás a introduzir passwords faz mais sentido um TEdit que um TMemo, porque é que precisas que seja memo?

Para comparar basta acederes ao valor do texto do TEdit :), o que o componente faz é substituir visualmente o texto por asteriscos não substitui o texto que tem guardado. Basta acederes à propriedade Text do componente e tens acesso à password introduzida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É o seguinte eu tenho tipo um login, na primeira vez que inicio o programa a passowrd introduzida vai ser guardada num ficheiro, a partir dai ja nao sera preciso por sempre a pass ao inicio porque ela esta guardada no tal ficheiro, uso o edit da for_principal porque é so para guardar o valor que la esta no ficheiro, depois na segunda form, (a do login) tenho de fazer uma comparação entre a pass guardada (que coloquei no memo2) e a que esta no memo1, com o codigo:

if memo1.Lines[0]=memo2.Lines[0]
  then
  begin
  form3.show;
  form2.DestroyWindowHandle;
   end
  else
  showmessage ('Passowrd Errada');

Fizme entender??? Agora nao sei é como é que faço isso com os edit, porque o edit nao tem a função lines so tem a text...

Como Faço podes darme uma ajuda???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi porque é que estás a usar um memo se tens apenas uma linha, é porque estás a carregar o ficheiro directamente para o TMemo?

Se assim for, basta comparares a primeira linha com o valor que foi introduzido no TEdit. Não estou a perceber bem a dúvida, esse código não diz muito mas vou tentar alterar para acomodar uma TEdit.

if Edit1.Text = memo2.Lines[0] then begin
    form3.show;
    form2.DestroyWindowHandle;
end else
    showmessage ('Passowrd Errada');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja percebi...

Eu posso na mesma fazer uma comparação usando um edit e um memo... Era isso é que nao sabia...

Mais uma vez muito obrigado...

Em relação a guardar as definiçoes é que esta dificil... Acho que ja tenho umas coisas, será que pode dar uma olhada aqui:

Link1

Link2

Será isso???

Os Melhores CUmprimentos

Monky

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, isso é para guardares informações no registo do windows, embora também pudesse ser usado, o registo não deve ser usado para esse tipo de definições e não deve ser abusado.

Procura no google por "TIniFile", é a classe que te permite ler/escrever dados para ficheiros INI.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas Ja achei...

Será que me pode dar uma ajuda, é que nao sei muito bem como isto funciona, apesar de ja ter esperimentado... TOu um pouco confuso...

uses IniFiles;
procedure TForm1.Button1Click(Sender: TObject);
var
Ini: TIniFile;
begin
//Procedimento para salvar informacoes.

//Cria um novo arquivo .ini no diretorio C:\
Ini := TIniFile.Create('C:\Editor.ini');
Ini.WriteString('Secao_Fonte', 'Nome_Fonte', Memo1.Font.Name);
Ini.WriteInteger('Secao_Fonte', 'Tamanho', Memo1.Font.Size);
Ini.WriteBool('Opcoes', 'Quebra_Linha', Memo1.WordWrap);
end;
//----------------------- Le os dados escritos ----------------->

procedure TForm1.Button2Click(Sender: TObject);
var
Ini: TIniFile;
begin
//Abre o arquivo anteriormente criado.
Ini := TIniFile.Create('C:\Fonte.ini');
//Atribui ao Memo a fonte salva no arquivo .ini
Memo1.Font.Name := Ini.ReadString('Secao_Fonte', 'Nome_Fonte', '');
Memo1.Font.Size := Ini.ReadInteger('Secao_Fonte', 'Tamanho', 11); {O ultimo parametro ("11") é o valor padrão caso ocorra algum erro...}
Memo1.WordWrap := Ini.ReadBool('Opcoes', 'Quebra_Linha', True);
end;

No meu caso eu quero guardar as cores de fundo das forms e o tamanho, cor e tipo de letra tbm dessas forms....

Será que me pode dar uma ajudinha??

Os Melhores Cumprimentos

Monky

p.S-> Muito obrigado por tudo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A primeira coisa que talvez valha a pena alterar é o nome do ficheiro a criar, para por exemplo, um ficheiro com o nome da aplicação.

ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));

Desta forma será criado um ficheiro com o nome da aplicação na pasta onde a mesma está a correr, normalmente onde foi instalada, e com extensão ".ini". Ao não indicar o caminho absoluto o ficheiro é criado na pasta onde o executável está a correr.

Depois para guardar os valores que pretendes basta aceder às propriedades do form, por exemplo, para veres a cor do tipo de letra actual basta acederes à propriedade Color da propriedade Font do form.

Form1.Font.Color

A propriedade cor é um inteiro, basta escreveres directamente para o ficheiro e ler sem problemas.

As outras propriedades funcionam da mesma maneira, basta acederes e escreveres para o ficheiro.

Podes colocar o código de escrita no evento de fecho do form e o código de leitura no evento de abertura.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entao é o seguinte eu tenho 8forms, em cada uma delas tenho 2 labels e form tenho 4labels...

Ficara assim:

uses IniFiles;
procedure TForm1.Button1Click(Sender: TObject);
var
Ini: TIniFile;
begin
//Procedimento para salvar informacoes. (on close)

//Cria um novo arquivo .ini no diretorio C:\
Ini := TIniFile.Create('C:\Segurança.ini');
Ini.WriteString('Secao_Fonte', 'Nome_Fonte', form1.label1.Font.Name);
Ini.WriteInteger('Secao_Fonte', 'Tamanho', form1.label1.Font.Size);
Ini.WriteInteger('Secao_Fonte', 'Cor', form1.label1.Font.Color);
Ini.WriteBool('Opcoes', 'Quebra_Linha', form1.WordWrap);
Ini.WriteString('Secao_Fonte', 'Nome_Fonte', form1.label2.Font.Name);
Ini.WriteInteger('Secao_Fonte', 'Tamanho', form1.label2.Font.Size);
Ini.WriteInteger('Secao_Fonte', 'Cor', form1.label2.Font.Color);
Ini.WriteBool('Opcoes', 'Quebra_Linha', form1.WordWrap);
.
.
.
Ini.WriteString('Secao_Fonte', 'Nome_Fonte', form8.label1.Font.Name);
Ini.WriteInteger('Secao_Fonte', 'Tamanho', form8.label1.Font.Size);
Ini.WriteInteger('Secao_Fonte', 'Cor', form8.label1.Font.Color);
Ini.WriteBool('Opcoes', 'Quebra_Linha', form8.label1.WordWrap);
Ini.WriteString('Secao_Fonte', 'Nome_Fonte', form8.label2.Font.Name);
Ini.WriteInteger('Secao_Fonte', 'Tamanho', form8.label2.Font.Size);
Ini.WriteInteger('Secao_Fonte', 'Cor', form8.label2.Font.Color);
Ini.WriteBool('Opcoes', 'Quebra_Linha', form8.label2.WordWrap);
end;

//----------------------- Le os dados escritos (on activate)----------------->

procedure TForm1.Button2Click(Sender: TObject);
var
Ini: TIniFile;
begin
//Abre o arquivo anteriormente criado.
Ini := TIniFile.Create('C:\Fonte.ini');
//Atribui as Labels a fonte salva no arquivo .ini
form1.label1.Font.Name := Ini.ReadString('Secao_Fonte', 'Nome_Fonte', '');
form1.label1.Font.Size := Ini.ReadInteger('Secao_Fonte', 'Tamanho', 11); {O ultimo parametro ("11") é o valor padrão caso ocorra algum erro...}
form1.label1.Font.Color := Ini.ReadString('Secao_Fonte', 'Cor_Fonte', '');
form1.label1.WordWrap := Ini.ReadBool('Opcoes', 'Quebra_Linha', True);
form1.label2.Font.Name := Ini.ReadString('Secao_Fonte', 'Nome_Fonte', '');
form1.label2.Font.Size := Ini.ReadInteger('Secao_Fonte', 'Tamanho', 11); {O ultimo parametro ("11") é o valor padrão caso ocorra algum erro...}
form1.label2.Font.color := Ini.ReadString('Secao_Fonte', 'Cor_Fonte', '');
form1.label2.WordWrap := Ini.ReadBool('Opcoes', 'Quebra_Linha', True);
.
.
.
form8.label1.Font.Name := Ini.ReadString('Secao_Fonte', 'Nome_Fonte', '');
form8.label1.Font.Size := Ini.ReadInteger('Secao_Fonte', 'Tamanho', 11); {O ultimo parametro ("11") é o valor padrão caso ocorra algum erro...}
form8.label1.Font.Color := Ini.ReadString('Secao_Fonte', 'Cor_Fonte', '');
form8.label1.WordWrap := Ini.ReadBool('Opcoes', 'Quebra_Linha', True);
form8.label2.Font.Name := Ini.ReadString('Secao_Fonte', 'Nome_Fonte', '');
form8.label2.Font.Size := Ini.ReadInteger('Secao_Fonte', 'Tamanho', 11); {O ultimo parametro ("11") é o valor padrão caso ocorra algum erro...}
form8.label2.Font.color := Ini.ReadString('Secao_Fonte', 'Cor_Fonte', '');
form8.label2.WordWrap := Ini.ReadBool('Opcoes', 'Quebra_Linha', True);
end;

Será assim certo???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, de uma forma geral esse código fará o que pretendes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja coloquei tudo...

Agora ta-me a dar um erro assim:

"[Error] Unit4.pas(86): Incompatible types: 'TColor' and 'String'"

Que faço???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A propriedade cor é um inteiro(...)

Responde à pergunta? :)

Estás a tentar ler uma string e a enviar para uma propriedade que é um inteiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outro Erro:

[Error] Unit4.pas(87): Incompatible types: 'Integer' and 'String'

E agora?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoal TOu com uma duvida, será que podem dar uma ajudinha???

Já tentei de tudo e nao consigo por a guardar as definiçoes do meu programa a serem guardados no ficheiro INI...

Aqui deixo o codigo:

Codigo

Os Melhores Cumprimentos

Monky

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse erro é exactamente o mesmo que anteriormente, estás a tentar igualar um inteiro a uma string, verifica na linha onde te dá o erro se não tens uma atribuição que seja inválida.

Certamente que a linha em que te está a dar o erro não será a mesma no ficheiro de texto dado que podem faltar muitas outras componentes de código, quando é assim coloca a a linha e duas ou três antes e depois para ser perceber.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais Um Erro:

[Error] Unit4.pas(90): Undeclared identifier: 'WordWrap'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora