Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

LoadFromFile


Страницы:   1 2

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]

Потому что у тебя в программе ошибка.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо