Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - StringGrid Linien beliebig anzeigen
a.ebert - Mi 08.11.06 12:31
Titel: StringGrid Linien beliebig anzeigen
Moin
Ich hab da ein Problemchen mit der darstellung meines Stringgrids. Ich hab ein StringGrid, welches ausgedruckt werden soll. Dabei soll es folgende Form haben:
Die erste Zeile ist der jeweilige Spaltenkopf. Dieser ist als FixedRow definiert. In den Eigenschaften des StringGrid habe ich unter Options alle Werte auf false gesetzt, ausser 'goFixedHorzLine'. Diese Eigenschaft ist auf True gesetzt. Dadurch ist der Spaltenkopf von den anderen Zeilen durch eine Linie getrennt.
In den weiteren Zeilen sollen jetzt die Werte der verschiedenen Datensätze wiedergegeben werden. Diese sollen nicht durch Linien getrennt werden.
Die letzte Zeile soll die Gesamtsumme der Spalten wiedergeben. Diese letzte Zeile soll wiederum durch eine Linie von dem mittleren Zellblock getrennt werden.
Vertikale Linien sind immer ausgeblendet.
Die Berechnungen für die einzelnen Zellen funktionieren, nur halt die Linie zwischen mittleren Zellblock (vorletzter Zeile) und der Letzten Zeile ist nicht zu sehen.
Ich hab dafür folgenden Quelltext benutzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| ARow:= AnzDatenSaetze; if (ARow = AnzDatenSaetze) and not (gdFixed in State) then begin with (sender as TStringGrid).canvas do begin Pen.Color := clBlack; Pen.Width := 2; Pen.Style := psSolid; MoveTo(rect.left-1, rect.top); Lineto(rect.right-1, rect.top); end; end; |
Mein Programm hängt sich dann auf wenn es in die if-Schleife geht und sich an dem Punkt der With-Klausel befindet. Ich erhalte dann einen Fehler der Klasse EInvalidCast.
Habt ihr irgendeine Ahnung was bei meinem Quelltext nicht so richtig stimmt? Oder hab ich noch irgendeine Einstellung vergessen? Wäre nett wenn ihr mal drüber schauen könntet!
Danke schonmal...
MfG andy
Lannes - Mi 08.11.06 14:40
Hallo,
die Fehlermeldung sagt Dir vermutlich, das Sender in dem Fall kein StringGrid ist.
"vermutlich" deshalb weil man aus Deiner Beschreibung und dem Code-Ausschnitt nicht erkennen kann wie, oder bei welchem Event der Code aufgerufen/ausgeführt wird.
Hast Du den Code z.B. in einer ButtonClick-Prozedur stehen, dann ist Sender der Button.
Folglich TButton <> TStringGrid >> EInvalidCast.
Das Zeichnen der Linie sollte in OnDrawCell stehen.
Eine if-Schleife gibt es nicht, eine If-Abfrage schon. :wink:
a.ebert - Mi 08.11.06 14:42
Danke!
Ich hab den kleinen Fehler behoben. Hatte meinen Quelltext aus Versehen an die falsche Stelle geschrieben. Quasi in die falsche Prozedur, wie du schon vermutest hast.
Aber es funzt immer noch nich so wie ich will, denn es werden jetzt alle Zeilen durch eine Linie getrennt. Da mein Grid n Zeilen hat, kann ich nich schreiben
Delphi-Quelltext
1:
| if (ARow = 4) then ... |
Das geht auch! Ich muss es allerdings variabel machen, weil ich wie gesagt keine Ahnung habe wie viele Zeilen mein StringGrid enthält. Könntet ihr mir sagen wie ich das anstelle? Weil wenn ich es so schreib wie oben sind alle horizontalen Linien am oberen Zellrand sichtbar. Und das ist nicht wirklich mein Ziel gewesen.
Hoffe es war einigermaßen verständlich
MfG Andy
jasocul - Mi 08.11.06 14:50
Es gibt da etwas, das nennt sich RowCount. :wink:
a.ebert - Mi 08.11.06 15:59
Sorry, hattest wiedermal recht!
klappt jetzt so wie ich es mir überlegt hatte. Bin das Ganze wahrscheinlich etwas falsch angegangen. Trotzdem schönen Dank für eure Hilfe!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!