На форме лежит компонента ImageList со списком изображений. Для предоставления возможности пользователю удалять и добавлять изображения из этого списка было решено использовать методы
AddMasked(...)
и
Delete(...)
этой компоненты, а измененную таким образом компоненту сохраняю в файл с помощью
WriteComponentResFile(FILE_NAME,MyImageList);
при загрузке приложения эта компонента читается с помощью
TComponent* temp = ReadComponentResFile(FILE_NAME, NULL);
MyImageList = static_cast<TImageList*>(temp);
чтобы все это работало дело работало провожу регистрацию следующим образом:
void RegisterClassesWithStreamingSystem(void)
{
#pragma startup RegisterClassesWithStreamingSystem
Classes::RegisterClass(__classid(TImageList));
}
Так вот, если я просто удаляю из компоненты одно из изображений с помощью описанной выше
Delete(...)
, то компонента сохраняется в файл, если же я добавляю изображение с помощью
AddMasked(...)
, то записи компоненты в файл не происходит, и при этом не появляется никаких признаков ошибок

В чем может быть дело?
Заранее спасибо
Здравствуйте, spion_007, Вы писали:
_>На форме лежит компонента ImageList со списком изображений. Для предоставления возможности пользователю удалять и добавлять изображения из этого списка было решено использовать методы AddMasked(...)
и Delete(...)
этой компоненты, а измененную таким образом компоненту сохраняю в файл с помощью
Я бы предпочел сохранять-читать сам список, а не компонент. Скажем,
by Vladimir Titov.
uses
commctrl;
procedure ImageList_WriteData(ImageList: TImageList; Stream: TStream);
var
SA: TStreamAdapter;
begin
SA := TStreamAdapter.Create(Stream);
try
if not ImageList_Write(ImageList.Handle, SA) then
raise EWriteError.Create('Failed to write ImageList data to stream');
finally
SA.Free;
end;
end;
procedure ImageList_ReadData(ImageList: TImageList; Stream: TStream);
var
SA: TStreamAdapter;
begin
SA := TStreamAdapter.Create(Stream);
try
ImageList.Handle := ImageList_Read(SA);
if ImageList.Handle = 0 then
raise EReadError.Create('Failed to read ImageList data from stream');
finally
SA.Free;
end;
end;
procedure ImageList_SaveToFile(ImageList: TImageList; const FileName: string);
var
FileStream: TFileStream;
begin
FileStream := TFileStream.Create(FileName, fmCreate);
try
ImageList_WriteData(ImageList, FileStream);
finally
FileStream.Free;
end;
end;
procedure ImageList_LoadFromFile(ImageList: TImageList; const FileName:
string);
var
FileStream: TFileStream;
begin
FileStream := TFileStream.Create(FileName, fmShareDenyNone);
try
ImageList_ReadData(ImageList, FileStream);
finally
FileStream.Free;
end;
end;