Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid: Zellen-Farbe bei Click ändern (https://www.delphipraxis.net/85294-stringgrid-zellen-farbe-bei-click-aendern.html)

Hansa 29. Jan 2007 08:25

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Zitat:

Zitat von Helmi
...ich stell mit dem StringGrid nichts anderes an, als dass ich auf leere Zellen klicke und diese farbig markiere.
Kein Text, kein sonstiges

Du brauchst also nur eine einzige Eigenschaft pro Zelle und das ist die Farbe ? Na dann schreibe die doch gleich in die Zelle und werte sie aus. Also : Zelle besteht z.B. aus dem Text 'clRed'. Anhand dieses Strings wird im OnDrawCell die Zelle neu mit dieser Farbe gezeichnet. Ist das gezeichnete Rect so groß wie die Zelle, dann ist von dem String 'clRed' nichts mehr zu sehen und fertig ist. Viele Wege führen nach Rom. :mrgreen:

marabu 29. Jan 2007 09:39

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

kein Zweifel - alle beschriebenen Wege führen in die italienische Hauptstadt, aber wenn man weiß wie ein StringGrid intern arbeitet, dann möchte man keine Farbnamen in den Zellen speichern. Aus dem gleichen Grund würde ich wohl auch die Objects[] nicht für eine Farbkodierung verwenden wollen. Man quält den Speicherverwalter, wenn man eine sparse matrix wie ein fest dimensioniertes Array benutzt. Wenn es nur um interaktive Farbkodierung geht, würde ich in Abhängigkeit von der Zustandsanzahl einen linearen BitVector oder ein korrelierendes zweidimensionales Array of Byte einsetzen. Ich habe mal für den letzteren Fall eine Demo angehängt. Idealerweise nimmt man ein statisches Array, aber ich habe im Beispielcode ein dynamisches Array implementiert. Die Umstellung sollte leicht fallen, da die Initialisierung dann einfach per ZeroMemory() erfolgen kann.

Grüße vom marabu

Hansa 29. Jan 2007 10:24

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Marabu, das wäre der dritte Weg. Aber das ist nicht der goldene Mittelweg. Unabhängig vom Grid noch ein Array mitschleppen. Es geht aber noch mehr. Wie wäre es mit INI usw. ? 8) Beim Array ist schlecht, dass es ohne weiteres so nicht geht, sofern das Grid nicht starr ist. Schachbrett könnte man so behandeln, aber wehe RowCount etc. ändert sich. Es wäre schwierig das Grid und das Array synchron zu halten. Diese Hürde fällt bei den Objects einfach weg.

Sollte das Grid nur Farben behandeln können und ist es auch noch starr, dann würde ich aber wirklich die Farben im Klartext in die Zellen schreiben. Zu sehen ist davon nämlich absolut nichts.

Helmi 29. Jan 2007 15:31

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Hallo Jungs,

danke für eure Vorschläge.

ich bin aber jetzt auf der Schiene mit den Objects geblieben und hab es etwas ausgebaut - nachdem ich dahinter gekommen bin, wie es funktioniert.

Anbei ein Test-Projekt. Wie gesagt - es ist ein Test-Projekt - deswegen die Standard-Bezeichnungen der Komponenten und ohne Kommentare. (Ich mach gerne Testprojekte um dann die Erkenntnisse daraus ins eigentliche Projekt zu übernehmen)

Damit schlag ich 2 Fliegen mit einer Klappe.
1. das Ändern mit der Farbe (die Frage dieses Threads)
2. die Frage auf das Feststellen einer Zellenfarbe (von diesem Thread)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz