Delphi-PRAXiS
Seite 2 von 2     12   

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)

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 21:36 Uhr.
Seite 2 von 2     12   

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