Crea un evidenziatore di colore per il passaggio del mouse usando Delphi

click fraud protection

Hai mai visto un menu o una colonna della tabella o evidenziare una riga di un colore diverso quando il mouse ci passa sopra? Questo è ciò che il nostro obiettivo è qui: mettere in evidenza una riga quando il puntatore del mouse si trova nel raggio d'azione.

Il componente TDBGrid Delphi è uno dei gioielli del VCL. Progettato per consentire a un utente di visualizzare e modificare i dati in una griglia tabulare, DBGrid offre vari modi di personalizzare il modo in cui rappresenta i propri dati. Per esempio, aggiungendo colore alle griglie del database migliorerà l'aspetto e differenzerà l'importanza di determinate righe o colonne all'interno del database.

Tuttavia, non lasciarti ingannare da tutorial troppo semplicistici su questo argomento. Potrebbe sembrare abbastanza semplice impostare il dgRowSelect proprietà, ma ricorda che quando dgRowSelect è incluso in Opzioni, il dgEditing flag viene ignorato, il che significa che la modifica dei dati utilizzando la griglia è disabilitata.

Quello che troverai di seguito è una spiegazione su come abilitare

instagram viewer
OnMouseOver tipo di evento per una riga DBGrid, in modo che il mouse sia registrato e posizionato, rendendo attivo il record in modo da evidenziare la riga corrispondente in un DBGrid.

Come lavorare con i componenti OnMouseOver e Delphi

Il primo ordine del giorno è codice di scrittura per il OnMouseMove evento in un componente TDBGrid in modo che possa individuare la riga e la colonna (cella) del DBGrid su cui passa il mouse.

Se il mouse si trova sopra la griglia (gestito in OnMouseMove gestore eventi), è possibile utilizzare il moveBy metodo di un componente DataSet per impostare il record corrente su quello visualizzato "sotto" il cursore del mouse.

genere THackDBGrid = classe(TDBGrid);
...
procedura TForm1.DBGrid1MouseMove
(Mittente: TObject; Maiusc: TShiftState; X, Y: intero);
var
gc: TGridCoord;
inizio
gc: = DBGrid1.MouseCoord (x, y);
Se (Gc. X> 0) E (Gc. Y> 0) thenbegin
DBGrid1.DataSource. DataSet. moveBy
(Gc. Y - THackDBGrid (DBGrid1) .Row);
fine;
fine;

Codice simile può essere usato per mostrare su quale cella si trova il mouse e per cambiare il cursore quando si trova sulla barra del titolo.

Per impostare correttamente il record attivo, è necessario hackerare un DBGrid e mettere le mani sul protetto Riga proprietà. Il Riga proprietà di a TCustomDBGrid componente contiene il riferimento alla riga attualmente attiva.

Molti Componenti Delphi hanno proprietà e metodi utili che sono contrassegnati come invisibili o protetti per uno sviluppatore Delphi. Eventualmente, per accedere a tali membri protetti di un componente, è possibile utilizzare una semplice tecnica chiamata "hack protetto".

Con il codice sopra, quando si sposta il mouse sulla griglia, il record selezionato è quello visualizzato nella griglia "sotto" il cursore del mouse. Non è necessario fare clic sulla griglia per modificare il record corrente.

Fai evidenziare la riga attiva per migliorare l'esperienza dell'utente:

procedura TForm1.DBGrid1DrawColumnCell
(Mittente: TObject; const Rect: TRect; DataCol: intero;
Colonna: TColumn; Stato: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
o (gdFocused in State) o (gdSelezionato nello stato) thenbegin
DBGrid1.Canvas. Spazzola. Colore: = clSkyBlue;
DBGrid1.Canvas. Font. Stile: = DBGrid1.Canvas. Font. Stile + [fsBold];
DBGrid1.Canvas. Font. Colore: = clRed;
fine;
fine;

Il OnDrawColumnCell L'evento viene utilizzato per gestire la necessità di un disegno personalizzato per i dati nelle celle della griglia.

Puoi usare un piccolo trucco per differenziare la riga selezionata da tutte le altre righe. Considera che il Riga proprietà (numero intero) è uguale al ActiveRecord (+1) proprietà di DataLink oggetto che la riga selezionata sta per essere dipinta.

Probabilmente vorrai disabilitare questo comportamento (il moveBy metodo in OnMouseMove gestore eventi) quando DataSet connesso a un DBGrid è in modificare o Inserire modalità.

instagram story viewer