Das ist ein ganz normales StringGrid(StG) bzw. das TjvStringGrid aus den
Jedi-Komponenten.
Ich weis jetzt nicht genau in wie weit ich die
Jedi-Komponenten in Lazarus verwenden kann, aber ist das TjvStringGrid schon ein bissl anders als das normale StringGrid?
Du hast in einer Zelle das Datum und weitere Uhrzeiten, hast du da Zellen miteinander verbunden oder wie kann man mehrere zeilen in einer Zelle darstellen... und wenn ja kannn man dann jede Uhrzeit separat anklicken(weitere Termininfos)?
Es gibt in meinem Terminator vier Ansichten auf vier TabSheets: Tages-, Wochen-, Monats- und Jahresüberblick. Zugrunde liegt eine Firebird-Datenbank, als
DB-Komponenten kommt IbDac zum Einsatz, die Termintabelle sieht so aus:
Code:
CREATE TABLE TERMINE (
IDX_TERMINE BIGINT NOT NULL,
BENUTZER INTEGER DEFAULT 0 NOT NULL,
DATUM_START DATE,
ZEIT_START TIME,
DATUM_ENDE DATE,
ZEIT_ENDE TIME,
BESCHREIBUNG VARCHAR(200) DEFAULT '' NOT NULL COLLATE
UNICODE,
ERLEDIGT INTBOOLEAN DEFAULT 0 /* INTBOOLEAN = INTEGER DEFAULT 0 NOT NULL CHECK (VALUE IN (0,1)) */,
ALARMEIN INTBOOLEAN DEFAULT 1 /* INTBOOLEAN = INTEGER DEFAULT 0 NOT NULL CHECK (VALUE IN (0,1)) */,
ANLEGER INTEGER DEFAULT 0 NOT NULL,
DATUM TIMESTAMP,
DAUER TIME);
Allerdings ist mein Konzept nicht wirklich ausgereift, genügt aber meinen Ansprüchen bzw. denen eines gemeinnützigen Vereins, für den ich das vor bald drei Jahren zu entwickeln begonnen hatte. Heute würde ich vieles anders angehen.
TabSheets kannte ich damals noch nicht, bei mir gibt es momentan nur das eine StringGrid was dann jeweils für die Tag oder Wochenansicht angepasst wird. Aber die Idee einer Monatsansicht gefällt mir.
Was deine Firebird-Datenbank angeht, kann ich mir das so ähnlich wie bei
SQL vorstellen (Server mit
SQL und dann halt
SQL befehle)?
Was genau ist die IBDac Komponente(wird wohl nur bei Delphi dabei sein)?
Wenn ich jetzt meine fast 2 jahre alten
SQL-Tabellen anschaue kommt mir das Grauen.
Irgendwo in deinen Ursprungsdaten, aus denen heraus du dein StringGrid befüllst, steht doch sicher die Information, die du benötigst, um die entsprechende Zelle anders einzufärben. Im Falle einer
SQL-Datenbank hätte ich da eine Spalte z.B. mit dem Namen KATEGORIE oder so. Beim Abklappern der Tabelle zum Ausgeben der Werte in ein StringGrid fragst du in OnDrawCell eben einfach diese Spalte in deiner Tabelle ab und zeichnest die entsprechende Zelle dann mit der entsprechenden Farbe.
Ok, denke ich habe das soweit verstanden wie du das meinst. Ich lade die Daten aus der
SQL-
DB mittels eines
SQL-befehls und habe dann eine SQLQuery die ich verarbeite(StG befüllen).
Jetzt ist es doch aber so das diese onDrawCell-procedure andauernd aufgerufen wird(habe da mal zum test ein SpinEdit
benutzt, SpinEdit.Value:=SpinEdit.Value+1, und nach nicht mal zwei Minute stand der zähler schon bei einer Million).
Von daher ist es nicht gut wenn der
SQL-Server so oft befeuert wird.
(Der
SQL-Server ist ein rechner im netzwerk auf den 6 andere rechner zugreifen)
Ich habe mir überlegt die Daten eines Tages aus der
DB auszulesen und das nötigste zwischen zuspeichern, in einem array oder record, worauf eben die onDrawCell-procedure schnell zugreifen kann.