Delphi

Stian Søiland, IT 112, øvingsgruppe 15 (stud.ass. Helle Haugenes)

Delphi - Øving 1 - Oppgave 1

Oppgave 1, bilde 1 Oppgave 1, bilde 2

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    hode: figurlistepeker;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// Prosedyre for registrering
procedure TForm1.Button1Click(Sender: TObject);

  // Prosedyre for å slette eventuell eksisterende liste
  procedure slettliste(var hode:figurlistepeker);
   var temp:figurlistepeker;
   begin
     // Gjennomløper hele den lenkede listen. Er listen tom, gjøres ingenting.
     // Til slutt vil hodet være NIL
     while hode <> nil do
       begin
        temp := hode;
        hode := hode^.neste;
        dispose(temp);
       end;
     hode := nil;
   end;

  // Prosedyre for å registrere figurer
  procedure registrer;
    begin
     Form1.Enabled := False;
     Form2.Visible := True;
    end;

begin
 slettliste(hode);
 listbox1.clear;
 registrer;
end;

// Prosedyre for å skrive ut listen
procedure TForm1.Button2Click(Sender: TObject);
 procedure skrivut(hode:figurlistepeker);
  var neste : figurlistepeker;
  begin
    neste := hode;
    // Gjennomløper hele den lenkede listen
    listbox1.clear;
    while neste <> nil do
      begin
        with neste^ do
        begin
        case figurtype of
          linje: begin
                   listbox1.items.add('Linje med lengde '
                   + FloatToStr(lengde));
                 end;
        trekant: begin
                  listbox1.items.add('Trekant med høyde '
                  + FloatToStr(hoyde) + ' og bredde '
                  + FloatToStr(bredde));
                 end;
        firkant: begin
                  listbox1.items.add('Firkant med høyde '
                  + FloatToStr(hoyde) + ' og bredde '
                  + FloatToStr(bredde));
                 end;
         sirkel: begin
                  listbox1.items.add('Sirkel med radius '
                  + FloatToStr(radius));
                 end;
            end; // end case
         end; // end with
        neste := neste^.neste;
      end; // end whilesløyfe
  end; // end skrivutprosedyre

begin
 skrivut(hode);
end;

// Kjøres ved oppstart for å nullstille den globale variabelen hode
procedure TForm1.FormCreate(Sender: TObject);
begin
 hode := nil;
end;

end.

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
     figurer = (linje,trekant,firkant,sirkel);
     figurlistepeker = ^figurlistetype;
     figurlistetype = record
                 neste:figurlistepeker;
        case figurtype:figurer of
                 linje: (lengde:real);
       trekant,firkant: (hoyde,bredde:real);
                sirkel: (radius:real);
                   end;
  TForm2 = class(TForm)
    RadioGroup1: TRadioGroup;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Reset;
    procedure Button1Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  neste: figurlistepeker;

implementation

uses Unit1;

{$R *.DFM}

procedure Tform2.Reset;
begin
      RadioGroup1.Itemindex := -1;
      Edit1.Visible := False;
      Edit2.Visible := False;
      Edit1.Text := '';
      Edit2.Text := '';
      Label1.Visible := False;
      Label2.Visible := False;
end;

procedure TForm2.Button1Click(Sender: TObject);
  procedure nynode(var hode,neste:figurlistepeker);
    begin
      if hode = nil then
        begin
         new(hode);
         neste := hode;
        end
       else
        begin
         new(neste^.neste);
         neste := neste^.neste;
        end;
      neste^.neste := nil;
    end;

begin
  if RadioGroup1.ItemIndex > -1 then
    begin
      nynode(form1.hode,neste);
      with neste^ do
      begin
      case RadioGroup1.ItemIndex of
      0: begin
           figurtype := linje;
           lengde := StrToFloat(Edit1.text);
         end;
      1: begin
           figurtype := trekant;
           hoyde := StrToFloat(Edit1.text);
           bredde := StrToFloat(Edit2.text);
         end;
      2: begin
           figurtype := firkant;
           hoyde := StrToFloat(Edit1.text);
           bredde := StrToFloat(Edit2.text);
         end;
      3: begin
           figurtype := sirkel;
           radius := StrToFloat(Edit1.text);
         end;
      end; // slutt case of
      end; // slutt with
      reset;
    end;
end;

procedure TForm2.RadioGroup1Click(Sender: TObject);
begin
      case RadioGroup1.ItemIndex of
        0: begin
             Edit2.Visible := False;
             Label2.Visible := False;
             Label1.Caption := 'Lengde:';
             Edit1.Visible := True;
           end;
      1,2: begin
             Label1.Caption := 'Lengde:';
             Label2.Visible := True;
             Edit2.Visible := True;
           end;
        3: begin
             Edit2.Visible := False;
             Label2.Visible := False;
             Label1.Caption := 'Radius:';
           end;
        end;
        Edit1.Visible := True;
        Label1.Visible := True;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 Form2.Visible := False;
 Form1.Enabled := True;
 reset;
end;

end.

 


© Stian Søiland 1999

Valid HTML 4.0!