Текущий архив: 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