Компонент в основном состоит из динамического двумерного массива, который является банком для рисунков. Компонент в 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;
Вопрос
Серж
Компонент в основном состоит из динамического двумерного массива, который является банком для рисунков. Компонент в 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
Изменено пользователем Сержустранить ошибки
0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.