![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
LoadFromFile
Creative © (2006-02-20 15:08:00)я сохраняяю и загружаю объект класса
TMyClass
fField1: shortstring;
fField2: shortstring;
fField2: integer;
Поля типа shortstring грузятся нормально, а вот в поле типа integer загружается вместо ожидаемого числа "10" (например) какое то 7- значное число непонятного происхождения. Почему так получается?
Creative (2006-02-20 16:15:00) [21]Да, в файл.
Мне хочу понять, как должна быть устроена процедура (ы), соскребающая все изменяемые данные в программе и сохраняющая их в файл. (естественно обратная процедура тоже)
Если это неудобно делать в форуме - можно в почту.
Ega23 (2006-02-20 16:09:00) [22]
> Чтбы не морочить, задам вопрос позитивно: не могли бы вы
> привести простой пример (желательно с комментариями) сохранения
> и загрузки объекта класса с произвольними полями (в т. ч.
> типа TBitmap).
В файл?
Creative (2006-02-20 16:07:00) [23]Чтбы не морочить, задам вопрос позитивно: не могли бы вы привести простой пример (желательно с комментариями) сохранения и загрузки объекта класса с произвольними полями (в т. ч. типа TBitmap).
Или хоть скажите, где это можно найти, я искала - не нашла. Может книжки не те читаю...
RO (2006-02-20 15:24:00) [24]
> S.Read(s, SizeOf(THorse));
> S.Write(s, SizeOf(THorse));
Безобразие как минимум в этих строчках.
Ega23 (2006-02-20 15:22:00) [25]
> constructor TAnimal.Create;
> begin
> FName:=Name;
> FColor:=Color;
> FAge:=Age;
> end;
1. Зачем это????
procedure TAnimal.LoadFromStream(s: TFileStream);
var
h: THorse;
begin
S.Read(s, SizeOf(THorse));
FName:=h.Name;
FColor:=h.Color;
FAge:=h.Age;
end;
И где инициализация h?
Общие впечатления:
1. Рекомендую Position у Stream в 0 выставлять
2. try except try-finally почаще использовать
3. А почему THorse - record? Почему не наследник от TAnimal?
Creative (2006-02-20 15:17:00) [26]type
TAnimal = class
private
fName: shortstring;
fColor: shortstring;
fAge: integer;
public
constructor Create;
destructor Destroy; override;
procedure SaveToStream(s: TFileStream);
procedure LoadFromFile(FileName: string);
procedure LoadFromStream(s: TFileStream);
procedure SaveToFile(FileName: string);
property Name: shortstring read FName write FName;
property Color: shortstring read FColor write FColor;
property Age: integer read FAge write FAge;
end;
THorse = record
Name: shortstring;
Color: shortstring;
Age: integer;
end;
======================
constructor TAnimal.Create;
begin
FName:=Name;
FColor:=Color;
FAge:=Age;
end;
destructor TAnimal.Destroy;
begin
inherited;
end;
procedure TAnimal.LoadFromFile(FileName: string);
var
s: TFileStream;
begin
S := TFileStream.Create(FileName, fmOpenRead );
LoadFromStream(s);
S.Free;
end;
procedure TAnimal.LoadFromStream(s: TFileStream);
var
h: THorse;
begin
S.Read(s, SizeOf(THorse));
FName:=h.Name;
FColor:=h.Color;
FAge:=h.Age;
end;
procedure TAnimal.SaveToFile(FileName: string);
var s : TFileStream;
begin
s := TFileStream.Create(FileName, fmCreate or fmShareDenyWrite);
SaveToStream(s);
s.Free;
end;
procedure TAnimal.SaveToStream(s: TFileStream);
var
h: THorse;
begin
S.Read(s, SizeOf(THorse));
h.Name:=FName;
h.Color:=FColor;
h.Age:=FAge;
S.Write(s, SizeOf(THorse));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyHorse := TAnimal.Create;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyHorse.fName:= Edit1.Text;
MyHorse.fColor:= Edit2.Text;
MyHorse.fAge:= StrToInt(Edit3.Text);
Label1.Caption:= MyHorse.fName;
Label2.Caption:= MyHorse.fColor;
Label3.Caption:= IntToStr(MyHorse.fAge);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then MyHorse.SaveToFile(FileName);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then MyHorse.LoadFromFile(OpenDialog1.FileName);
Label1.Caption:= MyHorse.fName;
Label2.Caption:= MyHorse.fColor;
Label3.Caption:= IntToStr(MyHorse.fAge);
end;
end.
Ega23 (2006-02-20 15:10:00) [27]Полный код давай. Как сохраняешь, как загружаешь и как создаёшь класс.
RO (2006-02-20 15:10:00) [28]Потому что у тебя в программе ошибка.