AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Tastatureingabe abfragen innerhalb einer Schleife
Thema durchsuchen
Ansicht
Themen-Optionen

Tastatureingabe abfragen innerhalb einer Schleife

Ein Thema von diver03 · begonnen am 6. Okt 2008 · letzter Beitrag vom 6. Okt 2008
 
diver03

Registriert seit: 11. Dez 2007
24 Beiträge
 
Turbo Delphi für Win32
 
#1

Tastatureingabe abfragen innerhalb einer Schleife

  Alt 6. Okt 2008, 13:35
Ich möchte eine Zeitverlauf eines Signals anzeigen,
das ich während des Darstellung durch Tastatureingabe bzw
Click auf verschiedene Buttons verändern kann.

Zur Veranschaulichung hier der Programm Code.

Bitte nicht über das Programm herfallen, ich bin noch etwas
unerfahren, was Object Pascal Programmierung angeht.
Ich bin noch am Üben, deshalb auch dieses Programm und die Frage.

Wenn ich mit Button6 den Zyklus starte, wir die Kurve auch gezeichnet,
aber die Tastatur bzw. Mouse Eingabe ist gesperrt.
Wer kann mir einen Tip geben, wie ich die Buttons abfragen kann
während der Zeichnung der Linie?

Gruß
Jens

Delphi-Quellcode:
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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz