Показать сообщение отдельно
  #16  
Старый 10.03.2011, 18:42
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Итак:
В архиве 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.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием