AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Console input handler

Console input handler

Ein Thema von Dust Signs · begonnen am 12. Feb 2006 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
Dust Signs
Registriert seit: 28. Dez 2004
Hi!

Hab mir gedacht, dass diese Units vielleicht einigen nützlich sein könnten, wenn ihr ein Programm schreiben möchtet, das Shell-ähnliche Funktionalitäten benötigt. Bei diesen Units handelt es sich um eine Sammlung von Objekten, die - sofern man Sie richtig verknüpft - einem eine Menge Arbeit abnehmen können. Hier erstmal der Code der Demo (damit ihr seht, wie wenig man eigentlich schreiben muss, um diese Funktionalität zu haben), die bereits "exit", "echo", "about" und "cd" (im Sinne von irgendwohin wechseln - muss hier kein Verzeichnis sein) unterstützt - den Downlaodlink findet ihr weiter unten.

Delphi-Quellcode:
program console;

{$APPTYPE CONSOLE}

uses
  coninp_h in 'coninp_h.pas',
  coninph2 in 'coninph2.pas',
  coninp_p in 'coninp_p.pas',
  console_h in 'console_h.pas',
  SysUtils;

var
  console_handler: TPrintableConsoleHandler;
  parser: TAdvancedConsoleInputParser;
  input_handler: TConsoleInputHandler;

  input: String;

begin

  WriteLn('Console input handler demo - (c) by Dust Signs Andreas Unterweger 2006');
  WriteLn('======================================================================');
  WriteLn;

  parser := TAdvancedConsoleInputParser.Create;
  input_handler := TConsoleInputHandler.Create;
  console_handler := TPrintableConsoleHandler.Create(parser, input_handler, 'nowhere');

  input_handler.RegisterCommandHandler(EchoCommandHandler); //Register command handlers
  input_handler.RegisterCommandHandler(ExitCommandHandler);
  input_handler.RegisterCommandHandler(AboutCommandHandler);
  input_handler.RegisterCommandHandler(StateCommandHandler);
  input_handler.RegisterCommandHandler(ReverseEchoCommandHandler);

  while true do begin //Endless loop
    ReadLn(input);
    if not console_handler.Execute(input) then
      break; //Break if Execute returns false (HR_REQUIRES_EXIT)
    end;

  FreeAndNil(console_handler);
  FreeAndNil(input_handler);
  FreeAndNil(parser);

end.
Das Prinzip ist eigentlich sehr einfach: der TConsoleInputHandler parst die Eingabe und prüft anhand sogen. CommandHandler (Objekte, die über Überprüfungs- und Ausführfunktionen verfügen (vgl. dazu auch coninph2.pas)), ob er den geparsten Befehl ausführen kann. Kann er das, wird der Befehl ausgeführt und gibt einen Status zurück, der ausgewertet werden kann. Die TConsoleInputHeader-Klasse wie auch der Parser sind an einigen Stellen ableitbar, d.h. in Form von Kindklassen erweiterbar. Weitere Informationen findet ihr in der ausführlichen Dokumentation unten im Download. Ich werde hier nicht alle Units posten - das wäre zu unübersichtlich.

Downloadseite: http://www.users.fh-sbg.ac.at/~aunte...nput%20Handler
Direktdownload: http://www.users.fh-sbg.ac.at/~aunte...rce/ds_cih.zip (Quellcode, Demo und Doku; 51 KB)

Dust Signs

PS. Crossposting DF

//EDIT: Neue Version
//EDIT: Dokumentation fertig => Beschreibung aktualisiert und anstatt den Anhängen Downloadlinks angegeben
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
 
Sebastian R.
 
#2
  Alt 12. Feb 2006, 20:09
Super Units, vielen Dank!
Sebastian R.
  Mit Zitat antworten Zitat
Dust Signs
 
#3
  Alt 12. Feb 2006, 20:16
Danke . Wenigstens einer, der das nützlich findet

Dust Signs

//EDIT: Das mit den "zusammenhängenden Parametern" ist nun auch implementiert
  Mit Zitat antworten Zitat
Dust Signs
 
#4
  Alt 15. Feb 2006, 13:48
Neue Version, inklusive ausführlicher Dokumentation. Würde mich freuen, wenn das mehr Leute testen könnten

Dust Signs
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:39 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