Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как поменять цвета ячеек у TStringGrid?


Страницы:   1 2

yantux ©   (2009-12-10 12:26:00) 

Как поменять цвета ячеек у TStringGrid?

Возможно ли это? Если да ,то как? Если не возможно, посоветуйте другой класс, чтобы можно было сделать табличку и разукрасить ячейка в разные цвета.


yantux   (2009-12-16 11:21:00) [1]


> ИМХО, это попытка спрятать выделение первой ячейки. :)


Оно почти так и есть. Иначе при старте приложения ячейки красятся как попало.


yantux   (2009-12-16 11:19:00) [2]


> IMHO, это умозрительная конструкция, похоже на развод.--
> Regards, LVT.


Развод на что?


{RASkov}   (2009-12-15 23:15:00) [3]

> [37] Leonid Troyanovsky ©   (15.12.09 22:44)

Ну как что? Список :)
тот самый список, что после точки "вываливается"...

Или я не понимаю ко мне вопросов :(


Leonid Troyanovsky   (2009-12-15 22:44:00) [4]


> {RASkov} ©   (15.12.09 20:25) [34]

Предположим, что Ctrl+Space.
А что ж там появится?

--
Regards, LVT.


{RASkov}   (2009-12-15 20:53:00) [5]

> [35] Германн ©   (15.12.09 20:39)
> Жал. Не появляется список. Появляется системное меню формы. :)

Хм... что-то меня на альт переклинило.... конечно же Ctrl+Space :)


Германн   (2009-12-15 20:39:00) [6]


> тут нажать Alt+Пробел. Появится тот самый список, который
> автор вызывает путем написания self(точка)

Жал. Не появляется список. Появляется системное меню формы. :)


{RASkov}   (2009-12-15 20:25:00) [7]

> [32] Leonid Troyanovsky ©   (15.12.09 18:21)
>
> > {RASkov} ©   (14.12.09 19:58) [22]
>
> > Возможно он не знает про Alt+Space вот и пишет self(точка)
> список
> > возможных идентификаторов....
>
> А где ж такой список?

procedure TForm1.FormCreate(Sender: TObject);
begin
 | <- тут нажать Alt+Пробел. Появится тот самый список, который автор вызывает путем написания self(точка)
end;


Германн   (2009-12-15 18:32:00) [8]


> IMHO, это умозрительная конструкция, похоже на развод.

ИМХО, это попытка спрятать выделение первой ячейки. :)


Leonid Troyanovsky   (2009-12-15 18:21:00) [9]


> {RASkov} ©   (14.12.09 19:58) [22]

> Возможно он не знает про Alt+Space вот и пишет self(точка)список
> возможных идентификаторов....

А где ж такой список?

procedure TForm1.FormCreate(Sender: TObject);
begin
self.col:=-1;
self.row:=-1;
end;

IMHO, это умозрительная конструкция, похоже на развод.

--
Regards, LVT.


yantux   (2009-12-15 15:33:00) [10]


> А ты уже сам все пересмотрел? http://tinyurl.com/yc6rnmn


Гугль мне ен помог, помогли танцы с бубном с использованием информации в доках приведённых выше. Собственно реально работающий текст, который я думаю можно использовать не только для строк, но и для колонок:

unit Unit1;

interface

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

type

pvTStringGrid = ^TStringGrid;

 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   Button3: TButton;
   procedure Button3Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
     var CanSelect: Boolean);
   procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
     Rect: TRect; State: TGridDrawState);
   function tstringgridfillline(data : pvTStringGrid; brushcolor, fontcolor : tcolor) : integer;

 private
   { Private declarations }
 public
   { Public declarations }
   gridcolor: tcolor;
   flags : array [0..10] of boolean;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.tstringgridfillline(data : pvTStringGrid; brushcolor, fontcolor : tcolor) : integer;
var
 s : string;
 Rect2 : TRect;
 col, row : integer;
 begin

 tstringgridfillline:=0;

 if data = nil then
   begin
     tstringgridfillline:=-1;
     exit;
   end;

     data^.Canvas.Brush.Color:=brushcolor;

     for col := 0 to data^.ColCount - 1 do
       for row := 1 to data^.RowCount - 1 do
         BEGIN
           if self.flags[row] then
             data^.Canvas.Brush.Color:=self.gridcolor
           else
             data^.Canvas.Brush.Color:=clWhite;

           rect2:=data^.CellRect(col, row);
           data^.Canvas.FillRect(rect2);
           data^.Canvas.Font.Color:=fontcolor;
           s:=data^.Cells[col, Row];
           data^.Canvas.TextOut(Rect2.Left + 2, Rect2.Top + 2, s);
         end;
 end;

procedure TForm1.Button3Click(Sender: TObject);
var
 s : string;
 Rect2: TRect;
 x, y : integer;
begin
   for y := 1 to self.StringGrid1.ColCount - 1 do
     for x := 0 to self.StringGrid1.RowCount - 1 do
       begin
         self.StringGrid1.Canvas.Brush.Color:=clWhite;
         rect2:=self.StringGrid1.CellRect(x, y);
         self.StringGrid1.Canvas.FillRect(rect2);
         self.StringGrid1.Canvas.Font.Color:=clBlack;
         s:=self.StringGrid1.Cells[x, y];
         self.StringGrid1.Canvas.TextOut(Rect2.Left + 2, Rect2.Top + 2, s);
       end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 self.gridcolor:=clAqua;
 self.gridcolor:=clGreen;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
                                     Rect: TRect; State: TGridDrawState);
var
 s : string;
 Rect2: TRect;
 begin

 self.tstringgridfillline(@self.StringGrid1, self.gridcolor, clBlack  );

end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
                                       var CanSelect: Boolean);  
 begin

   if CanSelect then
     begin
       if self.flags[arow] then
         self.flags[arow]:=false
       else
         self.flags[arow]:=true;
       self.tstringgridfillline(@self.StringGrid1, self.gridcolor, clBlack  );
     end;

 end;

end.


Andy BitOff   (2009-12-15 14:04:00) [11]


> yantux ©   (15.12.09 13:02) [29]
> Покажите excample.

А ты уже сам все пересмотрел?
http://tinyurl.com/yc6rnmn


yantux   (2009-12-15 13:02:00) [12]


> TStringGrid.Options + goRowSelectНо даже если нужно свое
> закрашивание, то все это легко делается в OnDrawCell И не
> нужно на грид, да еще в каждую ячейку лепить дополнительно
> что-то.... Не позорься :)


Это я уже понял, а что подразумевается под термином "легко делается"? Покажите excample.


yantux   (2009-12-15 12:59:00) [13]


> ужас...ну, зачем опять велосипед??? да еще такой громоздкий?


Чтобыф както решить проблему.


{RASkov}   (2009-12-15 10:18:00) [14]

> [25] yantux ©   (15.12.09 09:31)
> По клику мыши закрашивается ячейка, но мне надо, чтобы закрашивалась
> вся строка в таблице

TStringGrid.Options + goRowSelect

Но даже если нужно свое закрашивание, то все это легкоделается в OnDrawCell И не нужно на грид, да еще в каждую ячейку лепить дополнительно что-то.... Не позорься :)


brother   (2009-12-15 09:34:00) [15]

> я рассматриваю каждой ячейке присвоить объект tedit, поскольку
> в этом классе поменять цвет фона

ужас...ну, зачем опять велосипед??? да еще такой громоздкий?


yantux   (2009-12-15 09:31:00) [16]


> Что-то я немогу это связать с "в каждой ячейки должен быть
> свой Эдит и Лэйбл"...


Это один из вариантов.

А в этом примере только таблица и обработчики событий. По клику мыши закрашивается ячейка, но мне надо, чтобы закрашивалась вся строка в таблице, т.е. несколько ячеек. На основе данного у меня ни чего не получилось сделать.

Поэтому, как вариант, я рассматриваю каждой ячейке присвоить объект tedit, поскольку в этом классе поменять цвет фона очень просто.


yantux   (2009-12-15 09:28:00) [17]


> Возможно он не знает про Alt+Space вот и пишет self(точка)список
> возможных идентификаторов....


Да не знаю, буду пробовать.


yantux   (2009-12-15 09:27:00) [18]


> А зачем ты self так часто пишешь ?


Это удобно - появляется подсказка.


{RASkov}   (2009-12-14 19:58:00) [19]

> [21] Игорь Шевченко ©   (14.12.09 19:19)
> А зачем ты self так часто пишешь ?

Возможно он не знает про Alt+Space вот и пишет self(точка)список возможных идентификаторов....

> [20] yantux ©   (14.12.09 18:57)

Что-то я немогу это связать с "в каждой ячейки должен быть свой Эдит и Лэйбл"...


Игорь Шевченко   (2009-12-14 19:19:00) [20]


> Кроме того, объектное программирование как раз было придумано
> для оптимизации системных ресурсов


Объектное программирование было придумано для облегчения решения задач. Системные ресурсы при этом часто расходуются больше, чем при необъектном программировании. Такая вот обратная сторона.

yantux ©   (14.12.09 18:57) [20]

А зачем ты self так часто пишешь ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо