Autor Beitrag
a.ebert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Mi 08.11.06 12:31 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
a.ebert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
if (ARow = 4then ...					

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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 08.11.06 14:50 
Es gibt da etwas, das nennt sich RowCount. :wink:
a.ebert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: 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!