AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Das eigene Programm skripten/fernsteuern/automatisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Das eigene Programm skripten/fernsteuern/automatisieren

Ein Thema von TigerLilly · begonnen am 19. Aug 2020 · letzter Beitrag vom 19. Aug 2020
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.630 Beiträge
 
Delphi 12 Athens
 
#1

AW: Das eigene Programm skripten/fernsteuern/automatisieren

  Alt 19. Aug 2020, 10:41
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

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

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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#3

AW: Das eigene Programm skripten/fernsteuern/automatisieren

  Alt 19. Aug 2020, 11:37
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;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Delphi.Narium

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

AW: Das eigene Programm skripten/fernsteuern/automatisieren

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

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Das eigene Programm skripten/fernsteuern/automatisieren

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

Registriert seit: 15. Mär 2007
4.168 Beiträge
 
Delphi 12 Athens
 
#6

AW: Das eigene Programm skripten/fernsteuern/automatisieren

  Alt 19. Aug 2020, 17:24
Die Scripting Lösung hätte den Vorteil, wenn kombiniert mit einem Web-Service,
das man auch Aktioen einfach per z.B. Abfrage vom Server dazubuchen oder Löschen kann.

So könnten je nach Status der einzelnen App, von dem Server nur bestimmte Aktionen freigeschaltet werden.

Also wohlgemerkt, der Server nur zur Konfiguration, ansonsten liegen die freigeschalteten Aktionen lokal, z.B. in einem verschlüsseltem Container.
Das Alles ohne dass der Kunde eine neue EXE installieren müsste.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:34 Uhr.
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