| Delphi Tips & Tricks | softsale > Delphi Tips & Tricks |
| < poprzednia rada | następna rada > |
Obsługa DBGrida za pomocą klawiszy skrótówNiekiedy należy zapewnić obsługę grida bez użycia myszki, tylko za pomocą klawiatury, korzystając z klawiszy skrótów. Jak to zrobić? Wykorzystamy do tego celu komponent TMenu oraz metodę BTnClick DBNavigatora. Utwórzmy menu Rekord zawierające pozycje odpowiadające przyciskom w jakie standardowo wyposażony jest DBNavigator. Przypiszmy kolejnym elementom menu odpowiednie klawisze skrótu. Stwórzmy handler obsługi zdarzenia OnClick dla pierwszego elementu menu a następnie przypiszmy ten handler obsługi do wszystkich pozycji menu. Nasz handler obsługi zdarzenia OnClick zawiera wywołanie procedury NawigatorMenu. procedure TForm1.Pierwszy1Click(Sender: TObject); begin nawigatorMenu( Aktywny_Nawigator, Sender ); end; Nasza procedura ma dwa parametry: pierwszy to Nawigator, drugi to Sender, który w tym wypadku odpowiada wybranemu elementowi menu. procedure NawigatorMenu(var Nawigator: TDBNavigator;
var Sender: TObject);
W procedurze NawigatorMenu określany jest wybrany element menu w oparciu o jego nazwę, a następnie wywoływana jest metoda BtnClick z odpowiednim parametrem. Dodatkowo sprawdzane jest jeszcze, czy odpowiedni przycisk jest widoczny w DBNavigatorze. procedure NawigatorMenu(var Nawigator: TDBNavigator;
var Sender: TObject);
var
menu_wybrane: String;
begin
menu_wybrane := TMenuItem(Sender).Caption;
// usunięcie znaku '&' (jeśli istnieje), pozwala na zmianę
// "gorącego klawisza" bez zmiany kodu
Delete(menu_wybrane, Pos('&', menu_wybrane), 1);
with Nawigator do
begin
if (menu_wybrane = 'Pierwszy') and
(nbFirst in Navigator.VisibleButtons) then
BtnClick(nbFirst)
else if (menu_wybrane = 'Poprzedni') and
(nbPrior in Navigator.VisibleButtons) then
BtnClick(nbPrior)
else if (menu_wybrane = 'Następny') and
(nbNext in Navigator.VisibleButtons) then
BtnClick(nbNext)
else if (menu_wybrane = 'Ostatni') and
(nbLast in Navigator.VisibleButtons) then
BtnClick(nbLast)
else if (menu_wybrane = 'Wstaw') and
(nbInsert in Navigator.VisibleButtons) then
BtnClick(nbInsert)
else if (menu_wybrane = 'Usuń') and
(nbDelete in Navigator.VisibleButtons) then
BtnClick(nbDelete)
else if (menu_wybrane = 'Edytuj') and
(nbDelete in Navigator.VisibleButtons) then
BtnClick(nbEdit)
else if (menu_wybrane = 'Zapisz') and
(nbPost in Navigator.VisibleButtons) then
BtnClick(nbPost)
else if (menu_wybrane = 'Anuluj') and
(nbCancel in Navigator.VisibleButtons) then
BtnClick(nbCancel)
else if (menu_wybrane = 'Odśwież') and
(nbRefresh in Navigator.VisibleButtons) then
BtnClick(nbRefresh);
end;
end;
Jak obsłużyć za pomocą takiego menu poruszanie się po wielu tablicach. Załóżmy, że korzystamy z komponentu TabbedNotebook i na każdej jego zakładce umieszczamy inną tablicę. Jeżeli używamy oddzielnych DBNavigatorów dla każdej tablicy, to można to zrealizować w następujący sposób: procedure TForm1.TabbedNotebook1Change(Sender: TObject;
NewTab: Integer; var AllowChange: Boolean);
begin
if newTab=0 then Aktywny_Nawigator:=dbnavigator1;
if newTab=1 then Aktywny_Nawigator:=dbnavigator2;
end;
Jeżeli używamy tylko jednego DBNavigatora dla wszystkich tablic to oczywiście należałoby odpowiednio przypisać wartość do własności DataSource DBNavigatora: procedure TForm1.TabbedNotebook1Change(Sender: TObject;
NewTab: Integer; var AllowChange: Boolean);
begin
if newTab=0 then dbnavigator1.DataSource:=DataSource1;
if newTab=1 then dbnavigator1.DataSource:=DataSource2;
Aktywny_Nawigator:=dbnavigator1;
end;
W obu przypadkach należy jeszcze przypisać parametrowi Nawigator Aktywny_Nawigator np. w procedurze obsługi zdarzenia OnCreate formy. procedure TForm1.FormCreate(Sender: TObject); begin // tylko wtedy, jeśli mamy jeden DBNavigator // dla kilku tablic dbnavigator1.DataSource:=DataSource1; Aktywny_Nawigator := dbnavigator1; end; Należy pamiętać o deklaracji: var Aktywny_Nawigator: TDBNavigator; |
|
SOFTSALE - Oprogramowanie i Szkolenia softsale@softsale.com.pl 03-565 Warszawa , ul. Borzymowska 43 lok. 301C tel/fax:4084840,GSM:0607612428 |