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

2013-11-08 13:49

Rejestracja: 7 lat temu

Ostatnio: 2 dni temu

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

edytowany 2x, ostatnio: hipekk, 2013-11-08 13:50

Pozostało 580 znaków

2013-11-08 14:18
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Tuchów

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.


edytowany 1x, ostatnio: furious programming, 2013-11-08 14:20

Pozostało 580 znaków

2013-11-08 14:28

Rejestracja: 7 lat temu

Ostatnio: 2 dni temu

0

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

Miłego dnia :)

Pozostało 580 znaków

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