AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Programm aus einem anderen starten und Werte übergeben

Programm aus einem anderen starten und Werte übergeben

Ein Thema von okoeller · begonnen am 22. Jan 2008 · letzter Beitrag vom 22. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2   
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#1

Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 09:25
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
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#2

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 09:32
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
if ParamCount > 0 then..
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 09:41
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 10:27
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
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#5

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 10:34
Du hängst die einfach an den Paramter ran, also 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;
Jonas
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 10:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#7

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 10:43
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...
Jonas
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 10:49
super !
danke für den Tipp, aber wie setze ich das denn auf der Senderseite konkret um??????

okoeller
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#9

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 10:53
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^^
Jonas
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Programm aus einem anderen starten und Werte übergeben

  Alt 22. Jan 2008, 11:03
ok
werd mal was in der Richtung versuchen.

Vielen Dank
okoeller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:14 Uhr.
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