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

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

Колонки TStringGrid [D6, WinXP]


Бывший студент ©   (2005-04-11 02:47:00) 

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


Бывший студент   (2005-04-12 00:30:00) [1]

Параметр ARect в данном случае даёт всего лишь выравнивание текста.


MBo   (2005-04-11 19:59:00) [2]

>Canvas.TextOut( 1, 1,Cells[ACol, ARow]);

А параметр ARect на что даден?


Бывший студент   (2005-04-11 19:31:00) [3]

Допустим, в одном из элементов коллекции устанавливается цвет, стиль шрифта сфокусированной ячейки. Делаю так:

type TMyGrid= class(TStringGrid)
.
protected
procedure DrawCell(ACol, ARow: Longint;
   ARect: TRect; AState: TGridDrawState); override;
end;
implementation
.
procedure TMyGrid.DrawCell(ACol, ARow: Longint;
   ARect: TRect; AState: TGridDrawState);
var Rect: TRect;
const clPaleGreen = TColor($CCFFCC);
     clPaleRed = TColor($CCCCFF);
begin
 //Если ячейка получает фокус, то нам надо закрасить её другими цветами
 if (gdFocused in AState) then
 begin
   Canvas.Brush.Color := clBlack;
   Canvas.Font.Color := clWhite;
   Canvas.Font.Style := [fsBold];
 end
 else //Если же ячейка теряет фокус, то закрашиваем её красным и зелёным
   if ACol = 2 then //Вторая колонка будет зелёной , другие - ячейки красными
     Canvas.Brush.color := clPaleGreen
   else
     canvas.brush.Color := clPaleRed;

 
 if (ACol > 0) and (ARow > 0) then
 begin
   Canvas.FillRect(Rect);
   Canvas.TextOut(1, 1, Cells[ACol, ARow]);
 end;
end;

В run-time текст из всех ячеек оказывается в Cells[0,0], цвета меняются только в нулевой колонке.


Юрий Зотов   (2005-04-11 10:19:00) [4]

Выравнивание - это уже не TFont. Могут понадобиться и другие свойста, которых в TFont тоже нет.

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


Наверх

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