![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Всем доброго времени суток.
Мне нужно покрасить ячейки в 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
|
|||
|
|||
![]() Когда-то пробовал решить такую проблему. В голову пришло только это - хранить все строки , которые нужно перекрасить, в отдельном списке (в моем случае подошел TStringList) и динамически его обновлять при добавлении, удалении или редактировании вашего грида. А в процедуре отрисовки проверять рисуемую ячейку и список, и в зависимости от этого рисовать нужным цветом.
Возможно не оптимально, но работало. Как вариант, к каждой ячейке привязять объект, в котором будет св-во "TColor" и плясать от него. |
#3
|
||||
|
||||
![]() Цитата:
|
#4
|
||||
|
||||
![]() А почему ты используешь при работе StringGrid, а не DBGrid, который сразу отображает тебе твою БД.
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#5
|
||||
|
||||
![]() Цитата:
|
#6
|
|||
|
|||
![]() вот самый простой на мой взгляд способ, без лишней мороки
Код:
ADOQuery.Filtered:=true; ADOQuery.Filter:='ID_MACRO=''' +Cells[ACol,ARow]+ '''';//Фильтруем по нашему значению if (ADOQuery.FieldByName('COLOR').AsString<>'') then Canvas.Brush.Color:=stringtocolor(ADOQuery.FieldByName('COLOR').AsString); //Устанавливаем цвет если он существует |