Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Aktuelle Zeile auslesen ... (https://www.delphipraxis.net/56847-aktuelle-zeile-auslesen.html)

Nils_13 13. Nov 2005 09:38

Re: Aktuelle Zeile auslesen ...
 
Ich bin auf eine andere Methode fast zum Ergebnis gekommen.
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;

    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;
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.

Die Muhkuh 13. Nov 2005 09:42

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;

faux 13. Nov 2005 10:17

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:
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;
Grüße
Faux

Nils_13 13. Nov 2005 10:56

Re: Aktuelle Zeile auslesen ...
 
Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.
Seite 3 von 3     123   

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