Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Подскажите компонент.


Автор: Mach3 2.12.2010, 11:58
Привет..
Подскажите каким компонентом проще реализовать подобную ЦВЕТНУЮ таблицу:
user posted image
Примного благодарен..

Автор: Poseidon 2.12.2010, 12:11
http://forum.vingrad.ru/forum/topic-97620/hl/tvirtualstringtree/index.html

Автор: superVad 2.12.2010, 12:34
Mach3, если тебе таблица не для работы с БД нужна то лучший вариант, что предложил Poseidon

А так можно взять грид из библиотеки jvcl - он позволяет задавать цвет столбцов.
Можно еще почитать это - http://www.podgoretsky.com/ftp/Language/Components/GRIDS/Kingdom/Разноцветный%20DbGrid.htm

Автор: remax 3.12.2010, 02:21
Цитата(superVad @ 2.12.2010,  12:34)
Mach3, если тебе таблица не для работы с БД нужна то лучший вариант, что предложил Poseidon


Если не для работы с БД, то обычного StringGrid достаточно. Необходимо только обрабатывать его событие onDrawCell, например так:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, WinProcs;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function PointInGridRect(Col, Row: Longint; const Rect: TGridRect): Boolean;
begin
  Result := (Col >= Rect.Left) and (Col <= Rect.Right) and (Row >= Rect.Top)
    and (Row <= Rect.Bottom);
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
Format: Word;
C: array[0..255] of Char;
begin
//------ нестандартная отрисовка ячеек

// задаем фон ячеек
if (ACol<(Sender as TStringGrid).FixedCols)or((ARow<(Sender as TStringGrid).FixedRows))
  then (Sender as TStringGrid).Canvas.Brush.Color:=TColor($F0F0F0)//фиксированные ячейки
  else
  if  PointInGridRect(aCol, aRow, (Sender as TStringGrid).Selection)
    then (Sender as TStringGrid).Canvas.Brush.Color:=clYellow     // выделение
    else // остальные
      if (arow mod 2)=0
       then  (Sender as TStringGrid).Canvas.Brush.Color:=clGray
       else  (Sender as TStringGrid).Canvas.Brush.Color:=clWhite;

Format := DT_LEFT or DT_WORDBREAK;
(Sender as TStringGrid).Canvas.FillRect(Rect);
StrPCopy(C, (Sender as TStringGrid).Cells[ACol, ARow]);
WinProcs.DrawText((Sender as TStringGrid).Canvas.Handle, C,
StrLen(C), Rect, Format);
end;

end.



Сорри за выбранные цвета ...

Автор: Mach3 3.12.2010, 17:34
спасибо

Автор: Saboten 4.12.2010, 11:55
Если лень что-то прописывать в OnDrawCell, можно попробовать компонент ZColorStringGrid, наследован от TStringGrid, http://avemey.com/zcolorstringgrid/zcolorstringgrid.php?lang=ru. Умеет объединять ячейки, вертикальное/горизонтальное выравнивание и др.
user posted image

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)