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

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

Ошибка в наследнике TStringGrid


hawkins ©   (2004-12-07 20:03:00) 

Здраствуйте!Помогите понять ошибку:
Написал компонент - наследник TStringGrid. Добавил несколько
свойств, перегрузил процедуры Paint, DrawCell. Далее написал
программу: окно создает дочернее окно с несколькими стринг гридами(мой компонент) ,
если окрывать и закрывать дочернее окно несколько раз подряд то выползает ошибка 'Параметр задан неверно', затем ошибка 'Canvas dose not allow drawing' и зависает. А вот если в компоненте закоментировать кусок (в тексте компонента коментарий), то все нормально. Не пойму никак в чем дело ...

Далее сокращенный текст компонента:

TMy_StringGrid=class(TStringGrid)

private

  procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
     AState: TGridDrawState); override;
private
...

protected
...
   FIndicators:TImageList;
   FIndicators2:TImageList;
...
public
...
   constructor Create(AOwner: TComponent);override;
   destructor Destroy;
   procedure Paint;override;
...
implementation

const
 bmKey = 'AD_KEY2';
 bmStar='AD_STAR';

...

constructor TMy_StringGrid.Create(AOwner: TComponent);
var
 Bmp: TBitmap;
 Bmp2:TBitmap;
begin
//-- Если далее поставить коментарий то ошибки в про-ме не будет

//-------- здесь начинается коментарий -------------
  Bmp := TBitmap.Create;
  Bmp2:=TBitmap.Create;
 try
   Bmp.LoadFromResourceName(HInstance, bmKey);
   Bmp2.LoadFromResourceName(HInstance, bmStar);

   FIndicators := TImageList.CreateSize(Bmp.Width, Bmp.Height);
   FIndicators2 := TImageList.CreateSize(Bmp2.Width, Bmp2.Height);
   FIndicators.AddMasked(Bmp, clWhite);
   FIndicators2.AddMasked(Bmp2, clWhite);
 finally
   Bmp.Free;
   Bmp2.Free;
  end;
//-------------- здесь коментарий заканчивается -------

  inherited Create(AOwner);

end;

destructor TMy_StringGrid.Destroy;
begin
 FIndicators2.Free;
 FIndicators2.Free;
 inherited Destroy;
end;
...


ЮЮ   (2004-12-10 08:40:00) [1]

Ошибка, скорей всего, не здесь, а, например, в DrawCell - она гораздо чаше вызывается и работает с Canvas.


Amoeba   (2004-12-08 16:54:00) [2]

Destructor обязательно должен быть объявлен c директивой override . У TObject он ведь виртуальный! Где она у тебя?


Алхимик   (2004-12-08 09:24:00) [3]


> FIndicators2.Free;
>  FIndicators2.Free;


Уничтожение вижу. А создание?


Наверх

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