ComboBox com history

09/01/2006

Olá...

Coloquei em uma tela de login, um combo e um edit. Agora que gravar um history no combo quando o usuário conectar. Assim da proxima vez, o usuário dele estará no combo. Como farei isso?

Abraços


Redoctober

Respostas

09/01/2006

Eixox

Você pode optar por duas formas diferentes de fazer isso:

1 - Armazenando em um arquivo Ini e quando o sistema é iniciado ele lê esse arquivo e carrega todo o histórico no arquivo Ini.

2 - Usando uma rotina do tipo ComboBox1.Items.Add(ComboBox1.Text); para carregar os itens para dentro do combobox e depois usando as procedures ComboBox1.Items.[b:5d061e330e]SaveToFile[/b:5d061e330e](´NomeDoArquivo´) e
ComboBox1.Items.[b:5d061e330e]LoadFromFile[/b:5d061e330e](´NomeDoArquivo´); para salvar e carregar os dados no combobox.

Outro detalhe, a medida que você for inserindo itens no combobox, você pode usar o IndexOf para ver se o nome digitado já existe.


Responder Citar

09/01/2006

Redoctober

Teria um exemplo prático da segunda opção?


Responder Citar

09/01/2006

Redoctober

Faleu pela ajuda amigo!

eu usei o evento OnChance
ComboBox1.AutoComplete := true;


Assim se existir algo parecido com o digitado ele é selecionado.

Valeu.


Responder Citar

09/01/2006

Redoctober

Um probleminha!

meu arquivo ta assim:
---
joao
maria
maria
jose
joao
joao
maria
---

Ou seja, nesse arquivo tem vários nomes repetidos... Preciso carregar esses dados na combo, porem sem ter nenhum repetido. Ficando assim:

--
joao
maria
jose
--

Como faria?


Responder Citar

09/01/2006

Edilcimar

na hora de salvar, verifique se o nome já existe, caso positivo não salve


Responder Citar

09/01/2006

Eixox

Por causa disso que eu te disse para executar aquela função chamada INDEXOF, ele faz justamente aquilo que você precisa, retorna um boolean. Se não achou retorna false, se achou retornar True.

Então, quando o usuário pressiona a tecla enter ou tab para se deslocar para o próximo campo, ele executa o evento onExit e lá no evento coloque o código:

if Combobox1.Items.Indexof(Combobox1.Text) = false then
ComboBox1.Items.Add(ComboBox1.Text);

Por causa disso que eu te falei esse lance.


Responder Citar

09/01/2006

Redoctober

IndexOf() é Integer. Ele não retorna boolena.

Do jeito que vc me passou nao funcionou.


Responder Citar

10/01/2006

Redoctober

[b:be5552a4b6]up[/b:be5552a4b6]


Responder Citar

10/01/2006

Adriano Santos

IndexOf() é Integer. Ele não retorna boolena. Do jeito que vc me passou nao funcionou.


Teste se é maior ou menor que zero

  if ...IndexOf() > 0 then //Existe
    //Faça o que tem que fazer.



Responder Citar

10/01/2006

Eixox

Desculpe-me pela besteira em que lhe passei, o negócio é o seguinte, o INDEXOF realmente retorna um valor inteiro, porém se você perceber no arquivo de ajuda do delphi verá que:

Se a String que você procura for achada na lista ele retornará um valor inteiro dizendo qual é a posição na lista

Se a String que você procura não for localizada na lista ele retornará o valor -1.

Então meu caro amigo, no evento OnExit do combobox ou em qualquer botão, antes de voê executar o processo de inserssão do nome, mande ele executar esse comando que também insere o nome mas antes verifica se ele já está dentro da combobox. Eu testei e funciona corretamente - é case sensitive ok.

[b][color=red:472b02215f]if ComboBox1.Items.IndexOf(ComboBox1.Text) = -1 then
ComboBox1.Items.Add(ComboBox1.Text);[/[/color:472b02215f]b]


Responder Citar

10/01/2006

Redoctober

Deu certinho.

Valeu pela atenção!

Abraço


Responder Citar