Autor Beitrag
mambo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: Di 20.05.03 13:17 
Hallo !

bei dem onCustomDrawCell-Event meines TdxDBGrids möchte ich Zeilen, in denen die Spalte "ANZAHL" < 0 ist rot färben.

Dem Grid liegt eine Abfrage zugrunde:
SELECT ARTIKELNR,BESCHREIBUNG,ANZAHL FROM ARTIKEL...usw.

in dem Ereignis OnCustomDrawCell gibt es Standardparameter, auf die man zugreifen kann: einer davon ist ANode. Dieser entspricht der aktuellen Zeile, die von der Prozedur bearbeitet wird.

Auf die Daten der aktuellen Zeile greift man also mit
ausblenden Quelltext
1:
ANode.Data					

zu, wobei Data ein Pointer ist.

Nun meine Frage
Wie ist die Syntax, damit ich auf das Feld "ANZAHL" über ANode zugreifen kann ???

Wie kann ich den Pointer "greifen" bzw. casten, damit ich z.B. FieldByName('ANZAHL') o.ä. verwenden kann.

Für Eure Hilfe wäre ich sehr dankbar.

Heinz
[/code]
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 20.05.03 13:34 
Hallo,

wenn es sich bei Anzahl um einen LonigInt Wert handelt kannst du diesen Problemlos in Data abspeichern.
Das geht so:
ausblenden Delphi-Quelltext
1:
2:
ANode.Data := Ptr(4711); // Wert setzen
Wert := LongInt(aNode.Data); // Wert auslesen


Gruß
Klabautermann
mambo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: Di 20.05.03 13:44 
vielleicht hast du mich falsch verstanden:

im Grid sind ja bereits alle Daten der Abfrage drin.
Ich möchte nun in der Ereignisprozedur

OnCustomDrawCell

die ja alle Zeilen bearbeitet, für jede Zeile nachsehen, ob in der Spalte "ANZAHL" der Wert < 0 ist.

ANode liefert dabei die Zeile, und ich denke ANode.Data ist der Zeiger auf die zugrundeliegende Abfrage. Oder liege ich da falsch ?

Nun möchte ich im aktuellen ANode den Wert "ANZAHL" prüfen:

Also z.B.
ausblenden Quelltext
1:
2:
if ANode.Data.FieldByName('ANZAHL').AsInteger < 0 Then
  AColor := clRed


NUR FUNKTIONIERT DAS LEIDER NICHT! Wie ist die richtige Syntax ?

Danke
Heinz
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 20.05.03 14:20 
Hallo,

da haben wir aneinander vorbeigeredet.
Der Zeiger Data ist bei vielen Objekten vorhanden, und bietet dir die möglichkeit beliebige Daten anzuhängen. Die Komponente selbst rührt diesen Wert nicht an.

Du kannst aber über die eigenschaft Datasouerce an das Dataset und somit die Daten kommen.
Das sähe dann so aus:
ausblenden Delphi-Quelltext
1:
2:
IF (dxDBGrids1.DataSource.DataSet.FieldByName('Anzahl').AsInteger < 0) THEN
  AColor := clRed;

Sauberer ist es wenn du den Namen des Grids nciht direckt angiebs sondern über den (wahrscheinlich vorhandenen) Parameter Sender Arbeitest. Also so:
ausblenden Delphi-Quelltext
1:
2:
3:
IF (Sender IS tdxDBGrids) THEN
   IF (tdxDBGrids(Sender).DataSource.DataSet.FieldByName('Anzahl').AsInteger < 0) THEN
     AColor := clRed;


Gruß
Klabautermann
mambo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: Di 20.05.03 14:23 
wieder was gelernt

Vielen Dank

...was würde ich bloss ohne Euer Forum machen....

...wahrscheinlich tagelang in irgendwelchen mega-fetten Büchern rumblättern...