Помощь - Поиск - Пользователи - Календарь
Полная версия: Сравнение строк-?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
1147
В ячейках столбца А хранятся некоторые данне. Можно ли сделать так чтобы при вводе в столбец В данных, которые не содержатся в столбце А, программа бы выделяля их красным цветом например, как на рисунке? Если же данные совпадают, то все в порядке
volvo
В каком это все компоненте происходит? СтрингГрид? ДБГрид?
1147
DBGrid
volvo
Можно:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);

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;

end;
second.Free;
first.Free;
end;
end;
Выводит вот так:
Нажмите для просмотра прикрепленного файла

Устроит? smile.gif
1147
blink.gif good.gif устроит, именно то что надо, спасибо smile.gif
1147
в этом примере можно сделать так чтобы все красные значения перемещались в другой столбец?
volvo
Нет, здесь происходит только отрисовка значений, для того, чтобы переносить что-то в другое место, надо пользоваться другими событиями, незачем при каждой перерисовке перемещать данные.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.