unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls,Unit2,SHELLAPI;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    RadioGroup1: TRadioGroup;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    help: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure helpClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x:integer; First,Last:Key;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var item:Key;
begin
  if (Edit1.Text='')or(Edit2.Text='') then Memo1.Lines.Add('Недопустимые значения элемента данных')
   else begin
   new(item);
   item^.num:=StrToInt(Edit1.Text);
item^.data:=Edit2.Text;
if Last=nil then begin
     item^.Next:=nil;
     item^.Prev:=nil;
     First:=item;
     Last:=First;
   Memo1.Clear;
   Memo1.Lines.Add('Добавлен элемент: '+IntTostr(First^.num)+' '+First^.data);
   BitBtn2.Enabled:=true;
   BitBtn4.Enabled:=true;
   end else
case x of
1: begin
     item^.Next:=First;
     First^.Prev:=item;
     First:=item;
     Memo1.Lines.Add('Добавлен элемент: '+IntTostr(First^.num)+' '+First^.data);
  end;
2: begin
     item^.Prev:=Last;
     Last^.Next:=item;
     Last:=item;
     Memo1.Lines.Add('Добавлен элемент: '+IntTostr(Last^.num)+' '+Last^.data);
  end;

  end;
  end;
  Edit1.Text:='';
  Edit2.Text:='';
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
  var item:Key;
begin
 if First.Next=nil then begin  //Удаление последнего элемента
     item:=First;
     Memo1.Lines.Add('Последний элемент: '+InttoStr(item^.num)+' '+item^.data+' удален!');
     Last:=nil;
     First:=nil;
     Dispose(item);
     BitBtn2.Enabled:=false;
 end
 else case x of
 1: begin
    Memo1.Lines.Add('Элемент: '+InttoStr(First^.num)+' '+First^.data+' удален!');
      item:=First;
      First:=First.Next;
      Dispose(item);
 end;
 2: begin
     Memo1.Lines.Add('Элемент: '+InttoStr(Last^.num)+' '+Last^.data+' удален!');
      item:=Last;
      Last:=Last.Prev;
      Last.Next:=nil;
      Dispose(item);
 end;
  end;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);
var item:Key;
begin
Memo1.Clear;
if First=nil then Memo1.Lines.Add('В списке нет элементов')
else begin item:=First;
  while item<>Last.Next do begin
    Memo1.Lines.Add(Inttostr(item^.num) + ' '+item^.data);
    item:=item.Next;
  end;
  end;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
var item:key;
begin
Memo1.Clear;
Edit1.Clear;
Edit2.Clear;
item:=First;
  while item.Next<>Last.Next do begin
      First:=First.Next;
      Dispose(item);
      item:=First;
  end;
  Last:=nil;
  First:=nil;
  Dispose(item);
BitBtn2.Enabled:=false;
BitBtn4.Enabled:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
x:=1;
Last:=nil;
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
x:=1;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
x:=2;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin //предварительная проверка ввода
if (Edit1.Text='')or(Edit2.Text='') then
case x of
1:x:=11;
2:x:=12;
end else case x of
11:x:=1;
12:x:=2;
end;
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
if (Edit1.Text='')or(Edit2.Text='') then
case x of
1:x:=11;
2:x:=12;
end else case x of
11:x:=1;
12:x:=2;
end;
end;

procedure TForm1.helpClick(Sender: TObject);
begin
  ShellExecute(Application.Handle,'open', PChar('hh.exe'),PChar('ДЕКА - справка.chm'), nil, SW_SHOW);
end;

end.
