Главная страница
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.031 c
8-1153855242
Max.66RUS
2006-07-25 23:20
2007.03.25
Конвертация BMP в JPG...


3-1167245485
крошка
2006-12-27 21:51
2007.03.25
Как правильно раздать права пользователям MS SQL и кто такой DBO?


15-1172665941
Inco
2007-02-28 15:32
2007.03.25
Как можно получить список выделенных в проводнике файлов


15-1173018283
arturich
2007-03-04 17:24
2007.03.25
Ошибка компилятора при установке EmbeddedWB


2-1173057436
совсем чайник
2007-03-05 04:17
2007.03.25
Панель задач+ сворачивание окна