Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm mit Leertaste anhalten (https://www.delphipraxis.net/86081-programm-mit-leertaste-anhalten.html)

Bonbon 8. Feb 2007 18:33


Programm mit Leertaste anhalten
 
Hi,

schreibe gerade ein Programm für die Schule, in dem ich etwas erkläre. Dies läuft allerdings mit einem bestimmten Tempo und für manche vielleicht zu schnell. Ich würde gerne, dass der Nutzer nur die Leertaste drücken muss und dann das Programm so lange angehalten wird, wie die Taste gedrückt ist.
Könnte mir das bitte mal jemand erklären. Bin noch Delphi-Anfänger.

Thanks...

MrKnogge 8. Feb 2007 18:34

Re: Programm mit Leertaste anhalten
 
Das kann man so nicht sagen, was macht denn dein Programm ?

Bonbon 8. Feb 2007 18:47

Re: Programm mit Leertaste anhalten
 
Ich erkläre damit Lagebeziehungen zwischen Punkt und Gerade bzw. zwei Geraden. Nach Auswahl in Drop-Down-Menü und Button-Klick wird dies in einer ListBox gemacht und nebendran wid es grafisch dargestellt. Diese Erklärung soll dann während des Drückens der Leertaste pausiert werden.

inherited 8. Feb 2007 18:55

Re: Programm mit Leertaste anhalten
 
Du musst schon sagen, wie du die Ausgabe realisiertst.

Bonbon 9. Feb 2007 08:51

Re: Programm mit Leertaste anhalten
 
Ich schreibe zeilenweise einen Text in die ListBox und mit Canvas.MoveTo und LineTo zeichne ich links neben der Box. Das läuft soweit alles hintereinander ab. Mein Info-Lehrer meinte nun, ich solle das durch drücken der Leertaste anhalten und es soll weiter gehen, wenn ich die Taste los lasse. Kann ich das irgendwie über OnKeyPress oder OnKeyDown machen oder wie? Es wäre mir auch egal, wenn ich die Taste nicht genau definieren kann. Ich will nur die Erklärung einfach unterbrechen können.

yörsch 9. Feb 2007 09:07

Re: Programm mit Leertaste anhalten
 
Delphi-Quellcode:
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_SPACE   then
    begin
      Label1.Caption := 'Down';
      Timer1.Enabled := false;

    end;
end;
procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_SPACE   then
    begin
      Label1.Caption := 'up';
      Timer1.Enabled := True;
    end;
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
 // Zeige Nächste Zeile an...
end;
ich hoffe dir hilft das weiter... ansonsten müstest du mit Treads arbeiten was für einen Anfänger nicht einfach ist...
wenns probleme gibt Poste mal was du hast... :mrgreen:

Bonbon 9. Feb 2007 10:02

Re: Programm mit Leertaste anhalten
 
Habe das eben mal versucht. Ich weiß ich nicht wie er sich die Zeile, in der er gerade war merken soll. Drücke ich also während die Erklärung läuft Space, so hört er nach dem ersten Zeilenblock auf. Das passiert aber egal an welcher Stelle er gerade war. Danach macht er auch weiter, aber eben immer ab der gleichen Zeile.
Ich habe nach dem ersten Block auch eine Pause in dem Programm von ein paar Sekunden. Hängt das irgendwie damit zusammen?
Delphi-Quellcode:
 ListBox1.Items.Add('Zunächst zeichnet man den ersten Punkt P1(1,2) ein');
     ListBox1.Items.Add('dabei ist 1 der x-Wert: man geht in Gedanken 1 nach rechts');
     ListBox1.Items.Add('2 ist der y-Wert: man geht also in Gedanken 2 nach oben');
     ListBox1.Items.Add('nun macht man an der Stelle einen Punkt');
     Pause(6000);
Die Prozedur für die Pause sieht wie folgt aus:
Delphi-Quellcode:
procedure pause(zeit:LongInt);
var anfang:LongInt; {lange nat. Zahlen}
begin anfang:=GetTickCount;
  while GetTickCount<anfang+zeit do
        Application.ProcessMessages; {nichts, nur Botschaften abarbeiten}
end;

bitsetter 9. Feb 2007 11:49

Re: Programm mit Leertaste anhalten
 
Du nimmst den Code von yörsch und fügst folgendes beim Timer ein:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case Timer1.Tag of
    0: ListBox1.Items.Add('Zunächst zeichnet man den ersten Punkt P1(1,2) ein');
    1: ListBox1.Items.Add('dabei ist 1 der x-Wert: man geht in Gedanken 1 nach rechts');
    2: ListBox1.Items.Add('2 ist der y-Wert: man geht also in Gedanken 2 nach oben');
    3:
      begin
        ListBox1.Items.Add('nun macht man an der Stelle einen Punkt');
        Timer1.Tag:= 0;//wenn fertig reset
        Timer1.Enabled := false;
        exit;
      end;
  end;
  Timer1.Tag:= Timer1.Tag+ 1;
end;
Den Code kannst du ja noch anpassen.

Bonbon 9. Feb 2007 12:47

Re: Programm mit Leertaste anhalten
 
Vielen Dank :) . Werde das mal ausprobieren.


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