ОК, давай разбираться дальше.
Для начала надо найти на каком объекте код крашится.
Вот добавил пару строчек в код:
Код:
procedure TMailForm.dxDBGridArxivEnumFilterValues(Sender: TObject;
AColumn: TdxDBTreeListColumn;
var AValue: Variant;
var ADisplayText: string;
var ARepeatEnumeration: Boolean);
var
LookKey: string;
LookIndex: Integer;
begin
try // finally
if FilterValues = nil then
FilterValues := TStringList.Create;
if Node = nil then
Node := TdxDBGrid(Sender).TopVisibleNode;
ShowMessage('Content of FilterValues:'#13#10 + FilterValues.Text);
ShowMessage(Format('Node count (%d) and field index (%d).',[Node.Strings.Count,AColumn.Index]));
// Далее появляется ошибка
if IsValueInFilter(FilterValues, Node.Strings[AColumn.Index]) then
begin
Node := TdxDBGrid(Sender).GetNextVisible(Node);
Exit;
end
else
FilterValues.Add(Node.Strings[AColumn.Index]);
ADisplayText := Node.Strings[AColumn.Index];
if TdxDBGrid(Sender).Columns[AColumn.Index].Field.FieldKind <> fkLookup then
AValue := Node.Values[AColumn.Index]
else
begin
LookKey := TdxDBGrid(Sender).ColumnByFieldName(AColumn.FieldName).Field.KeyFields;
LookIndex := TdxDBGrid(Sender).FindColumnByFieldName(LookKey).Index;
AValue := Node.Values[LookIndex];
end;
Node := TdxDBGrid(Sender).GetNextVisible(Node);
if Node = nil then
begin
FilterValues.Free;
FilterValues := nil;
ARepeatEnumeration := False;
end;
finally
Inc(FilterDropCount);
if FilterDropCount > 100 then
begin
FilterValues.Free;
FilterValues := nil;
Node := nil;
FilterDropCount := 0;
ARepeatEnumeration := False;
end;
end;
end;
Запускай, посмотрим какой из объектов битый.
ЗЫ. А, кстати, где описана IsValueInFilter()? Это метод класса или просто функция?