Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.094 c
2-1131995292
Wishmaster
2005-11-14 22:08
2005.12.04
ЧТо-то не то... DLL


14-1132004309
ronyn
2005-11-15 00:38
2005.12.04
Нужен драйвер модема для Linux


5-1114511915
Бывший студент
2005-04-26 14:38
2005.12.04
Свойство предка


14-1131633246
seg
2005-11-10 17:34
2005.12.04
Первопроходцы интернета Винт Серф и Боб Кан получили высочайшую н


8-1120744278
ATarget
2005-07-07 17:51
2005.12.04
Как быстро сделать 256 цветный снимок монитора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский