Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Сохранение класса в файл...   Найти похожие ветки 

 
Подкрадуха ©   (2004-05-27 20:33) [0]

Уважаемый, ALL, подскажи, как лучше сохранять класс в файле? Причем, так, что бы невозможно было подправить этот файл в

блокноте?
Вот пример...
-----------------
unit User;

interface

type
 THero = class(TObject) // TObject??? или от какого лучше наследовать?
   Nick: String;
   PSW:  String;
   imeshok: Integer; // количество мешков
   armor1: TStringList; // количество оружия1 у героя (в мешке)
   armor2: TStringList; // количество оружия2 у героя (в мешке)
   ...
   function CheckStrike(strike1: Integer; block1: Integer; strike2: Integer; block2: Integer; var hp1: Integer; var hp2:

Integer): PChar;
   function SaveHero(nick: String): boolean;
   function ReadHero(nick: String): boolean;
 end;

implementation

function CheckStrike(strike1: Integer, block1: Integer, strike2: Integer, block2: Integer, var hp1: Integer, var hp2:

Integer): PChar;
begin
 ...
 hp1:=...HELTS1...; // тут присваиваются новые хелсы герою1
 hp2:=...HELTS2...; // тут присваиваются новые хелсы герою2
 Result:="text boya s komentariyami";
end;

function SaveHero(nick: String): boolean;
begin
 // подскажите как лучше реализовать, исходя из того, что параметры героя не поля записи, а класса?
end;

function ReadHero(nick: String): boolean;
begin
 // подскажите как лучше реализовать, исходя из того, что параметры героя не поля записи, а класса?
end;

end.
-------------------
Желательно было бы, чтобы сохранять в какой-нить файл своего формата, чтобы этот файл не возможно было править в блокноте?
З.Ы. Писал по памяти - исходники на работе, возможно где и ошибся.


 
Mim1 ©   (2004-05-27 20:55) [1]

Я как понимаю вам надо сохранять не класс а эземпляр обьекта этого класса, для этого просто отнаследоваться от tcomponent и использовать методы writecomponent класса tstream для сохранения в поток. Если нужно шифоровать то воспользуйтесь каким нибудь алгоритмом шифрования. Рекомендую поискать на торри какой нибудь tcryptedstream.


 
Подкрадуха ©   (2004-05-27 21:11) [2]

Да, действительно, экземпляр...шифровать не надо...
Нужно сохранить класс в файл...
Может накидает примерчик кто?


 
Mim1 ©   (2004-05-27 21:23) [3]


uses classes;

type  
  tt = class(tcomponent)
 private
   fstrprop:string;
 protected  
 public
 published
   property strprop:string write fstrprop read fstrprop;
end;

дальше, сохранение

var t:tt;
begin
 t:= tt.create(nil);
 t.strprop := "Mim1";
 with tfilestream.create("c:\123.x",fmCreate) do
   try
     writecomponent(t);
   finally
     free;
   end;
 t.free;
end;

чтение

var t:tt;
begin
 t:= tt.create(nil); //  t:= tt.newinstance;
 with tfilestream.create("c:\123.x",fmopenread) do
   try
     readcomponent(t);
   finally
     free;
   end;
 showmessage(t.strprop);
 t.free;
end;

initialization
 classes.registerclass(tt);
finalization
 classes.unregisterclass(tt);
end.


Вообщем способ сложноват, может кто что попроще придумает.
Сохраняются только Published свойства.
Писал прям сюда, так что могут быть разного рода ошибки.


 
Подкрадуха ©   (2004-05-27 21:25) [4]

Спасибо, буду разбираться.


 
Mim1 ©   (2004-05-27 21:52) [5]

Вообщет сохраняться в поток могут наследники tpersistent но у потока нет метода (или есть?) writepersistent а есть writecomponent. Полюс ко всему компоненты умеют регистрироваться в палитре, слать друг другу приветы перед смертью, и еще много разного.


 
TUser ©   (2004-05-27 21:52) [6]

Вообще-то я нокогда игрушки не делал, но подозреваю, что THero надо наследовать совсем не от TObject, а создать свою (и довольно сложную) структуру классов. И THero будет объектом не самого высокого уровня.


 
Подкрадуха ©   (2004-05-27 22:27) [7]

На С было бы проще...
Создал бы класс Battle и Stuff и унаследовал бы Hero от них обоих :(
Привыкаю к делфи просто, ведь там вроде нет множественного наследования пока?


 
Palladin ©   (2004-05-27 22:37) [8]

И что же бы из себя представляли эти два класса Battle и Stuff?


 
Подкрадуха ©   (2004-05-28 05:44) [9]

Если [6] верно, то на С это было бы проще, но топик не про достоинства и недостатки.
Спасибо, еще раз, всем.


 
Digitman ©   (2004-05-28 09:46) [10]


> Создал бы класс Battle и Stuff и унаследовал бы Hero от
> них обоих :(
> Привыкаю к делфи просто, ведь там вроде нет множественного
> наследования пока?


ничто не мешает воспользоваться для этого механизмом предоставления и реализацией классом более чем одного интерфейса

IBattle = interface
... методы Battle
end;

IStuff = interface
... методы Stuff
end;

THero = class(TInterfacedObject, IBattle, IStuff)
... методы Battle
... методы Stuff
end;

var
 Hero: THero;
 Battle: IBattle;
 Stuff: IStuff;

..
 Hero := THero.Create;
 Battle := Hero as IBattle;
 Stuff := Hero as IStuff;



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
14-1085336754
}|{yk
2004-05-23 22:25
2004.06.13
Вопрос по технологическому процессу


4-1083946057
SergeyM
2004-05-07 20:07
2004.06.13
CD-ROM


1-1085778134
Ruslan
2004-05-29 01:02
2004.06.13
Как поместить картинку на ToolButton?


3-1085142598
vic1
2004-05-21 16:29
2004.06.13
создать пользователя и дать ему права


3-1085313764
SergP
2004-05-23 16:02
2004.06.13
Можно ли INSERT ом вставлять записи в 2 таблицы сразу?