Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid (prinzielle Abläufe) (https://www.delphipraxis.net/181110-stringgrid-prinzielle-ablaeufe.html)

Jean312 16. Jul 2014 17:19

Delphi-Version: 5

StringGrid (prinzielle Abläufe)
 
Ein Hallo an die Gemeinde,

ich hoffe, dass sich unter euch ein guter "teacher" befindet, der einmal die allgemeinen zeitlich funktionalen Abläufe bei der Benutzung eines StringGrids erklären kann.

Ich habe mir schon einige Foren und Threads angeschaut, wo es um die Arbeit mit StringGrids geht, jedoch fand ich eigentlich nichts, was mir die zeitlichen Abläufe zur Verständlichkeit verdeutlichen konnte.

Hauptsächlich geht es hierbei um:
- das Füllen einerseits (StringGrid.Cells[x,y]:='Wert')
- und Modifikationen (Zeichnen)
- Farbzuweisung einer bestimmten Zelle,
- ein Icon oder Bild in eine bestimmte Zelle,
- ein Objekt in eine bestimmte Zelle (z.B. Checkbox, Combobox etc.)
im OnDrawCell-Ereignis
Ich gehe davon aus, dass mit dem Füllen einer Zelle auch jedes Mal das OnDrawCell-Ereignis aufgerufen wird.

Aber wie genau funktioniert es, oder bzw. wie muss eine Routine erstellt werden, wenn bsw. in einer procedure FillGrid über eine for-Schleife bestimmte Text-Werte eingetragen werden, in bestimmten Zellen aber eine der obengenannten Modifikationen stattfinden sollen.

Wie müssen diese beiden Ereignisse [procedure zum Füllen] und die [Routine im OnDrawCell] miteinander verknüpft werden?

Beispiel: Grid leer (Ur-Zustand)
Code:
   ----------- ----------- ----------- -----------
  |0,0 zelle 1|1,0 zelle 2|2,0 zelle 3|3,0 zelle 4|
   ----------- ----------- ----------- -----------
  |0,1 zelle 5|1,1 zelle 6|2,1 zelle 7|3,1 zelle 8|
   ----------- ----------- ----------- -----------
  |0,2 zelle 9|1,2 zelle10|2,2 zelle11|3,2 zelle12|
   ----------- ----------- ----------- -----------
Beispiel Endergebnis:
Code:
   ----------- ----------- ----------- -----------
  | Text 1    | Icon 1*   | Text 2    | Combobox 1|
   ----------- ----------- ----------- -----------
  | rote Farbe| Text 3    | Edit 1    | Checkbox 1|
   ----------- ----------- ----------- -----------
  | Icon 2*   | Text 4    | Text 5    | Text 6    |
   ----------- ----------- ----------- -----------
 
  * Icons sind beispielsweise in einer ImageList
Bisher fand ich eigentlich nur Code-Beispiele, wo z.B. eine ganze Reihe farblich geändert, oder in einer bestimmten Spalte ein Objekt (z.B. Bild) eingefügt worden.

Wäre echt cool, wenn es jemand mal so richtig einleuchtend erklären könnte.

Vielen Dank schon mal im Voraus.

LG, Jean P.

mkinzler 16. Jul 2014 17:23

AW: StringGrid (prinzielle Abläufe)
 
In aRow/aCol steht der Zeilen- bzw. Spaltenindex der aktuell gezeichneten Zelle

Jean312 16. Jul 2014 18:22

AW: StringGrid (prinzielle Abläufe)
 
:roll:

Der schöne Günther 16. Jul 2014 18:42

AW: StringGrid (prinzielle Abläufe)
 
Ich glaube du hast kompliziertere Vorstellungen als es tatsächlich ist. Oder dein Problem übersteigt meine geistigen Fähigkeiten.

1)
Mit
Delphi-Quellcode:
Cells[Int, Int]
hast du nichts anderes als einen Setter, der in ein internes String-Array des Stringgrid schreibt: Text. Anschließend ruft er intern InvalidateCell(..) auf welches mittels Windows-API das Rechteck dieser Zelle "ivalidiert"- Es muss also neu gezeichnet werden.

2)
Und wenn neu gezeichnet wird kommt hierbei das OnDrawCell-Ereignis zum Tragen: Hier kannst du, als Benutzer des Stringgrids festlegen, wie wir uns nun in diesem Rechteck austoben können.


Spontan würde ich sagen dass es dazu mehr nicht zu sagen gibt.

PS: Comboboxen, Bilder, all sowas- Bist du sicher dass ein Stringgrid überhaupt das richtige ist und es keine bessere Lösung gibt? Ein Flowpanel mit dem ganzen Kram drin? Die TVirtualTreeView-Komponente?

Jean312 16. Jul 2014 19:09

AW: StringGrid (prinzielle Abläufe)
 
Danke für die Antwort.

Nun, die Sache mit der Combox, Edit oder Checkboxen habe ich schon in Anwendungen gesehen.

Aber einmal abgesehen davon, lässt es sich denn nicht realisieren, bei einem existierenden Wert in der Tabelle (StringGrid) z.B. der Wert 'X' an dieser Stelle eine Checkbox oder ein Bild darüber zu zeichnen?

Ich habe einiges getestet, aber irgendwie komme ich nicht damit klar. :(

Der schöne Günther 16. Jul 2014 19:31

AW: StringGrid (prinzielle Abläufe)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Möglich ist alles, aber ich würde davon abraten- Checkboxen und ähnliches sind wieder eigene Komponenten (auch aus Windows-Sicht) mit ihren eigenen Paint-Handlern.

Ich würde dringend davon abraten, sowas von Null auf selber zu basteln. Es gibt dafür fertige Komponenten (Freeware und zum Kaufen). Siehe beispielsweise das Bild im Anhang. Das scheint doch genau zu sein was du willst, oder? (KGrid)

Perlsau 16. Jul 2014 21:35

AW: StringGrid (prinzielle Abläufe)
 
Zitat:

Zitat von Jean312 (Beitrag 1265702)
ich hoffe, dass sich unter euch ein guter "teacher" befindet, der einmal die allgemeinen zeitlich funktionalen Abläufe bei der Benutzung eines StringGrids erklären kann.

Wieso fragst du erst das Eine, wenn du doch das Andere wissen willst? Dein Problem läßt sich ganz einfach durch die Forensuche beheben: So habe ich eben innerhalb von 20 Sekunden das hier gefunden. Da gibt es aber noch viel viel mehr ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 Uhr.

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