Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "keypressed" / "readkey" Ersatz? (https://www.delphipraxis.net/11109-keypressed-readkey-ersatz.html)

DarkToast 31. Okt 2003 10:26


"keypressed" / "readkey" Ersatz?
 
Hallo,

ich suche einen Ersatz für die Fuktionen "keypressed" und "readkey" aus Pascal. Ich möchte gern eine Endlosschleife programmieren, die aber auf Tastendruck reagieren kann. Hat jemand eine Idee außer einen Timer zu benutzen, da dieser zu langsam ist.


Christopher

Luckie 31. Okt 2003 10:32

Re: "keypressed" / "readkey" Ersatz?
 
Delphi-Quellcode:
var
  Run: Boolean = True; // global

[..]
  while Run do
  begin
    ...;
  end;

[..]

// OnKeypress der Form:
  Run := False;

Christian Seehase 31. Okt 2003 10:33

Re: "keypressed" / "readkey" Ersatz?
 
Moin Christopher,

Du könnstest das so machen:
In der Endlosschleife fragst Du als Abbruchbedingung ein Flag ab, dass Du mit Hilfe des OnKeyPress oder OnKeyDown Ereignisses setzt. In der Schleife solltest Du mit Hilfe von Application.ProcessMessages noch dafür sorgen, dass das OnKeyPress oder OnKeyDown Ereignis überhaupt ausgeführt werden.

Was hast Du denn mit dieser Schleife vor?
Vielleicht gibt's ja noch eine andere Lösung.

flattman 31. Okt 2003 11:19

Re: "keypressed" / "readkey" Ersatz?
 
Hallo,
ein ähnliches Problem habe ich auch. Ich habe ein Array in dem ich Bildpfade gespeichert habe. Nun möchte ich das alle 5 Sekunden ein neues (das nächste n+1) Bild angezeigt wird. Der Haken dabei ist nur, dass wenn der Bentzer ESC drückt, soll das Proggy kein Bild mehr anzeigen und auch den "Timer" (die 5 Sekunden) stoppen. Wenn der Benutzer aber die rechte Pfeiltaste betätigt, soll gleich das nächste Bild angezeigt werden und nicht erst nach 5 Sekunden. das gleiche sollte mit der Linken Pfeiltaste funktioniern, nur halt andersrum also dann das vorherige Bild.

Habe es mit einer for shleife probiert und break dabei eingesetzt. Nur leider kommt es häufig vor dass das Proggy dann statt nur einem Bild vor 2 vor macht. Wenn gewünscht kann ich auch mal den Code posten.

Wäre für einen kleinen Denkanstoß auch sehr dankbar.

MfG
Flattman

himitsu 31. Okt 2003 12:12

Re: "keypressed" / "readkey" Ersatz?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Als "normale" Anwendung oder als Konsolen-Anwendung?

@flattman: schau mal hier rein

MfG Frank

DarkToast 31. Okt 2003 12:56

Re: "keypressed" / "readkey" Ersatz?
 
Hallo Luckie,

du hast da einen Denkfehler, wenn ich die Schleife aus einer Procedure laufen lasse, wird erst die KeyDown-Prozedure anschließende oder zuvor ausgeführt,aber nie gleichzeitig bearbeitet. Also läuft nur die Endlos-Schleife und die Globalvariable kann währendessen nicht geändert werden.

Meine Programmidee: Ein Männchen(Punkt), den man mit den Cursortasten steuern kann. Soweit noch kein Problem. Der Punkt soll aber in Bewegung bleiben. Ich brauch also eine Schleife, die einen Zug macht, kuckt ob die Richtung geändert werden muss und wieder einen Zug macht. Die Abbruchbedingung ist erst mal Nebensache.

Christopher

Luckie 31. Okt 2003 13:05

Re: "keypressed" / "readkey" Ersatz?
 
Delphi-Quellcode:
var
  Run: Boolean = True;

procedure TForm1.Button1Click(Sender: TObject);
var
  idx: Integer;
begin
  idx := 0;
  while Run do
  begin
    Inc(idx);
    Listbox1.Items.Add(IntToStr(idx));
    Application.ProcessMessages;
    sleep(25); // dami man was sieht
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Run := False;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_ESCAPE then
    Run := False;
end;
Geht wunderbar.

q.e.d.

flattman 31. Okt 2003 17:56

Re: "keypressed" / "readkey" Ersatz?
 
:hello: :hello: ICH LIEBE DIESES FORUM :hello: :hello:

ist wirklich das beste Delphiforum was es gibt. Hier wird einem schnell und unkompliziert geholfen.

BIG THX an himitsu

genau sowas habe ich gesucht.
werde mich gleich ran machen mir einen eigenen code zuschreiben, denn klauen kann ja jeder :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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