Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#7

AW: Das eigene Programm skripten/fernsteuern/automatisieren

  Alt 19. Aug 2020, 11:12
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.
  Mit Zitat antworten Zitat