Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?
Поиск
L


Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 5
Всего онлайн: 5
Зарегистрировано юзеров: 5762
Комментариев на сайте: 623
Новый юзер: Sevnday



Последние комментарии
c
N0E0O7 прокомментировал "Урок 1 - Инициализация OpenGL":
А у меня форма чёрная запускается
dimonsky прокомментировал "Урок 2 - Простые примитивы":
GetDC(handle) вместо canvas.handle, и убрать вызов FormResize. Тогда получается конфетка.



Мы в соцсетях
c
Delphi
Урок 62 - Методы, наследование классов, операции с классами Delphi, (часть 4/6)

  В предыдущих уроках мы уже создали ряд методов: чтения и записи свойств, конструктор, деструктор. Поскольку вы уже освоились с методами, давайте создадим еще два метода: SaveToFile и LoadFromFile, позволяющих сохранять сведения о личности в файле и читать их из файла.

  Без подобных методов наш класс явно неполноценный. Введите в класс объявления открытых методов:

procedure SaveToFile(FileName: string  = '');
procedure LoadFromFile(FileName:   string);
  Первый метод содержит значение параметра по умолчанию. Предполагается, что если при вызове метода параметр не задан, то имя файла бу-.дет совпадать с именем личности, записанным в поле FName. Реализация объявленных методов может быть такой:
procedure  TPerson.SaveToFile(FileName: string  = '');
var  
	F:   TextFile;
begin
	if FileName = '' then 
		FileName := FName + '.txt'
	else 
		FileName := ChangeFileExt (FileName, '.txt');
		
	AssignFile(F, FileName);
	Rewrite(F);
	Writeln(F, FName);
	Writeln(F, FDepl) ;
	Writeln(F, FDep2) ;
	Writeln(F, FDep3);
	Writeln(F,    IntToStr(FYear)) ;    .
	Writeln(F,   FSex);
	if  FAttr   then  Writeln(F, 't')  else Writeln(F, 'f') ;
	Writeln(F,   FComment);
	CloseFile(F);
	
	if FDoc <> nil then  
		FDoc^.Lines.SaveToFile(ChangeFileExt(FileName, '.rtf')); 
end;

procedure   TPerson.LoadFromFile(FileName:   string);
var  
	F:   TextFile;
	s:   string;
begin
	FileName   :=  ChangeFileExt(FileName,  '.txt'); AssignFile(F,   FileName); Reset(F);
	Readln(F, FName); Readln(F, FDepl); 
	Readln(F, FDep2); Readln(F, FDep3); 
	Readln(F, s) ; 
	FYear   :=   StrToInt(s); Readln(F, FSex); Readln(F, s) ; FAttr :=   (s  =  ' t' ) ; 
	Readln(F,   FComment); CloseFile(F); 
	if   (FDoc  <>  nil) and  
	FileExists(ChangeFileExt(FileName, '.rtf)) then  
	begin
		FDoc^.Lines.LoadFromFile(ChangeFileExt(FileName, '.rtf'));  
		FDoc^.Lines.SaveToFile(FileTMP); 
	end;
end;

   Вы уже достаточно опытны, чтобы подобный код можно было не комментировать. Отмечу только, что в этом коде хранение данных полей предусмотрено в текстовом файле. Это не лучший вариант, но наиболее простой. Одним из недостатков такого хранения является то, что файлы доступны возможным злоумышленникам, которые могут прочитать их, получить доступ к конфиденциальным данным, а могут и изменить характеристику. Правда, все это они смогут сделать и с помощью вашего тестового приложения. Но приложение можно защитить паролем. А текстовый файл ничем не защитишь.

  Так что может иметь смысл хотя бы зашифровать его в процедуре SaveToFile и дешифровать в процедуре LoadFromFile. Вызов метода SaveToFile в вашем тестовом приложении может быть оформлен оператором:

Pers.SaveToFile;

ИЛИ

if SaveDialogl.Execute then Pers.SaveToFile(SaveDialogl.FileName);

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

  Вызов метода LoadFromFile в вашем тестовом приложении может быть оформлен оператором:

if OpenDialogl.Execute then Pers.LoadFromFile(OpenDialogl.FileName);

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

Продолжение в следующем уроке.

Удачи!
Встретимся в следующем уроке!


Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 12 Июля 2013
Просмотров:

Урок 61 - Конструкторы классов Delphi, (часть 3/6) Урок 63 - Конструкторы классов Delphi, (часть 5/6)

Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.