Verificar na lista do Memo se contem determinado Caractere em cada linha

02/07/2019

0

Boa tarde, Sou novo aqui e estou precisando de ajuda
Estou programando o auxiliar para meu jogo que faz busca na lista de palavras conforme sequencia de caracteres
Tenho uma lista de palavras que são os resultados
E durante o jogo recebemos dicas com letras sortidas nos espaços e quantidades de Letras na palavra
Ex = Palavra contem 8 Letras
( C _ M I N _ Ã _ )
Em minha lista Memo1 as palavras estão da seguinte forma

MOTOCICLETA
BARCO
CAMINHÃO
CELULAR

Minha intenção seria
Sabendo da dica inicial que a palavra contem 8 letras quero adicionar 8 edits no form para preenchimento das letras Dicas
Ex [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
e conforme eu for preenchendo cada edit ele separa para outro Memo as palavras da lista correspondente

Ex [C] [ ] [M] [I] [N] [ ][Ã] [ ]
O memo2 recebe a palavra Caminhão correspondente a pesquisa pelos caracteres

O básico eu consigo fazer mas esta parte de verificar se determinado caractere corresponde ao texto do edit e se sim separar a linha (Palavra) está muito dificil, Agradeço atenção muito obrigado.
Gabriel Ludgero

Gabriel Ludgero

Responder

Posts

21/08/2019

Fernando Ito

Olá Gabriel Ludgero,

procedure TForm1.btnGerarClick(Sender: TObject);
var
I, Esq: Integer;
Caixa: TEdit;
begin
Esq := 25;
// edtLetras será o Edit para informar número de letras
for I := 1 to StrToInt(edtLetras.Text) do
begin
Caixa := TEdit.Create(Self);
Caixa.Name := 'btn' + IntToStr(I);
Caixa.Parent := Self;
Caixa.Left := Esq;
Caixa.Top := 96;
Caixa.Width := 20;
Caixa.Tag := I;
Caixa.Text := '';
Caixa.CharCase := ecUpperCase;
Caixa.onchange := VerificaLista;
Caixa.Show;
Esq := Esq + 28;
end;
end;

procedure TForm1.VerificaLista(Sender: TObject);
var
Indice, Posicao: Integer;
Letra, Palavra: string;
begin
Letra := TEdit(Sender).Text;
Posicao := TEdit(Sender).Tag;
if (Posicao = 1) then
begin
for Indice := 0 to Pred(Memo1.Lines.Count) do
begin
Palavra := Memo1.Lines[Indice];
if (Palavra[Posicao] = Letra) then
begin
Memo2.Lines.Add(Palavra);
end;
end;
end
else
begin
Memo3.Clear;
for Indice := 0 to Pred(Memo2.Lines.Count) do
begin
Palavra := Memo2.Lines[Indice];
if (Palavra[Posicao] = Letra) then
begin
Memo3.Lines.Add(Palavra);
end;
end;
end;

end;

Eu fiz uns testes aqui e deu certo, verifica se era isso mesmo o que você tinha em mente ok.

Um abraço,
ITO
Responder

21/08/2019

Fernando Ito

Esquece meu primeiro post, usa este abaixo:

procedure TForm1.btnGerarClick(Sender: TObject);
var
I, Indice, Esq: Integer;
Caixa: TEdit;
begin
for Indice := Pred(Panel1.ControlCount) downto 0 do
begin
if (Panel1.Controls[Indice] is TEdit) then
begin
TEdit(Panel1.Controls[Indice]).Destroy;
end;
end;

Esq := 12;
// edtLetras será o Edit para informar número de letras
for I := 1 to StrToInt(edtLetras.Text) do
begin
Caixa := TEdit.Create(Self);
Caixa.Name := 'btn' + IntToStr(I);
Caixa.Parent := Panel1;
Caixa.Left := Esq;
Caixa.Top := 11;
Caixa.Width := 20;
Caixa.Tag := I;
Caixa.Text := '';
Caixa.CharCase := ecUpperCase;
Caixa.onchange := VerificaLista2;
Caixa.Show;
Esq := Esq + 28;
end;
end;

procedure TForm1.VerificaLista2(Sender: TObject);
var
I, Indice, Posicao, Contador, LetraDiferente: Integer;
Letra, Palavra: string;
begin
Memo2.Clear;
for Indice := 0 to Pred(Memo1.Lines.Count) do
begin
Palavra := Memo1.Lines[Indice];
Contador := 0;
LetraDiferente := 0;
if (Length(Palavra) = (StrToInt(edtLetras.Text))) then
begin
for I := Pred(Panel1.ControlCount) downto 0 do
begin
if (Panel1.Controls[I] is TEdit) then
begin
Letra := TEdit(Panel1.Controls[I]).Text;
Posicao := TEdit(Panel1.Controls[I]).Tag;
if (Letra <> '') then
begin
if (Palavra[Posicao] <> Letra) then
begin
LetraDiferente := 1;
Continue;
end
else
begin
Inc(Contador);
end;
end;
end;
end;
end;
if ((Contador > 0) and (LetraDiferente = 0)) then
begin
Memo2.Lines.Add(Palavra);
end;
end;
end;

Sucesso,
ITO
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar