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

Przejście do następnego wiersza w StringGrid po naciśnięciu klawisza Enter
HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1863
0

Witam.

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

Kopiuj
               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ć?

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12270
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:

Kopiuj
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ć:

Kopiuj
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.

HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1863
0

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

Miłego dnia :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.