Вот как вы можете сделать это. Забудьте об диалоговом окне хотя бы на минуту и сконцентрируйтесь на создании файла персональных данных. Скажем, вы редактируете запись человека со следующими полями: First Name, Last Name, Age и Active. Скажем, вам нужны следующие операции при работе с записью: добавление, изменение, удаление и построение списка.
Вам необходимо создать невизуальный объект доступа к файлу, инкапсулирующий вышеупомянутую функциональность. Это может выглядеть приблизительно так:
interface PPersonRecord = ^TPersonRecord; TPersonRecord = record FirstName: String;LastName: String;Age: Byte;Active: Boolean;end; TPersonFile = class(TObject) private FFileName: TFileName;FFile: File of TPersonRec;public constructor Create(AFileName: TFileName);destructor Destroy; override;procedure LoadRecord(Index: Integer);procedure SaveRecord(Index: Integer);procedure Add(NewPersonRecord: TPersonRecord);procedure Change(ChangedPersonRecord: TPersonRecord; Index: Integer);procedure Delete(Index: Integer);procedure List(AStringList: TStringList);property Person[Index: Integer]: TPersonRecord read LoadRecord write SaveRecord;end; implementation constructor TPersonFile.Create(AFileName: TFileName); begin inherited.Create;AssignFile(FFile,AFileName) ;Reset(FFile,SizeOf(TPersonRec));New(FPersonRecord);end; destructor TPersonFile.Destroy; begin CloseFile(FFile);Dispose(FPersonRecord);inherited Destroy;end; function TPersonFile.LoadRecord(Index: Integer): PPersonRec; begin { позиция файла в точке коррекции для чтения записи }{ ... }end; procedure TPersonFile.SaveRecord(Index: Integer); begin { позиция файла в точке коррекции для записи записи }{ ... } end; procedure TPersonFile.Add(NewPersonRecord: TPersonRecord); begin { файл позиционируется в конец для записи записи }{ ... }end; procedure TPersonFile.Change(ChangedPersonRecord: TPersonRecord; Index: Integer); begin { именение TStatus ??? }{ позиция файла в точке коррекции для записи записи }{ ... }end; procedure TPersonFile.Delete(Index: Integer); begin { изменение TStatus ??? }{ позиция файла в точке коррекции для записи записи }{ ... }end; procedure TPersonFile.List(AStringList: TStringList); begin { в цикле обходим все записи, пополняя AStringList??? }end; |
MyPersonFile := TPersonFile.Create('c:\person.dat'); |