Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

stringgrid [D7, XP]


Jacksotnik ©   (2010-11-25 10:43:00) 

Добрый день всем. У меня такой вопрос.
Есть 2 стриггрида используются для наглядности при импорте данных, в один выводятся клиенты по которым прошло обновление данных, а во-второй новые клиенты которые добавились в базу.
Я хочу все это свести в один stringgrid и в нем разделять эти записи цветами, помогите реализовать по сути данные о новых и о обновленных абсолютно одинаковые тоесть нет какогото признака по которым можно их различить, просто проверяется наличие человека в базе по коду если есть то обновляется а если нет то добавляется новый
вот кусок кода где это происходит:

if myquery1.RecordCount=1 then
         begin
           if strtofloat(buf[5])>summ then
             begin
//Тут хочу сдалать один цвет
               inc(j);
               stringgrid1.Cells[0,j]:=buf[1];
               stringgrid1.Cells[1,j]:=buf[5];
               stringgrid1.Cells[2,j]:=buf[6];
             end;
         end
       else if myquery1.RecordCount=0 then
         begin
//А тут другой цвет
           inc(k);
           stringgrid2.Cells[0,k]:=buf[1];
           stringgrid2.Cells[1,k]:=buf[5];
           stringgrid2.Cells[2,k]:=buf[6];
         end;
помогите пожалуйста как можно раскрасить эти ячейки


Jacksotnik   (2010-11-25 15:10:00) [1]

Спасибо. Все работает


И. Павел   (2010-11-25 15:07:00) [2]

> Спасибо тебе, работает только при открытии форма весь stringgrid
> залит черным)))

Наверное, FormShow не привязан к соответствующему событию формы, и поэтому все объекты ссылаются на 0.

Это просто пример. В твоей программе изначально нужно заливать не green и red, а, например, white.
А при редактировании значения ячейки, пишем, например:
 sg.Objects[x, y] := TObject(clRed)

И измененная ячейка выделяется красным.


Jacksotnik   (2010-11-25 15:00:00) [3]

Спасибо тебе, работает только при открытии форма весь stringgrid залит черным)))


И. Павел   (2010-11-25 14:38:00) [4]

> Ну кто-то может написать как правильно использовать свойство
> objects в моем случае

Все уже расписали. Осталось только объединить это вот так:

procedure TForm1.sgDrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 sg.Canvas.Brush.Color := TColor(sg.Objects[ACol, ARow]);
 sg.Canvas.FillRect(Rect);
 sg.Canvas.TextOut(Rect.Left, Rect.Top, sg.Cells[ACol, ARow]);
end;

procedure TForm1.FormShow(Sender: TObject);
var i, j: integer;
begin
 for i := 1 to sg.RowCount do
   for j := 1 to sg.ColCount do
      if i <> j then sg.Objects[j, i] := TObject(clGreen)
                else sg.Objects[j, i] := TObject(clRed);
end;


Jacksotnik   (2010-11-25 14:28:00) [5]

Ну кто-то может написать как правильно использовать свойство objects в моем случае


Anatoly Podgoretsky   (2010-11-25 14:22:00) [6]


> Меня интересует вопрос именно сохранения состояния уже закрашенных
> ячеек.

Никакого сохранения не надо.


Jacksotnik   (2010-11-25 14:21:00) [7]

Очень смешно.


Плохиш   (2010-11-25 14:20:00) [8]

Обучаю основам программирования - дорого, по предоплате.


Jacksotnik   (2010-11-25 14:19:00) [9]

Меня интересует вопрос именно сохранения состояния уже закрашенных ячеек.


Jacksotnik   (2010-11-25 14:17:00) [10]

нашел вот єто:
stringgrid1.Objects[acol,arow]:=tobject($FFCCFF);
но куда его ставить и что с ним делать не приложу ума. Помогите пожалуйста


Jacksotnik   (2010-11-25 14:14:00) [11]


> У каждой ячейки есть свойство object.

Можете поподробней описать как с этим свойством работать именно в моем случае, я не могу разобраться с ним


Германн   (2010-11-25 14:05:00) [12]


> Возник новый вопрос. У меня должно быть 2 цвета в таблице.
>  Но после каждого вызова onDrawCell оно перерисовывает всю
> таблицу и то что было нарисовано не сохраняет, короче получается
> все одним цветом


> У каждой ячейки есть свойство object.
>


12   (2010-11-25 14:03:00) [13]

procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 if  (ACol = 1) and (ARow = 1)  then strngrd1.Canvas.Brush.Color := clRed;
 if  (ACol = 2) and (ARow = 2)  then strngrd1.Canvas.Brush.Color := clGreen;
 strngrd1.Canvas.FillRect(Rect);
 strngrd1.Canvas.TextOut(Rect.Left, Rect.Top, strngrd1.Cells[ACol, ARow]);


Jacksotnik   (2010-11-25 13:53:00) [14]

Возник новый вопрос. У меня должно быть 2 цвета в таблице. Но после каждого вызова onDrawCell оно перерисовывает всю таблицу и то что было нарисовано не сохраняет, короче получается все одним цветом


Jacksotnik   (2010-11-25 12:00:00) [15]

Спасибо всем. Вроде разобрался


Leonid Troyanovsky   (2010-11-25 11:53:00) [16]


> Jacksotnik ©   (25.11.10 10:43)  
 
> Я хочу все это свести в один stringgrid и в нем разделять
> эти записи цветами

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1287849951&n=18

--
Regards, LVT.


Anatoly Podgoretsky   (2010-11-25 11:46:00) [17]

OnDrawColumnCell


12   (2010-11-25 11:42:00) [18]

procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
  if  (ACol = 1) and (ARow = 1)  then strngrd1.Canvas.Brush.Color := clRed;
  strngrd1.Canvas.FillRect(Rect);
end;


Jacksotnik   (2010-11-25 10:59:00) [19]

Можно подробней и с примером пожалуйста, ато я не совсем понял


Плохиш   (2010-11-25 10:53:00) [20]

У каждой ячейки есть свойство object.


Наверх

Титульная страница Поиск, карта сайта Написать письмо