Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Leertaste und Funktion (https://www.delphipraxis.net/4403-leertaste-und-funktion.html)

kaddy 27. Apr 2003 16:58


Leertaste und Funktion
 
Hallo Netz,
weiß einer von Euch, ob es in Delphi eine Funktion gibt, nach der man erst die Leertaste oder auch eine andere Taste außer Returen betätigen muß, damit dass Programm weiterläuft. Danke Euch!
Viele Grüße
Kaddy :coder:

Stanlay Hanks 27. Apr 2003 17:08

Du meinst, dass die nächste Funktion/Prozedur erst nach einem Tastendruck ausgeführt wird? ja das geht. Mit der Onkeydown oder Onkeyup funktion von z.B. Form1. Da kannst du sagen
Delphi-Quellcode:
IF Key = 13 then ShowMessage('Du hast die Leertaste gedrückt');
man liest sich, Stanlay :firejump:

Daniel B 27. Apr 2003 17:25

Hallo Stanley,

im OnKeyDown und Press mit if Key = #13

Grüsse, Daniel :hi:

Christian Seehase 27. Apr 2003 17:31

Moin Kaddy,

ein normales Windowsprogramm wartet sowieso, solange keine Eingabe, in welcher Form auch immer, gemacht wird.

Was hast Du denn vor?

Stanlay Hanks 27. Apr 2003 18:46

@ daniel: und wann nehm ich dann nur die Zahl. Ich werde noch verrückt mit den sch*** keys. :evil:

Danke.

Christian Seehase 27. Apr 2003 18:50

Moin Stanlay,

ist doch recht einfach. Schau Dir doch einfach mal die Deklaration der jeweils übergebenen Parameter an.
Wenn ein Char gefordert ist (KeyPress) musst Du halt # und die Nummer des Zeichens nehmen, ansonsten die Zahl (oder eben VK_xxxx).

Stanlay Hanks 27. Apr 2003 19:10

Der Christian macht mich heute ganz glücklich. da lernt man ja richtig was, hier im Forum. Danke schon wieder. Stanlay :hello:

kaddy 28. Apr 2003 09:10

moin,
danke euch. Ich habe verstanden, dass ich eine Procedure mit onkeydown machen muß. Wie bekomme ich nun die zum Laufen. Kann ja nicht mit doppelklick auf den Button starten.
Danke!
Gruß
Kaddy

CepheidenX 28. Apr 2003 09:20

die OnKeyxxx Methoden/Prozeduren werden automatisch aufgerufen/ausgeführt wenn die jeweilige Komponenten (einige haben kein OnKeyxx Ereigniss) den Eingabefocus hat und eine Taste gedrückt wird.

kaddy 28. Apr 2003 09:38

Geht bei mir leider nicht. Habe mal meinen Code dazugepackt. Vielleicht kann mir ja einer helfen. Danke!

Delphi-Quellcode:
procedure TForm1.Eingabefeldonkeydown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

var
i: integer;
j: integer;

  begin

 
 
 //Eingabe der Maschinendaten
  Label1.caption:='Anzahl Maschinen eingeben';
  if key=13 then
        begin
        mac:=strtoint(Eingabefeld.text);
        end;


 //Eingabe der Periodenanzahl
  Label1.caption:='Anzahl Perioden eingeben';
     if key=13 then
        begin
        per:=strtoint(Eingabefeld.text);
        end;


  //Eingabe der Kapazitäten der Maschinen je Periode
  Label1.Caption:=('Die Kapazitäten der '+inttostr(mac)+ ' eingeben:');
  i:=1;
  j:=1;
  while i<mac+1 do
     begin
     while j<per+1 do
        begin
        Label2.Caption:=('Periode '+inttostr(i)+'Maschine'+inttostr(j));
        machine[per,mac].cap:=strtoint(Eingabefeld.text);
        j:=j+1;
        end;
     i:=i+1;
     j:=1;
     end;


end;

Gruß
Kaddy 8)

BrainCode 28. Apr 2003 12:44

Kann es sein, dass du aus der DOS-Programmierung kommst und dich noch nicht mit Events beschäftigt hast? Also:

Das normale Vorgehen unter Windows wäre, mehrere Edits für die verschiedene Eingaben zu designen. In deinem Fall wären das drei Stück, je eine für Anzahl der Maschinen, Anzahl der Perioden und Kapazität der Maschinen. Danach kann der Nutzer auf einen Button klicken, der die Eingaben bestätigt. Dessen Code könnte dann so aussehen (bin gerade in der Schule und habe kein Delphi vor mir):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  //Eingabe der Maschinendaten
  mac:=strtoint(Eingabefeld1.text);
 
  //Eingabe der Periodenanzahl
  per:=strtoint(Eingabefeld2.text);

  //Eingabe der Kapazitäten der Maschinen je Periode
  machine.cap:=strtoint(Eingabefeld3.text);
Für mehrere verschiedene Kapazitäten, wie es auch im Beispiel war, müsstest du ein TabSheet oder ein ähnliches Control verwenden.

Wenn du möchtest, dass der Cursor bei Betätigung von Enter automatisch in das nächste Edit springt, musst du im OnKeyPress-Event des jeweiligen Edits bei Betätigung der Enter-Taste (13) den Tastaturfokus weitergeben. Den passenden Befehl weiß ich leider nicht auswendig (such mal in der Hilfe nach focus/Fokus).

Wenn du allerdings ein Konsolenprogramm schreiben willst, kannst du deinen Code benahe unverändert weiternutzen. Du erstellst einfach unter "New->Console Application" oder so ein Kommandozeilenprogramm und benutzt deinen Code als Hauptprogramm. Tipp: Schau mal unter read() oder readln() in der Hilfe nach.


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