![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как поменять цвета ячеек у TStringGrid?
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 так часто пишешь ?