Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2012, 11:48
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
Вопрос Покраска ячеек в StringGriad под разные значения

Всем доброго времени суток.
Мне нужно покрасить ячейки в StringGriad под разные значения которые были заведомо занесены в БД я использую код такого вида:
Код:
procedure TCalendar_cadr.AdvStringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
  var
  txtWidth: Integer;
    begin
    if AdvStringGrid1.Cells[ACol,ARow] = DataModule1.ADOQuery12.FieldByName('Обозначение').AsString
    then  begin
    AdvStringGrid1.Canvas.Brush.Color := DataModule1.ADOQuery12.FieldByName('Цвет').AsInteger;
AdvStringGrid1.Canvas.FillRect (Rect);
AdvStringGrid1.Canvas.TextRect (Rect, Rect.Left + 2, Rect.Top + 2, AdvStringGrid1.Cells[ACol,ARow]);
  with (Sender as TStringGrid) do
  begin
    txtWidth := Canvas.TextWidth(Cells[ACol, ARow]);
    if ColWidths[ACol] < txtWidth then ColWidths[ACol] := txtWidth + 3;
  end;
    end;
    end;
Но этот код позволяет окрашивать только какое то одно значение, в тот момент когда мне нужно несколько разных.

И ещё вопрос.
Как в StringGrid сохранять значения ячеек чтобы открыл программу а там он уже был бы заполнен.

Заранее благодарен.
Ответить с цитированием
  #2  
Старый 22.05.2012, 12:56
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Когда-то пробовал решить такую проблему. В голову пришло только это - хранить все строки , которые нужно перекрасить, в отдельном списке (в моем случае подошел TStringList) и динамически его обновлять при добавлении, удалении или редактировании вашего грида. А в процедуре отрисовки проверять рисуемую ячейку и список, и в зависимости от этого рисовать нужным цветом.
Возможно не оптимально, но работало.
Как вариант, к каждой ячейке привязять объект, в котором будет св-во "TColor" и плясать от него.
Ответить с цитированием
  #3  
Старый 22.05.2012, 13:00
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от icsander
Когда-то пробовал решить такую проблему. В голову пришло только это - хранить все строки , которые нужно перекрасить, в отдельном списке (в моем случае подошел TStringList) и динамически его обновлять при добавлении, удалении или редактировании вашего грида. А в процедуре отрисовки проверять рисуемую ячейку и список, и в зависимости от этого рисовать нужным цветом.
Возможно не оптимально, но работало.
Как вариант, к каждой ячейке привязять объект, в котором будет св-во "TColor" и плясать от него.
А можно примером кода. Я находил пример где привязывается объект, но не получилось разобраться в нём(
Ответить с цитированием
  #4  
Старый 22.05.2012, 16:54
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

А почему ты используешь при работе StringGrid, а не DBGrid, который сразу отображает тебе твою БД.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #5  
Старый 22.05.2012, 17:17
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kailon
А почему ты используешь при работе StringGrid, а не DBGrid, который сразу отображает тебе твою БД.
Я делаю календарь кадровика. И верхний ряд это дни в месяце.
Ответить с цитированием
  #6  
Старый 12.10.2012, 12:40
enslaver enslaver вне форума
Прохожий
 
Регистрация: 12.10.2012
Сообщения: 2
Репутация: 10
Радость покрасить ячейки в StringGriad под разные значения

вот самый простой на мой взгляд способ, без лишней мороки
Код:
ADOQuery.Filtered:=true;
ADOQuery.Filter:='ID_MACRO=''' +Cells[ACol,ARow]+ '''';//Фильтруем по нашему значению
if (ADOQuery.FieldByName('COLOR').AsString<>'') then Canvas.Brush.Color:=stringtocolor(ADOQuery.FieldByName('COLOR').AsString); //Устанавливаем цвет если он существует
Из этого же элемента у меня программе динамически формируется и панель палитры.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025