IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Сравнение строк-?
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В ячейках столбца А хранятся некоторые данне. Можно ли сделать так чтобы при вводе в столбец В данных, которые не содержатся в столбце А, программа бы выделяля их красным цветом например, как на рисунке? Если же данные совпадают, то все в порядке

Сообщение отредактировано: 1147 -


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






В каком это все компоненте происходит? СтрингГрид? ДБГрид?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


DBGrid
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Можно:
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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


blink.gif good.gif устроит, именно то что надо, спасибо smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


в этом примере можно сделать так чтобы все красные значения перемещались в другой столбец?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Нет, здесь происходит только отрисовка значений, для того, чтобы переносить что-то в другое место, надо пользоваться другими событиями, незачем при каждой перерисовке перемещать данные.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.10.2020 11:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name