Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 12.02.06 18:37 
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.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
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: www.users.fh-sbg.ac....le%20Input%20Handler
Direktdownload: www.users.fh-sbg.ac....%20Source/ds_cih.zip (Quellcode, Demo und Doku; 51 KB)

AXMD

PS. Crossposting DP


Zuletzt bearbeitet von AXMD am Mi 15.02.06 14:52, insgesamt 1-mal bearbeitet
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 15.02.06 14:51 
Neue Version hochgeladen und Downloadlinks anstatt der Anhänge verwendet. Ausführliche Doku liegt bei.

AXMD ;)