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

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

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


Kolan ©   (2007-03-01 14:44:00) 

Итак есть компонент и у него есть поле:
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) thenFCustomPixelGridCellComponent = nil.
Как же такое может быть? В дизан тайме же способ рисования изменился, значить FCustomPixelGridCellComponent <> nil, а в ран тайме он уже стал nil...

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

PS
 Прошел поиском только вот тут я присваиваю F CustomPixelGridCellComponent 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;


Kolan   (2007-03-01 15:56:00) [1]

Нашел. Просто при запуске приложения 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;


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


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

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

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


Kolan   (2007-03-01 14:59:00) [3]

У этого класса объявлено поле 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


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


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


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


Наверх

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