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

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

Цвет ячейки в StringGrid [D7, WinXP]


Горбатов В.Ю. ©   (2004-08-06 08:06:00) 

Сразу говорю, что перерыл кучу ссылок, пролистал множество страниц, но дельного решения пока нет.
Проблема: В StringGrid'е задаю календарь на месяц из определенной базы. Но реально выделить именно выходные и праздничные дни другим цветом пока никак. Т.е. нужно динамически изменять цвета в определенных ячейках при перемещении по месяцам.
В OnDrawCell получается задать цвета только статически.

Помогите, плиз, заранее спасибо!


olookin   (2004-08-06 09:06:00) [1]

Автор вероятно разумел под динамическим изменением прорисовку при перемещении по гриду? Тогда рисовать в StringGridOnTopLeftChange


TUser   (2004-08-06 09:05:00) [2]

unit uMyStringGrid;

interface

uses
 SysUtils, Classes, Controls, Grids, Graphics, types, windows;

type
 TOnCanFill = procedure (Sender:TObject; ACol, ARow:longint; var Fill:boolean) of object;

 TMyStringGrid = class(TStringGrid)
 private
   FFillColor:TColor;
   FOnCanFill:TOnCanFill;
 protected
   procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
     AState: TGridDrawState); override;
 published
   property FillColor:TColor read FFillColor write FFillColor;
   property OnCanFill:TOnCanFill read FOnCanFill write FOnCanFill;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('Aksianov', [TMyStringGrid]);
end;

procedure TMyStringGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
     AState: TGridDrawState);
var CanFill:boolean;
begin
  CanFill:=false;
  if assigned (FOnCanFill) then
     FOnCanFill(Self,ACol,ARow,CanFill);
  if CanFill then
     with Self.Canvas do
        Brush.Color:=FFillColor;
  inherited;
  if CanFill then
     Brush.Color:=clWhite;
end;

end.


Леприкон   (2004-08-06 08:40:00) [3]

По поводу выходных. Я так понимаю, это столбцы Index и Index+1.
Так что мешает в OnDrawCell проверять if (ACol=Index) or (ACol=Index+1) и менять цвет?


Алхимик   (2004-08-06 08:39:00) [4]

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);


Анализируешь ACol, ARow и Cells[ACol, ARow]


KSergey   (2004-08-06 08:31:00) [5]

Код OnDrawCell - в студию!


Думкин   (2004-08-06 08:24:00) [6]

А ты применяй не константы, а пременные, или никак?


olookin   (2004-08-06 08:12:00) [7]

А что значит "получается статически"?


Наверх

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