Erstellen Sie mit Delphi ein Mouseover-Farbhighlight

click fraud protection

Haben Sie jemals eine Menü- oder Tabellenspalte oder -zeile in einer anderen Farbe hervorgehoben, wenn Sie mit der Maus darüber fahren? Das ist unser Ziel: Eine Zeile hervorzuheben, wenn sich der Mauszeiger in Reichweite befindet.

Die TDBGrid Delphi-Komponente ist eines der Juwelen der VCL. Das DBGrid wurde entwickelt, um es einem Benutzer zu ermöglichen, Daten in einem tabellarischen Raster anzuzeigen und zu bearbeiten. Es bietet verschiedene Möglichkeiten zum Anpassen der Darstellung seiner eigenen Daten. Beispielsweise, Hinzufügen von Farbe zu Ihren Datenbankgittern verbessert das Erscheinungsbild und unterscheidet die Bedeutung bestimmter Zeilen oder Spalten in der Datenbank.

Lassen Sie sich jedoch nicht von zu simplen Tutorials zu diesem Thema täuschen. Es scheint einfach genug zu sein, nur das einzustellen dgRowSelect Eigentum, aber denken Sie daran, wenn dgRowSelect ist enthalten in Optionen, das dgEditing Das Flag wird ignoriert, was bedeutet, dass das Bearbeiten der Daten mithilfe des Rasters deaktiviert ist.

instagram viewer

Im Folgenden finden Sie eine Erklärung zum Aktivieren von OnMouseOver eine Art von Ereignis für eine DBGrid-Zeile, damit die Maus aufgezeichnet und lokalisiert wird, wodurch die Aufzeichnung aktiviert wird, um die entsprechende Zeile in einem DBGrid hervorzuheben.

So arbeiten Sie mit OnMouseOver- und Delphi-Komponenten

Die erste Aufgabe ist Code schreiben für die OnMouseMove Ereignis in einer TDBGrid-Komponente, damit sie die Zeile und Spalte (Zelle) des DBGrid lokalisieren kann, über der sich die Maus befindet.

Wenn sich die Maus über dem Raster befindet (behandelt in der OnMouseMove Event-Handler), können Sie die verwenden MoveBy Methode einer DataSet-Komponente, um den aktuellen Datensatz auf den Wert zu setzen, der "unter" dem Mauszeiger angezeigt wird.

Art THackDBGrid = Klasse(TDBGrid);
...
Verfahren TForm1.DBGrid1MouseMove
(Absender: TObject; Shift: TShiftState; X, Y: Integer);
var
gc: TGridCoord;
Start
gc: = DBGrid1.MouseCoord (x, y);
wenn (gc. X> 0) UND (gc. Y> 0) dann fang an
DBGrid1.DataSource. DataSet. MoveBy
(gc. Y - THackDBGrid (DBGrid1) .Row);
Ende;
Ende;

Ein ähnlicher Code kann verwendet werden, um anzuzeigen, über welcher Zelle sich die Maus befindet, und um den Cursor zu ändern, wenn er sich über der Titelleiste befindet.

Um den aktiven Datensatz korrekt einzustellen, müssen Sie ein DBGrid hacken und den geschützten in die Hände bekommen Reihe Eigentum. Das Reihe Eigentum von a TCustomDBGrid Komponente enthält den Verweis auf die aktuell aktive Zeile.

Viele Delphi-Komponenten über nützliche Eigenschaften und Methoden verfügen, die für einen Delphi-Entwickler als unsichtbar oder geschützt markiert sind. Um auf solche geschützten Mitglieder einer Komponente zuzugreifen, kann hoffentlich eine einfache Technik verwendet werden, die als "geschützter Hack" bezeichnet wird.

Wenn Sie mit dem obigen Code die Maus über das Raster bewegen, wird der ausgewählte Datensatz im Raster "unter" dem Mauszeiger angezeigt. Sie müssen nicht auf das Raster klicken, um den aktuellen Datensatz zu ändern.

Lassen Sie die aktive Zeile markieren, um die Benutzererfahrung zu verbessern:

Verfahren TForm1.DBGrid1DrawColumnCell
(Absender: TObject; const Rect: TRect; DataCol: Integer;
Spalte: TColumn; Status: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
oder (gdFocused in State) oder (gdSelected in State) dann fang an
DBGrid1.Canvas. Bürste. Farbe: = clSkyBlue;
DBGrid1.Canvas. Schriftart. Stil: = DBGrid1.Canvas. Schriftart. Stil + [fsBold];
DBGrid1.Canvas. Schriftart. Farbe: = clRed;
Ende;
Ende;

Das OnDrawColumnCell Das Ereignis wird verwendet, um die Notwendigkeit einer benutzerdefinierten Zeichnung für die Daten in den Zellen des Rasters zu behandeln.

Sie können einen kleinen Trick verwenden, um die ausgewählte Zeile von allen anderen Zeilen zu unterscheiden. Bedenken Sie, dass die Reihe Eigentum (ganze Zahl) ist gleich dem Aktiver Rekord (+1) Eigentum der Datenverbindung Objekt, dass die ausgewählte Zeile gemalt werden soll.

Sie möchten dieses Verhalten wahrscheinlich deaktivieren (die MoveBy Methode in OnMouseMove Ereignishandler) wann DataSet verbunden mit einem DBGrid ist in Bearbeiten oder Einfügen Modus.

instagram story viewer