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

Вниз

Поле компонента становится nil само по себе в run time.   Найти похожие ветки 

 
Kolan ©   (2007-03-01 14:44) [0]

Итак есть компонент и у него есть поле:
FCustomPixelGridCellComponent: TCustomPixelGridCellComponent;
и св-во:
   property GridCellComponent: TCustomPixelGridCellComponent read
     FCustomPixelGridCellComponent write SetCustomPixelGridCellComponent;


procedure TPixelGrid.SetCustomPixelGridCellComponent(
 const Value: TCustomPixelGridCellComponent);
begin
 FCustomPixelGridCellComponent := Value;
 RefreshGrid;
end;


Это поле испольуется так:

function TPixelGrid.CreatePixelGrid(ARow, ACol: Integer): TCustomPixelGridCell;
begin
 if Assigned(FCustomPixelGridCellComponent) then
 begin
   Result := FCustomPixelGridCellComponent.CreateGridCell;
   Result.Left := ACol*FCellWidth;
   Result.Top := ARow*FCellHeight;
   Result.Height :=  FCellHeight;
   Result.Width := FCellWidth;
   Result.Canvas := Canvas;
 end
 else
 Result := TCustomPixelGridCell.Create(ACol*FCellWidth, ARow*FCellHeight,
   FCellHeight, FCellWidth, Canvas);
end;


То есть если FCustomPixelGridCellComponent то создасться объект определенный в FCustomPixelGridCellComponent, а если нет, то будет создан стандартный TCustomPixelGridCell.

Так вот когда FCustomPixelGridCellComponent задан это видно визуально(компонент сам по себе рисует таблицу, и если задан FCustomPixelGridCellComponent ячейки рисуются подругому).

Странность в том, что в дизайн тайме когда я задаю соотв свойство изменения вступают в силу и компонент рисуется по другом.
Но в ран тайме он рисуется стандартным образом(те создаются TCustomPixelGridCell).

Посмотрел отладчиком и действительно в ран тайме при проверке if Assigned(FCustomPixelGridCellComponent) then FCustomPixelGridCellComponent = nil.
Как же такое может быть? В дизан тайме же способ рисования изменился, значить FCustomPixelGridCellComponent <> nil, а в ран тайме он уже стал nil...

Из за чего  FCustomPixelGridCellComponent мог стать nil?

PS
 Прошел поиском только вот тут я присваиваю FCustomPixelGridCellComponent nil
procedure TPixelGrid.Notification(AComponent: TComponent;
 Operation: TOperation);
begin
 inherited Notification(AComponent, Operation);
 if (AComponent = FCustomPixelGridCellComponent) and (Operation = opRemove) then
 begin
   FCustomPixelGridCellComponent := nil;
   RefreshGrid;
 end;
end;


 
Игорь Шевченко ©   (2007-03-01 14:54) [1]


> другом.
> Но в ран тайме он рисуется стандартным образом(те создаются
> TCustomPixelGridCell).
>
> Посмотрел отладчиком и действительно в ран тайме при проверке
> if Assigned(FCustomPixelGridCellComponent) then FCustomPixelGridCellComponent
> = nil.
> Как же такое может быть? В дизан тайме же способ рисования
> изменился, значить FCustomPixelGridCellComponent <> nil,
>  а в ран тайме он уже стал nil...


А в dfm он сохраняется ?


 
Kolan ©   (2007-03-01 14:59) [2]

У этого класса объявлено поле FCustomPixelGridCellComponent. Класс-наследник TPaintPox
object PixelGrid: TPixelGrid
         Left = 8
         Top = 8
         Width = 105
         Height = 240
         GridCellComponent = ImageListPixelGridCellComponent1
         CellWidth = 15
         CellHeight = 15
         RowCount = 16
         ColCount = 7
         OnChange = PixelGridChange
       end


В дизайн тайме задаю вот этот компонент - наследник TComponent.
 object ImageListPixelGridCellComponent1: TImageListPixelGridCellComponent
   ImageList = PixelImegeList
   Left = 224
   Top = 72
 end


 
Kolan ©   (2007-03-01 15:00) [3]

> А в dfm он сохраняется ?

Выходит что да.., но я не уверен потому и запостил код..


 
Kolan ©   (2007-03-01 15:56) [4]

Нашел. Просто при запуске приложения PixelGrid сначала присваивался ImageListPixelGridCellComponent1, а потом ImageListPixelGridCellComponent1 присваивался ImageList. При вызове CreateGridCell ImageList еще не был назначен, и работало то что после else..

 if Assigned(FImageList) then
 begin
   Result := TImageListPixelGridCell.Create;
   (Result as TImageListPixelGridCell).ImageList := FImageList;
 end
 else
   Result := inherited CreateGridCell;


Благодарю за обсуждение...



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

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

Наверх




Память: 0.48 MB
Время: 0.036 c
1-1170401505
KOSS
2007-02-02 10:31
2007.03.25
Autorun


15-1172492815
pavel_guzhanov
2007-02-26 15:26
2007.03.25
Подскажите, в чем может быть проблема?


15-1172737610
Ega23
2007-03-01 11:26
2007.03.25
Не ставятся breakpoint-ы в проекте....


2-1172674149
ds120hp
2007-02-28 17:49
2007.03.25
Связь форм


4-1161174024
BiN
2006-10-18 16:20
2007.03.25
Перечисление системных объектных типов