AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Formulare Variabeln Übergabe

Offene Frage von "thomasku"
Ein Thema von thomasku · begonnen am 29. Jan 2009 · letzter Beitrag vom 10. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
thomasku

Registriert seit: 4. Jan 2009
31 Beiträge
 
#1

2 Formulare Variabeln Übergabe

  Alt 29. Jan 2009, 13:32
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 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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: 2 Formulare Variabeln Übergabe

  Alt 29. Jan 2009, 13:53
Zugriffsmethoden!
  Mit Zitat antworten Zitat
thomasku

Registriert seit: 4. Jan 2009
31 Beiträge
 
#3

Re: 2 Formulare Variabeln Übergabe

  Alt 29. Jan 2009, 14:12
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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: 2 Formulare Variabeln Übergabe

  Alt 29. Jan 2009, 16:12
...
Angehängte Dateien
Dateityp: zip zweiteform_648.zip (2,1 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
thomasku

Registriert seit: 4. Jan 2009
31 Beiträge
 
#5

Re: 2 Formulare Variabeln Übergabe

  Alt 4. Feb 2009, 12:06
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.

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
Angehängte Dateien
Dateityp: zip 2te_form_131.zip (218,3 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: 2 Formulare Variabeln Übergabe

  Alt 4. Feb 2009, 12:21
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.
  Mit Zitat antworten Zitat
thomasku

Registriert seit: 4. Jan 2009
31 Beiträge
 
#7

Re: 2 Formulare Variabeln Übergabe

  Alt 4. Feb 2009, 13:55
Hallo Nuclearping und vielen Dank,

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

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
  Mit Zitat antworten Zitat
thomasku

Registriert seit: 4. Jan 2009
31 Beiträge
 
#8

Re: 2 Formulare Variabeln Übergabe

  Alt 8. Feb 2009, 15:00
Hallo,

Ich mache mal ein push.

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

Lg
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#9

Re: 2 Formulare Variabeln Übergabe

  Alt 8. Feb 2009, 15:07
ä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
  Mit Zitat antworten Zitat
thomasku

Registriert seit: 4. Jan 2009
31 Beiträge
 
#10

Re: 2 Formulare Variabeln Übergabe

  Alt 10. Feb 2009, 16:44
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 )

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.)
{ 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:51 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