![]() |
|
#1
|
|||
|
|||
![]() скажите почему когда делаю так:
Цитата:
получается, что не сохраняется, загружается текст если его много. тоесть как бы обрезается часть сама если много строк |
#2
|
||||
|
||||
![]() Обязательно использовать INI? На вид ошибок не вижу, а трейсить по такому фрагменту (не видя всей программы) - это ппц...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
![]() Потому что ini не понимает переноса строк. Сам на это наступал в молодости
![]() |
#4
|
|||
|
|||
![]() а куда писать если не в ini
|
#5
|
||||
|
||||
![]() ну... может, txt?
![]() Или опять же текстовый файл с любым другим расширением? Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
|||
|
|||
![]() В файл своего формата, созданный через TFileStream.
Вот пример: Базовый класс: Код:
unit ModelBase; interface uses Classes, SysUtils; type { TModelItemBase } TModelItemBase = class public // Load methods function ReadInt(AStream : TStream) : Integer; function ReadBool(AStream : TStream) : Boolean; function ReadString(AStream : TStream) : String; function ReadDateTime(AStream : TStream) : TDateTime; // Save methods procedure WriteInt(AStream : TStream; AValue : Integer); procedure WriteBool(AStream : TStream; AValue : Boolean); procedure WriteString(AStream : TStream; AValue : String); procedure WriteDateTime(AStream : TStream; AValue : TDateTime); // General Load/Save methods procedure SaveToStream(AStream : TStream); virtual; abstract; procedure LoadFromStream(AStream : TStream); virtual; abstract; end; { TModelBase } TModelBase = class protected procedure SaveToStream(AStream : TStream); virtual; abstract; procedure LoadFromStream(AStream : TStream); virtual; abstract; public procedure SaveToFile(AFileName : String); procedure LoadFromFile(AFileName : String); end; implementation { TModelItemBase } function TModelItemBase.ReadInt(AStream: TStream): Integer; begin AStream.ReadBuffer(Result,SizeOf(Integer)); end; function TModelItemBase.ReadBool(AStream: TStream): Boolean; begin AStream.ReadBuffer(Result,SizeOf(Boolean)); end; function TModelItemBase.ReadString(AStream: TStream): String; var ALen : Integer; begin ALen := ReadInt(AStream); SetLength(Result,ALen); If ALen > 0 Then AStream.Readbuffer(Result[1],ALen); end; function TModelItemBase.ReadDateTime(AStream: TStream): TDateTime; begin AStream.ReadBuffer(Result,SizeOf(TDateTime)); end; procedure TModelItemBase.WriteInt(AStream: TStream; AValue: Integer); begin AStream.WriteBuffer(AValue,SizeOf(Integer)); end; procedure TModelItemBase.WriteBool(AStream: TStream; AValue: Boolean); begin AStream.WriteBuffer(AValue,SizeOf(Boolean)); end; procedure TModelItemBase.WriteString(AStream: TStream; AValue: String); var ALen : Integer; begin ALen := Length(AValue); WriteInt(AStream,ALen); If ALen > 0 Then AStream.WriteBuffer(AValue[1],ALen); end; procedure TModelItemBase.WriteDateTime(AStream: TStream; AValue: TDateTime); begin AStream.WriteBuffer(AValue,SizeOf(TDateTime)); end; { TModelBase } procedure TModelBase.SaveToFile(AFileName: String); var AStream : TFileStream; begin AStream := TFileStream.Create(AFileName,fmCreate Or fmShareExclusive); Try SaveToStream(AStream); Finally AStream.Free; End; end; procedure TModelBase.LoadFromFile(AFileName: String); var AStream : TFileStream; begin AStream := TFileStream.Create(AFileName,fmOpenRead Or fmShareExclusive); Try LoadFromStream(AStream); Finally AStream.Free; End; end; end. Собственно класс с данными (только сохр./чтение): Код:
TReminderItem = class(TModelItemBase) private FName : String; FComments : String; FLastEvent : TDateTime; FNextEvent : TDateTime; FScheduleType : TScheduleType; FScheduleValue : Integer; FDeleteOnDone : Boolean; FIsDone : Boolean; FOverrideUrgDays : Boolean; FDaysMedUrg : Integer; FDaysHighUrg : Integer; protected public constructor Create; destructor Destroy; override; procedure Assign(ASource : TReminderItem); procedure SaveToStream(AStream: TStream); override; procedure LoadFromStream(AStream: TStream); override; property Name : String read FName write FName; property Comments : String read FComments write FComments; property LastEvent : TDateTime read FLastEvent write SetLastEvent; property NextEvent : TDateTime read FNextEvent write SetNextEvent; property ScheduleType : TScheduleType read FScheduleType write SetScheduleType; property ScheduleValue : Integer read FScheduleValue write SetScheduleValue; property DeleteOnDone : Boolean read FDeleteOnDone write SetDeleteOnDone; property IsDone : Boolean read FIsDone; property OverrideUrgDays : Boolean read FOverrideUrgDays write FOverrideUrgDays; property DaysMedUrg : Integer read FDaysMedUrg write SetDaysMedUrg; property DaysHighUrg : Integer read FDaysHighUrg write SetDaysHighUrg; end; procedure TReminderItem.SaveToStream(AStream: TStream); begin // Class version WriteInt(AStream,vrItemVersion); // Class data WriteString(AStream,FName); WriteString(AStream,FComments); WriteDateTime(AStream,FLastEvent); WriteDateTime(AStream,FNextEvent); AStream.WriteBuffer(FScheduleType,SizeOf(TScheduleType)); WriteInt(AStream,FScheduleValue); WriteBool(AStream,FDeleteOnDone); WriteBool(AStream,FIsDone); WriteBool(AStream,FOverrideUrgDays); WriteInt(AStream,FDaysMedUrg); WriteInt(AStream,FDaysHighUrg); end; procedure TReminderItem.LoadFromStream(AStream: TStream); var AClsVer : Integer; begin // Class version AClsVer := ReadInt(AStream); If AClsVer > vrItemVersion Then Raise Exception.CreateFmt('Wrong reminder class version. Expected %d but found %d.',[vrItemVersion,AClsVer]); // Class data FName := ReadString(AStream); FComments := ReadString(AStream); FLastEvent := ReadDatetime(AStream); FNextEvent := ReadDatetime(AStream); AStream.ReadBuffer(FScheduleType,SizeOf(TScheduleType)); FScheduleValue := ReadInt(AStream); FDeleteOnDone := ReadBool(AStream); FIsDone := ReadBool(AStream); FOverrideUrgDays := ReadBool(AStream); FDaysMedUrg := ReadInt(AStream); FDaysHighUrg := ReadInt(AStream); end; |
#7
|
|||
|
|||
![]() в ини я сохранял бинарный поток, и если его просто открыть, то не виден настоящий текст, тоесть нужно сделать так, что вне программы открыв файл небыло ясно, что там написано
|
#8
|
||||
|
||||
![]() [Здесь был совет несколько не в тему и я его стер...]
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
![]() А кто тебе мешает шифровать данные при сохраниении?
|