![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в наследнике 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;
Уничтожение вижу. А создание?