![]() |
Re: Aktuelle Zeile auslesen ...
Ich bin auf eine andere Methode fast zum Ergebnis gekommen.
Delphi-Quellcode:
Das Problem ist, wenn ich opencd und closecd eingebaut habe wird zwar jeder Befehl augeführt, es kommt aber hinter jedem Befehl 'Unbekannter Befehl'. Wenn ich opencd und closecd nicht eingebaut habe tritt der Fehler nicht auf.
procedure TForm1.ConsoleKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var iLine: integer; begin iLine := Console.Perform(EM_LINEFROMCHAR, -1, 0); if Key = VK_RETURN then begin if LowerCase(Console.Lines[iLine]) = '#exit' then Application.Terminate; if LowerCase(Console.Lines[iLine]) = '#help' then begin with Console.Lines do begin Add(''); Add(''); Add('#help = ruft die Hilfe auf'); Add('#exit = beendet das Programm'); Add('#opencd = öffnet das CD-Laufwerk'); Add('#closecd = schließt das CD-Laufwerk'); Add(''); end; end; if LowerCase(Console.Lines[iLine]) = '#opencd' then begin mciSendString('Set cdaudio door open wait', Nil, 0, Handle); end; if LowerCase(Console.Lines[iLine]) = '#closecd' then begin mciSendString('Set cdaudio door closed wait', Nil, 0, Handle); end else Console.Lines.Add('Unbekannter Befehl'); Console.Lines.Add(''); end; end; |
Re: Aktuelle Zeile auslesen ...
Hi,
ganz spontan würde ich sagen:
Delphi-Quellcode:
procedure TForm1.ConsoleKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var iLine: integer; begin iLine := Console.Perform(EM_LINEFROMCHAR, -1, 0); if Key = VK_RETURN then begin if LowerCase(Console.Lines[iLine]) = '#exit' then Application.Terminate else if LowerCase(Console.Lines[iLine]) = '#help' then begin with Console.Lines do begin Add(''); Add(''); Add('#help = ruft die Hilfe auf'); Add('#exit = beendet das Programm'); Add('#opencd = öffnet das CD-Laufwerk'); Add('#closecd = schließt das CD-Laufwerk'); Add(''); end; end else // << if LowerCase(Console.Lines[iLine]) = '#opencd' then begin mciSendString('Set cdaudio door open wait', Nil, 0, Handle); end else // << if LowerCase(Console.Lines[iLine]) = '#closecd' then begin mciSendString('Set cdaudio door closed wait', Nil, 0, Handle); end else Console.Lines.Add('Unbekannter Befehl'); Console.Lines.Add(''); end; end; |
Re: Aktuelle Zeile auslesen ...
Nils, ich würde mir an deiner Stelle mal die Grundlagen ansehen. Ein else bezieht sich nicht auf die Prozedur, so wie du es oben glaubst, sondern auf das if.
Also:
Delphi-Quellcode:
Grüße
if Key = VK_RETURN then
begin if LowerCase(Console.Lines[iLine]) = '#exit' then Application.Terminate; if LowerCase(Console.Lines[iLine]) = '#help' then //Hier wäre doch ein else if besser begin (...) end; if LowerCase(Console.Lines[iLine]) = '#opencd' then //Auch hier wäre ein else if besser begin mciSendString('Set cdaudio door open wait', Nil, 0, Handle); end; if LowerCase(Console.Lines[iLine]) = '#closecd' then //Und nochmals else if begin mciSendString('Set cdaudio door closed wait', Nil, 0, Handle); end else //Dieses else wird sonst immer ausgeführt, wenn >>LowerCase(Console.Lines[iLine]) = '#closecd'<< nicht zutrifft. Console.Lines.Add('Unbekannter Befehl'); Console.Lines.Add(''); //Nur am Rande bemerkt: Diese Zeile gehört nicht eingerückt, die gehört nicht zum else. end; Faux |
Re: Aktuelle Zeile auslesen ...
Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz