Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Fastreport Kreuztabelle Zelle einfärben (https://www.delphipraxis.net/175798-fastreport-kreuztabelle-zelle-einfaerben.html)

Kostas 19. Jul 2013 14:38

Fastreport Kreuztabelle Zelle einfärben
 
Hallo Zusammen,

in meine Daten habe ich ein Feld für die Hintergrundfarbe der Datenzelle.
Hat jemand eine Idee wie ich im Report die Hintergrundfarbe der Zelle setzen kann?
Jede Zelle kann eine andere Farbe haben. Die Farbe kann innerhalb des Reports nicht ermittelt werden nach dem Beispiel von Highlight deshalb
übergeben ich die Farbe Direkt mit den Daten.

So funktioniert es nicht. Die Farbe wird zwar gesetzt doch es ist immer die Farbe vom letzten Datensatz.

Delphi-Quellcode:
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
begin
  Memo.color := <Data."ACOLLOR">;  
end;
Gruß Kostas

Kostas 23. Jul 2013 09:30

AW: Fastreport Kreuztabelle Zelle einfärben
 
Wenn ich das richtig sehe, ist es nicht möglich beim onPaint der Zelle auf den aktiven Datensatz zuzugreifen.

Es gebe wohl eine Möglichkeit über DBCross1OnPrintCell auf die komplette Werte der CrossTab zuzugreifen, aber nur wenn die
Information auch als Spalte oder Zeile eingebunden ist. In meinem Fall wollte ich nicht die Farbe als Spalte einbauen.

Auch der Support hat sich in allen Richtung gedreht und gewendet, doch keine Lösung geliefert.

Da es keine andere Möglichkeit zu geben scheint, habe ich die Farbe mit den Zelldaten kombiniert und zur Laufzeit im Report über script
wieder zerlegt. Das funktioniert einwandfrei und ist schnell genug.

Delphi-Quellcode:
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
var aColor:TColor;
    str:String;
    p:integer;                        
 
begin
  //Cell value combined Color and Data Format: Color/Data = 32768/3,56                                                                                                                                                               
  str := VarToStr(Value);                        
  if str= '' then
  begin
    Memo.text := '';
    Memo.Color := clNone;                                  
  end else
  begin
    p := pos('/',str);    //get delimiter
    aColor := StrToInt(copy(str,1,p-1)); //extract color                                      
    Memo.text := copy(str,p+1,length(str)); //extract and set data                                  
    Memo.color := aColor; //set color                                                                      
  end;          
end;

Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz