PDA

View Full Version : ذخیره فرم برنامه درحال اجرا بصورت فایل تکست و برعکس



idehrayan
جمعه 23 مرداد 1394, 20:37 عصر
سلام
احتمالا واسه شما هم پیش اومده که مجبور بشین تنظیمات یا تغییرات کاربر رو تو یه فایل ini یا تکست و... ذخیره کنید و در اجرای دوباره برنامه از طریق این فایل کلیه تنظیمات کاربر دوباره در فرم اعمال بشه . این کار کار سخت و وقتگیریه
خوب یه راه ساده واسه این کار serialize کردن فرم هستش در این روش کلیه جزئیات فرم بصورت تکست ذخیره شده و هنگام بارگذاری مجدد فرم میتوان از روی این فایل فرم رو دوباره بازسازی کرد
در ضمن تو دلفی xe7 تست کردم مشکلی ندشت

ذخیره فرم در فایل

procedure TForm9.btn1Click(Sender: TObject);
var
FileStream : TFileStream;
MemStream : TMemoryStream;
begin
MemStream := nil;


if not Assigned(نام فرم) then
raise Exception.Create('Component is not assigned');
FileStream := TFileStream.Create(ExtractFilePath(Application.Exe Name)+'setting.ini',fmCreate);
try
MemStream := TMemoryStream.Create;
MemStream.WriteComponent(نام فرم);
MemStream.Position := 0;
ObjectBinaryToText(MemStream, FileStream);
finally
MemStream.Free;
FileStream.Free;
end;
end;




خواندن اطلاعات



procedure TForm1.tmrShow_tmrTimer(Sender: TObject);
var
FileStream : TFileStream;
MemStream : TMemoryStream;
i: Integer;
begin
MemStream := nil;
SetCurrentDir(ExtractFilePath(Application.ExeName) );
if not Assigned(form9) then
raise Exception.Create('Component is not assigned');


if FileExists(ExtractFilePath(Application.ExeName)+'s etting.ini') then
begin
FileStream := TFileStream.Create(ExtractFilePath(Application.Exe Name)+'setting.ini',fmOpenRead);
try
for i := form9.ComponentCount - 1 downto 0 do
begin
if form9.Components[i] is TControl then
TControl(form9.Components[i]).Parent := nil;
form9.Components[i].Free;
end;


MemStream := TMemoryStream.Create;
ObjectTextToBinary(FileStream, MemStream);
MemStream.Position := 0;
MemStream.ReadComponent(form9);
Application.InsertComponent(form9);
finally
MemStream.Free;
FileStream.Free;
end;
end;