| Delphi Tips & Tricks | softsale > Delphi Tips & Tricks |
| < poprzednia rada | następna rada > |
Nawigacja na formie przy pomocy klawiszy strzałek i EnterCzęstym wymaganiem klientów, którzy wcześniej pracowali pod systemem DOS, jest wymaganie aby przejście do następnego elementu kontrolnego, np. pola edycyjnego na formie, było powodowane naciśnięciem klawisza ENTER, zamiast zwykle stosowanego w systemie WINDOWS klawisza TAB i SHIFT_TAB. Jak to zrobić? Najpierw należy ustawić własność formy KeyPreview na True, co powoduje, że klucze wprowadzane są najpierw na formę, a dopiero potem do aktywnych elementów kontrolnych, a następnie oprogramować zdarzenie OnKeyPress formy tak, aby następowało wywołanie funkcji Perform w momencie naciśnięcia klawisza ENTER czyli: procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then
perform(WM_NEXTDLGCTL,0,0);
end;
Trochę trudniejsze jest spełnienie wymagania aby przechodzić pomiędzy poszczególnymi elementami kontrolnymi na formie przy pomocy klawiszy strzałka w górę, strzałka w dół. Rozwiązanie to opiera się na wykorzystaniu funkcji z WIN32 API o nazwie Keybd_Event. Funkcja ta odpowiada za generowanie obsługi klawiszy poprzez tworzenie odpowiednich komunikatów do systemu Windows, a mianowicie WM_KEYUP oraz WM_KEYDOWN. Jak poprzednio ustawiamy własność KeyPreview formy na True ale zamiast dostarczyć jak poprzednio handler do obsługi zdarzenia OnKeyPress piszemy handler dla bardziej specyficznego zdarzenia OnKeyDown formy. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: ShiftState);
begin
case key of
VK_DOWN,VK_RETURN:
// jeśli strzałka w dół lub Enter to działanie klawisza
// takie samo jak TAB
begin
keybd_Event(VK_TAB,0,0,0);
end;
// jeśli strzałka w górę, symulujemy działanie
// klawisza SHIFT_TAB
VK_UP:
begin
//symulacja naciśnięcia klawisza Shift
keybd_Event(VK_SHIFT,0,0,0);
keybd_Event(VK_TAB,0,0,0);
// zwolnienie klawisza SHIFT
keybd_Event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
end;
end;
end;
W momencie kiedy handler obsługi zdarzeń otrzymuje wirtualny kod klawisza VK_UP wskazujący na to,że naciśnięty został klawisz strzałka w górę aktywujemy 3 wołania funkcji Keybd_Event symulujące wystąpienie kombinacji klawiszy SHIFT_TAB. Dla klawisza SHIFT trzeba wykonać dwa wołania odpowiednio dla naciśnięcia i zwolnienia, drugie wołanie jest konieczne.
UWAGA: Należy zdawać sobie sprawę z tego, że jeżeli na formie znajdują się kontrole, które mają swoją obsługę strzałki w górę lub w dól (takie jak listbox czy combobox), to wymaga to dodatkowego kodu wtedy kiedy te kontrole uzyskują focus. Można to zrealizować, np dla listboxa, w następujący sposób: procedure TForm1.ListBox1Click(Sender: TObject);
begin
form1.keypreview:=false;
end;
Więcej szczegółow o tej użytecznej funkcji Keybd_Event można znależć w systemie pomocy WIN32 API systemu DELPHI.
|
|
SOFTSALE - Oprogramowanie i Szkolenia softsale@softsale.com.pl 03-565 Warszawa , ul. Borzymowska 43 lok. 301C tel/fax:4084840,GSM:0607612428 |