Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2 Formulare Variabeln Übergabe (https://www.delphipraxis.net/128413-2-formulare-variabeln-uebergabe.html)

thomasku 29. Jan 2009 13:32


2 Formulare Variabeln Übergabe
 
Hallo,

Ich habe ein kleines Programm welches 2 Formulare nutzt.
Das 2te Formular dient dazu eine Auswahl zu treffen von 6 unterschiedlichen Ereignissen.
Nun möchte ich eine Zählvariable (Bsp. Integer) verwenden und diese an das 1-te Formular zu übergeben.
Dies ist auch gleichzeitig mein Hauptformular(1).

Beide Formen wissen von ihrer gegenseitigen Existenz, dh. uses Form1; .
Habe schon mehrfach probiert mir Prozeduren oder Funktionen in Form2 zu erstellen aber ein Aufruf ist mir leider nicht möglich in form1.
(In einer früheren Sprache war das mal mit der Kennzeichnung '*' möglich, funktioniert hier allerdings nicht)
Für mein Programm würde es eigentlich schon reichen wenn 2 Zählvariabeln übergeben werden, allerdings wenn ich mir diese in Form2 als public definiere erkennt Form1 diese nicht an.

Die einzige Möglichkeit die ich daher gefunden habe ist das ich durch ein onclick- Ereignis diese Variable als String an ein Label in Form1 schicke.
Persönlich finde ich dies nun als recht aufwendig und ich gehe davon aus, dass ich in Zukunft noch öfter derartige übergaben vornehmen möchte.
Daher meine Frage: "Wie könnte ich das realisieren?"

Habe schon folgenden Thread dazu gelesen:
http://www.delphipraxis.net/internal...ghlight=formen

Dort verstehe ich aber leider folgenden Satz nicht.
Zitat:

Zitat von mkinzler
Nein, du kannst aber auf Variablen, die im Interface deklariert wurden und auf nicht private Member der Form zugreifen

Lg

//Edit Titel verbessert

omata 29. Jan 2009 13:53

Re: 2 Formulare Variabeln Übergabe
 
Zugriffsmethoden!

thomasku 29. Jan 2009 14:12

Re: 2 Formulare Variabeln Übergabe
 
Hallo Omata,

Danke für die schnelle Antwort.

Googeln nach Zugriffsmethoden liefert mir folgendes:
http://docs.codegear.com/docs/radstu...thods_xml.html
bzw.
http://wwwswt.informatik.uni-rostock...griffsklauseln

Dies bringt , mich allerdings nicht wirklich weiter, hättest du evtl. ein besseren Link?

(Wenn ich dies als Frage auffasse.)

Das 2te Formular ist eine Art Menüauswahl die nur aufgerufen wird wenn im 1-ten Formular ein Button geklickt wird.
Dort setze ich dann:
Form1.visible:=false;
Form2.visible:=true; (*Ist vorher auf false gesetzt*)

im 2-ten Formular muss man dann eine Auswahl treffen und erst nach getroffener Auswahl kann man einen "Zurück-Button" betätigen der dann
Form1.visible:=true; setzt und
Form2.visible:=False;

An dieser Stelle möchte ich nun gern übergeben!
(Prinzipiell ist es hier auch möglich die 2-te Form zu schließen, wie auch oben insofern das etwas ändern würde)

Lg

omata 29. Jan 2009 16:12

Re: 2 Formulare Variabeln Übergabe
 
Liste der Anhänge anzeigen (Anzahl: 1)
...

thomasku 4. Feb 2009 12:06

Re: 2 Formulare Variabeln Übergabe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Omata und vielen Dank für dein Programm.

Entschuldige das ich erst jetzt Antworte aber da ich mich derzeit in der Prüfungsphase befinde,
habe ich leider nicht eher Zeit dafür gefunden.
Desweitern musste ich mich auch erst einmal mit der Tcombobox-Komponente vertraut machen und ich habe
ca. ein halbe Stunde gebraucht bevor ich alle Befehle Nachgeschlagen habe und die Stelle gefunden habe
an der die Obstsorten (Tcombo-Auswahl) definiert wird. :)

Ich lese gerade ebenfalls ein Delphi-Einsteiger Buch, welches am Anfang den Vermerk gemacht hat, das es
Kommentare gibt die der Compiler nicht Ignoriert.
Dein Programm hat folgende Zeile:
{ TFAuswahl }
Hat dieser Kommentar eine Bedeutung für die Übergabe?

Ich habe mir Erlaubt dein Programm zu kommentieren und zu erweitern.

I) erste Erweiterung (Globale Variable):
Anlegen einer globalen Variable 'test' dazu jeweils ein Button für jede Form und im Haupformular ein
Labelfeld als Kontrollausgabe.

Allerdings wird hier nur ein beliebiger Wert übergeben.
Wie ich aus obigen Link bereits erfahren habe ist dies Methode nicht gerade sehr geeignet allerdings würde
ich schon gerne verstehen warum es auf diese Art und Weise nicht funktioniert.

II) 2-te Erweiterung (Werteparameter)
Mir ist durchaus bewusst das dass Programm bereits diese Anforderung erfüllt, allerdings habe ich versucht
eine nicht 'Komponenten gebundene' Version davon auf zu stellen.
In meinen Fall braucht der Anwender keine Kenntnis über die Existenz dieser Variable zu erhalten.
Zu mind möchte ich dies erreichen.:)

Allerdings wird nur ein beliebiger Speicherwert übergeben.

III) 3-te Erweiterung (Referenzparameter)
Erstaunlicher Weise funktioniert hier alles. :D

Deinen #1 Beitrag verstehe leider immer noch nicht evtl. könntest du noch kurz erklären auf was du mich
hinweisen wolltest.

Mir ist durch aus bewusst das dies nun mehre Fragen gleichzeitig sind, allerdings gehören Sie auch auf die eine
oder andere Weise zusammen daher bin ich unsicher ob ich nicht 3 Eigenständige Threads dazu eröffnen sollte
oder nicht.
In diesen Fall Bitte Beschied geben und ich werde dies tun.

Lg

nuclearping 4. Feb 2009 12:21

Re: 2 Formulare Variabeln Übergabe
 
Zugriffsmethoden:
Delphi-Quellcode:
unit Unit2;

interface

type
  Form2 = class (TForm)
    // ...
  private
    FVariable1: Integer;

    function GetVariable1: Integer;
    procedure SetVariable1 (Value: Integer);
  public
    // ..
  published
    property TestVariable1: Integer read FVariable1 write FVariable1;
    property TestVariable2: Integer read GetVariable1 write SetVariable1;
  end;

implementation

function TForm2.GetVariable1: Integer;
begin
  Result := FVariable1;
end;

procedure TForm2.SetVariable1 (Value: Integer);
begin
  FVariable1 := Value;
end;

end.
Delphi-Quellcode:
procedure TForm1.Button1Click (Sender: TObject);
begin
  Form2.TestVariable1 := 12345;
  ShowMessage (inttostr (Form2.TestVariable2)); // = 12345
end;
Beide Varianten greifen innerhalb von Form2 auf die gleiche Variable zu. TestVariable1 ist ein direkter Zugriff, TestVariable2 über Getter/Setter-Methoden.

thomasku 4. Feb 2009 13:55

Re: 2 Formulare Variabeln Übergabe
 
Hallo Nuclearping und vielen Dank,

Denke damit habe ich das mit den Zugriffsmethoden verstanden. (hoffe ich zu mind. :-D )

Read/write bzw get/set falls ich Unit übergreifend Parameter verändern möchte.
Ist diese Art auch Sinnvoll (Notwendig) wenn ich in der aktuellen Unit den Wert ändere und dann einfach das Ergebnis übergebe (als Konstante).

Persönlich würde ich nun denken Nein, allerdings würden diese Erweiterung auch keine Veränderung
hervorrufen.
Meine folgendes damit:
Delphi-Quellcode:
public
  property TestVariable1: Integer;
Bzw.
Delphi-Quellcode:
public
  published
    property TestVariable1: Integer read FVariable1 write FVariable1;
Solange ich die TestVariable1 nur in der aktuellen Unit verändere wäre beides gleich bedeutend oder?


Zu den anderen Fragen bin ich wie gesagt unsicher bezüglich meheren Threads.

Lg

thomasku 8. Feb 2009 15:00

Re: 2 Formulare Variabeln Übergabe
 
Hallo,

Ich mache mal ein push.

Was habe ich den Falsch gemacht:?
1.) Zu viele Fragen ?
2.) zu trivial?
3.) unverständlich?

Lg

mr_emre_d 8. Feb 2009 15:07

Re: 2 Formulare Variabeln Übergabe
 
ähm .. soweit ich das verstanden habe, willst du nur
ein paar Zählervariablen zwischen deine Forms austauschen ?

Machs doch mit messages ?! Spricht etwas dagegen ?
Delphi-Quellcode:
// bei beiden:
const
wm_mycounter=wm_user+$1234;
...
// form1:
postmessage(form2.handle, wm_mycounter, zähler, 0);

// form2
tform2 = class...
private
  procedure getcounter(var msg:TMessage); message wm_mycounter; // hier einfach aus der msg.wparam auslesen

thomasku 10. Feb 2009 16:44

Re: 2 Formulare Variabeln Übergabe
 
Hallo mr_emre_d und Danke für deine Antwort!

Mit Messages habe ich leider noch überhaupt keine Erfahrung werde es mir aber in den nächsten Tagen anschauen.

Zu deiner Frage jein, mein Programm benötigt eigentlich nur diese Funktion, allerdings habe ich versucht es etwas allgemeiner zu halten, da ich mit höher Wahrscheinlichkeit es in Zukunft noch öfter brauchen werde. :)

Bisher habe ich das wie oben mit den Zugriffsmethoden so verstanden das diese nur benötigt werden wenn Formularübergreifend die Variable geändert werden soll.
(Allerdings ist es Sinnvoll für evtl. spätere Erweiterungen dies Grundsätzlich zu tun.)

Da mein Programm erst 1x downgeloadet wurde stelle ich mal den Code rein.
(Ich denke es ziemlich schnell ersichtlich welche meine Veränderungen sind und welches das original von omata :mrgreen: )

Form1
Delphi-Quellcode:


 unit MainU;

interface

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

type
  TFMain = class(TForm)
    BtnAuswahl: TButton;
    EdAuswahl: TEdit;
  (* i) *)
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
  (* ii) *)
    Label3: TLabel;
    Button2: TButton;
    Label4: TLabel;
    Button3: TButton;
  (* iii) *)
    Label5: TLabel;
    Label6: TLabel;
    Button4: TButton;
    Button5: TButton;
  (* Clear*)
    Button6: TButton;
    procedure BtnAuswahlClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FMain: TFMain;

implementation

{$R *.dfm}
uses FAuswahlU;

procedure TFMain.BtnAuswahlClick(Sender: TObject);
var FAuswahl:TFAuswahl;
begin
  FAuswahl:=TFAuswahl.Create(Self); (*init*)
  try
    FAuswahl.SetAuswahlText(EdAuswahl.Text);
    if FAuswahl.ShowModal = mrOK then
      EdAuswahl.Text:=FAuswahl.GetAuswahlText;
  finally (*Darunter immer ausfuehren*)
    FAuswahl.Release; (*Abschnitt(Form) aufrufbar*)
  end;
end;

(* i) *)
procedure TFMain.Button1Click(Sender: TObject);
var FAuswahl:TFAuswahl;
    a:integer;
begin
  a:=FAuswahl.test;
  Label1.Caption:=inttostr(a);
end;

(* ii) *)
procedure TFMain.Button2Click(Sender: TObject);
VAR FAuswahl:TFAuswahl;
a:integer;
begin
  FAuswahl.test2(a);
  Label4.Caption:=inttostr(a);
end;

procedure TFMain.Button3Click(Sender: TObject);
VAR FAuswahl:TFAuswahl;
a:integer;
begin
   FAuswahl.test2b(a);
   Label4.Caption:=inttostr(a);
end;

(* iii) *)
procedure TFMain.Button4Click(Sender: TObject);
VAR FAuswahl:TFAuswahl;
a:integer;
begin
  FAuswahl.test3(a);
  Label6.Caption:=inttostr(a);
end;

procedure TFMain.Button5Click(Sender: TObject);
VAR FAuswahl:TFAuswahl;
a:integer;
begin
  FAuswahl.test3b(a);
  Label6.Caption:=inttostr(a);
end;

(*Clear*)
procedure TFMain.Button6Click(Sender: TObject);
begin
  Label1.Caption:='';
  Label4.Caption:='';
  Label6.Caption:='';
end;

end.
2-te Form
Delphi-Quellcode:
unit FAuswahlU;

interface

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

type
  TFAuswahl = class(TForm)
    BtnOK: TButton;
    BtnAbbruch: TButton;
    CoAuswahl: TComboBox;
  (* i) *)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    test:Integer;
    test_2:integer;
    function GetAuswahlText:string;
    procedure SetAuswahlText(Value:string);
    procedure test2(test_2:integer);
    function test2b(test_2:integer):integer;
    procedure test3(VAR test_3:integer);
    function test3b(Var test_3:integer):integer;
  end;

implementation

{$R *.dfm}

{ TFAuswahl }

function TFAuswahl.GetAuswahlText: string;
begin
  Result:=CoAuswahl.Text; (*Comboboxauswahl zu Ordnen (Obstsorte)*)
end;

procedure TFAuswahl.SetAuswahlText(Value: string);
begin
  CoAuswahl.ItemIndex:=CoAuswahl.Items.IndexOf(Value);
end;

(* i) *)
procedure TFAuswahl.Button1Click(Sender: TObject);
(*Wertzuweisung fuer test-Globale Variable*)
begin
  test:=1;
end;

(* ii) *)
procedure TFAuswahl.test2(test_2:integer);
begin
  test_2:=1;
end;

function TFAuswahl.test2b(test_2:integer):Integer;
begin
  test_2:=1;
end;

(* iii) *)
procedure TFAuswahl.test3(VAR test_3:integer);
begin
  test_3:=1;
end;

function TFAuswahl.test3b(VAR test_3:Integer):Integer;
begin
  test_3:=1;
end;


end.
(Habe leider noch nicht die Zeit gefunden es mit read/wirte bzw get/set zu Erweitern,
hoffe dies aber noch diese Woche nachzuholen. )

Zu diesen Programm hatte ich nun, eigentlich meine Fragen (siehe auch #5)
1.)
Delphi-Quellcode:
{ TFAuswahl }
Hat dieser Kommentar eine Bedeutung für die Übergabe?
2.)Der globalen Variable wird kein Wert zugewiesen bzw. bekomme ich einen beliebigen ( i) )
3.)Werteparameter wird nicht übergeben dafür aber der Referenzparameter ( ii) und iii) )
(Werteparameter bekommt beliebigen aus Speicher - Referenz wird übergeben)

Aufgrund, das dies nun mehere Fragen sind bin ich wie bereits erwähnt, unsicher bezüglich meheren Threads.

Lg

globetrotter77 10. Feb 2009 17:29

Re: 2 Formulare Variabeln Übergabe
 
Delphi-Quellcode:
procedure TFMain.BtnAuswahlClick(Sender: TObject);
var FAuswahl:TFAuswahl;
begin
  FAuswahl:=TFAuswahl.Create(Self); (*init*)
  try
    FAuswahl.SetAuswahlText(EdAuswahl.Text);
    if FAuswahl.ShowModal = mrOK then
      EdAuswahl.Text:=FAuswahl.GetAuswahlText;
  finally (*Darunter immer ausfuehren*)
    FAuswahl.Release; (*Abschnitt(Form) aufrufbar*)
  end;
end;
das kann nicht gehen!
FAuswahl ist ja bereits im 2. Unit vorhanden (das ist das 2. Formular)
Wenn du nun innerhalb einer procedure nochmal eine Variable gleichen Namens definierst, kennt die procedure nur die interne Variable und weiß nicht, dass du die aus der 2. Unit meinst.

Also alles raus, was
var FAuswahl:TFAuswahl heißt

Außerdem:
Ich nehme mal an, dass du das Formular ganz normal mit Datei|Neu|Formular erzeugt hast.
Dann übernimmt das Hauptprogramm auch das Create desselben und du brauchst dich nicht drum zu kümmern.

Also TFAuswahl.Create auch raus! (und entsprechend auch FAuswahl.Release)

Dann bleibt übrig:
Delphi-Quellcode:
procedure TFMain.BtnAuswahlClick(Sender: TObject);
begin
  with FAuswahl do
  begin
    SetAuswahlText(EdAuswahl.Text);
    ShowModal;
    if ModalResult=mrOk then
    begin
      EdAuswahl.Text:=FAuswahl.GetAuswahlText;
      ... // weitere Statements
    end;
  end;
end;

procedure TFMain.Button1Click(Sender: TObject);
var a:integer;
begin
  a:=FAuswahl.test;
  Label1.Caption:=inttostr(a);
end;

usw.
Statt SetAuswahlText(..) und GetAuswahlText könnte man auch
FAuswahl.CoAuswahl.ItemIndex
bzw.
FAuswahl.CoAuswahl.Text
direkt ansprechen.

Hast du bei den beiden Buttons in Formular 2 (FAuswahl) das ModalResult richtig belegt oder Default/Cancel=True gesetzt?

DeddyH 10. Feb 2009 17:35

Re: 2 Formulare Variabeln Übergabe
 
Zitat:

Zitat von globetrotter77
FAuswahl ist ja bereits im 2. Unit vorhanden (das ist das 2. Formular)

Trotz Brilleputzen habe ich das im geposteten Code nirgends entdecken können.

globetrotter77 10. Feb 2009 18:01

Re: 2 Formulare Variabeln Übergabe
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von globetrotter77
FAuswahl ist ja bereits im 2. Unit vorhanden (das ist das 2. Formular)

Trotz Brilleputzen habe ich das im geposteten Code nirgends entdecken können.

Sapperlot!
Da hätte ICH mir lieber mal die Brille putzen sollen!
Dann stimmt das alles natürlich nicht mehr, was ich geschrieben habe!

Außer, man nutzt den Weg, wie er normalerweise von Delphi bereits erzeugt wird über Datei|Neu|Formular (da war ich wohl ein bisschen zu sehr drauf fixiert)

Edit:
Und das halte ich für jemanden, der sich noch nicht so richtig sicher ist, auch für den besseren Weg.

@thomasku:
Zum besseren Verständnis:
Wenn du ein neues Formular entwirfst, ist es normalerweise nicht sofort sichtbar, sondern es gibt ein Hauptformular, das zum Start angezeigt wird.
Die eigentliche Programmdatei (xy.dpr) enthält die Aufrufe, die für die Erzeugung erforderlich sind.

Wenn du aus dem Hauptformular das zweite Formular mit ShowModal aufrufst, wird dieses 2. Formular sichtbar und kann bearbeitet werden. Wenn es geschlossen wird, ist es wieder unsichtbar, d.h. das, was du ursprünglich beabsichtigt hast, nämlich Visible ein- und auszuschalten, kannst du dir sparen.

Du landest so automatisch wieder in Formular 1.

thomasku 10. Feb 2009 20:11

Re: 2 Formulare Variabeln Übergabe
 
Hallo Globetrotter77 und Deddy H und vielen Dank für eure Antworten.

Das gepostete Programm ist wie gesagt eine Erweiterung und Kommentierung des Programms welches mir Omata in Beitrag #4 gegeben hat.

Der von euch diskutierte Teil ist von Omata geschrieben, meine Erweiterungen sind dann jeweils die
Funktionen und Prozeduren i),ii),iii) bzw. die Globale Variable.

Persönlich würde ich auch wie beschrieben Grundsätzlich ein neues Formular erzeugen.
(Also Datei|Neu|Formular bzw den Button benutzen)

Zitat:

Zitat von globetrotter77
Hast du bei den beiden Buttons in Formular 2 (FAuswahl) das ModalResult richtig belegt oder Default/Cancel=True gesetzt?

Dazu am besten das Programm von Omata downloaden, sehe derzeit nicht das ich diese Frage beantworten kannst. :mrgreen:

LG

globetrotter77 10. Feb 2009 20:36

Re: 2 Formulare Variabeln Übergabe
 
Zitat:

Zitat von thomasku
Zitat:

Zitat von globetrotter77
Hast du bei den beiden Buttons in Formular 2 (FAuswahl) das ModalResult richtig belegt oder Default/Cancel=True gesetzt?

Dazu am besten das Programm von Omata downloaden, sehe derzeit nicht das ich diese Frage beantworten kannst. :mrgreen:

LG

Sorry, das mit Default/Cancel war auch ein Unsinn von mir ... vergiss das wieder!
Aber ModalResult sollte gesetzt werden, jedenfalls dann, wenn das Formular nach Knopfdruck tatsächlich geschlossen werden soll!
Und du kannst das selber feststellen, indem du beim Entwurf das 2. Formular aufmachst, den jeweiligen Button anklickst und dann im Object Inspector die Eigenschaft ModalResult suchst. Markier sie einfach mal und drück dann F1.

thomasku 10. Feb 2009 21:11

Re: 2 Formulare Variabeln Übergabe
 
Hallo Globetrotter77 und vielen Dank für die Antwort.

Sollte natürlich kann heißen (nicht kannst) :oops:

Bin derzeit noch bei den ersten Anfängen und wollte nur die Grundlagen der Formularübergabe verstehen.
Werde mich sicher noch mit den Modul- result und Show auseinandersetzen allerdings sehe ich derzeit noch nicht diese Stufe.

Zitat:

Zitat von thomasku
Zu diesen Programm hatte ich nun, eigentlich meine Fragen (siehe auch #5)
1.)
Delphi-Quellcode:
{ TFAuswahl }
Hat dieser Kommentar eine Bedeutung für die Übergabe?
2.)Der globalen Variable wird kein Wert zugewiesen bzw. bekomme ich einen beliebigen ( i) )
3.)Werteparameter wird nicht übergeben dafür aber der Referenzparameter ( ii) und iii) )
(Werteparameter bekommt beliebigen aus Speicher - Referenz wird übergeben)

Aufgrund, das dies nun mehere Fragen sind bin ich wie bereits erwähnt, unsicher bezüglich meheren Threads.

Lg

globetrotter77 10. Feb 2009 21:43

Re: 2 Formulare Variabeln Übergabe
 
Zitat:

Zitat von thomasku
Zu diesen Programm hatte ich nun, eigentlich meine Fragen (siehe auch #5)
1.)
Delphi-Quellcode:
{ TFAuswahl }
Hat dieser Kommentar eine Bedeutung für die Übergabe?

Nein!
Alle Angaben in geschweiften Klammern werden als Kommentar gewertet,
es sei denn, sie beginnen mit {$...}
Zitat aus der Online-Hilfe (Compiler-Direktiven (Delphi)):
Zitat:

Eine Compiler-Direktive ist ein Kommentar mit einer speziellen Syntax. Compiler-Direktiven können deshalb überall dort verwendet werden, wo Kommentare erlaubt sind. Eine Compiler-Direktive beginnt mit einem $ als erstem Zeichen nach dem Kommentarzeichen. Darauf folgt der Name der Direktive (bestehend aus einem oder mehreren Buchstaben). Auf den Namen und die erforderlichen Parameter können Kommentare folgen.
Zitat:

2.)Der globalen Variable wird kein Wert zugewiesen bzw. bekomme ich einen beliebigen ( i) )
3.)Werteparameter wird nicht übergeben dafür aber der Referenzparameter ( ii) und iii) )
(Werteparameter bekommt beliebigen aus Speicher - Referenz wird übergeben)
Wenn du keinen Wert zuweist, ist das Ergebnis i.a. unbestimmt oder zumindest nicht auswertbar ... eigentlich logisch!
i)
Hier wird einer Procedure-internen Variablen a ein Wert zugewiesen, nämlich der, der aktuell in FAuswahl in der Variablen test steht.
Dieser wird dann als Text in Label1 angezeigt. Wenn allerdings die Variable test noch nicht belegt wurde, ist das Ergebnis auch unbestimmt.
ii) Hier wird die Procedure-interne Variable a als Parameter an eine Routine im anderen Formular übergeben. Nachdem sie nicht gesetzt wurde, ist das Ergebnis unbestimmt. Dies würde auch gelten, wenn du sie an eine lokale Procedure übergeben würdest.
iii) dto.


Und unbestimmt heißt meistens "richtiger Schrott"! Was halt gerade an dieser Speicherstelle war ...

thomasku 10. Feb 2009 22:10

Re: 2 Formulare Variabeln Übergabe
 
Hallo Globetrotter77 und vielen Dank für deine Antwort.


Das mit dem Kommentar ist mir nun klar, Danke.
(Also noch nicht das mit § aber ich hoffe das dies irgendwann noch kommt :D )

zu i) Ich dachte das ich in Form2 (Auswahl) durch den Button1 'test' den Wert 1 zuweisen kann nur dieser Wert wird leider nicht übergeben.

zu ii) Wie meinen Sie/(Du) das diese nicht gesetzt wurde?
Gerade verwirrend für mich an dieser Variante ist das es als Referenzparameter ( iii) )
funktioniert allerdings nicht als Werteparameter.
Wenn ich procedure test2 bzw function test2b aufrufe bekomme ich einen beliebigen Wert, jedoch
test3 sowie test3b liefern ihre Werte.

Lg

//edit

letzte Zeile überlesen!
Ich dachte nun gerade das ich mit den Funktionen und Prozeduren die Werte setze?
Also zu mind mit test2 und test2b

globetrotter77 10. Feb 2009 22:40

Re: 2 Formulare Variabeln Übergabe
 
Zitat:

Zitat von thomasku
(Also noch nicht das mit § aber ich hoffe das dies irgendwann noch kommt :D )

kein Paragraph, sondern Dollar!!! siehe Hilfe!
Zitat:

Wenn ich procedure test2 bzw function test2b aufrufe bekomme ich einen beliebigen Wert, jedoch
test3 sowie test3b liefern ihre Werte.

letzte Zeile überlesen!
Ich dachte nun gerade das ich mit den Funktionen und Prozeduren die Werte setze?
Also zu mind mit test2 und test2b
es ist eigentlich egal, ob es manchmal funktioniert oder nicht.
man sollte grundsätzlich keine Parameter übergeben, die nicht 100%ig initialisiert wurden!
deshalb sollte man auch niemals darauf hoffen, dass an anderer Stelle dafür gesorgt wurde (z.B. durch ButtonClick)!

thomasku 10. Feb 2009 22:53

Re: 2 Formulare Variabeln Übergabe
 
Hallo und vielen Dank wieder.

Mmh leider verstehe ich nicht, warum diese nicht initialisiert wurden sind?
Ich Weise doch in jeder Prozedur bzw Funktion welche ich Aufrufe, den Parametern einen festen Wert zu.

Sorry für die dummen Fragen...

Lg


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