여덕수님이 쓰신 가변데이터 저장 기법을 읽고 참 좋은 방법 같아서 구현해 보려구 했는데요...
비트맵파일을 읽어서 이름과 나이를 추가하여 새로운 파일을 만들려구 했어요...
근데 스트링은 TComponent를 이용하여 파일로 저장되고 읽혀지는데... 비트맵을 저장하고 읽을려고 하면 proprety경로 에러 메세지가 뜨네요...
비트맵을 메모리 스트림으로 쓴 후 넣어도 안되고...
TImage 타입으로는 아무 에러없이 실행은되는데...비트맵이 파일에 저장이 안되더라고요...불러와지지도 않고...T.T
델파이 초보가 5일째 헤메는데...쩝...답이 안나오네요...^^;;
아래 코드가 맞는지 고수님들의 귀하신 조언을 바랍니다...^^
//데이터를 저장할 컴포넌트 정의
type
TMyData = class( TComponent )
private
fStrName : string;
fStrAge : string;
fBitmap : TBitmap;
//fImage : TImage;
published
property StrName : string read fStrName write fStrName;
property StrAge : string read fStrAge write fStrAge;
property bitmapSet : TBitmap read fBitmap write fBitmap;
//property ImageSet : TImage read fImage write fImage;
end;
procedure TForm1.btnOpenNewClick(Sender: TObject);
var openDlg : TOpenDialog;
bmp : TBitmap;
begin
openDlg := TOpenDialog.Create(Application);
openDlg.Filter := '비트맵(bmp)|*.bmp';
if openDlg.Execute then
begin
bmp := TBitmap.Create;
imgOpenNew.Picture.Bitmap.LoadFromFile(openDlg.FileName);
bmp.Free;
openDlg.Free;
end
else
openDlg.Free;
end;
procedure TForm1.btnSaveToFileClick(Sender: TObject);
var fileStream : TFileStream; memoryStream : TMemoryStream;
saveDlg : TSaveDialog;
temp : TMyData;
begin
saveDlg := TSaveDialog.Create(Application);
saveDlg.Filter := 'dat | *.dat';
saveDlg.DefaultExt := 'dat';
if saveDlg.Execute then
begin
temp := TMyData.Create(self);
temp.StrName := editSaveName.Text;
temp.StrAge := editSaveAge.Text;
temp.bitmapSet := imgOpenNew.Picture.Bitmap;
//temp.ImageSet := imgOpenNew;
fileStream := TFileStream.Create(saveDlg.FileName, fmOpenWrite or fmCreate);
fileStream.WriteComponent(temp);
editFileName.Text := saveDlg.FileName;
imgOpenNew.Free;
fileStream.Free;
temp.Free;
saveDlg.Free;
end
else
saveDlg.Free;
end;
procedure TForm1.btnOpenFromSaveFileClick(Sender: TObject);
var fileStream : TFileStream;
temp : TMyData;
openDlg : TOpenDialog;
begin
openDlg := TOpenDialog.Create(Application);
openDlg.Filter := 'dat| *.dat';
if openDlg.Execute then
begin
fileStream := TFileStream.Create(openDlg.FileName, fmOpenRead);
temp := TMyData(fileStream.ReadComponent(nil));
InsertComponent(temp);
editOpenName.Text := temp.StrName;
editOpenAge.Text := temp.StrAge;
imgOpenFromSaveFile.Picture.Bitmap.Assign(temp.bitmapSet);
//imgOpenFromSaveFile := temp.ImageSet;
fileStream.Free;
temp.Free;
end;
end;
initialization
RegisterClasses( [TMyData] );