Итак:
В архиве 2 файла:
CryptoStream.pas и
TestObjects.pas.
CryptoStream.pas - пример простейшего файлового потока с шифрованием
XOR. Работаем абсолютно так же как с обычным
TFileStream.
В
TestObjects.pas - описаны классы для работы с тестом, а именно:
Основной класс Тест
TTest:
Код:
TTest = class
private
...
public
constructor Create; - создание объекта класса
destructor Destroy; override; - удаление объекта класса
procedure SaveToStream(Stream: TStream); - сохранение объекта в поток
procedure LoadFromStream(Stream: TStream); - чтение объекта из потока
function AddQuestion(aCaption: String): Integer; - добавить вопрос с текстовкой Caption. вернет порядковый номер созданного вопроса
procedure DeleteQuestion(Index: Integer); - удалить вопрос с номером Index
property Caption: String; - заголовок теста
property EditPassword: String; - пароль для редактирования (использование произвольное :))
property Ball_Three: Word; - сколько нужно правильных ответов на 3
property Ball_Four: Word; - сколько нужно правильных ответов на 4
property Ball_Five: Word; - сколько нужно правильных ответов на 5
property QuestionsCount: Integer; - количество вопросов в тесте
property Question[Index: Integer]: TQuestion; - тест с номером Index
end;
Класс Вопрос
TQuestion:
Код:
TQuestion = class
private
...
public
constructor Create(aCaption: String); - это понятно
destructor Destroy; override; - это тоже
procedure Assign(const Value: TQuestion);
procedure SaveToStream(Stream: TStream); - запись в поток
procedure LoadFromStream(Stream: TStream); - чтение из потока
function AddAnswer(aCaption: String; aIsTrue: Boolean = false): Integer;
procedure DeleteAnswer(Index: Integer); - добавить ответ
property Caption: String; - текстовка вопроса
property AnswerCount: Integer; - количество ответов
property Answer[Index: Integer]: TAnswer; - ответ с номером Index
property QuestionType: TQuestionType; - тип вопроса
property Bitmap: TBitmap; - картинка к вопросу
end;
Тип "тип вопроса"
TQuestionType:
Код:
TQuestionType = (qtRadio, qtCheck, qtEditAny, qtEditAll);
- тип вопроса (выбор одного, выбор нескольких, ввод любого, ввод всех)
Класс Ответ
TAnswer:
Код:
TAnswer = class
private
...
public
constructor Create(aCaption: String; aIsTrue: Boolean); - тут все прозаино
procedure Assign(const Value: TAnswer);
procedure SaveToStream(Stream: TStream); - запись в поток
procedure LoadFromStream(Stream: TStream); - чтение из потока
property Caption: String; - текст ответа
property IsTrue: Boolean; - ответ является верным
end;
Если не разберешься - выложу пример использования. Оба модуля проверены на WinXP, Delphi6.