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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2010, 18:34   #1
Kisma
Пользователь
 
Аватар для Kisma
 
Регистрация: 10.02.2010
Сообщений: 13
По умолчанию Нестандартное закрашивание DBGrid

Доброе время суток! Искала на форуме, но похожего не нашла. Есть таблица DBGrid, в ней номера системных блоков, пользователи и кабинеты, в которых эти сист.боки расположены. Также три кнопки: улучшение(зеленый), на списание(красный), проблемный(желтый). Вот в этой таблице мне нужно выделить строку с номером, пользователем и кабинетом и при нажатии на кнопку выделить соответствующим цветом строку, но при этом строка должна занестись на другую форму в соответствующую из трех таблиц.
Возможно такое осуществить??? И как? Если не трудно код пожалуйста тоже напишите, я просто новичок в Delphi...заранее спасибо!!!
Попала как-то Алиса в Зазеркалье. Ей понравилось - и девку поперло! В затумбочье, задиванье, зашторье, закроватье... А в конце - застолье, запой и замуж.
Kisma вне форума Ответить с цитированием
Старый 16.02.2010, 18:55   #2
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

Цитата:
и при нажатии на кнопку выделить соответствующим цветом строку, но при этом строка должна занестись на другую форму в соответствующую из трех таблиц.
а зачем такие сложности, закрашивать, а потом переносить, просто перенесите, а с основной таблицы удалите.

Это можно сделать. вот код который по клику на определённой строке меняем её цвет, и в принципе получаем какое-то, нужное вам значение
на событие onClick dbgrid-a
Код:
 [переменная]:=dbgrid1.DataSource.DataSet.FieldByName([имя_поля ]).Value // получаем номер или ID системного блока
на нажатие кнопки:
переносим значение [переменная] в нужную таблицу (тут уж вам решать как и что переносить, но лучше, я так думаю, записать только номер оборудования)

на событие onDBGridDrawColumnCell
Код:
 if <условие которое проверяет наличие номера оборудования в одной из 3 таблиц> 
   then 
    with DBGrid1.Canvas do
      begin
       Brush.Color := clRed;// если на списание
       Font.Color := clWhite;
       FillRect(Rect);
       TextOut(Rect.Left + 2, Rect.Top + 2, Column.Field.Text);
      end;
......... ну и так далее.
Идея понятна?
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 16.02.2010, 19:32   #3
Kisma
Пользователь
 
Аватар для Kisma
 
Регистрация: 10.02.2010
Сообщений: 13
По умолчанию

да, понятно спасибо большое! Только вот я не пойму как условие это прописать...что-то запуталась
Попала как-то Алиса в Зазеркалье. Ей понравилось - и девку поперло! В затумбочье, задиванье, зашторье, закроватье... А в конце - застолье, запой и замуж.

Последний раз редактировалось mihali4; 16.02.2010 в 21:00.
Kisma вне форума Ответить с цитированием
Старый 16.02.2010, 20:05   #4
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

нуууууууууу.............. тут конешно можно предложить 2 варианта:
1. ввести дополнительное поле в таблицу де записаны данные о оборудовании , и вносить в него 1 - улучшеные, 2 - списание, 3 - проблемный
тогда код будет таким:
Код:
 if  dbgrid1.DataSource.DataSet.FieldByName([имя_поля ]).Value=1
   then 
    with DBGrid1.Canvas do
      begin
       Brush.Color := clGreen;// если на списание
       Font.Color := clWhite;
       FillRect(Rect);
       TextOut(Rect.Left + 2, Rect.Top + 2, Column.Field.Text);
      end;
 if  dbgrid1.DataSource.DataSet.FieldByName([имя_поля ]).Value=2
   then 
    with DBGrid1.Canvas do
      begin
       Brush.Color := clRed;// если на списание
       Font.Color := clWhite;
       FillRect(Rect);
       TextOut(Rect.Left + 2, Rect.Top + 2, Column.Field.Text);
      end;
 if  dbgrid1.DataSource.DataSet.FieldByName([имя_поля ]).Value=3
   then 
    with DBGrid1.Canvas do
      begin
       Brush.Color := clYeelow;// если на списание
       Font.Color := clWhite;
       FillRect(Rect);
       TextOut(Rect.Left + 2, Rect.Top + 2, Column.Field.Text);
      end;
это один пример, на мой взгляд самый простой и доступный

можно конешно посложнее
<условие> - может быть результатом работы запроса который проверяет наличие определённого номера оборудования в одной из таблиц.
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 16.02.2010, 21:26   #5
Kisma
Пользователь
 
Аватар для Kisma
 
Регистрация: 10.02.2010
Сообщений: 13
По умолчанию

Ok спасибо! Что-то не совсем разобралась, просветы есть...но что-то туплю, как говорите это сделать: я кликаю на ячейку таблицы с номером сист.блока (это у меня первый столбец), она выделяется (как обычно синеньким), потом я щелкаю на кнопку (например списание) и строка выделяется красным...тут не разобралась, я и так и сяк переделываю, ничего не выходит...вы уж извините, что приходится всё разжевывать)))
Попала как-то Алиса в Зазеркалье. Ей понравилось - и девку поперло! В затумбочье, задиванье, зашторье, закроватье... А в конце - застолье, запой и замуж.
Kisma вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нестандартное включение ПК Bat{CMD}_Men Операционные системы общие вопросы 1 24.08.2009 17:04
Закрашивание ячеек в StringGrid ИВэТэшка Помощь студентам 7 12.04.2009 11:09
Закрашивание столбцов в Stringgrid ertar Общие вопросы Delphi 3 19.02.2009 00:31
Нестандартное PopupMenu Crivel Помощь студентам 6 12.08.2008 19:32
StringGrid: Выделение и закрашивание mazdakilla Общие вопросы Delphi 1 14.05.2008 22:55