Entwickler-Ecke

Sonstiges (Delphi) - Variable übergeben !


Jagg - Mi 19.11.03 12:12
Titel: Variable übergeben !
Hallo Leute !

Ich habe ein Programm von dem ich ein anderes Prgramm starte !
Beim Verlassen des 1.Programmes soll er sich eine Variable merken und diese in dem 2.Programm übergeben !

Wie mache ich das ???

Jagg !


Klabautermann - Mi 19.11.03 13:39

Hallo,

suche nach folgendem:

Programm Starten: Suche in: Delphi-Forum, Delphi-Library SHELLEXECUTE.
Parameter des eigenen Programms auslesen: Suche in: Delphi-Forum, Delphi-Library PARAMSTRING

Bessere Ergebnisse findest du sicher wenn du in den FAQs [http://www.delphi-forum.de/index.php?c=7] und Tututials [http://www.delphi-forum.de/viewforum.php?f=14] mal nach diesen und ähnlichen Themen suchchst.

Gruß
Klabautermann


Jagg - Mi 19.11.03 13:47

wenn ich jetzt vom 1 programm den parameter z.b Wert auslese,wie lese ich den Wert dann wieder in das 2 programm ein ???


matze - Mi 19.11.03 15:15

starte das 2. proggi einfach mit parameter !!!
den kannst du per paramstr (1) abragen.
und den paramter hängst du einfach beim starten des 2. proggis an !


Jagg - Mi 26.11.03 14:39

ich versteh dsa nicht
hier ist mal ein code aus dem 1.prog

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if Key = '3' then
  begin
    Form33.lb_lieferung.caption := 'Überlieferung';
    LieferText := Ueberlieferung;
    LieferDatei := UBNLIEF;
    Form33.Show;
  end;
  if Key = '4' then
  begin
    Form33.lb_lieferung.caption := 'Unterlieferung';
    LieferText := Unterlieferung;
    LieferDatei := UNLIEF;
    Form33.Show;
  end;


jetzt aus dem 2.prog

Quelltext
1:
2:
3:
4:
LieferText := Paramstr(1);
  LieferTextE := LieferText;
  LieferDatei := Paramstr(1);
  LieferDateiE := LieferDatei;


Jetzt sollte in den Variablen stehen was für eine LieferDatei oder LieferText ist !
abet bei dem 2 prog zeigt er nichts an warum ????
PS : Das ist alles stringvariablen !
[/delphi]


Mossi - Mi 26.11.03 14:47

Den ersten Parameter liest du mit ParamStr[1] aus und den zweiten dann mit ParamStr[2]

Das ist schonmal das erste.

Was mir persönlich aber auch noch auffällt: handelt es sich bei dir wirklich um zwei Programme oder nu um zwei Fenster in einem Programm?
Für ein echtes zweites Programm benötigst du einen Call wie ShellExecute (siehe oben)
Für die zweite Möglichkeit musst du lediglich die Variablen in der Form besetzen.

Quelltext
1:
2:
3:
form2.LieferText := Unterlieferung;
form2.LieferDatei := UNLIEF;
form2.Show()

Der Teil ist natürlich dann in der ersten Form (aufrufende) zu schreiben


Jagg - Mi 26.11.03 15:04

es sind 2 fenster
ich versuch es mal


Jagg - Mi 26.11.03 15:09


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if Key = '3' then
  begin
    Form33.lb_lieferung.caption := 'Überlieferung';
    Form33.LieferText := Ueberlieferung;
    Form33.LieferDatei := UBNLIEF;
    Form33.Show;
  end;
  if Key = '4' then
  begin
    Form33.lb_lieferung.caption := 'Unterlieferung';
    Form33.LieferText := Unterlieferung;
    Form33.LieferDatei := UNLIEF;
    Form33.Show;
  end;

ist das so richtig ?


Jagg - Mi 26.11.03 15:14

ich glaube ich versteh noch nicht die ganze logik !
Wie sage ich im 1 Fenster das "diese"(z.b. Wert) variable später übergeben wird in ein anderes fenster ????
wie ich das im 2 fenster aufrufe weis ich ja
mit Paramstr(1)
!


Mossi - Mi 26.11.03 15:34

du musst natürlich jede Variable einzeln an das zweite Fenster übergeben. Das heißt, du musst diese einem Object oder einer Variable in Form2 zuweisen.
ParamStr benötigst du innerhalb eines Programms eigentlich gar nicht, da hier nur Aufrufparameter stehen, die du beim Programmstart übergibst.


Jagg - Mi 26.11.03 15:44

also nochmal :
Das steht im 1 Form :

Quelltext
1:
2:
3:
4:
5:
6:
7:
if Key = '3' then
  begin
    Form33.lb_lieferung.caption := 'Überlieferung';
    LieferText := 'Ueberlieferung';
    LieferDatei := 'UBNLIEF';
    Form33.Show;
  end;


und das steht im 2 Form beim Activate :

Quelltext
1:
2:
3:
4:
LieferText := Paramstr(1);
  LieferTextE := LieferText;
  LieferDatei := Paramstr(2);
  LieferDateiE := LieferDatei;


....jetzt frage ich mich,was ist der 1 Parameter den ich übergebe,wie wird erkenne ich ihn ???
Ist das so richtig,was anderes geht bei mir nicht,was mache ich falsch,ich glaube ich bin zu blöd zum Programmieren,vllt sollte ich meinen beruf an den nagel hängen !


Mossi - Mi 26.11.03 16:05

Wie gesagt: Innerhalb eines Programms nützt dir ParamStr gar nichts.
Ich hab hier mal einen kleinen Programmcode, der dir vielleicht weiterhelfen wird. Kann aber sein, dass ein paar kleine Schreibfehler drin sind.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  var1: String;
  var2: String;
  Form2: TForm2;
begin
  var1 := 'Das ist Variable 1'
  var2 := 'Das ist Variable 2'
  
  Form2 := TForm2.Create;
  Form2.Var1InForm2 := var1;
  Form2.Var2InForm2 := var2;
  Form2.Show;
end;

end.

und hier die zweite Form

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    Var1InForm2, Var2InForm2: String;
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

end.


Es werden die zwei Variablen in Form2 belegt, bevor die Form angezeigt wird.


Anonymous - Mi 26.11.03 16:08

Der Code da oben wird aber so ganz bestimmt nicht funzen. Wenn du auf das 2. Formular zugreifst, solltest du zumindest so lange warten, bis es erstellt ist (Und das ist es in der Regel nicht wenn gerade Form1 erstellt wird)


Mossi - Mi 26.11.03 16:14

das ist möglich. Hab jetzt auf die Schnelle nur schnell was kopiert. Ausprobieren kann ich es im moment selbst nicht, da ich gerade kein Delphi zur Verfügung hab.
Jedoch sollte die Logik klar sein, hoffe ich.


Jagg - Mi 26.11.03 16:20

yo das stimmt das klappt nicht bei mir


Jagg - Mi 26.11.03 16:21

hmmm..woran könnte es liegen


Mossi - Mi 26.11.03 16:23

siehe diesen Eintrag:

obbschtkuche hat folgendes geschrieben:
Der Code da oben wird aber so ganz bestimmt nicht funzen. Wenn du auf das 2. Formular zugreifst, solltest du zumindest so lange warten, bis es erstellt ist (Und das ist es in der Regel nicht wenn gerade Form1 erstellt wird)


Jagg - Mi 26.11.03 16:34

ich habe das jetzt mit dem form.create in form.create gemacht !
richtig ???


Mossi - Mi 26.11.03 16:40

nein. Erzeug dir auf Form1 einen Button und in das OnClick-Ereignis des Buttons schreibst du dann den Code, den ich in meinem Beispiel in FormCreate geschrieben habe.
Den gesamte FormCreate-Prozedur löschst du dann raus. Dann sollte es eigentlich funktionieren