_
toggle menu eXmatrikulationsamt.de
online: 364 gäste

>Globale Variablen bei Delphi Warum geht das nicht?

Themen Layout: Standard · Linear · [Outline] Thema abonnieren | Thema versenden | Thema drucken
post 19 Apr 2007, 12:49
avatar
3. Schein
***

Punkte: 256
seit: 18.07.2006

Bevor ich hier mit der Schilderung meines Problems beginne, möchte ich höflichst darauf hinweisen, dass ich ein zartes Gemüt besitze.
Aus diesem Grunde bitte ich euch, mich nicht aufgrund der von mir verwendeten Programmiersprache auszulachen und auszubuhen weeping.gif
Es handelt sich um Delphi 6 *duck*
Na ja, schien mir an geeignetsten für mein Vorhaben: Die Programmierung eines kurzweiligen Eroberungsspiel. Und so.
Nach stundenlanger Vorbereitung und Skizzierung des Programmablaufs fing ich mit der Programmierung an.
Meine Idee war, das Spiel in Runden zu gestalten, wobei jede Runde für ein Jahr steht. Das Jahr ist in "9 Forms" unterteilt, d.h. z.b. in Form 3 wird die Steuerhöhe bestimmt, dann schliesst sich Form 3 und Form 4 öffnet sich, in dem es um das Miliär geht usw...
Schliesst man jedoch ein Form(ular), werden die Variablen nicht in das nächste Form(ular) übernommen, was ziemlich doof ist, da zum Beispiel Geld in jedem Formular benötigt wird.
Und Lust jede Variable in einer Textdatei zu speichern hab ich auch nicht, zuviel Schreibkram.
Also muss ich globale Variablen benutzen, hab ich auch versucht, nur funzt der Mist nicht so wie ich will.
Also ich will folgendes: In Form 1 (Unit 1) eine globale Variable deklarieren, und sie mit einem Wert belegen.
Anschliessend will ich Form 1 schliessen, Form 2 (Unit 2) öffnen, und es soll mir in diesem Form 2 die implementierte globale Variable aus Form 1 anzeigen. Klingt an sich simpel, aber es will einfach nicht funktionieren!!!!

Danke für die Hilfe.

//edit: Wer mir bei der Lösung meines Problems hilft, bekommt das irgendwann fertige Spiel statt für 49.99 Euro im Saturn umsonst rofl.gif

Dieser Beitrag wurde von Bilderguckn: 19 Apr 2007, 12:51 bearbeitet


--------------------
"Wir haben keinen großen Krieg, keine große Depression. Unser großer Krieg ist ein spiritueller, unsere große Depression ist unser Leben."
ProfilPM
AntwortenZitierenTOP
 
Antworten
post 19 Apr 2007, 18:22
avatar
tangel
*******

Punkte: 1038
seit: 18.01.2005

Es kommt darauf an, wo du die Variablen deklarierst, interface=global, implementation=nur in der Unit sichtbar.
Wie schon angedeutet, solltest du aber globale Variablen weitestgehend vermeiden und das Modell des Spiels als Klassenstruktur abbilden. Die Objekte manipulierst du dann über deine Formulare.

interface

var
global:TMyGame;

implementation

var
lokal:TMyMoney;


--------------------
bild kann nicht angezeigt werden
ProfilPM
AntwortenZitierenTOP
post 19 Apr 2007, 19:17
avatar
3. Schein
***

Punkte: 256
seit: 18.07.2006

Yocheckit und tingel, wo ich die Variablen deklarieren muss, ist mir klar. Nur wird die Variable komischerweise in einem anderen Unit nicht benutzt. Ich hab mal gegoogelt, und da stand irgendwas von "unit einbinden". Hab ich getan,aber hm...

Folgender Aufbau: Ich hab ein Formular 1 , auf dem sich ein Editfeld 1 befindet, in das ich meinen Namen eingebe. Klicke ich nun auf Button 1, so wird das Editfeld 1 in der Variable "name" gespeichert und es schliesst Formular 1.
Formular 2 öffnet sich. Jetzt müsste theoretisch die Variable "name" in Label 1 auf Formular 2 geschrieben werden. Tut es aber nicht. Ich wette, es ist ein saudummer Fehler, und wenn ich drauf komme, fällt es mir wie Schuppen von den Augen und ich erschiesse mich am nächsten Baum.


Hier die Unit1

Zitat
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  name: string;      // globale String-Variable

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
      name := edit1.text;  // Variable wird ein Wert zugewiesen

      form1.Hide;
      form2.show;
end;

end.





Und hier Unit2

Zitat
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
            label1.Caption := name;  // Label1 aus Form2 soll in Unit1 deklarierte globale Variable anzeigen
end;

end.




Wo ist der Fehler?

Tingel, natürlich könnte ich die Objekte in ein Formular packen und über die Units manipulieren, aber das ist immenser Schreibkram,und darauf hab ich keine Lust wacko.gif

Dieser Beitrag wurde von Bilderguckn: 19 Apr 2007, 19:30 bearbeitet
ProfilPM
AntwortenZitierenTOP
post 19 Apr 2007, 20:24
avatar
tangel
*******

Punkte: 1038
seit: 18.01.2005

Zitat(Bilderguckn @ 19 Apr 2007, 19:17)
Tingel, natürlich könnte ich die Objekte in ein Formular packen und über die Units manipulieren, aber das ist immenser Schreibkram,und darauf hab ich keine Lust  wacko.gif

Machst du das Ganze, um Programmieren zu lernen? Dann wäre deine Herangehensweise lediglich dazu geeignet, zu lernen, daß sowas ganz schnell unübersichtlich und nervig wird. Darüber hinaus wird sich dein Programm schnell "funky" verhalten.
Schon dein Kommentar, die Objekte in ein Formular zu packen verrät die Denkweise, die dahinter steckt wink.gif Google mal nach Model View Controller, da wirst du so einiges finden und mußt nicht alles auf die harte Tour lernen.
ProfilPM
AntwortenZitierenTOP
Beiträge
_joschi_   Globale Variablen bei Delphi   19 Apr 2007, 12:49
SidKennedy   ähm das klingt sehr danach, als wärst du gerade da...   19 Apr 2007, 13:51
stth   jap... kann ich mich nur anschließen...   19 Apr 2007, 17:16
yocheckit   hast du das in der form: unit name; interface uses...   19 Apr 2007, 18:11
yocheckit   die unit2 gehört mit in den uses-bereich der unit1...   19 Apr 2007, 20:08
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: