Przejście do następnego wiersza w StringGrid po naciśnięciu klawisza Enter

0

Witam.

Usiłuje zrobić tak aby enter przechodził to następnego wiersza StringGrida.
W zdarzeniu : StringGrid1KeyUp

               IF Ord(Key)=13
                  THEN
                      begin
                      IF StringGrid1.Row<StringGrid1.RowCount-1
                        THEN
                            begin
                                StringGrid1.Row:=StringGrid1.Row+1;
                            end;
                      end;
 

Po naciśnięciu enter na chwile przenosi do komórki pod spodem, a potem do komórki po prawej w wierszu w którym była edycja.

Na jednym z form znalazłem rade aby zmienić właściwość Form1.Keypreview na true - również nie pomogło.

Podpowiecie mi jak to zrobić?

1

Po pierwsze to musisz to ustawić nie w OnKeyUp, a OnKeyDown; Po drugie w obu tych zdarzeniach parametr Key jest typu Word, więc Ord jest zbędne; Po trzecie, jeśli obsługujesz jakiś klawisz to aby nie zostały wykonane standardowe operacje do niego przypisane - musisz go na koniec metody wyzerować;

Przykładowy kod:

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = 13 then
  begin
    if StringGrid1.Row < StringGrid1.RowCount - 1 then
      StringGrid1.Row := StringGrid1.Row + 1;

    Key := 0;
  end;
end;

W ten sposób zawsze po wciścięciu klawisza Enter focus zostanie przeniesiony do niższej komórki; Jeśli jest ona w ostatnim wierszu - zaznaczenie pozostanie bez zmian; Możesz to także oprogramować, czyli np. jeśli focus znajduje się w komórce w ostatnim wierszu, można go przenieść do komórki pierwszego wiersza następnej kolumny (jeśli taka istnieje);

Dodatkowo, w module Windows znajduje się zestaw stałych określających kody klawiszy do użycia we wszystkich metodach, w których klawisz podawany jest jako Word, a nie Char; Dlatego po dodaniu tego modułu do listy uses, zamiast porównywać Key z 13, można zapisać:

if Key = VK_RETURN then

Wszystkie stałe określające kody klawiszy są poprzedzone prefiksem VK_, np. VK_BACKSPACE, VK_ESCAPE, VK_7, VK_T itd.

0

Dziękuje Ci bardzo.
Wszystko (a nawet więcej niż zapytałem) już wiem.

Miłego dnia :)

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