Czy widziałeś kiedyś menu lub kolumnę tabeli lub wiersz w innym kolorze, gdy najedziesz na niego myszką? Oto nasz cel: wyróżnienie wiersza, gdy wskaźnik myszy znajdzie się w zasięgu.
Składnik TDBGrid Delphi jest jednym z klejnotów VCL. Zaprojektowany, aby umożliwić użytkownikowi przeglądanie i edycję danych w siatce tabelarycznej, DBGrid zapewnia różne sposoby dostosowywania sposobu, w jaki reprezentuje własne dane. Na przykład, dodawanie koloru do siatek bazy danych poprawi wygląd i rozróżni znaczenie niektórych wierszy lub kolumn w bazie danych.
Nie daj się jednak zwieść zbyt uproszczonym samouczkom na ten temat. Może się wydawać, że wystarczy ustawić dgRowSelect właściwość, ale pamiętaj, kiedy dgRowSelect jest zawarty w Opcje, dgEdycja flaga jest ignorowana, co oznacza, że edycja danych za pomocą siatki jest wyłączona.
Poniżej znajduje się objaśnienie, jak włączyć OnMouseOver typ zdarzenie dla wiersza DBGrid, aby mysz została zarejestrowana i zlokalizowana, dzięki czemu rekord jest aktywny, aby podświetlić odpowiedni wiersz w DBGrid.
Jak pracować z komponentami OnMouseOver i Delphi
Pierwsze zamówienie to pisanie kodu dla OnMouseMove zdarzenie w komponencie TDBGrid, aby mógł on zlokalizować wiersz i kolumnę DBGrid (komórkę), nad którymi przesuwa się mysz.
Jeśli mysz znajdzie się nad siatką (obsługiwane w OnMouseMove moduł obsługi zdarzeń), możesz użyć MoveBy metoda składnika DataSet, aby ustawić bieżący rekord na ten wyświetlany „pod” kursorem myszy.
rodzaj THackDBGrid = klasa(TDBGrid);
...
procedura TForm1.DBGrid1MouseMove
(Nadawca: TObject; Shift: TShiftState; X, Y: liczba całkowita);
var
gc: TGridCoord;
zaczynać
gc: = DBGrid1.MouseCoord (x, y);
gdyby (gc. X> 0) I (gc. Y> 0) wtedy zacznij
DBGrid1.DataSource. DataSet. MoveBy
(gc. Y - THackDBGrid (DBGrid1) .Row);
koniec;
koniec;
Podobnego kodu można użyć do wskazania komórki nad myszą i do zmiany kursora nad paskiem tytułowym.
Aby poprawnie ustawić aktywny rekord, musisz zhakować DBGrid i uzyskać ochronę Rząd własność. The Rząd własność TCustomDBGrid składnik zawiera odniesienie do aktualnie aktywnego wiersza.
Wiele Komponenty Delphi mają użyteczne właściwości i metody, które są oznaczone jako niewidoczne lub chronione dla programisty Delphi. Mamy nadzieję, że aby uzyskać dostęp do takich chronionych elementów komponentu, można zastosować prostą technikę zwaną „chronionym włamaniem”.
Przy powyższym kodzie, kiedy przesuwasz mysz nad siatką, wybrany rekord jest tym, który jest wyświetlany na siatce „pod” kursorem myszy. Nie trzeba klikać siatki, aby zmienić bieżący rekord.
Podświetl aktywny wiersz, aby poprawić wrażenia użytkownika:
procedura TForm1.DBGrid1DrawColumnCell
(Nadawca: TObject; const Rect: TRect; DataCol: Integer;
Kolumna: TColumn; State: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
lub (gdFocused in State) lub (gdSelected in State) wtedy zacznij
DBGrid1.Canvas. Szczotka. Kolor: = clSkyBlue;
DBGrid1.Canvas. Czcionka. Styl: = DBGrid1.Canvas. Czcionka. Styl + [fsBold];
DBGrid1.Canvas. Czcionka. Kolor: = clRed;
koniec;
koniec;
The OnDrawColumnCell Zdarzenie służy do obsługi potrzeby niestandardowego rysunku danych w komórkach siatki.
Możesz użyć małej sztuczki, aby odróżnić wybrany wiersz od wszystkich innych wierszy. Weź pod uwagę, że Rząd własność (liczba całkowita) jest równa ActiveRecord (+1) właściwość Łącza danych obiekt, że wybrany rząd ma być malowany.
Prawdopodobnie będziesz chciał wyłączyć to zachowanie ( MoveBy metoda w OnMouseMove moduł obsługi zdarzeń) kiedy DataSet podłączony do DBGrid jest w Edytować lub Wstawić tryb.