Array
(
)

ComboBox com history

Redoctober
   - 09 jan 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


Eixox
   - 09 jan 2006

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.SaveToFile(´NomeDoArquivo´) e
ComboBox1.Items.LoadFromFile(´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.


Redoctober
   - 09 jan 2006

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


Redoctober
   - 09 jan 2006

Faleu pela ajuda amigo!

eu usei o evento OnChance
#Código


ComboBox1.AutoComplete := true;


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

Valeu.


Redoctober
   - 09 jan 2006

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?


Edilcimar
   - 09 jan 2006

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


Eixox
   - 09 jan 2006

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.


Redoctober
   - 09 jan 2006

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

Do jeito que vc me passou nao funcionou.


Redoctober
   - 10 jan 2006

up


Adriano Santos
   - 10 jan 2006


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

Do jeito que vc me passou nao funcionou.


Teste se é maior ou menor que zero

#Código


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



Eixox
   - 10 jan 2006

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.

if ComboBox1.Items.IndexOf(ComboBox1.Text) = -1 then
ComboBox1.Items.Add(ComboBox1.Text);


Redoctober
   - 10 jan 2006

Deu certinho.

Valeu pela atenção!

Abraço