Question
“How can I highlight every clicked detail band in the preview?”
Solution
This example shows how to change the color of a shape inside the detail band if the shape is clicked. Begin by assigning the detail band count to the Tag property of each shape drawcommand inside the OnDrawCommandCreate event. Then using a list to keep track of the highlighted detail bands, add or remove enteries each time a shape (detail band) is clicked. Finally regnerate the page updating the color of the shape based on the list values in the DetailBand.BeforePrint event.
Download: ClickHighlightDetails.zip
Sample Delphi code:
1 2 3 4 5 6 |
procedure TForm1.ppShape1DrawCommandCreate(Sender, aDrawCommand: TObject); begin //Assign detail count to the drawcommand.tag for later use TppDrawCommand(aDrawCommand).Tag := ppReport1.DetailBand.Count - 1; end; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
procedure TForm1.ppShape1DrawCommandClick(Sender, aDrawCommand: TObject); var liBandNo: Integer; begin if aDrawCommand is TppDrawShape then begin liBandNo := TppDrawShape(aDrawCommand).Tag; //Add or remove the detail number from the list if FHighlightList.IndexOf(IntToStr(liBandNo)) > -1 then FHighlightList.Delete(FHighlightList.IndexOf(IntToStr(liBandNo))) else FHighlightList.Add(IntToStr(TppDrawShape(aDrawCommand).Tag)); ppReport1.Reset; ppReport1.Engine.Reset; TppDrawShape(aDrawCommand).RedrawPage := True; end; end; |
1 2 3 4 5 6 7 8 9 |
procedure TForm1.ppDetailBand1BeforePrint(Sender: TObject); begin //Only highlight the bands in the list if FHighlightList.IndexOf(IntToStr(ppReport1.DetailBand.Count)) > -1 then ppShape1.Brush.Color := clRed else ppShape1.Brush.Color := clWhite; end; |