HSG

Aktuelle Seite: HSG/Fächer/Informatik/Software-Technik/Beispiele

Aufgabe

Erweitere den vorhandenen 'Aufzug' um eine Aufzugssteuerung.

GUI zu Aufzug aufzug0.zip

unit uAufzug0_GUI;

interface

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

type
  TForm1 = class(TForm)
    bAuf: TButton;
    bStopp: TButton;
    bAb: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure bAufClick(Sender: TObject);
    procedure bStoppClick(Sender: TObject);
    procedure bAbClick(Sender: TObject);
  private
    aufzug : TAufzug;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  aufzug := TAufzug.Create(nil);
  aufzug.Visible := true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  aufzug.Free;
end;

procedure TForm1.bAufClick(Sender: TObject);
begin
  aufzug.SetZustand(auf);
end;

procedure TForm1.bStoppClick(Sender: TObject);
begin
  aufzug.SetZustand(stopp);
end;

procedure TForm1.bAbClick(Sender: TObject);
begin
  aufzug.SetZustand(ab);
end;

end.

unit uAufzug0;

interface

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

type
  TZustand = (auf,ab,stopp);

  TAufzug = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    zustand : TZustand;
    x,y,h   : integer;
    sOben,
    sUnten  : boolean;
    timer   : TTimer;
    buffer  : TBitMap;
    procedure zeichneAufzug(x,y,h : integer; o,u : boolean; canvas : TCanvas);
    procedure update(Sender : TObject);
  public
    procedure SetZustand(zustand : TZustand);
    function GetZustand : TZustand;
    function GetUnten : boolean;
    function GetOben : boolean;
  end;

// Achtung : hier Vereinbarung 'Aufzug : TAufzug;' löschen

implementation

{$R *.dfm}

procedure TAufzug.zeichneAufzug(x,y,h : integer; o,u : boolean; canvas : TCanvas);
{ 0 <= h <= 308 }
const
  grau = $00808080;
begin
  with canvas do
  begin
    // alles löschen
    brush.Color := clSkyBlue; pen.Color := clSkyBlue;
    rectangle(0,0,300,449);
    // obere Plattform
    brush.Color := grau; pen.Color := clBlack;
    rectangle(x,y,x+200,y+25);
    // Boden
    rectangle(x-50,y+424,x+250,y+449);
    // Stab links
    brush.Color := clWhite; rectangle(x+20,y+24,x+37,y+425);
    // Stab rechts
    rectangle(x+163,y+24,x+180,y+425);
    // Schalter und Nocke oben
    brush.Color := clRed; ellipse(x+60,y+34,x+72,y+46);
    brush.Color := clBlack; rectangle(x+45,y+24,x+75,y+40);
    if sOben then
    begin
      brush.Color := clYellow; ellipse(x+52,y+28,x+58,y+34);
    end;
    // Schalter und Nocke unten
    brush.Color := clRed; ellipse(x+60,y+402,x+72,y+414);
    brush.Color := clBlack; rectangle(x+45,y+408,x+75,y+424);
    if sUnten then
    begin
      brush.Color := clYellow; ellipse(x+52,y+414,x+58,y+420);
    end;
    // Korb
    brush.Color := grau; rectangle(x+10,y+348-h,x+190,y+348-h+60);
  end;
end;

procedure TAufzug.SetZustand(zustand : TZustand);
begin
  self.zustand := zustand;
end;

function TAufzug.GetZustand : TZustand;
begin
  result := zustand;
end;

procedure TAufzug.update(Sender : TObject);
begin
  case zustand of
    auf   : if h < 308 then Inc(h) else windows.Beep(1000,50);
    ab    : if h > 0 then Dec(h) else windows.Beep(1000,50);
    stopp : ;
  end; // of case
  sOben := h > 303; sUnten := h < 5;
  // if sOben then windows.Beep(2000,20);
  // if sUnten then windows.Beep(400,20);
  zeichneAufzug(50,0,h,sOben,sUnten,buffer.Canvas);
  Canvas.Draw(x,y,buffer);
end;

function TAufzug.GetUnten : boolean;
begin
  result := sUnten;
end;

function TAufzug.GetOben : boolean;
begin
  result := sOben;
end;

procedure TAufzug.FormCreate(Sender: TObject);
begin
  x := 150; y := 40;          // Lage des Bildes
  timer := TTimer.Create(nil);
  timer.Interval := 25;
  timer.OnTimer := update;
  buffer := TBitMap.Create;
  buffer.Width := 300;
  buffer.Height := 449;
end;

procedure TAufzug.FormDestroy(Sender: TObject);
begin
  timer.Free;
  buffer.Free;
end;

end.

Valid XHTML 1.0! lokal