В ячейках столбца А хранятся некоторые данне. Можно ли сделать так чтобы при вводе в столбец В данных, которые не содержатся в столбце А, программа бы выделяля их красным цветом например, как на рисунке? Если же данные совпадают, то все в порядке
const charOff = 2; var fs, ss: string; first, second: TStringList; i, currPos: integer; begin if Column.FieldName = 'txt2' then begin (Sender as TDBGrid).Canvas.Brush.Color := clWindow; (Sender as TDBGrid).Canvas.FillRect(Rect);
first := TStringList.Create(); second := TStringList.Create();
fs := (Sender as TDBGrid).DataSource.DataSet.FieldByName('txt').AsString; ss := Column.Field.Text; ExtractStrings([','], [], PChar(fs), first); ExtractStrings([','], [], PChar(ss), second);
currPos := charOff; for i := 0 to second.Count - 1 do begin
if first.IndexOf(second.Strings[i]) = -1 then // not present, show red begin (Sender as TDBGrid).Canvas.Font.Color := clRed; end else // present, show black begin (Sender as TDBGrid).Canvas.Font.Color := clWindowText; end; (Sender as TDBGrid).Canvas.TextOut(rect.left + currPos, rect.top + CharOff, second.Strings[i]); inc(currPos, (Sender as TDBGrid).Canvas.TextWidth(second.Strings[i])); if i <> second.Count - 1 then begin (Sender as TDBGrid).Canvas.Font.Color := clWindowText; (Sender as TDBGrid).Canvas.TextOut(rect.left + currPos, rect.top + CharOff, ','); inc(currPos, (Sender as TDBGrid).Canvas.TextWidth(',')); end;
Нет, здесь происходит только отрисовка значений, для того, чтобы переносить что-то в другое место, надо пользоваться другими событиями, незачем при каждой перерисовке перемещать данные.