unit MAIN;
interface
uses Windows, Classes, Graphics, Forms, Controls, Menus,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ImgList, StdActns,
ActnList, ToolWin, Math;
type
TSDIAppForm =
class(TForm)
PaintBox1: TPaintBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure PaintBox1Paint(Sender: TObject);
procedure AchsenKreuz();
procedure ZeitVerlauf(u, ua, t, dt: Single);
procedure Zyklus(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
SDIAppForm: TSDIAppForm;
dt, t, xa, xaa: Single;
implementation
uses about;
{$R *.dfm}
//**** Aufbau der Anzeige ****
procedure TSDIAppForm.PaintBox1Paint(Sender: TObject);
begin
AchsenKreuz();
end;
//***** zeichnen des Zeitverlaufes ****
procedure TSDIAppForm.Zyklus(Sender: TObject);
begin
// Anfangswerte
t := 0;
xa := 0;
// Zeitschritt
dt := 0.5;
// Anfangspunkt Zeitverlauf anfahren
PaintBox1.Canvas.MoveTo(30, 332);
repeat
// Laufende Zeit
t := t + dt;
// Signalvorgabe per Tastatur
{**************************************************
* hier soll eine Veränderung von xa *
* durch Button1 - Button5 stattfinden können *
***************************************************}
// Zeitverlauf zeichnen
ZeitVerlauf(xa, xaa, t, dt);
// Speichern der Anzeigewerte
xaa := xa;
// Warteschleife
sleep(100);
until (t = 72);
end;
//**** Signalwert auf 0 setzen ****
procedure TSDIAppForm.Button1Click(Sender: TObject);
begin
xa := 0.0;
end;
//**** Signalwert auf 0.5 setzen ****
procedure TSDIAppForm.Button2Click(Sender: TObject);
begin
xa := 0.5;
end;
//**** Signalwert auf 1.0 setzen ****
procedure TSDIAppForm.Button3Click(Sender: TObject);
begin
xa := 1.0;
end;
//**** Signalwert um 0.1*dt erhöhen setzen ****
procedure TSDIAppForm.Button4Click(Sender: TObject);
begin
if xa <= 1-0.1*dt
then xa := xa+0.1*dt;
end;
//**** Signalwert um 0.1*dt erniedrigen setzen ****
procedure TSDIAppForm.Button5Click(Sender: TObject);
begin
if xa >= 0.1*dt
then xa := xa-0.1*dt;
end;
//**** Zyklischen Teil starten ****
procedure TSDIAppForm.Button6Click(Sender: TObject);
begin
Zyklus(Sender);
end;
//**** Zeichnen eines Zeitverlaufes ****
procedure TSDIAppForm.ZeitVerlauf(u, ua, t, dt: Single);
begin
PaintBox1.Canvas.Pen.Color := 0;
PaintBox1.Canvas.Brush.Color :=
RGB(255, 255, 255);
PaintBox1.Canvas.MoveTo(Trunc(30+8*(t-dt)), Trunc(332-100*ua));
PaintBox1.Canvas.LineTo(Trunc(30+8*t), Trunc(332-100*u));
end;
//**** zeichnen eines Achsenkreuzes ****
procedure TSDIAppForm.AchsenKreuz();
var
I : Integer;
T :
String;
begin
PaintBox1.Canvas.Pen.Color := 0;
PaintBox1.Canvas.Brush.Color :=
RGB(0, 0, 0);
PaintBox1.Canvas.Rectangle(30,192,32,332);
PaintBox1.Canvas.Rectangle(28,282,32,283);
PaintBox1.Canvas.Rectangle(28,232,32,233);
PaintBox1.Canvas.Brush.Color :=
RGB(255, 255, 255);
PaintBox1.Canvas.TextOut(1, 325, '
0,0');
PaintBox1.Canvas.TextOut(1, 275, '
0,5');
PaintBox1.Canvas.TextOut(1, 225, '
1,0');
for I := 0
to 72
do
begin
PaintBox1.Canvas.Rectangle(30+8*i,232,32+8*i,234);
PaintBox1.Canvas.Rectangle(30+8*i,282,32+8*i,284);
PaintBox1.Canvas.Rectangle(30+8*i,332,32+8*i,334);
end;
PaintBox1.Canvas.Brush.Color :=
RGB(255, 255, 255);
for I := 0
to 7
do
begin
Str(i,T);
PaintBox1.Canvas.TextOut(26+80*I, 335, T);
PaintBox1.Canvas.Rectangle(30+80*I,230,32+80*I,236);
PaintBox1.Canvas.Rectangle(30+80*I,280,32+80*I,286);
PaintBox1.Canvas.Rectangle(30+80*I,330,32+80*I,336);
end;
PaintBox1.Canvas.TextOut(600, 335, '
*10s');
end;
end.