Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Das eigene Programm skripten/fernsteuern/automatisieren (https://www.delphipraxis.net/205265-das-eigene-programm-skripten-fernsteuern-automatisieren.html)

TigerLilly 19. Aug 2020 10:06

Das eigene Programm skripten/fernsteuern/automatisieren
 
Könnt Ihr mir bitte mal beim Ideen sammeln helfen?

Ich möchte einzelne Funktionen meines Programm automatisiert ausführen lassen. Da gibt es zB eine Funktion, um Dateien von einem FTP Server downzuloaden, eine andere, um diese Dateien dann zu importieren, wieder eine andere um Ergebnisse wieder hochzuladen. Das möchte ich jetzt von außen parametrisiert anstoßen können.

Vielleicht sowas wie
CommandDispatcher.Add(sVerb : String; Action : TProc);

CommandDispatcher.Execute;
Und das schaut, ob via ParamString Aktionen übergeben wurden + führt dann die Actions aus.
Parameter und Fehlerbehandlung braucht es natürlich auch noch.

Anderen Ideen oder Input?

Danke!

Jumpy 19. Aug 2020 10:29

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Soll das Programm mit einem Parameter gestartet werden und die entsprechende Aktion machen und sich dann wieder beenden?
Oder soll es die ganze Zeit laufen und von außen Befehle bekommen, was es machen soll?

TigerLilly 19. Aug 2020 10:31

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Ah, ja, gute Frage.

Das Programm soll starten, abarbeiten und sich beenden.

KodeZwerg 19. Aug 2020 10:34

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Wenn es ein laufender Process ist kann man IPC oder MMF ganz gut verwenden.


Roter Text besagt das gegenteil.
Dann simpel über Parameter auswertung.

Uwe Raabe 19. Aug 2020 10:41

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Zitat:

Zitat von TigerLilly (Beitrag 1472086)
Das Programm soll starten, abarbeiten und sich beenden.

Ich erstellen in so einem Fall in der Regel eine eigene Kommandozeilenversion. Wenn die einzelnen Funktionalitäten sauber in eigenen Units (unabhängig von Forms) implementiert sind, ist der Pflegeaufwand nur minimal. Das ist immer noch besser, als eine GUI-Anwendung künstlich wie eine Kommandozeilenanwendung agieren zu lassen.

dummzeuch 19. Aug 2020 10:50

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Vielleicht wäre auch eine Scriting-Engine eine Idee?

Z.B. mittels DelphiWebScript oder der Scripting-Engine von FastReport?

Delphi.Narium 19. Aug 2020 11:12

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Habe das mal so gemacht:

Programmstart ohne Parameter = Gui für den Anwender und der kann machen was er will.

Programmstart mit Parameter:

Der Parameter ist eine Inidatei.

In der Inidatei steht drinne, was gemacht werden soll.

Alles, was von außen gesteuert werden konnte, war in einer TAction einer TActionList "gekapselt".

In der Ini stehen die Namen der auszuführenden TActions in der Reihenfolge, in der sie ausgeführt werden sollen.

Z. B.:
Code:
[AutoStart]
ActionFTPDownload
ActionImport
Der Quelltext im Programm sieht dann in etwa so aus:
Delphi-Quellcode:
procedure TFormMain.ActionAutostartExecute(Sender: TObject);
var
  i  : Integer;
  k  : Integer;
  Ini : TIniFile;
  sl : TStrings;
begin
  sl := TStrings.Create;
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  ini.ReadSection('Autostart',sl);
  Ini.Free;
  for k := 0 to sl.Count do begin
    for i := 0 to ActionList.ActionCount - 1 do begin
      if ActionList.Actions[i].Name = sl[k] then begin
        if Assigned(tAction(ActionList.Actions[i]).OnExecute) then begin
          tAction(ActionList.Actions[i]).OnExecute(Nil);
        end;
      end;
    end;
  end;
  sl.Free;
  Close;
end;
in der DPR wird es in etwa so aussehen:
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TFormMain, FormMain);
  if ParamCount > 0 then begin
    FormMain.ActionAutostartExecute(Nil);
  end else begin
    Application.Run;
  end;
end.
Du hast damit ein Programm "für alles" und benötigst keine Scriptengine (wobei ich hier PascalScript von RemObjects nehmen würde).

Wenn es im Programm mal eine oder n neue Actions gibt, brauchst Du diese für die Batchverarbeitung nicht extra nochmal implementieren, einfach in die INI eintragen und gut is.

Und wenn die Executemethoden der Actions nichts weiter als den Aufruf von bereits vorhanden Routinen enthalten, ist das auch ausreichend. Die Programmlogik muss also nicht zwingend in den Actions "abgefackelt" werden.

himitsu 19. Aug 2020 11:37

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
In einer EXE geht schon.
Als GUI Anwendung erstellen und beim Start prüfen, ob aus Konsole gestartet.
Wenn ja, dann dort die Statusausgabe und ansonsten die GUI starten/anzeigen.
Außer man will die Fortschrittsanzeige wirklich dennoch immer in der GUI haben, egal ob mit Parameter aus einem Link, Start>Windows>Ausführen oder aus einer Console oder Batch gestartet. (aus einem Konsolenfenster oder mit StdOut-Umleitung oder ohne)


Ich hoffe das in etwa ist nicht ganz wörtlich gemeint.

sl.Count-1
try-finally ?
TStrings.Create ?
warum OnExecute aufrufen, anstatt Execute?
und die Groß-/Kleinschreibung zu ignorieren kann nicht schaden

Komisch ist auch, dass die ActionList keine FindAction(Name)-Methode bietet und man die Items selbst durchlaufen muß.

Delphi-Quellcode:
var
  i : Integer;
  S : string;
  Ini : TIniFile;
  sl : TStrings;
begin
  sl := TStringList.Create;
  try
    Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
    Ini.ReadSection('Autostart', sl);
    for S in sl do //for k := 0 to sl.Count - 1 do
      for i := 0 to ActionList1.ActionCount - 1 do
        if SameText(ActionList1.Actions[i].Name, S) then
          ActionList1.Actions[i].Execute;
  finally
    Ini.Free;
    sl.Free;
    Close;
  end;
end;

Delphi.Narium 19. Aug 2020 11:44

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Es ging um 'ne Idee und nicht um 'nen fertigen Code.

Hab' nich' ma' probiert, ob's kompiliert werden kann.

Dass man dazu eine vernünftige Fehlerbehandlung braucht, sollte für Profis eigentlich klar sein. Die entsprechende Transferleistung von der Idee zu vollständigen und korrekter Implementierung erwarte ich da einfach.

hoika 19. Aug 2020 11:47

AW: Das eigene Programm skripten/fernsteuern/automatisieren
 
Hallo,
ich würde ich eine Ini und/oder einen Parameter nehmen,
je nachdem, wie viele Daten für die automatische Funktion benötigt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.
Seite 1 von 2  1 2      

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