Einzelnen Beitrag anzeigen

NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Wie ziehe ich eine farbige Linie in einem DBGrid / DrawColumnsCell-Event?

  Alt 25. Nov 2021, 19:04
Zitat:
Die 12 besagt doch, dass nach 12 Spalten ein Monatswechsel nicht mehr gegeben ist. Ist das denn so gewünscht?
Das ist ganz und gar nicht erwünscht!
Ich möchte die Linie durchgezogen haben, doch es klappt nicht.
Sie soll bis 28 gehen, nicht nur bis 12.
12 ist besser als 1, doch gut ist es nicht.

Schreibe ich etwa "..(DataCol > 20)" oder "Columns.Count -1" wie Du, was ich ja EIGENTLICH tun möchte, - wird die Bedingung niemals "true", obwohl sie es sollte. Das führt dazu, dass die Linie durchs gesamte Grid läuft und IMMER gezeichnet wird, weil eben der Abbruch fehlt.

Jetzt wird man sagen: "nanu?"
So sprach auch ich "nanu" und fragte die Paramenter ab. Dabei kam ich drauf, dass Columns.Count ebenso wie meine hässliche (weil wenig robuste) Alternative "(DataCol > 27)" nicht so funktioniert, wie ich es erwarten würde.
Delphi zählt die Spalten falsch hoch. Irgendwo gegen 12 wird die Zählung falsch.


Zitat:
In DrawColumnCell stehen Dir nur die Werte aus der aktuellen Zeile der Datenmenge zur Verfügung, von daher ist es nicht möglich, nur mit Werten aus dieser Zeile innerhalb der Prozedure zu entscheiden, ob eine Monatswechsel vorliegt oder nicht. Dazu benötigst Du eine globale Variabel / Attribut im Formular, in denen Du die Info zum Monat der vorherigen Zeile vorhältst.
Das habe ich schon so verstanden und zähneknirschend ein paaar globale Variablen eingefügt.
Ich fürchte, ich zeichne in Draw nicht nur, sondern habe das Ding auch als Calc-Ereignis missbraucht.
Denn auch im Calc-Ereignis würde ich den Monatswechsel (in meinem Fall auch einen Wochenwechsel dazu) brauchen.
Das ist das Problem mit dem Quellcode.

Zitat:
Im Zweifel: Poste bitte Deine vollständige Prozedur DBGrid_TraDrawColumnCell, ansonsten wird das in eine für alle Beteiligten furchtbare Raterei ausarten. Die Abhängigkeiten sind zu vielfältig, um sie mit wenigen Worten beschreiben zu können.
Ich fürchte, das willst Du nicht wirklich. Das ist eine mit zig units vernetzte Sache, die units sind jeweils auf bestimmte Datenbanktabellen spezialisiert. Mein implementation-Teil wird immer länger.
Das Problem vermute ich nämlich nicht im DrawColumnCell, sondern in der Spaltenedition von Query und DBGrid. Ich habe da schon einige ärgerliche Überraschungen erlebt, was übernommen wird und was nicht.
Theoretisch könnte ich die DBGrid-Spalten aus der Query neu übernehmen, praktisch war die jetzige Reihenfolge richtig viel Arbeit und ich will es vermeiden. Ob es helfen würde, weiß ich ohnehin nicht.


Zitat:
Die Reihenfolge der Spalten in der Datenmenge und ggfls. Unterschiede in der Reihenfolge im DBGrid, sollten da eigentlich eher keine Auswirkungen haben.
Über Column.Field.Calculated kannst Du abfragen, ob es sich bei der gerade zu zeichnenden Zelle um eine "kalkulierte" Zelle oder eben eine "normale" handelt.
Das schon, nur wie komme ich dem Ding auf die Schliche, wie es zählt?

Hänge ich das in mein DrawEvent ein
ShowMessage(IntTostr(DataCol)+ ' ');
so wird stets von Null bis 13 hochgezählt. Danach beginnt es wieder bei Null.
Es sind jedoch 28 Spalten, die gezeichnet werden.

Was tun?

PS:
hier half mir noch ein guter Geist:
https://www.delphipraxis.net/newrepl...ime=1637863673

Ich wollte die Breite der Felder automatisch ihrem Inhalt anpassen.
Aus dem damit gezeichneten StringGrid glaube ich zu erkennen, dass nicht "calculated"-Felder ignoriert werden.
Sie haben die Breite Null.

Geändert von NicoleWagner (25. Nov 2021 um 19:16 Uhr)
  Mit Zitat antworten Zitat