2016-12-23 2 views
0

Unser Produkt verwendet ein Raster für den Eigentümer-Draw (TStringGrid), in dem wir alle aus dem Raster ziehen. Ich versuche, den VCL-Stil, der von der Anwendung verwendet wird, zu respektieren. Das meiste funktioniert, aber wenn ich versuche, die ausgewählte Farbe für das Raster zu erhalten, erscheint es entweder schwarz (nicht großartig, wenn der verwendete Stil bereits dunkel ist) oder ein scheinbar zufälliger Farbverlauf. Hier ist der Code, den ich verwende, um die ausgewählte Farbe zu erhalten (vielleicht verwende ich das falsche Element oder ElementColor, um die erwartete Farbe zu erhalten).Ownerdraw VCL-Grids, die die erwartete ausgewählte Farbe für den VCL-Stil nicht auswählen

StyleServices.GetElementColor (StyleServices.GetElementDetails (tgCellSelected), ecFillColor, theColor); 

Jede Hilfe wäre willkommen. Dank

Antwort

2

Nicht alle TElementColor (ecBorderColor, ecFillColor, ecTextColor, ..) für alle möglichen TThemedElementDetails definiert, so müssen Sie das Boolesche Ergebnis immer überprüfen, indem Sie die GetElementColor Funktion zurückgegeben.

Wenn das Ergebnis falsch ist, bedeutet das, dass die Farbe nicht definiert ist. In Ihrem Fall ist kein Farbwert für die ecFillColor definiert, wenn das Element tgCellSelected ist.

Probieren Sie dieses Beispiel aus, das stattdessen das Element tgClassicCellSelected verwendet. Wenn nicht, verwenden Sie einfach die Farbe HighLight des aktiven VCL-Stils.

if not StyleServices.GetElementColor(StyleServices.GetElementDetails(tgClassicCellSelected), ecFillColor, AColor) then 
AColor := StyleServices.GetSystemColor(clHighlight); 
+0

Ich hatte experimentiert mit der Einstellung für jede Art von Element, und hatte sich auf die 'tgFixedCellNormal' festgelegt, wie Sie vorgeschlagen. Der Rückfall ist auch gut. Danke noch einmal) – Mmarquee

Verwandte Themen