Компонент в основном состоит из динамического двумерного массива, который является банком для рисунков. Компонент в Windows -приложении работает нормально, без ошибок.Только при заполнении массива (используется BMP, размером 48х48 px) с помощью Edit banka, используются другие процедуры.
В FMX- приложении при сохранении изменений, произведенные в приложении,данные компонента с массивом сохраняются в файле (.fmx), а при загрузке загружает в массив только первую картинку, после этого появляется ошибка:
Error loading the Bitmap failed.
Я не могу понять, где я допустил ошибку.
procedure TBitmapCellBank.DefineProperties(File:TFiler);
begin
inherited;
Filer.DefineBinaryProperty('Pictures', LoadPictures, SavePictures, True);
end;
procedure TBitmapCellBank.SavePictures(Stream:TStream);
var I,J,Buf:Integer;
begin
Stream.WriteBuffer(FImageWidth, SizeOf(FImageWidth));
Stream.WriteBuffer(FImageHeight, SizeOf(FImageHeight));
Buf:= Length(FImages);
Stream.WriteBuffer(Buf, SizeOf(Buf));
for I:= 0 to High(FImages) do
begin
Buf:= Length((FImages[I]);
Stream.WriteBuffer(Buf, SizeOf(Buf));
for J:= 0 to High(FImages[I]) do
begin
FImages[I,J].SaveToStream(Stream);
end;
end;
end;
procedure TBitmapCellBank.LoadPictures(Stream:TStream);
var Buf,I,J:Integer;
begin
Stream.ReadBuffer(Buf, SizeOf(Buf));
ImageWidth:= Buf;
Stream.ReadBuffer(Buf, SizeOf(Buf));
ImageHeight:= Buf;
Stream.ReadBuffer(Buf, SizeOf(Buf));
SetLength((FImages,Buf);
try
for I:= 0 to High(FImages) do
begin
Stream.ReadBuffer(Buf, SizeOf(Buf));
SetLength(FImages[I], Buf);
for J:= 0 to High(FImages[I]) do
begin
FImages[I,J]:= TBitmap.Create;
FImages[I,J].LoadFromStream(Stream);
end;
end;
except
on E.Exception do
begin
ShowMessage('Ошибка' + E.Message);
end;
end;
end;
CellBanks.zip