Grid
От: solos Украина www.belton.com.ua
Дата: 16.02.04 15:35
Оценка:
Мастера, посоветуйте какой-нибуть Grid-компонент для Delphi (не для БД, а простой), который бы мог хранить в своих ячейках строки и предоставлял удобный интерфейс для доступа и разрисовки каждой ячейки.

Или как это сделать на стандартных компонентах?
WBR, solos.
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 >>
Re[2]: Grid
От: solos Украина www.belton.com.ua
Дата: 18.02.04 11:10
Оценка:
Вот как я пытаюсь поменять цвет фона одной ячейки, проверив ее содержимое:

procedure TMainForm.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
IF TStringGrid(Sender).Cells[2,2]='1' then
    begin
    TStringGrid(Sender).Canvas.Brush.Style:=bsSolid;
    TStringGrid(Sender).Canvas.Brush.Color:=clRed;
    end
else
    TStringGrid(Sender).Canvas.Brush.Style:=bsClear;
end;


Не работает. Чего я не понял?
WBR, solos.
Re: Grid
От: wisekaa_  
Дата: 18.02.04 11:18
Оценка:
Здравствуйте, solos, Вы писали:

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


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


Тебе важно платные или бесплатные компоненты?

Если платные, то пойщи TAdvGrid компания TMS.
Если бесплатные, то можно поискать наследников TSortGrid
Re[3]: Grid
От: Аноним  
Дата: 18.02.04 11:20
Оценка:
Здравствуйте, solos, Вы писали:

S>Вот как я пытаюсь поменять цвет фона одной ячейки, проверив ее содержимое:


S>
S>procedure TMainForm.StringGrid1DrawCell(Sender: TObject; ACol,
S>  ARow: Integer; Rect: TRect; State: TGridDrawState);
S>begin
S>IF TStringGrid(Sender).Cells[2,2]='1' then
S>    begin
S>    TStringGrid(Sender).Canvas.Brush.Style:=bsSolid;
S>    TStringGrid(Sender).Canvas.Brush.Color:=clRed;
S>    end
S>else
S>    TStringGrid(Sender).Canvas.Brush.Style:=bsClear;
S>end;
S>


S>Не работает. Чего я не понял?

дык, а закрашивать-то кто будет?
Re[4]: Grid
От: solos Украина www.belton.com.ua
Дата: 18.02.04 11:31
Оценка:
А>дык, а закрашивать-то кто будет?

А как?
WBR, solos.
Re[2]: Grid
От: solos Украина www.belton.com.ua
Дата: 18.02.04 11:32
Оценка:
А что это за TSortGrid ?
WBR, solos.
Re[5]: Grid
От: Аноним  
Дата: 18.02.04 11:37
Оценка:
Здравствуйте, solos, Вы писали:


А>>дык, а закрашивать-то кто будет?


S>А как?

да FillRect какой-нибудь у канваса TStringGrid-а или что-то в этом духе (не помню уже, давно не писал на Builder-е), благо TRect тебе в событие передается
Re: Grid
От: Dimonka Верблюд  
Дата: 18.02.04 11:40
Оценка:
Здравствуйте, solos, Вы писали:

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


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


Лично мне очень нравится QuantumTreeList от DeveloperExpress. С этой штукой забыл о существовании всевозможных стандартных и нестандартных гридов и списков. Раскрашивай, сортируй, ставь редакторы на ячейки практически на любой вкус. Не бесплатно:
http://www.devexpress.com/products/vcl/ExQuantumTreeList/

п.с. Это была не реклама..
Re[2]: Grid
От: Andy_MAN Россия  
Дата: 18.02.04 12:27
Оценка:
Здравствуйте, Dimonka, Вы писали:

нестандартных гридов и списков. Раскрашивай, сортируй, ставь редакторы на ячейки практически на любой вкус. Не бесплатно:

А если бесплатно?
Re[3]: Grid
От: wisekaa_  
Дата: 18.02.04 13:10
Оценка:
Здравствуйте, solos, Вы писали:


S>А что это за TSortGrid ?


Был такой компонент когда-то и от него производные.
Можно поискать их на www.torry.ru.
В принцепе это полностью переписанный TStringGrid, с новыми возвожностями,
задай поиск на Torry по гридам, может чего подойдет, там есть и бесплатные.
Re[3]: Grid
От: Dimonka Верблюд  
Дата: 18.02.04 14:31
Оценка:
Здравствуйте, Andy_MAN, Вы писали:

A_M>Здравствуйте, Dimonka, Вы писали:


A_M>нестандартных гридов и списков. Раскрашивай, сортируй, ставь редакторы на ячейки практически на любой вкус. Не бесплатно:


A_M>А если бесплатно?


Ну это смотря в каком смысле "бесплатно". Если для частного пользования, то посмотри на ру-борде в варезнике, а если на фирме нет денег на нужный компонент, то значит он вам и не нужен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.