Текущий архив: 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.47 MB
Время: 0.035 c