Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2010, 09:39   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Сверка значений в 2-х StringGrid-ах

Доброе утро! Есть 2 таблицы StringGrid. Нужно произвести сравнение двух столбоц на наличие одинаковых между собой значений. Если какое-то значение есть и в той и в другой таблице, то выделить, например, зеленым цветом это значение в обоих таблицах. Если в одной таблице есть значение, а во второй его нет, то это значение выделить, например, красным. Как такое можно реализовать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.07.2010, 09:43   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Через цикл, не вижу ничего сложного. Нужно просто задачу разбить на ряд подзадач в виде независимых функций и процедур. Например, написать процедуру выделения ячейки нужным цветом. StringGrid относительно хорошо документирован и проблем с получением общего числа элементов в столбце, а также с получением произвольного элемента быть не должно.
Данных из этого источника http://www.delphi-manual.ru/stringgrid.php должно хватать для реализации поставленного примера.
Здесь пример раскрашивания ячеек: http://www.delphisources.ru/pages/fa...in_dbgrid.html
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.07.2010 в 09:49.
Utkin вне форума Ответить с цитированием
Старый 26.07.2010, 09:54   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Данных из этого источника http://www.delphi-manual.ru/stringgrid.php должно хватать для реализации поставленного примера.
Неа, из этой ссылки данных для реализации недостаточно.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.07.2010, 09:56   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Неа, из этой ссылки данных для реализации недостаточно.
Так, а в чем конкретно загвоздка-то? Вы пробовали уже цикл писать хотя-бы сравнения значений?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 26.07.2010, 10:02   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Неа, из этой ссылки данных для реализации недостаточно.
Я же про закраску тоже привел источник.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.07.2010, 10:02   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

В программе не пробовал. Попробую так написать тут:
Код:
var
 i,j,i1,j2: integer;
begin
 for i:=1 to Form1.SG1.RowCount - 1 do
 begin
  for i1:=1 to Form1.SG2.RowCount - 1 do
  begin
   if Form1.SG1.Cells[0,i] = Form1.SG2.Cells[0,i1] then
   begin
     //что тут написать?
   end;
  end;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.07.2010, 10:04   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Зачем I1?
Код:
if Form1.SG1.Cells[0,i] = Form1.SG2.Cells[0,i] then
Цикл по I1 не нужен.

Код:
  //что тут написать?
http://www.delphisources.ru/pages/fa...in_dbgrid.html
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.07.2010, 10:08   #8
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
В программе не пробовал. Попробую так написать тут:
Код:
var
 i,j,i1,j2: integer;
begin
 for i:=1 to Form1.SG1.RowCount - 1 do
 begin
  for i1:=1 to Form1.SG2.RowCount - 1 do
  begin
   if Form1.SG1.Cells[0,i] = Form1.SG2.Cells[0,i1] then
   begin
     //что тут написать?
   end;
  end;
 end;
end;
Данный код подразумевает одинаковые по кол-ву записей таблицы? И проверяться будет только первый столбец?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 26.07.2010, 10:12   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Данный код подразумевает одинаковые по кол-ву записей таблицы?
Точно заранее неизвестно.

Так чтоли?
Код:
var
 i,j,i1,j2: integer;
begin
 for i:=1 to Form1.SG1.RowCount - 1 do
 begin
  begin
   if Form1.SG1.Cells[0,i] = Form1.SG2.Cells[0,i] then
   begin
    SG1.canvas.brush.Color := clGreen;
   end;
  end;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.07.2010, 10:17   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

http://www.delphisources.ru/pages/fa...in_dbgrid.html
http://delphifaq.nshome.ru/192.htm

Нашел на одном из форумов:
Цитата:
s:=StrToFloat(SG1.Cells[Sg1.ColCount-1,Arow]); //считываем значение оценки в соседнем столбце
if s<3 then Begin //сравниваем оценку если ниже "дВА" тогда
if s<2.3 then si:=0 else if s<2.6 then si:=51 else si:=102; //присвоим переменной Si числовое значение
s:=s*100+240; / / это высчитаные координаты для столбца диаграммы (у каждого свои!)
st:=FloatTostr(s);
cd:=StrToInt(st);
SG1.Canvas.FillRect(Rect);
SG1.Canvas.Pen.Color:=clBlack; //присвоим цвет рамки черный
SG1.Canvas.Brush.Color := TColor(RGB(255,si,0)); //присвоим цвет заливки тут красный....чем ближе к "ДВА" тем краснее

// SG1.Canvas.Brush.Color := TColor(RGB(si,255,0)); чем больше Si тем желтее максимум 255 но в коде другие Si присваеваем

// SG1.Canvas.Brush.Color := TColor(RGB(102,255,si)); чем больше Si тем зеленее максимум 255 но в коде другие Si присваеваем


SG1.Canvas.Rectangle(Rect.Left,Rect .Top,cd,Rect.Bottom); //выводим прямоугольник...который является столбцом диаграммы в таблице!!
end
else // иначе и погнали дальше!!
Здесь пример частичного закрашивания ячейки.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.07.2010 в 10:21.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid Определение значений по 3-ем критериям Juliya_U Помощь студентам 3 04.05.2010 14:19
сверка значений на другом листе подстановка подходящего marc-nikita Microsoft Office Excel 5 07.02.2010 14:10
умножение значений Stringgrid zluchka Помощь студентам 3 03.11.2009 11:33
StringGrid сумма значений monushka Общие вопросы Delphi 21 26.10.2009 17:12
Сверка данных с помощью VBA mal001 Microsoft Office Excel 2 06.08.2008 14:39