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
Antwort Antwort
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
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Tastatureingabe abfragen innerhalb einer Schleife

  Alt 6. Okt 2008, 13:53
Fürs erste kannst du in deine Schleife

Delphi-Quellcode:
...
Application.ProcessMessages();
Sleep(50);
...
schreiben. Dies ist jetzt nur für Übungszwecke in Ordnung.

Richtig wäre es, wenn du dich mit Threads auseinandersetzt und es dann in Threads machst.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
diver03

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

Re: Tastatureingabe abfragen innerhalb einer Schleife

  Alt 6. Okt 2008, 14:08
Super.

Danke, funktioniert fürs erste sehr gut.
  Mit Zitat antworten Zitat
diver03

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

Re: Tastatureingabe abfragen innerhalb einer Schleife

  Alt 6. Okt 2008, 14:32
noch eine Frage,

wo kann ich ein leicht verständliches Tutorial zum Thema Thredas finden?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Tastatureingabe abfragen innerhalb einer Schleife

  Alt 6. Okt 2008, 14:36
Hier dürfte ein einfacher Timer deutlich besser geeignet sein.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Tastatureingabe abfragen innerhalb einer Schleife

  Alt 6. Okt 2008, 14:54
Zitat von diver03:
noch eine Frage,

wo kann ich ein leicht verständliches Tutorial zum Thema Thredas finden?
Für eine neuen Frage erstell bitte einen neuen Thread. aber ein Tutorial kannst du hier auf meiner Seite finden: http://delphitutorials.michael-puff.de
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz