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