Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Invalidate в design-time   Найти похожие ветки 

 
Бывший студент ©   (2005-04-22 13:20) [0]

У меня есть компонент с предком TStringGrid. Есть коллекция TCollection, количество элементов которой соответствует количеству колонок grid"а, в каждом элементе содержатся свойства (Font, Color) соответствующей колонки,
TColStyle = class(TCollectionItem)
private
  FColFont: TFont;
  FColor: TColor;
  procedure SetFont(Value: TFont);
  procedure SetColor(Value: TColor);
  function GetColor:Tcolor;
public
  constructor Create(Collection: TCollection); override;
  destructor Destroy; override;
published
  property Font: TFont read FColFont write SetFont;
  property Color: TColor read GetColor write SetColor;
end;

procedure TColStyle.SetFont(Value: TFont);
begin
FColFont.Assign(Value)
end;

procedure TColStyle.SetColor(Value: TColor);
begin
FColor:=Value;
end;

function TColStyle.GetColor: TColor;
begin
Result:=FColor;
end;


которые задействуются в перекрытом DrawCell компонента.

procedure TTestGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
begin
inherited;
if ACol=0 then //к примеру в нулевой колонке
  begin
  Canvas.Font:=ColStyles[0].Font;
  Canvas.Brush.Color:=ColStyles[0].Color;
  end;
Canvas.FillRect(ARect);
Canvas.TextOut(ARect.Left, ARect.Top, Cells[ACol, ARow]);
end;

В design-time при изменении свойства, например Color, с интерфейсом компонента
ничего не происходит. Обновляется он только при изменении свойств самого grid"а (к примеру ColCount) или в run-time.
Насколько я знаю, за обновление отвечает метод Invalidate, как можно его вызвать после изменения свойства в элементе TCollection?


 
-=XP=- ©   (2005-04-22 16:44) [1]

вызвать после изменения свойства в элементе TCollection

TColStyle = class(TCollectionItem)
private
 FColFont: TFont;
 FOwnerGrid: TSomeGrid;
public
 constructor Create(Collection: TCollection; OwnerGrid: TSomeGrid);

procedure TColStyle.SetColor(Value: TColor);
begin
 FColor := Value;
 FOwnerGrid.Invalidate;
end;


Что-то в этом ключе.


 
Бывший студент ©   (2005-04-22 17:11) [2]

Спасибо, принцип понятен. Но компилятор ругается на конструктор.


 
Бывший студент ©   (2005-04-23 13:07) [3]

Что-то не выходит ничего с конструктором в [1], посоветуйте, пожалуйста, как быть.


 
Набережных С. ©   (2005-04-23 14:53) [4]


> Бывший студент ©   (23.04.05 13:07) [3]

А может все-таки книжки какие-никакие почитать, а? Для "чайников" Ну че уж сразу-то за компоненты?


 
Юрий Зотов ©   (2005-04-23 15:02) [5]

> Бывший студент ©   (23.04.05 13:07) [3]

При чем тут конструктор? Не трогайте Вы его. Все, что нужно сделать - это вызвать Invalidate у Grid"а.

Я Вам код давал? Давал. Он работает? Работает. Ссылка на Grid в нем есть? Есть. Так какие могут быть проблемы?

И вызывать Invalidate надо не при изменении КАЖДОГО Item"а, а в методе Update самой КОЛЛЕКЦИИ. А Item только должен коллекцию УВЕДОМИТЬ - то есть, он должен вызывать не Invalidate, а свой метод Change.

Ссылку на я статью я Вам давал? Давал. Вы ее прочли? Разобрались в ней?

Видимо, нет. А зря. Потому что там показано как раз то, что Вам и нужно.


 
Набережных С. ©   (2005-04-23 15:18) [6]


> Юрий Зотов ©   (23.04.05 15:02) [5]

Не царское это дело - статьи всякие читать.


 
Бывший студент ©   (2005-04-23 16:16) [7]

За всё спасибо, прошу сильно меня не ругать. Впервые за Delphi я сел в начале апреля, стажа программирования тоже почти нет. Понадобился компонент, просить некого - делаю сам.


 
Юрий Зотов ©   (2005-04-23 16:29) [8]

> Бывший студент ©   (23.04.05 16:16) [7]

От це по-нашему. Сорри, если что не так.

Читайте статью. Разберите ее "до винтика", чтобы была понятна каждая буква - зачем она и почему именно в этом месте. Особое внимание обратите на способ перерисовки - он "отложенный" и связан с работой BeginUpdate-EndUpdate (чтобы избежать многократных перерисовок). Это как раз то, на чем и произошла заминка.



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
2-1132392648
CMOS
2005-11-19 12:30
2005.12.04
Не получается правилно удалить объект


2-1131767247
Астроном-любитель
2005-11-12 06:47
2005.12.04
Как найти формулу луны ?


10-1108540611
Карелин Артем
2005-02-16 10:56
2005.12.04
Как получить GUID объекта Automation?


6-1124422105
pOLyMOrpH
2005-08-19 07:28
2005.12.04
Работа с сокетом


14-1131956381
Skier
2005-11-14 11:19
2005.12.04
WAVE-recorder