Opret en overgangsfarve Fremhæv ved hjælp af Delphi

Har du nogensinde set en menu eller en tabel kolonne eller række fremhæve til en anden farve, når din mus svæver over den? Det er, hvad vores mål er her: at få en række fremhævet, når musemarkøren er inden for rækkevidde.

TDBGrid Delphi-komponenten er et af VCL's juveler. DBGrid er designet til at gøre det muligt for en bruger at se og redigere data i et tabelnettet og giver forskellige måder at tilpasse den måde, den repræsenterer sine egne data på. For eksempel, tilføjelse af farve til dine databasegitter vil forbedre udseendet og differentiere betydningen af ​​visse rækker eller kolonner i databasen.

Dog lad dig ikke narre af overdreven forenkling af tutorials om dette emne. Det kan virke let nok til bare at indstille dgRowSelect ejendom, men husk, at hvornår dgRowSelect er inkluderet i Muligheder, det dgEditing flag ignoreres, hvilket betyder, at redigering af data ved hjælp af gitteret er deaktiveret.

Hvad du finder nedenfor er en forklaring på, hvordan du aktiverer OnMouseOver type begivenhed for en DBGrid-række

instagram viewer
, så musen er optaget og placeret, hvilket gør posten aktiv for at fremhæve den tilsvarende række i en DBGrid.

Sådan arbejder du med OnMouseOver og Delphi-komponenter

Den første forretningsorden er skriver kode til OnMouseMove begivenhed i en TDBGrid-komponent, så den kan lokalisere DBGrid's række og søjle (celle), som musen svæver over.

Hvis musen er over gitteret (håndteres i OnMouseMove event handler), kan du bruge MoveBy metode til en DataSet-komponent til at indstille den aktuelle post til den der vises "nedenfor" musemarkøren.

type THackDBGrid = klasse(TDBGrid);
...
procedure TForm1.DBGrid1MouseMove
(Afsender: TObject; Skift: TShiftState; X, Y: heltal);
Var
gc: TGridCoord;
begynde
gc: = DBGrid1.MouseCoord (x, y);
hvis (Gc. X> 0) OG (Gc. Y> 0) thenbegin
DBGrid1.DataSource. DataSet. MoveBy
(Gc. Y - THackDBGrid (DBGrid1). Række);
ende;
ende;

Lignende kode kan bruges til at vise, hvilken celle musen svæver over og til at ændre markøren, når den er over titellinjen.

For at indstille den aktive post korrekt, skal du hacke en DBGrid og få dine hænder på det beskyttede Række ejendom. Det Række ejendom af en TCustomDBGrid komponenten indeholder henvisningen til den aktuelt aktive række.

Mange Delphi-komponenter har nyttige egenskaber og metoder, der er markeret usynlige eller beskyttet for en Delphi-udvikler. Forhåbentlig, til at få adgang til sådanne beskyttede medlemmer af en komponent, kan en simpel teknik kaldet "beskyttet hack" bruges.

Med koden ovenfor, når du flytter musen over gitteret, er den valgte post den, der vises i gitteret "nedenfor" musemarkøren. Der er ingen grund til at klikke på gitteret for at ændre den aktuelle post.

Få den aktive række markeret for at forbedre brugerens oplevelse:

procedure TForm1.DBGrid1DrawColumnCell
(Afsender: TObject; const Rect: TRect; DataCol: Heltal;
Kolonne: TColumn; Stat: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
eller (gdFokuseret i staten) eller (gdValdt i stat) thenbegin
DBGrid1.Canvas. Børste. Farve: = clSkyBlue;
DBGrid1.Canvas. Font. Style: = DBGrid1.Canvas. Font. Style + [fsFet];
DBGrid1.Canvas. Font. Farve: = clRed;
ende;
ende;

Det OnDrawColumnCell begivenhed bruges til at håndtere behovet for en tilpasset tegning til dataene i cellerne i gitteret.

Du kan bruge et lille trick til at differentiere den valgte række fra alle de andre rækker. Overvej at Række ejendom (heltal) er lig med ActiveRecord (+1) ejendom af Data link objekt, at den valgte række er ved at blive malet.

Du ønsker sandsynligvis at deaktivere denne opførsel (the MoveBy metode i OnMouseMove event handler) hvornår DataSet forbundet til en DBGrid er i Redigere eller Indsæt mode.

instagram story viewer