// Getestet mit D4 unter XP

// Der Code bildet (von der Anzeige her) etwa den "Verlauf der CPU-Auslastung" 
// des "Task-Manager" nach. Zunächst wird mit "maxi" und "mini" der größte 
// bzw. kleinste zu erwartende Wert festgelegt. Danach werden mittels der 
// Prozedur "setwert()" Double-Werte übergeben, welche dann entsprechend 
// des Taktes zur Kurve gebildet werden. Sie müssen ein TImage und einen 
// TTimer auf die Form setzen und durch Doppelklick auf den Timer die 
// Prozedur "procedure TForm1.Timer1Timer(Sender: TObject);" erzeugen. 
// Zum Testen wird hier eine TTrackbar genommen, deren Position 
// über "setwert(Trackbar1.position)" den Kurvenverlauf bestimmt. 



 
unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
  StdCtrls, ExtCtrls, Dialogs, ComCtrls; 
 
type 
  TForm1 = class(TForm) 
    Image1: TImage; 
    Timer1: TTimer; 
    // -----------  nur zum Testen ---------------- 
    Label1: TLabel; 
    Button1: TButton; 
    Button2: TButton; 
    Button3: TButton; 
    Button4: TButton; 
    Button5: TButton; 
    Button6: TButton; 
    Trackbar1: TTrackBar; 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
    procedure Button4Click(Sender: TObject); 
    procedure Button5Click(Sender: TObject); 
    procedure Button6Click(Sender: TObject); 
    procedure TrackBar1Change(Sender: TObject); 
    //---------------------------------------------- 
    procedure FormCreate(Sender: TObject); 
    procedure Timer1Timer(Sender: TObject); 
  private 
    { Private-Deklarationen } 
  public 
    Untergrund, Gitter, Kurve: TColor; 
    offset, wert, hoch: integer; 
    bereich: double; 
    Takt: Cardinal; 
    bewegung, kasten, Saeulen, stop: boolean; 
    procedure einrichten; 
    procedure leeren; 
    procedure linie; 
    procedure schieben; 
    procedure setwert(d: double); 
    procedure resetkurve; 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
 
const 
  fachgroesse = 12; 
  waagerecht = 20; 
  senkrecht = 5; 
  schritt = 3; // >= 2 <= fachgroesse div 2 
  mass = (fachgroesse div schritt) * schritt; 
 
var 
  pkt: array[0..(mass * waagerecht) div schritt] of TPoint; 
 
  mini: double = 0.0; 
  maxi: double = 100.0; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  if (schritt > fachgroesse div 2) 
    or (schritt < 2) 
    then begin 
    Timer1.enabled := false; 
    showmessage('Falsche Parameter'); 
  end else begin 
    Takt := 500; 
    Timer1.interval := Takt; 
    randomize; 
    doublebuffered := true; 
    image1.autosize := true; 
    image1.left := 20; // z.B. 
    image1.top := 20; // z.B. 
 
    untergrund := clBlack; 
    Gitter := clgreen; 
    Kurve := clyellow; 
 
    Saeulen := false; 
    stop := false; 
    offset := 0; 
    bewegung := true; 
    kasten := true; 
    einrichten; 
    setwert(mini); 
    leeren; 
 
    // zum Testen ---------------------------------- 
    Trackbar1.min := round(mini); 
    Trackbar1.max := round(maxi); 
    Trackbar1.position := Trackbar1.min; 
    label1.caption := inttostr(Trackbar1.position); 
    // ---------------------------------------------- 
  end; 
end; 
 
procedure TForm1.leeren; 
var 
  x: integer; 
begin 
  for x := 0 to high(pkt) do begin 
    pkt[x].x := x * schritt; 
    pkt[x].y := hoch + 2; 
  end; 
end; 
 
procedure TForm1.resetKurve; 
begin 
  Timer1.interval := 0; 
  offset := 0; 
  einrichten; 
  setwert(mini); 
  leeren; 
  image1.refresh; 
  Timer1.interval := Takt; 
end; 
 
procedure TForm1.einrichten; 
var 
  x: integer; 
  hlp: double; 
begin 
  if mini > maxi then begin 
    hlp := mini; 
    mini := maxi; 
    maxi := hlp; 
  end; 
  bereich := maxi - mini; 
  hoch := senkrecht * mass - 2; 
  with image1.picture.bitmap, canvas do begin 
    width := pred(mass * waagerecht); 
    height := pred(mass * senkrecht); 
    brush.color := Untergrund; 
    fillrect(cliprect); 
    if kasten then begin 
      pen.color := Gitter; 
      for x := 1 to waagerecht do begin 
        moveto(x * mass - offset, 0); 
        lineto(x * mass - offset, height); 
      end; 
      for x := 1 to pred(senkrecht) do begin 
        moveto(0, x * mass); 
        lineto(width, x * mass); 
      end; 
    end; 
    pen.Color := kurve; 
  end; 
end; 
 
procedure TForm1.linie; 
var 
  x: integer; 
begin 
  with image1.picture.bitmap.canvas do begin 
    moveto(pkt[0].x, pkt[0].y); 
    for x := ord(not Saeulen) to high(pkt) do begin 
      if Saeulen then begin 
        brush.color := kurve; 
        fillrect(rect(pkt[x].x, pkt[x].y, pkt[x].x + pred(schritt), hoch + 1)); 
        brush.color := untergrund; 
      end else 
        lineto(pkt[x].x, pkt[x].y); 
    end; 
  end; 
end; 
 
procedure TForm1.schieben; 
var 
  x: integer; 
begin 
  for x := 0 to pred(high(pkt)) do 
    pkt[x].y := pkt[x + 1].y; 
  pkt[high(pkt)].y := hoch - wert; 
end; 
 
procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
  if stop or (mass < 1) then exit; 
  if bewegung then 
    inc(offset, schritt); 
  if offset = mass then offset := 0; 
  einrichten; 
  schieben; 
  linie; 
end; 
 
procedure TForm1.setwert(d: double); 
begin 
  if bereich = 0 then wert := 0 else 
    wert := round(((d - mini) * hoch) / bereich); 
end; 
 
// zum Testen 
 
procedure TForm1.TrackBar1Change(Sender: TObject); 
begin 
  label1.caption := inttostr(Trackbar1.position); 
  setwert(Trackbar1.position); 
end; 
 
// Beispielaufrufe 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  mini := -100.25; 
  maxi := 222.2; 
  kurve := cllime; 
  gitter := $666666; 
  resetKurve; 
  Trackbar1.min := round(mini); 
  Trackbar1.max := round(maxi); 
  Trackbar1.position := Trackbar1.min; 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  Takt := Takt xor 400; 
  Timer1.interval := Takt; 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  bewegung := not bewegung; 
  offset := 0; 
  einrichten; 
  linie; 
  Takt := 55; 
  Timer1.interval := Takt; 
end; 
 
procedure TForm1.Button4Click(Sender: TObject); 
begin 
  kasten := not kasten; 
  einrichten; 
  linie; 
end; 
 
procedure TForm1.Button5Click(Sender: TObject); 
begin 
  Saeulen := not Saeulen; 
  einrichten; 
  linie; 
end; 
 
procedure TForm1.Button6Click(Sender: TObject); 
begin 
  stop := not stop; 
end; 
 
end.



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke