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-14 18:57:00) [21]

На основе документации, ссылки на которую мне дали выше я пыьтаюсь создать простой пример. Наддо по нажатию левой кнопки мыши выделать строку в таблице каким нить цветом:


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   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);
 private
   { Private declarations }
 public
   { Public declarations }
   row, col : integer;
   flag : boolean;

 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

 self.col:=-1;
 self.row:=-1;

end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 s : string;
begin
If (ARow = self.row)
    and ((ACol=1) or (ACol=2) or (ACol=3))
     (* self.met_opred_dinam_diap_svet_sign_har.selected_cell.col *)
     then
   begin
     if self.flag = true then
       begin
         self.StringGrid1.Canvas.Brush.Color:=clGreen;
       end else
       begin
         self.StringGrid1.Canvas.Brush.Color:=clRed;
       end;
     self.StringGrid1.Canvas.FillRect(rect);

     (Sender as TStrinGgrid).Canvas.Font.Color:=clBlack;
     s:=self.StringGrid1.Cells[ACol, ARow];
     self.StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, s);

     self.row:=-1;
     self.col:=-1;
   end;
end;

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin

     if self.flag = true then
       begin
         self.flag:=false;
       end else
       begin
         self.flag:=true;
       end;

end;

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

self.row:=arow;
self.col:=acol;

end;

end.


{RASkov}   (2009-12-14 18:01:00) [22]

> [18] yantux ©   (14.12.09 17:48)
> Цвет фона отдельных ячеек меняю, а строки не получается

В OnDrawCell можно делать всё что душе угодно.... об этом уже говорили тут.
Что же у тебя не получается и как делал. Показывай.


yantux   (2009-12-14 17:48:00) [23]


> {RASkov} ©   (14.12.09 14:04) [17]
>Уже есть у грида свой инплэйсэдит,
>  зачем еще? Плюс лэйбл тоже зачем там?


Чтобы цвет фона менять менее гемморойно, полноценного результата ещё не достиг. Цвет фона отдельных ячеек меняю, а строки не получается. Вообще плохо понимаю идею организации этого дела.


{RASkov}   (2009-12-14 14:04:00) [24]

> [13] yantux ©   (14.12.09 10:58)
> Нет, хочу сделать каждой ячейке свой tedit или tlabel

Уже есть у грида свой инплэйсэдит, зачем еще? Плюс лэйбл тоже зачем там?


clickmaker   (2009-12-14 12:14:00) [25]

> Думаю, ячейки Excel более навороченные и тияжёлые, чем tedit
> для каждой ячейки

я не думаю, что там для всех 65535 (а в 2007+ - вообще 1048576) возможных строк * на не_помню_сколько_максимально_столбцов сразу создаются контрОлы для редактирования.
формат ячейки может храниться.
Так же и в стринггриде можно хранить только класс, который будет использован для создания контрола


yantux   (2009-12-14 12:06:00) [26]


> clickmaker ©   (14.12.09 11:11) [14]
> это же окна, а окна - это системный ресурс, а система -
> не бездонный колодец


А кому сейчас легко? Кроме того, объектное программирование как раз было придумано для оптимизации системных ресурсов и создание для совсем небольшой таблички каждой ячейке tedit совсем не должно быть тяжело. Думаю, ячейки Excel более навороченные и тияжёлые, чем tedit для каждой ячейки.


clickmaker   (2009-12-14 11:11:00) [27]

> каждой ячейке свой tedit

так а создавать-то сразу зачем?
это же окна, а окна - это системный ресурс, а система - не бездонный колодец


yantux   (2009-12-14 10:58:00) [28]


>Плохиш ©   (11.12.09 23:21) [12]
> Ты значения всех ячеек одновременно редактируешь?


Нет, хочу сделать каждой ячейке свой tedit или tlabel, в общем присвоить tobject тот класс, который будет удобнее для конкретной задачи.

Однако не понятно, как это правильно делать, т.е.

если objects[]:=tedit.creste(); то что поставить в аргумент crete?


Плохиш   (2009-12-11 23:21:00) [29]


> yantux ©   (11.12.09 17:04) [9]
>
> Вопрос такого порядка. Можно ли ячейке, полю присвоить objects[]:
> = tedit.create() ?

Ты значения всех ячеек одновременно редактируешь?


Amoeba   (2009-12-11 22:16:00) [30]


> clickmaker ©   (11.12.09 16:38) [8]
>
> > В Visual Studio на каком-нибудь C++ тоже бы пришлось точно
> > также поплясать
>
> там гораздо активней пришлось бы плясать. Если на чистом
> апи безо всяких mfc и т.п.

Как-то давно сделал Grid на TPW с использованием OWL + API. До ума так и не довел, т.к. появилось D1.


clickmaker   (2009-12-11 17:41:00) [31]

> Можно ли ячейке, полю присвоить objects[]:= tedit.create()
> ?

можно. но не нужно.
котрОлы для редактирования лучше создавать в момент перехода в режим редактирования. Назначать им правильно Parent и координаты.


yantux   (2009-12-11 17:04:00) [32]

Вопрос такого порядка. Можно ли ячейке, полю присвоить objects[]:= tedit.create() ?

Если да, то как сделать это правильно?

Я это уже сделал, т.е. еомпилируется, но когда присваиваю полю text значение, то текст в ячейке не появляется. Дклаю примерно так:
tedit(objects[col,row]).text:='ddddddddd';


clickmaker   (2009-12-11 16:38:00) [33]

> В Visual Studio на каком-нибудь C++ тоже бы пришлось точно
> также поплясать

там гораздо активней пришлось бы плясать. Если на чистом апи безо всяких mfc и т.п.


Германн   (2009-12-11 16:36:00) [34]


> Я даже думаю, что управление шрифтом (курсив, жирный) менее
> актуально для таблицы, чем цвет фона текста в ячейке.

Ячейки как самостоятельного элемента не существует. Есть только грид с хрен знает сколькими строками и столбцами.


yantux   (2009-12-11 12:14:00) [35]

> Если хочется сразу всё готовое - есть сторонние компоненты, разноцветные гриды.

Это интересно.

>А ещё хорошо бы сразу и выпадающий список, календарь, несколько чекбоксов + шифрование с доступом к ячейке по паролю в придачу :)

я всегда думал, что табличное представление данных и управление цветом фона, на котором печатается текст это часто используемая фишка. Я даже думаю, что управление шрифтом (курсив, жирный) менее актуально для таблицы, чем цвет фона текста в ячейке.


TIF   (2009-12-11 10:53:00) [36]

> Неужели у ячейки нет свойства типа цвета фона или вроде
> этого?

А ещё хорошо бы сразу и выпадающий список, календарь, несколько чекбоксов + шифрование с доступом к ячейке по паролю в придачу :)

Это скелет, основа, стандартныйкомпонент, а всё остальное, что нужно для решения конкретной задачи реализуется вручную. Кому что нужно, тот это и достраивает. Ни через левое, ни через правое ухо - это нормальное явление. В Visual Studio на каком-нибудь C++ тоже бы пришлось точно также поплясать. Ничего шокирующего в этом нет

Если хочется сразу всё готовое - есть сторонние компоненты, разноцветные гриды.


yantux   (2009-12-11 10:21:00) [37]

Скачал, почитал статьи. Я в шоке. Неужели у ячейки нет свойства типа цвета фона или вроде этого? То что предлагается мне кажется сделано через левое ухо.

Если я правильно понимаю, в статьях предлагается работать с ячейкой почти как с bmp, но используя функции вывода текста.


kyn66   (2009-12-10 12:55:00) [38]

А еще и вот этот замечательный букварик http://www.drkb.ru/


Thrashead   (2009-12-10 12:38:00) [39]

event OnDrawCell

совет: скачай себе DelphiWorld.


Медвежонок Пятачок   (2009-12-10 12:27:00) [40]

он дро чего-то там?


Страницы:   1 2

Наверх

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