AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Konsolenanwendung: if [Enter] then Procedure XY - wie umsetz
Thema durchsuchen
Ansicht
Themen-Optionen

Konsolenanwendung: if [Enter] then Procedure XY - wie umsetz

Ein Thema von coly546 · begonnen am 7. Okt 2008 · letzter Beitrag vom 7. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
coly546

Registriert seit: 10. Mär 2008
35 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Konsolenanwendung: if [Enter] then Procedure XY - wie umsetz

  Alt 7. Okt 2008, 20:09
Hi,
ich habe ein kleine Problem.
Und zwar möchte in einer Prozedur eine andere Aufrufen, wenn Enter gedrückt wird.

Wie kann ich das umsetzten?

Ich habe es schon mit

Delphi-Quellcode: markieren
IF Key=VK_RETURN THEN


doch leider kommt dann immer eine Fehlermeldung. "Undeklarierter Bezeichner"
Muss ich die jetzt beide als boolean deklarieren?


Das Readline habe ich bereits. Das Programm soll nach dem readln die Prozedur XYZ ausführen.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 20:21
Du brauchst mal etwas grundlegenden Infos, wie eine Konsolenanwendung überhaupt funktioniert.
Eine Konsolenanwendung hat einen Standardinput, einen Standardoutput und Übergabeparameter.
Eine Konsolenanwendung reagiert nicht auf Tastendrücke oder Mausklicks, sondern liest den StandardInput bis nichts mehr kommt und schreibt in den Standartoutput, so lange es möchte.

Beispiel für ein Konsolenprog. dass den Input auf den Output kopiert:
Delphi-Quellcode:
var
  s : string;
begin
  while not eof do
  begin
    readln(s); // Lesen von Standardinput
    write('Ausgabe:');
    writeln(s); // Schreiben nach Standardoutput
  end;
end;
Würde man das Programm so aufrufen:
Code:
KonsoleTest.exe <C:\autoexec.bat >C:\info.txt
wird die Datei Autoexec.bat eingelesen und leicht verändert nach info.txt geschrieben.
Du siehst, ein Konsolenprogramm kann keine Tasten abfragen, sondern nur StandardInput lesen und StandardOutput schreiben. (ein bisschem mehr kann es schon; ich vereinfache hier ein bisschen)
  Mit Zitat antworten Zitat
coly546

Registriert seit: 10. Mär 2008
35 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 20:26
Hallo,
danke erstmal das du dir die Mühe machst mir zu helfen.
Gibt es keinen einfacheren Weg eine Prozedur mit der Enter-Taste zu starten?

Ich habe ein Menü gebaut bei dem man auswählen kann, ob Daten eingelesen oder ausgegeben werden sollen.
Als erstes muss der User auf einlesen drücken. Nachdem der User die Daten eingeben hat, soll automatisch wieder die Prozedur des Menüs erscheinen.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 20:34
Nach du kannst z.B. ein Menue als Text anbieten:
Delphi-Quellcode:
writeln('1 = berechne Zinsen');
writeln('2 = berechne Verlust'); // DAX lässt grüssen
writeln('E = Ende');
Und dann fragst du den Stanardinput ab:
Delphi-Quellcode:
readln(s); // s:string
if s = '1' the BerechneZins
else if s = '2then BerecneVerlust
else if (s ='e') or (s='E') then exit
else writeln('falsche Eingabe');
So *kann* man das machen. Man bekommt aber ein Programm mit Look & Feel der 1970er Jahre.
  Mit Zitat antworten Zitat
coly546

Registriert seit: 10. Mär 2008
35 Beiträge
 
RAD-Studio 2009 Arc
 
#5

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 20:39
Hi,
wie man son Menü macht weiß ich ja...das mache ich sonst mit case of.


Die Frage ist, ob ich jetzt

if s=VK_RETURN then schreiben kann. Oder wie kann ich das mit der ENTER-Taste machen.

//EDIT:
Delphi-Quellcode:
read(s);
if s=VK_RETURN then
P_Menue;

geht leider nicht
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 20:54
if s=VK_RETURN then Das geht nur innerhalb von VCL Anwendungen.
Hier mal die erweiterte Abfrage
Delphi-Quellcode:
// hier wartet das Programm auf Eingabe vom StdInput
// man muss Return oder Strg+Z oder Strg+C drücken sondern geht's nicht weiter
readln(s); // s:string
if s = 'then MachWas // Benutzer hat nur Return gedrückt
else if s = '1' the BerechneZins // Benutzer hat 1 und dann Return gedrückt
else if s = '2then BerecneVerlust
else if (s ='e') or (s='E') then exit
else writeln('falsche Eingabe');
  Mit Zitat antworten Zitat
coly546

Registriert seit: 10. Mär 2008
35 Beiträge
 
RAD-Studio 2009 Arc
 
#7

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 21:01
Hi,
danke das funktioniert erstmal,
aber wenn ich damit eine Prozedur aufrufen möchte, sagt er mir "Undeklarierter Bezeichner".

Das versteh ich nicht, wieso soll ich eine Prozedur deklarieren?


Und das neue zweite Problem ist:
Ich lasse davor schon eine Variable einlesen, danach muss man Enter drücken.
So aber dann muss man nochmal Enter drücken, damit er zB write('falsche Eingabe'); ausführt.
Der soll aber SOFORT die Prozedur XYZ starten.

//
Kann man denn nicht mit case of eine Prozedur aufrufen?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 21:30
Hi,

gib doch mal den Quelltext, wie wo du die prozeduren aufrufst,
dann ist das für uns einfacher, als das abstrakte beschreiben,
wie man es so ungefähr gemacht hat ...

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
coly546

Registriert seit: 10. Mär 2008
35 Beiträge
 
RAD-Studio 2009 Arc
 
#9

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 21:44
OK,
also nachdem der User die 8. Stunde vom Freitag eingeben hat, soll der User nur einmal Enter drücken und sofort zum Menü kommen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Konsolenanwendung: if [Enter] then Procedure XY - wie um

  Alt 7. Okt 2008, 22:03
Hi,

ich habe mir mal erlaubt, in dem Quelltext einige Zeilen rauszunehmen, die für diese Probelmbetrachtung nicht wichtig sind.

Des Rätsels Lösung heißt eigentlich, das die Prozedur P_Menue immer wieder aufgerufen wird, sobald diese beendet wurde.
Den Abbruch des Programms erwirkst du ja mit halt und dann ist alles vorbei.

Test it

Delphi-Quellcode:
program Stundenplan;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var Tag: ARRAY[1..5,1..8] OF String;
    index:integer;
    A,B,E,V_Menue,j,n,V_Lizenz:Char;
    Anzleer,Anz:Byte;
    Text:String;
    s:String;

//001------------------------Prozedur----------------Anfang--------------------------------
Procedure P_Stunden_einlesen;
var
  index:integer;
begin
  writeln(' ');
  // hier sind ein paar Zeilen ausgelassen worden weil nicht wichtig ;-)
  writeln(' ');
  writeln(' Bitte gebe hoechtens 10 Zeichen ein! ');
  writeln(' Nach jeder Eingabe ENTER druecken! ');
  writeln(' ');
  // hier sind ein paar Zeilen ausgelassen worden weil nicht wichtig ;-)
  writeln(' ');

  for index:= 1 to 8 do
  begin
    writeln(' --- Faecher fuer Montag --- ');
    writeln(' ',index,' Stunde eingeben: ');
    readln( Tag[ 1, index ] );
  end;

  // hier sind ein paar Zeilen ausgelassen worden weil nicht wichtig ;-)

  for index:= 1 to 8 do
  begin
    writeln(' --- Faecher fuer Freitag --- ');
    writeln(' ',index,' Stunde eingeben: ');
    readln( Tag[ 5, index ] );
  end;
end;

//------------------------Spalte------------------------------------------------
procedure P_Spalte(Text:String);
var
  i : Byte;
begin
  for i := 0 to ( 9-( length( Tag[ 1, 1 ] ) ) ) do
    write( ' ' );
end;
//------------------------------------------------------------------------------


//001------------------------Prozedur----------------Ende----------------------------------

//002------------------------Prozedur----------------Anfang--------------------------------
Procedure P_Stunden_ausgeben;
var
  i: Integer;
begin
  //1. Zeile
  write(' ');write(#218);for i:=1 to 50 do write(#196);writeln(#191);
  //2. Zeile
  write(' ');write(#179);write(' STUNDENPLAN:');for i:=1 to 37 do write(' ');
  writeln(#179);
  //3. Zeile
  write(' ');write(#179);for i:=1 to 14 do write(' ');write(#218);
  for i:=1 to 10 do write(#196);write(#194);for i:=1 to 10 do write(#196);
  write(#194);for i:=1 to 10 do write(#196);write(#194);
  for i:=1 to 10 do write(#196);write(#194);for i:=1 to 10 do write(#196);
  writeln(#191);
  //4. Zeile
  write(' ');write(#179);for i:=1 to 14 do write(' ');write(#179);
  write('Montag');write(' ');write(#179);write('Dienstag');
  write(' ');write(#179);write('Mittwoch');write(' ');write(#179);
  write('Donnerstag');write('');write(#179);write('Freitag');
  write(' ');writeln(#179);
  //5. Zeile
  write(' ');write(#179);for i:=1 to 14 do write(' ');write(#195);
  for i := 1 to 54 do write(#220);writeln(#180);
  //6. Zeile
  write(' ');write(#179);for i:=1 to 14 do write(' ');write(#195);
  for i:=1 to 10 do write(#196);write(#197);for i:=1 to 10 do write(#196);
  write(#197);for i:=1 to 10 do write(#196);write(#197);
  for i:=1 to 10 do write(#196);write(#197);for i:=1 to 10 do write(#196);
  writeln(#180);
  //7. Zeile
  write(' ');write(#179);write(' 1. Stunde:');write(' ');write(#179);
  write(Tag[1,1]);P_Spalte('');write(#179);

  readln;

end;
//002------------------------Prozedur----------------Ende----------------------------------

//004------------------------Prozedur----------------Anfang--------------------------------
Procedure P_Menue;
begin
  writeln(' ');
  writeln('XXXX Stundenplan - Menue XXXX');
  writeln('XXXX ______________________ XXXX');
  writeln('XXXX XXXX');
  writeln('XXXX XXXX');
  writeln('XXXX E = Stunden eingeben XXXX');
  writeln('XXXX A = Stunden anzeigen XXXX');
  writeln('XXXX XXXX');
  writeln('XXXX B = Programm beenden XXXX');
  writeln('XXXX ... was willst du tun? Kennziffer und ENTER druecken ... XXXX');
  readln (V_Menue);

  Case V_Menue of
    'E': P_Stunden_einlesen;
    'A': P_Stunden_ausgeben;
    'B': halt;
  end;
end;
//004------------------------Prozedur----------------Ende----------------------------------

//003------------------------Prozedur----------------Anfang--------------------------------
Procedure P_Lizenz;
begin
  writeln(' ');
  writeln('XXXX [j] oder [n] plus ENTER eingeben ... XXXX');
  readln (V_Lizenz);
  Case V_Lizenz of
    'j' : begin end;
    'n' : halt;
 end;
end;

//003------------------------Prozedur----------------Ende----------------------------------

//005------------------------Hauptprogramm-----------Anfang--------------------------------
begin
  P_Lizenz;
  repeat
    P_Menue;
  until 1 = 0; // häh??? na klar, weil der Abbruch des Programms hart in P_Menue erfolgt ;-)
  readln; // das braucht hier kein Mensch
end.
//005------------------------Hauptprogramm-----------Ende----------------------------------
cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:12 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