Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm aus einem anderen starten und Werte übergeben (https://www.delphipraxis.net/107084-programm-aus-einem-anderen-starten-und-werte-uebergeben.html)

okoeller 22. Jan 2008 08:25


Programm aus einem anderen starten und Werte übergeben
 
Hallo,

hab hier schon viele Beiträge über shellexecute und createprocess gelesen, konnte leider bisher keinen finden der mein Problem behandelt.

Ich möchte mit Programm A Programm B starten und dabei Werte(Name, Vorname, Geburtsdatum) an Programm B übergeben.

Mit shellexecute hab ich es probiert(ShellApi ist eingebunden), bekomme aber immer eine Fehlermeldung, da i kleiner 32 ist.
Delphi-Quellcode:
. . .
 Anwendung:= TUmgebungsvariablen.VLVerzeichnis + 'B.exe ' + Kunde.Nachname ;
//  + ' ' + Kunde.Vorname
//  + ' ' + Gebdat;

    i := ShellExecute(Application.Handle,'open',PChar(Anwendung),Nil, Nil, SW_NORMAL);
    if i <= 32 then
    ShowMessage('Es ist ein Fehler beim Starten von B aufgetreten');
. . .
Auf der Empfängerseite lese ich den Wert unter FormCreate wie folgt ein:
Delphi-Quellcode:
procedure TB.FormCreate(Sender: TObject);
var
  datumswert : String;
  FText1 : String;
  FText2 : String;

begin
  KdName:=paramstr(1);
  . . .
Für ein paar verständliche Zeilen auf Sender und Empfängerseite wäre ich sehr dankbar, da ich noch nicht so lange mit Delphi programmiere.

okoeller

Aurelius 22. Jan 2008 08:32

Re: Programm aus einem anderen starten und Werte übergeben
 
Als Application-name kommt nur der Pfad zum Programm, also das Programm an sich rein. Du gibts da ja gleich noch den Parameter dazu, was dazu führt dass das Programm nicht gefunden wird und es somit auch nicht gestartete werden kann (daher auch die Fehlermeldung). Parameter musst du in einer der beiden NIL übergeben (ich glaube es ist das erste NIL).

Desweiteren ist es beim 2. programm besser zu prüfen ob du überhaupt Parameter hast, also
Delphi-Quellcode:
if ParamCount > 0 then..

Luckie 22. Jan 2008 08:41

Re: Programm aus einem anderen starten und Werte übergeben
 
Zitat:

Zitat von okoeller
Mit shellexecute hab ich es probiert(ShellApi ist eingebunden), bekomme aber immer eine Fehlermeldung, da i kleiner 32 ist.

dann werte den Fehler doch mal richtig aus:

Zitat:

Return Value

Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.

0 The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image).
SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL The DDE transaction failed.
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND The specified DLL was not found.
SE_ERR_FNF The specified file was not found.
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM There was not enough memory to complete the operation.
SE_ERR_PNF The specified path was not found.
SE_ERR_SHARE A sharing violation occurred.

okoeller 22. Jan 2008 09:27

Re: Programm aus einem anderen starten und Werte übergeben
 
Hallo,

mit der Hilfe von xX0815Xx bin ich weiter gekommen.

Mit folgendem Code wird der Kundenname an das Programm B übergeben.

Delphi-Quellcode:
Anwendung:= TUmgebungsvariablen.VLVerzeichnis + 'B.exe ' ;
i := ShellExecute(Application.Handle,'open',PChar(Anwendung),PChar(Kunde.Nachname), Nil, SW_NORMAL);
Wie muss ich denn jetzt PChar(Kunde.Nachname) im ShellExecute() ändern damit ich drei Werte(Name, Vorname und GebDatum) übergeben kann.

okoeller

Aurelius 22. Jan 2008 09:34

Re: Programm aus einem anderen starten und Werte übergeben
 
Du hängst die einfach an den Paramter ran, also
Delphi-Quellcode:
Paramter := NachName + Vorname + Datum
und wertest die Paramter dann in einer for-Schleife aus
Delphi-Quellcode:
if ParamCount = 4 then //damit es auch wirklich nur bei den 3 Parametern ausgeführt wird
begin
  Nachname := ParamStr(1);
  Vorname := ParamStr(2);
  Datum := ParamStr(3);
end;

okoeller 22. Jan 2008 09:39

Re: Programm aus einem anderen starten und Werte übergeben
 
Hallo,

hab es selbst herausgefunden.

Programm A ruft auf und sendet:

Delphi-Quellcode:
    Anwendung:= TUmgebungsvariablen.VLVerzeichnis + 'Versorgungsluecke.exe ' ;
    i := ShellExecute(Application.Handle,
    'open',
    PChar(Anwendung),
    PChar(Kunde.Nachname + ' ' + Kunde.Vorname + ' ' + Datetostr(Kunde.Geburtsdatum)),
    Nil,
    SW_NORMAL);
Programm B wird gestartet und empfängt:

Delphi-Quellcode:
procedure TB.FormCreate(Sender: TObject);

begin
if ParamCount > 0 then
begin
  KdName:=paramstr(1);
  KdVorname:=paramstr(2);
  KdGebdatum:=paramstr(3);
  if KdName <> '' then
    edtName.text := KdName;
  if KdVorname <> '' then
    edtVorname.text := KdVorname;
  if KdGebdatum <> '' then
    edtGebDat.text := KdGebdatum;
end;
Das funktioniert!
Das Programm muss auch ohne Parameter startbar sein.
Danke für die Tipps
okoeller

Aurelius 22. Jan 2008 09:43

Re: Programm aus einem anderen starten und Werte übergeben
 
Als Nebeninfo: Deklarierst du als Vorname z.b. 'Hans Martin' würde es Probleme geben, da das Programm dann einen 'Martin' als weiteren Parameter erkennt. Imho kann man das korrigieren indem man als String '"Hans Martin"' schreibt...

okoeller 22. Jan 2008 09:49

Re: Programm aus einem anderen starten und Werte übergeben
 
super !
danke für den Tipp, aber wie setze ich das denn auf der Senderseite konkret um??????

okoeller

Aurelius 22. Jan 2008 09:53

Re: Programm aus einem anderen starten und Werte übergeben
 
Lass dir per ShowMessage mal die Parameter ausgeben. Es kann sein dass dann '"Hans Martin"' schon als 'Hans Martin' ankommt (also ohne ""), in dem Fall brauchst du nichts weiteres mehr machen. Ansonsten müsstest du schauen ob am Anfang des Parameters ein " vorkommt und, wenn das so sein sollte, das erste und das letzte Zeichen des Strings löschen bzw. das dazwischen ausschneiden.

Ich weiß jetzt nicht aus dem Kopf wie das ganze erkannt wird^^

okoeller 22. Jan 2008 10:03

Re: Programm aus einem anderen starten und Werte übergeben
 
ok
werd mal was in der Richtung versuchen.

Vielen Dank
okoeller


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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