DBGrid selektierte Zeile farblich hervorheben [gelöst]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

DBGrid selektierte Zeile farblich hervorheben [gelöst]

Beitrag von MmVisual »

Hallo,

Ich möchte in einem DBGrid die aktuelle Zeile hellblau und die ausgewählte Zelle dunkelblau zeichnen. Das ganze möchte ich gerne so programmieren dass ich diese eine Funktion für viele Tabellen aufrufen kann ohne dass ich mir rigend welche eigenen Zwischenvariablen merken muss.
Ich habe schon meine Tabellen bunt gemalt, aber wie ich dies hin bekomme dazu fehlt mir jetzt der Ansatz bzw. wie ich den Parameter "DataCol" verwende und damit die aktiv ausgewählte Zeile erkenne. (grdDrawColumnCell() ).

Kann mir jeamand bitte einen Tipp geben?

Edit: Ich meine, dass die Zeile ähnlich wie bei "dgRowSelect" gezeichnet wird, aber dennoch einzelne Zellen editierbar sind. Daher darf ich dgRowSelect nicht setzen.

Gruß Markus
Zuletzt geändert von MmVisual am Sa 22. Jan 2011, 08:03, insgesamt 1-mal geändert.

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: DBGrid selektierte Zeile farblich hervorheben

Beitrag von MmVisual »

Ich habe es testweise in ein Grid mal "hart" einprogrammiert:

Code: Alles auswählen

If qBauteilID.AsString = DBTextID_Feld.Caption Then
     TDBGrid(Sender).Canvas.Brush.Color := clLime;


Dann ein wenig in der Tabelle geklickt, sieht nicht so doll aus:
(die alte Zeile wird nicht komplett neu gezeichnet, sondern nur das eine Feld, das selektiert war)
Dateianhänge
Bild1.png
Bild1.png (7.51 KiB) 263 mal betrachtet
Zuletzt geändert von MmVisual am Sa 22. Jan 2011, 08:04, insgesamt 1-mal geändert.

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: DBGrid selektierte Zeile farblich hervorheben

Beitrag von MmVisual »

Ich hab es raus gefunden. Es geht nicht. Zumindest nicht ohne Umprogrammieren von TCustomGrid.

Das ist neu:
TCustomGrid neue Option in TGridOption "goRowHighlight"
TGridDrawState neue Eigenschaft "gdRowHighlight"
TCustomDBGrid neue Option in TDBGridOption "dgRowHighlight"

Die beiden geänderten Dateien einkopieren nach "C:\lazarus\lcl\"
Lazarus neu kompillieren

Dann den TDBGrid auf das Formular setzen und man hat unter "Options" die neue Eigenschaft dgRowHighlight.
Sobald die gesetzt ist, dann:
- Farblicher Unterschied der selektierten Zeile
- Nach wie vor die ausgewählte Zelle gleich sichtbar und editierbar
- OnDrawColumnCell beinnhaltet "State: TGridDrawState" mit dgRowHighlight wenn die markierte Datenzeile gezeichnet wird
- Die Farbe wird nach diesem Muster geändert: Color := ColorToRGB(Color) XOr $1F1F1F
- Siehe Bild.
- Kompatibel zur alten LCL, da nur eine Option dazukam die als Default deaktiviert ist.

Kann das bitte jemand mal testen?

Ich habe Lazarus 0.9.31/FPC2.4.1 Build 29158

Gruß Markus.
Dateianhänge
grid.diff
(2.51 KiB) 20-mal heruntergeladen
grids.pas
(320.65 KiB) 17-mal heruntergeladen
dbgrids.pas
(106.16 KiB) 16-mal heruntergeladen
Bild1.png
Bild1.png (2.22 KiB) 381 mal betrachtet

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: DBGrid selektierte Zeile farblich hervorheben [gelöst]

Beitrag von MmVisual »

Hier ist der Bug-Tracker eintrag:
http://bugs.freepascal.org/view.php?id=18581

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: DBGrid selektierte Zeile farblich hervorheben [gelöst]

Beitrag von MmVisual »

Diese beiden Dateien/Änderungen habe ich nun auch unter FPC2.5.1/Lazarus0.9.31 Build 29193 unter Linux gestestet und geht.

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: DBGrid selektierte Zeile farblich hervorheben [gelöst]

Beitrag von MmVisual »

*** Kurzmitteilung ***

Jetzt ist es in Lazarus drin. :D

Antworten