unit QuestionResultUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, ToolWin, ImgList;

type
  PQuestion=^TQuestion;
  TQuestion=record
   Name: String[255];
   ResultCount:Integer;
   ResiltText: array[0..10] of String[255];
   ResiltValue: array[0..10] of boolean;
  end;

  TQuestionResultForm = class(TForm)
    QuestionTreeView: TTreeView;
    ResultView: TListView;
    Splitter1: TSplitter;
    ToolBar1: TToolBar;
    NewButton: TToolButton;
    EditButton: TToolButton;
    DeleteButton: TToolButton;
    ToolButton4: TToolButton;
    CloseButton: TToolButton;
    ImageList1: TImageList;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CloseButtonClick(Sender: TObject);
    procedure NewButtonClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure QuestionTreeViewChange(Sender: TObject; Node: TTreeNode);
    procedure EditButtonClick(Sender: TObject);
    procedure DeleteButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    ProjectName:String;
    QuestionList:TList;
  end;

var
  QuestionResultForm: TQuestionResultForm;

implementation

uses MainUnit, EditQuestionUnit;

{$R *.dfm}

procedure TQuestionResultForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 QuestionList.Free;
 Action:=caFree;
 QuestionResultForm:=nil;
end;

procedure TQuestionResultForm.CloseButtonClick(Sender: TObject);
begin
 Close;
end;

procedure TQuestionResultForm.FormShow(Sender: TObject);
begin
 QuestionList:=TList.Create;
end;

procedure TQuestionResultForm.NewButtonClick(Sender: TObject);
var
 NewQuest:PQuestion;
 i:Integer;
begin
 EditQuestionForm.ResultListBox.Items.Clear;
 EditQuestionForm.QuestionEdit.Text:='';
 EditQuestionForm.ShowModal;
 if EditQuestionForm.ModalResult<>mrOK then exit;

 NewQuest:=New(PQuestion);
 NewQuest.Name:=EditQuestionForm.QuestionEdit.Text;
 NewQuest.ResultCount:=EditQuestionForm.ResultListBox.Items.Count;
 for i:= 0 to NewQuest.ResultCount-1 do
  begin
   NewQuest.ResiltText[i]:=EditQuestionForm.ResultListBox.Items.Strings[i];
   NewQuest.ResiltValue[i]:=EditQuestionForm.ResultListBox.Checked[i];
  end;
 QuestionList.Add(NewQuest);

 with QuestionTreeView.Items.Add(nil, NewQuest.Name) do
  begin
   ImageIndex:=0;
   Data:=NewQuest;
  end;
end;

procedure TQuestionResultForm.QuestionTreeViewChange(Sender: TObject;
  Node: TTreeNode);
var
 i:Integer;
begin
 ResultView.Items.Clear;
 if Node=nil then exit;

 for i:=0 to PQuestion(node.Data).ResultCount-1 do
  with ResultView.Items.Add do
   begin
    Caption:=PQuestion(node.Data).ResiltText[i];
    if PQuestion(node.Data).ResiltValue[i]=true then
     begin
      SubItems.Add('Да');
      ImageIndex:=2;
     end
    else
     begin
      SubItems.Add('Нет');
      ImageIndex:=1;
     end;
   end;
end;

procedure TQuestionResultForm.EditButtonClick(Sender: TObject);
var
 i:Integer;
begin
 if QuestionTreeView.Selected=nil then exit;

 //Заполняю компонент QuestionEdit в окне редактирования вопросов
 EditQuestionForm.QuestionEdit.Text:=PQuestion(QuestionTreeView.Selected.Data).Name;

 //Очищаю список вариантов ответов в окне редактирования вопросов
 EditQuestionForm.ResultListBox.Clear;
 for i:=0 to PQuestion(QuestionTreeView.Selected.Data).ResultCount-1 do
  begin
   //Заполняю список вариантов ответов в окне редактирования вопросов
   EditQuestionForm.ResultListBox.Items.Add(PQuestion(QuestionTreeView.Selected.Data).ResiltText[i]);

   //Если ответ верный, то ставлю галочку
   if PQuestion(QuestionTreeView.Selected.Data).ResiltValue[i]=true then
    EditQuestionForm.ResultListBox.Checked[i]:=true;
  end;

 //Отображаю окно редактирования вопроса
 EditQuestionForm.ShowModal;
 if EditQuestionForm.ModalResult<>mrOK then exit;

 PQuestion(QuestionTreeView.Selected.Data).Name:=EditQuestionForm.QuestionEdit.Text;
 PQuestion(QuestionTreeView.Selected.Data).ResultCount:=EditQuestionForm.ResultListBox.Items.Count;
 for i:= 0 to PQuestion(QuestionTreeView.Selected.Data).ResultCount-1 do
  begin
   PQuestion(QuestionTreeView.Selected.Data).ResiltText[i]:=EditQuestionForm.ResultListBox.Items.Strings[i];
   PQuestion(QuestionTreeView.Selected.Data).ResiltValue[i]:=EditQuestionForm.ResultListBox.Checked[i];
  end;

 //Вызываю процедуру QuestionTreeViewChange, которая должна обновить
 //информацию в ResultView. Первый параметр нас не интересует, а второй
 //мы обязаны указать потому что внутри процедуры QuestionTreeViewChange
 //мы используем его. Я указываю выделенный элемент.
 QuestionTreeViewChange(nil, QuestionTreeView.Selected);
end;

procedure TQuestionResultForm.DeleteButtonClick(Sender: TObject);
var
 index, i:Integer;
begin
 if QuestionTreeView.Selected=nil then exit;

 //Подтверждение удаления
 if Application.MessageBox(PChar('Вы действительно хотите удалить - '+
  QuestionTreeView.Selected.Text), 'Внимание!!!', MB_OKCANCEL+MB_ICONINFORMATION)<>idOk then Exit;

 //Сохраняю индекс выделенного элемента
 index:=QuestionTreeView.Selected.Index;

 //Удаляю выделенный элемент из дерева
 QuestionTreeView.Items.Delete(QuestionTreeView.Selected);

 //Удаляю из контейнера
 QuestionList.Delete(Index);
end;

end.
