TEdit i automatyczne dokańczanie

0

Cześć!

W moim programie, w pewnym formularzu korzystam z kontrolek TEdit do wprowadzania danych. Chciałbym zrobić tak, że jak ktoś wpisuje pewne dane do tych kontrolek, by się one same uzupełniały... ale tak, by to uzupełnienie było "zaznaczone", żeby użytkownikowi ono nie przeszkadzało, jeśli podpowiedź jest błędna. Np. mam w bazie danych wpisane nazwisko Karol i Kamil. Jak ktoś wciśnie w polu "K" to mu się wyświetli "Kamil", ale "amil" będzie podświetlone a kursor będzie za literką "a". Tak, że jak użytkownik wciśnie 'a', to się nic nie zmieni, tzn. tylko podświeli się 'mil'. Jak teraz wpisze "r", to tekst zmieni się na 'Karol'. Mam nadzieję, że rozumienie.

Męczę się z tym i nie wiem jak to zrobić. Próbowałem używać tylko SelStart i SelLength... by końcówke zaznaczać, ale wtedy kursor jest na końcu zaznaczenia a nie na początku.

Będę wdzięczny za sugestie. A może są inne kontrolki, które same to realizują?

Z góry dzięki

0

Umieść na formie komponent typu TComboBox.
W Items umieść elementy które będą wśród tych automatycznie wpisywanych.
Styl komponentu zmień na csSimple.
To wszystko.

Jeśli takie rozwiązanie Cię nie satysfakcjonuje daj znać... :-)

0

a jak nie to masz... pokombinuj (chociaż osobiście zostalbym przy ComboBox)

EDIT1
onKeyDown

Edit1.SelText := '';

onKeyUp

var
  I: Integer;
  S: String;
begin
if Length(Edit1.Text)>0 then
for I:=0 to Memo1.Lines.Count -1 do
begin
  if Copy(Memo1.Lines[I], 1, Edit1.SelStart) = Copy(Edit1.Text, 1, Edit1.SelStart) then
    S:=Copy(Memo1.Lines[I], Edit1.SelStart+1, Length(Memo1.Lines[I]));
end;
Edit1.SelText := S;
Edit1.SelStart := Length(Edit1.Text)-Length(S);
Edit1.SelLength := Length(Edit1.Text);
end;

i wrzucasz na formatke Memo1 i do niej wpisujesz podpowiedzi.... (oczywiscie mozesz to przerobic na dowolnego StringLista ;) )

pozdro

0

Ten kod działa całkiem nieźle, ale problem jest z cofaniem kursora (klawisz Backspace)
Mam już wpisany tekst, wciskam Backspace i znajduje pierwszą podpowiedź i znowu ustawia kursor na końcu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1