Fórum Como bloquear duplicações de textos no aplicativo #330441

30/09/2006

0

Olá pessoal!

Estou desenvolvendo um pequeno sistema que tem a finalidade de simular lógica de programação, onde o usário irá marcar em cada edit apenas uma letra. Só que preciso criar uma codificação impedindo que a mesma letra seja inserida em outro campo caso já exista. Seria efetuado um bloqueio através de uma caixa de mensagem informando que a letra estaria já sendo utilizada no formulário.

Preciso concluir este projeto e falta apenas de imediato esta função. Os colegas que puderem ajudar-me, agradeceria muito.

Abraços a todos!


Tekmicro

Tekmicro

Responder

Posts

01/10/2006

Paullsoftware

é só uma ideia, não seria legal você criar botões cada um referente a uma letra ao alfabeto e na medida que ele fosse sendo clicado ele ficaria Desabilitado... :wink:


Responder

Gostei + 0

01/10/2006

Tekmicro

Prezado colega, muito agradecido pela colaboração, mas, acredito esta não ser a melhor maneira de contornar o que necessito.

Veja como é a lógica que preciso aqui:

Num determinado formulário, tenho 6 Edits, e cada Edit irá receber uma letra apenas, correspondente com o que o usuário achar necessário baseando queestou desenvolvendo um Simulador para Lógica de Programação, compreendeu?

Portanto, vamos supor que no primeiro Edit irá receber a letra [b:0dc9910698]A[/b:0dc9910698] neste caso os demais Edits não poderá duplicar esta letra já que existe, devendo emitir um bloqueio e um aviso de que a letra inserida já existe!

Não encontrei ainda uma forma correta para fazer isto. Estou pesquisando, e agradeceria aos demais colegas Delphianos e Delphianas, se tiverem como implementar isto no meu formulário, agradeceria imensamente. :wink:

Abraços a todos!


Responder

Gostei + 0

01/10/2006

Marco Salles

Coloque todos os edits com a propriedade MaxLength = 1 .. No Objeto Inspector

coloque uma lista

var
Lista : TStringList;


crie
procedure TForm1.FormShow(Sender: TObject);
begin
lista:=TstringList.Create;
end;


Destrua
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
lista.Free;
end;


Coloque todos os edits compartilhando o mesmo manipulador de eventos
procedure TForm1.KeyPressParaTodosOsEdits(Sender: TObject; var Key: Char);
begin
if (Key <> #8)and(lista.IndexOf(key) < 0) Then
    lista.Add(key)
else
 if Key = 8 Then
   begin
     if (Tedit(sender).text) <> ´´ then
      lista.Delete( lista.IndexOf(Tedit(sender).text));
   end
 else
   Key:=#0;
end;


é só...

P:s ... este método considera maiscula = minuscula ... Isto não é coisa ´minha´ é devido as caracteristicas do StringList
Mas pode-se estender a idéia facilmente caso isto seje um impencilho


Responder

Gostei + 0

01/10/2006

Tekmicro

Prezado, não deu certo! Fiz os procedimentos mas não ocorreu nenhum bloqueio. Continua permitindo inserir a duplicidade de letras.

Obrigado!


Responder

Gostei + 0

02/10/2006

Marco Salles

Prezado, não deu certo! Fiz os procedimentos mas não ocorreu nenhum bloqueio. Continua permitindo inserir a duplicidade de letras. Obrigado!



???????... Antes de postar eu tenho como regra efetuar um teste ????

Voce fez isto :
[b:945da44999]Coloque todos os edits compartilhando o mesmo manipulador de eventos[/b:945da44999]


Responder

Gostei + 0

02/10/2006

Tekmicro

Sim, fiz isto, mas mesmo assim não funcionou.

Veja a imagem do formulário para que possa ter uma idéia do que necessito.
[img:e3a3a4a955]http://www.tekmicro.info/exemplo.gif[/img:e3a3a4a955]

Um grande abraço e obirgado!


Responder

Gostei + 0

02/10/2006

Marco Salles

Veja a imagem do formulário para que possa ter uma idéia do que necessito.


to vendo...To vendo tb que o primeiro edit parece que tem um vazio + o caracter ´a´ ..

´ a´ <> ´a´

[b:b9cf9056a8]voce colocou o maxlength dos edit = 1 ?????[/b:b9cf9056a8]

esqueça um pouco o seu projeto incial... Talves eu não tenha entendido direito..

Abre um novo projeto , coloque uma quantidade de edits... Ligue toso os KeyPress desse edit no KeyPressGeral , coloque o codigo que lhe passei ... e veja o que dá.. Não esqueça tb [b:b9cf9056a8]de MAxLength =1 [/b:b9cf9056a8]para todos os edit


post o resultado...


Responder

Gostei + 0

02/10/2006

Tekmicro

Você disse para colocar todos os edits compartilhados mas, poderia fazer a gentileza de simular um exmplo, porque não entendi onde colocar todos os edits compartilhados.

Obrigado mais uma vez pela atenção!


Responder

Gostei + 0

02/10/2006

Tekmicro

Com relação ao que você citou do ´vazio´ na verdade não exite vazios, e sim devido o componente que estou utilizando AlignEdit que oferece condições de alinhar a forma que desejamos que o texto apareça no campo.

Obrigado!


Responder

Gostei + 0

02/10/2006

Marco Salles

Você disse para colocar todos os edits compartilhados mas, poderia fazer a gentileza de simular um exmplo, porque não entendi onde colocar todos os edits compartilhados.


o que quero dizer com compartilhados é com relação ao evento KeyPressParaTodosOsEdits... [b:b6fe6852e6]que todos os edits compartilhem o mesmo evento...[/b:b6fe6852e6] e so no objeto inspector desses edits escolher este evento com sendo o evento que sera executado ao pressionar uma tecla sobre o Edit

Com relação ao que você citou do ´vazio´ na verdade não exite vazios, e sim devido o componente que estou utilizando AlignEdit que oferece condições de alinhar a forma que desejamos que o texto apareça no campo.

[b:b6fe6852e6]isto é um dado que pode influenciar completamente a logica empregada...[/b:b6fe6852e6]
sugiro que antes de voce dizer que[b:b6fe6852e6] não esta funcionando [/b:b6fe6852e6]<pois acredito que [b:b6fe6852e6][color=darkred:b6fe6852e6]esta[/color:b6fe6852e6][/b:b6fe6852e6] , pois como disse antes [b:b6fe6852e6][color=darkred:b6fe6852e6]testei[/color:b6fe6852e6][/b:b6fe6852e6]> voce[b:b6fe6852e6] teste com edits ´normais´ [/b:b6fe6852e6], da maneira como eu sugeri no meu post[b:b6fe6852e6] anterior[/b:b6fe6852e6]


Citação: Abre um novo projeto , coloque uma quantidade de edits... Ligue todos os KeyPress desse edit no KeyPressGeral , coloque o codigo que lhe passei ... e veja o que dá.. Não esqueça tb de MAxLength =1 para todos os edit [b:b6fe6852e6][color=darkred:b6fe6852e6]post o resultado [/color:b6fe6852e6][/b:b6fe6852e6]



Responder

Gostei + 0

02/10/2006

Tekmicro

Caro colega, agradeço imensamente pela atenção e determinação em colaborar.

Fiz os testes utilizando Edits simples e deu certo, só que neste caso, necessito utilizar deste componente para centralizar, tratando o mesmo ser recomendações da faculdade (desafios). :idea:

Muito obrigado!


Responder

Gostei + 0

02/10/2006

Tekmicro

Relacionei a ´não funcionalidade´ mediante ao projeto aqui proposto. E como citei no post anterior, seguindo os passos informados por você, através do componente Edit funcionou, mas, no meu caso, não posso utilizar deste componente e sim do componente que foi colocado a disposição que é o AlignEdit.

Obrigado!


Responder

Gostei + 0

02/10/2006

Macario

Ola.

Bom se no Edit convencional funcionou, temos agora que tentar a solucao a este seu componente.

Teste no manipulador do evento, passar [b:11815cea45]trim[/b:11815cea45] para a propriedade [b:11815cea45]text[/b:11815cea45].



8)


Responder

Gostei + 0

02/10/2006

Marco Salles

[b:6ff4449757]E como citei no post anterior, seguindo os passos informados por você, através do componente Edit [color=darkred:6ff4449757]funcionou[/color:6ff4449757],[/b:6ff4449757]

mas, no meu caso, [b:6ff4449757]não posso utilizar deste componente [/b:6ff4449757]e sim do componente que foi colocado a disposição que é o AlignEdit.


não sei como este componente implementa este alinhamento ...mas tente usar o onchange

assim

var
texto:String;
Lista:TstringList;



[b:6ff4449757]Ligue todos o Edits ao mesmo manipulador de evento[/b:6ff4449757]
procedure TForm1.EditChangeGeral(Sender: TObject);
begin
if length(Tedit(sender).text) > 0 Then
  begin
    if lista.IndexOf(Tedit(sender).text) < 0 Then
        lista.Add(Tedit(sender).text)
   else
     begin
       Tedit(sender).OnChange:=nil;
       Tedit(sender).text:=´´;
       Tedit(sender).OnChange:=EditChangeGeral;
     end;
   end
  else
    lista.Delete( lista.IndexOf(texto));
end;


[b:6ff4449757]Ligue todos os edits ao mesmo manipulador de evento OnEnter[/b:6ff4449757]
procedure TForm1.EditEnterGeral(Sender: TObject);
begin
 texto:=Tedit(sender).text;
end;


procedure TForm1.FormShow(Sender: TObject);
begin
lista:=TstringList.Create;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
lista.Free;
end;



Responder

Gostei + 0

02/10/2006

Tekmicro

Pessoal, ocorre erro no seguinte campo em negrito:

procedure TForm1.Edit[b:c980ee1dfb]ChangeGeral[/b:c980ee1dfb](Sender: TObject);

Não é reconhecido!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar