Skip to content

Commit afc9d8c

Browse files
committed
feat: highlight same text in grids based on all selected rows
1 parent 6eecdd8 commit afc9d8c

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

source/main.pas

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11114,6 +11114,7 @@ procedure TMainForm.AnyGridBeforeCellPaint(Sender: TBaseVirtualTree;
1111411114
FieldText, FocusedFieldText: String;
1111511115
VT: TVirtualStringTree;
1111611116
ResultCol: Integer;
11117+
SelectedNode: PVirtualNode;
1111711118
begin
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

Comments
 (0)