|
Globale Variablen bei Delphi Warum geht das nicht?
|
|
 19 Apr 2007, 12:49
|

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 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 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."
|
|
|
Antworten(1 - 10)
|
|
 19 Apr 2007, 18:11
|

old 's cool!         
Punkte: 9493
seit: 12.07.2003
|
hast du das in der form: CODE unit name; interface uses blabla; type TForm1 = class(TForm) blabla; private bla public bla end; var Form1: TForm1; [COLOR=red]name: typ = konstante/variable;[/COLOR] implementation das rot gekennzeichnete kann je nach fall auch ohne "= konstante/variable" stehen. wichtig ist nur, dass die definition der globalen variablen genau an dieser stelle geschieht. ich wüsste nicht warum es sonst nicht gehen sollte. /edit: farbe geht leider nicht bei code, aber man sieht ja wo ich die farb-tags gesetzt hab.Dieser Beitrag wurde von yocheckit: 19 Apr 2007, 18:13 bearbeitet
--------------------
Kleine Aster Ein ersoffener Bierfahrer wurde auf den Tisch gestemmt. * Irgendeiner hatte ihm eine * dunkelhellila Aster * zwischen die Zähne geklemmt. * Als ich von der Brust aus * unter der Haut * mit einem langen Messer * Zunge und Gaumen herausschnitt, * muß ich sie angestoßen haben, denn sie glitt * in das nebenliegende Gehirn. * Ich packte sie ihm in die Brusthöhle * zwischen die Holzwolle, * als man zunähte. * Trinke dich satt in deiner Vase! * Ruhe sanft, * kleine Aster! -Gottfried Benn (1912)-
|
|
|
|
|
 19 Apr 2007, 19:17
|

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 Dieser Beitrag wurde von Bilderguckn: 19 Apr 2007, 19:30 bearbeitet
|
|
|
|
|
 19 Apr 2007, 20:24
|

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  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  Google mal nach Model View Controller, da wirst du so einiges finden und mußt nicht alles auf die harte Tour lernen.
|
|
|
|
|
 19 Apr 2007, 20:34
|

3. Schein   
Punkte: 256
seit: 18.07.2006
|
Zitat(tingel @ 19 Apr 2007, 20:24) 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  Google mal nach Model View Controller, da wirst du so einiges finden und mußt nicht alles auf die harte Tour lernen.  Ich meinte nicht,alles in EIN Formular packen, sondern eher alles in viele Formulare packen. Und Programmieren lernen will ich auch nicht, sondern nur mit meinen begrenzten Fähigkeiten ein Spiel basteln. Und alles was ich wissen wollte, ist wie ich eine Variable aus Unit1 auch in Unit2 benutzen kann  Ob das unübersichtlich oder "funky" ist, bleibt mein Problem. Noch vor 4-5 Jahren hab ich Delphi ganz gut beherrscht, allerdings hab ich es erst neulich wieder hervorgekramt und dabei leider festgestellt, dass ich viel vergessen und verlernt hab
|
|
|
|
|
 19 Apr 2007, 20:40
|
Advocatus Diaboli   
Punkte: 323
seit: 12.06.2005
|
zur lösung des problems: verwende einfach anstelle der bezeichnung 'name' für den globalen string eine andere bezeichnung, z.b. name1 (zum testen). "name" ist doch die standardeigenschaft für die bezeichnung von komponenten und dadurch als bezeichnung für eine variable denkbar ungeeignet, da sonst unter umständen die eigenschaft "name" einer komponente überschrieben wird. außerdem muss unit1 auch in unit2 eingebunden sein.
Dieser Beitrag wurde von hopi: 19 Apr 2007, 20:40 bearbeitet
|
|
|
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder:
|