Wyświetlanie napisu po wpisaniu pierwszej cyfry

0
function IsStrANumber(const S: string): Boolean;
var
  P: PChar;
begin
  P      := PChar(S);
  Result := False;
  while P^ <> #0 do
  begin
    if not (P^ in ['0'..'9']) then Exit;
    Inc(P);
  end;
  Result := True;
end;
procedure TForm1.JvEdit19KeyPress(Sender: TObject; var Key: Char);
begin
   if IsStrANumber(jvEdit19.Text) = True
      then jvCombobox3.Text:='ID'
      else jvCombobox3.Text:='Nazwisko';
   if jvEdit19.Text = '' then jvCombobox3.Text:='';
end;

Mam sobie taką funkcyjkę i jej wywołanie.
Chodzi o to, gdy wpisuję w komponent jvEdit19 jakś cyfrę to w komponencie jcVombobox3 wyświetla sie napis "ID", w przeciwnym wypadku "Nazwisko".

Na czym polega problem?
Napis "ID" pojawia się dopiero po wpisaniu dwóch cyfr zamiast przy pierwszej.
czyli nie znajde uzytkownika z ID równym od 1 do 9 tylko dopiero od 10.

Jak poprawic ten błąd? Co napisałem źle?
Dziękuję. [soczek]

0

OnKeyPress ma miejsce przed wciśnięciem klawisza.
Dowód :
TForm1, TEdit1 z Caption = 'Edit1', naciskam klawisz "a"

...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage(Edit1.Text);  // Wyświetlia'Edit1'
end;
...

Wniosek : Musisz użyć zdarzenia wykonującego się po wciśnięciu klawisza, tj. OnKeyUp
Dowód :
TForm1, TEdit1 z Caption = 'Edit1', naciskam klawisz "a"

...
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage(Edit1.Text);  // Wyświetli 'a'
end;
...

P.S.

jvCombobox3.Text:=''; 

zmień na jvCombobox3.Clear;

Nie spowoduje to zmiany działania programu, ale będzie czytelniejsze.

Wniosek końcowy : Naucz się podstaw Delphi.

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