Heb je ooit een menu- of tabelkolom of rijmarkering in een andere kleur gezien als je muis erover zweeft? Dat is wat ons doel is: een rij laten markeren wanneer de muisaanwijzer binnen bereik is.
De TDBGrid Delphi-component is een van de juwelen van de VCL. Ontworpen om een gebruiker in staat te stellen gegevens in een tabelraster te bekijken en te bewerken, biedt de DBGrid verschillende manieren om de manier waarop het zijn eigen gegevens vertegenwoordigt aan te passen. Bijvoorbeeld, kleur toevoegen aan uw databaseroosters zal het uiterlijk verbeteren en het belang van bepaalde rijen of kolommen binnen de database differentiëren.
Laat u echter niet misleiden door te simplistische tutorials over dit onderwerp. Het lijkt misschien eenvoudig genoeg om gewoon de dgRowSelect eigendom, maar onthoud dat wanneer dgRowSelect is inbegrepen in Opties, de dgEditing vlag wordt genegeerd, wat betekent dat het bewerken van de gegevens via het raster is uitgeschakeld.
Wat u hieronder zult vinden, is een uitleg over hoe u de
OnMouseOver soort van gebeurtenis voor een DBGrid-rij, zodat de muis wordt geregistreerd en gelokaliseerd, waardoor het record actief wordt om de corresponderende rij in een DBGrid te markeren.Werken met OnMouseOver- en Delphi-componenten
De eerste opdracht is code schrijven voor de OnMouseMove gebeurtenis in een TDBGrid-component zodat het de rij en kolom (cel) van DBGrid kan lokaliseren waar de muis over beweegt.
Als de muis zich boven het raster bevindt (behandeld in de OnMouseMove event handler), kunt u de MoveBy methode van een DataSet-component om het huidige record in te stellen op het record dat "onder" de muiscursor wordt weergegeven.
type THackDBGrid = klasse(TDBGrid);
...
procedure TForm1.DBGrid1MouseMove
(Afzender: TObject; Shift: TShiftState; X, Y: geheel getal);
var
gc: TGridCoord;
beginnen
gc: = DBGrid1.MouseCoord (x, y);
als (gc. X> 0) EN (gc. Y> 0) dan beginnen
DBGrid1.DataSource. DataSet. MoveBy
(gc. Y - THackDBGrid (DBGrid1) .Row);
einde;
einde;
Soortgelijke code kan worden gebruikt om te laten zien over welke cel de muis zweeft en om de cursor te wijzigen wanneer deze zich boven de titelbalk bevindt.
Om het actieve record correct in te stellen, moet je een DBGrid hacken en de beveiligde in handen krijgen Rij eigendom. De Rij eigendom van een TCustomDBGrid component bevat de verwijzing naar de momenteel actieve rij.
Veel Delphi componenten hebben nuttige eigenschappen en methoden die voor een Delphi-ontwikkelaar onzichtbaar of beschermd zijn gemarkeerd. Hopelijk kan voor toegang tot dergelijke beschermde leden van een component een eenvoudige techniek genaamd de "beschermde hack" worden gebruikt.
Met de bovenstaande code, wanneer u de muis over het raster beweegt, is het geselecteerde record het record dat wordt weergegeven in het raster "onder" de muiscursor. U hoeft niet op het raster te klikken om het huidige record te wijzigen.
Laat de actieve rij markeren om de gebruikerservaring te verbeteren:
procedure TForm1.DBGrid1DrawColumnCell
(Afzender: TObject; const Rect: TRect; DataCol: geheel getal;
Kolom: TColumn; Staat: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Rij)
of (gdFocused in staat) of (gdGeselecteerd in staat) dan beginnen
DBGrid1.Canvas. Borstel. Kleur: = clSkyBlue;
DBGrid1.Canvas. Lettertype. Stijl: = DBGrid1.Canvas. Lettertype. Stijl + [fsBold];
DBGrid1.Canvas. Lettertype. Kleur: = clRed;
einde;
einde;
De OnDrawColumnCell event wordt gebruikt om te voorzien in de behoefte aan een aangepaste tekening voor de gegevens in de cellen van het raster.
U kunt een kleine truc gebruiken om de geselecteerde rij te onderscheiden van alle andere rijen. Bedenk dat de Rij eigendom (geheel getal) is gelijk aan de ActiveRecord (+1) eigendom van de DataLink object dat de geselecteerde rij gaat verven.
U zult dit gedrag waarschijnlijk willen uitschakelen (de MoveBy methode in OnMouseMove event handler) wanneer DataSet verbonden met een DBGrid is in Bewerk of Invoegen modus.