TEdit zmiana pierwszej litery na dużą

0

Delphi 5, lokalna baza Paradox.

Mam pole edycyjne

Edit_nazwisko: TEdit

oprogramowane zdarzeniem OnChange do którego wpisuję kolejne litery szukanego nazwiska.
Z każdą wpisaną literą w DBGridzie wyświetla mi się coraz mniej nazwisk zgodnie z podanymi początkowymi literami, ale ...
Użytkownik zażyczył sobie by można było wpisywać tylko małe litery, a program i tak znajdzie dane nazwisko.
Dopisałem linijkę zmieniającą pierwszą literę z małej na dużą:

begin
         Edit_nazwisko.Text := UpperCase(Edit_nazwisko.Text[1])+Copy(Edit_nazwisko.Text, 2, Length(Edit_nazwisko.Text));
 if wybor_prawy.Checked  then   // szukanie
  Begin
    Options := [loPartialKey] ;
    tab_uczni.Locate('Nazwisko', Edit_nazwisko.Text, Options) ;
    E_nazwisko.Text := tab_uczni.FieldByName('Nazwisko').AsString ;
    E_imie.Text := tab_uczni.FieldByName('Imie').AsString ;
    E_pokoj.Text := tab_uczni.FieldByName('Pokoj').AsString ;
    tab_dokad.Last ;
    E_dokad.Text := tab_dokad.FieldByName('Dokad').AsString ;
    Lab_osoba.Caption := 'Uczeń wracający' ;
    But_zap_powrot.Enabled := True ;
  end ;  

i niestety nie uzyskałem zakładanego efektu.
Załóżmy, że szukam nazwiska Robak
W Edit_nazwisko rzeczywiście po wpisaniu np 'r' pojawia się 'R',
ale po wpisaniu kolejnej litery 'o' uzyskuję 'OR', potem 'BOR' itd

Domyślam się, że problem leży w przypisaniu

Edit_nazwisko.Text := 

ale nie wiem jak to obejść.
Może jakieś sugestie.

0

Sugestia jest taka, żeby przeczytać dokumentację, w szczególności co to jest i do czego służy flaga loCaseInsensitive

0

Nie znam się na DBGrid więc co i jak tam można robić się nie wypowiem:D Co do twojego pomysłu to tutaj wskazówka http://4programmers.net/Forum/Newbie/197570-tedit_-_pozycja_kursora_i_usuniecie_znaku

0

Dzięki abrakadaber.
Jeszcze nie zrobiłem, ale z tego co doczytałem to tak trzeba zrobić jak sugerujesz.
Jak już zadziała - podzielę się kodem.

Poprawiłem:

if wybor_prawy.Checked  then   // szukanie
  Begin
    Options := [loCaseInsensitive, loPartialKey] ;
    tab_uczni.Locate('Nazwisko', Edit_nazwisko.Text, Options);
    E_nazwisko.Text := tab_uczni.FieldByName('Nazwisko').AsString ;
    E_imie.Text := tab_uczni.FieldByName('Imie').AsString ;
    E_pokoj.Text := tab_uczni.FieldByName('Pokoj').AsString ;
    tab_dokad.Last ;
    E_dokad.Text := tab_dokad.FieldByName('Dokad').AsString ;
    Lab_osoba.Caption := 'Uczeń wracający' ;
    But_zap_powrot.Enabled := True ;
  end ;

Kompiluje się bez błędu.
Działać nie działa.
Wpisanie 'R' - zwraca nazwiska na R.
Wpisanie 'r' - nic nie zwraca.
D...

0

No to jeszcze doczytaj w tej dokumentacji jak działa Locate i dlaczego powinieneś to zmienić na Filter lub obsłużyć zdarzenie OnFilterRecrod.
I nie grida, edita czy innej kontrolki, tylko DataSetu do którego jest podłączony ów DBGrid.
Skoro masz potrzebę wyszukania/filtrowania danych, to operuj na danych, a nie na kontrolce która te dane wyświetla...

0

Dzięki. Pogubiłem się.
Ale już wiem w którą stronę iść.

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