@@ -11114,6 +11114,7 @@ procedure TMainForm.AnyGridBeforeCellPaint(Sender: TBaseVirtualTree;
1111411114 FieldText, FocusedFieldText: String;
1111511115 VT: TVirtualStringTree;
1111611116 ResultCol: Integer;
11117+ SelectedNode: PVirtualNode;
1111711118begin
1111811119 if Column = -1 then
1111911120 Exit;
@@ -11162,22 +11163,29 @@ procedure TMainForm.AnyGridBeforeCellPaint(Sender: TBaseVirtualTree;
1116211163 end;
1116311164
1116411165 // Probably display background color on fields with same text
11165- // Result pointer gets moved to the focused node .. careful!
11166- if (Sender.FocusedNode <> nil) and (Sender.FocusedColumn > 0) then begin
11167- if ((Node <> Sender.FocusedNode ) and (Column = Sender.FocusedColumn))
11168- or ((Node = Sender.FocusedNode) and (Column <> Sender.FocusedColumn)) then begin
11166+ // Result pointer gets moved to selected nodes .. careful!
11167+ if (Sender.FocusedNode <> nil) and (Sender.FocusedColumn > 0) and (Sender.SelectedCount <= 100) then begin
11168+ if ((not Sender.Selected[Node] ) and (Column = Sender.FocusedColumn))
11169+ or (Sender.Selected[Node] and (Column <> Sender.FocusedColumn)) then begin
1116911170 clSameData := AppSettings.ReadInt(asHightlightSameTextBackground);
1117011171 if clSameData <> clNone then begin
1117111172 FieldText := r.Col(ResultCol);
1117211173 CurrentIsNull := r.IsNull(ResultCol);
11173- RowNumber := Sender.GetNodeData(Sender.FocusedNode);
11174- r.RecNo := RowNumber^; // moving result cursor
11175- FocusedFieldText := r.Col(Sender.FocusedColumn-1);
11176- FocusedIsNull := r.IsNull(Sender.FocusedColumn-1);
11177- if (CompareText(FieldText, FocusedFieldText) = 0) and (CurrentIsNull = FocusedIsNull) then begin
11178- TargetCanvas.Brush.Color := clSameData;
11179- TargetCanvas.FillRect(CellRect);
11174+
11175+ SelectedNode := GetNextNode(VT, nil, True);
11176+ while Assigned(SelectedNode) do begin
11177+ RowNumber := Sender.GetNodeData(SelectedNode);
11178+ r.RecNo := RowNumber^; // moving result cursor
11179+ FocusedFieldText := r.Col(Sender.FocusedColumn-1);
11180+ FocusedIsNull := r.IsNull(Sender.FocusedColumn-1);
11181+ if (CompareText(FieldText, FocusedFieldText) = 0) and (CurrentIsNull = FocusedIsNull) then begin
11182+ TargetCanvas.Brush.Color := clSameData;
11183+ TargetCanvas.FillRect(CellRect);
11184+ Break; // No need to look further
11185+ end;
11186+ SelectedNode := GetNextNode(VT, SelectedNode, True);
1118011187 end;
11188+
1118111189 end;
1118211190 end;
1118311191 end;
0 commit comments