StringGrid-Fläche überzeichnen?
-
Hallo Leute,
in einem StringGrid kann ich über die Funktion OnDrawCell, Farben für Hintergrund und Text einstellen, Bitmaps laden, Linien zeichnen
um die wichtigsten Grafik-Möglichkeiten zu nennen.Die Möglichkeiten dieser Funktion, sind, wie der Name schon sagt, immer nur auf jeweils eine Zelle beschränkt.
Ich benötige aber eine Funktion, die über den ganzen StringGrid-Bereich zeichnen kann:
Zum Beispiel möchte ich eine Linie zeichnen, die diagonal von der obersten linken Zelle zur untersten rechten Zelle führt.
Hat hierzu jemand eine Idee, mit welcher Funktion sich das machen läßt? Wie ist hier vorzugehen?
Die Funktion soll außerdem bewerkstelligen, daß beim Anklicken einer einzelnen Zelle, über die die "Diagonale" quert, dieses Linienteil bestehen bleibt und nicht überzeichnet wird.
[ Dieser Beitrag wurde am 17.02.2003 um 20:50 Uhr von thunderbol4 editiert. ]
-
Per Canvas kannst du nach Belieben auf dem ganzen StringGrid herummalen. Für das ggf. notwendige Neuzeichnen bist du aber immer selbst verantwortlich.
-
Hallo Jansen,
Danke für Deine schnelle Antwort:
wenn ich folgendes in meinen Konstruktor von TForm1 schreibe
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner) { .. StringGrid1->Canvas->Pen->Color = clRed; StringGrid1->Canvas->Pen->Width = 3; StringGrid1->Canvas->MoveTo(StringGrid1->Left, StringGrid1->Top); StringGrid1->Canvas->LineTo(StringGrid1->Left + StringGrid1->Width, StringGrid1->Top + StringGrid1->Height); .. }
passiert leider n i c h t s.
Wo bringe ich den Code nur unter, damit die gewünschte Zeichenaktion ausgelöst wird? Auf die Zeichenfläche des StringGrids
kann ich nur über die Funktion OnDrawCell zugreifen, die ist aber nur für einzelne Zellen zuständig, nicht aber für das ganze Grid.
Wie erhalte ich aber Zugriff auf die ganze StringGrid-Fläche?Eine zusätzliche Zeichenfunktion wie OnPaint besitzt StringGrid leider nicht, oder gibt´s doch eine Möglichkeit?
Gibt es Hoffnung auf einen Lösungsansatz?
[ Dieser Beitrag wurde am 17.02.2003 um 22:31 Uhr von thunderbol4 editiert. ]
-
Original erstellt von thunderbol4:
Auf die Zeichenfläche des StringGrids kann ich nur über die Funktion OnDrawCell zugreifen, die ist aber nur für einzelne Zellen zuständig, nicht aber für das ganze Grid.Wer sagt das? Wenn du die Koordinaten deiner Linie nicht so abenteuerlich gesetzt hättest wärst du nie diesem Trugschluss verfallen. Tip: versuch's mal mit 0/0 und Grid-Width/Grid-Height.
-
Hallo Jansen,
vielen Dank für Deinen Tip.
Das mit der Linie im StringGrid klappt jetzt hervorrrrrragend.
Die Bezeichnung der Zeichenfunktion mit OnDrawCell verleitet einen schon ein bißchen zu glauben, die Zeichenoperationen von Canvas seien auf nur eine Zelle beschränkt.
Hier war mein Fehler.