Re: Grid
От: akasoft Россия  
Дата: 16.02.04 18:08
Оценка:
Здравствуйте, solos, Вы писали:

S>Мастера, посоветуйте какой-нибуть Grid-компонент для Delphi (не для БД, а простой), который бы мог хранить в своих ячейках строки и предоставлял удобный интерфейс для доступа и разрисовки каждой ячейки.


TDrawGrid/TStringGrid

S>Или как это сделать на стандартных компонентах?


Свойства Canvas/Font у них есть, события OnDrawCell тоже есть.

Метод DrawCell тоже есть.

Ну и чтобы совсем через край, вот кусок кода примера с сайта Королевство Дельфи

3.Изменение цвета строк компонента TGrid в режиме run-time в зависимости от данных в текущей записи нaбора данных.
Примечание: В данном примере SF_TYPE — внутренняя константа, ValueDesigner — переменная типа RECORD, содержащая нужные цвета.
Обрабатывается событие TGrid.onDrawColumnCell:

//------------------------------------------------------------------------------
Procedure TMainForm.GridBookDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
Begin
    // Изменение цвета фонта записи
     IF TDBGrid(Sender).DataSource.DataSet.FieldByName('OWNER_TYPE').AsInteger = SF_TYPE
     Then TDBGrid(Sender).Canvas.Font.Color:=ValueDesigner.colorSimpleSF
     Else TDBGrid(Sender).Canvas.Font.Color:=ValueDesigner.colorChildrenSF;

     // Поправка для выделенной записи , иначе текст не будет автоматически подсвечен        
     IF (gdSelected in State) AND TDBGrid(Sender).Focused
     Then TDBGrid(Sender).Canvas.Font.Color:=clHighLightText;

     TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);

     // установка знака АКЦЕПТОВАНО в поле Sign
     IF CompareText(Field.FieldName,'SIGN')=0
     Then IF NOT TDBGrid(Sender).DataSource.DataSet.FieldByName('ACCEPT').IsNull
          Then TDBGrid(Sender).Canvas.Draw(Rect.Left,Rect.Top,
                                         AcceptBMP.Picture.Bitmap)

end;
//------------------------------------------------------------------------------
... << RSDN@Home 1.1.3 beta 2 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.