Variablen und Objekte nicht übernehmen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Variablen und Objekte nicht übernehmen

Beitrag von flashkid »

Hi.

Irgendwie fühle ich mich so, als ob ich der einzige wäre, der auf Fragen mit Lazarus / Free Pascal stößt :D
Folgende Frage:
Ich habe ein Programm mit mehreren Forms. Diese enthalten viele Variablen, Objekte usw. Nun will ich nicht alle Variablen in die anderen Forms übertragen, sondern nur die Möglichkeit haben von jedem Form aus die anderen zu erreichen (per Button).

Derzeit habe ich das einfach so:

Code: Alles auswählen

implementation
uses FormA, FormB, FormC;
und das in jedem Form.
Nur habe ich nun eben das Problem, dass sich einige Variablen in den verschiedenen Forms in die Quere kommen. Ich brauche die Variablen nicht Formübergreifend, ich möchte nur

Code: Alles auswählen

Form2.show;
benutzen können, um in ein anderes Form zu wechseln.

Wie kann ich das anstellen?
Gruß, flashkid

PS: Heißt es der, die, oder das Form? Ich denke das Form, wegen das Formblatt?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Variablen und Objekte nicht übernehmen

Beitrag von Socke »

In der Regel besitzt ein Programm auch nur ein Hauptfenster. Sobald das geschlossen wird, werden auch alle andren geschlossen. Du solltest vielleicht überlegen, ob alle Formulare sich gegenseitig erreichen müssen (in der Regel ist das nicht nötig bzw. lässt sich anders entwerfen).

Wenn es doch funktionieren soll, muss du eine extra Kommunikationsunit erstellen, über die die Formulare aufgerufen werden. Damit das ganze übersichtlich bleibt, solltest du das für absolut alle Formulare so handhaben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Variablen und Objekte nicht übernehmen

Beitrag von flashkid »

Kannst du mir das mit der Kommunikationsunit näher erklären?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Variablen und Objekte nicht übernehmen

Beitrag von Socke »

Die Unit liefert anderen Units Referenzen auf die Formulare. Das kannst du durch reine Variablen machen (lohnt sich aber nur bei wenigen, bekannten Formularen):

Code: Alles auswählen

unit formsave;
uses uform2;
var form1: TForm;
form2: TForm2;
implementation
end.

Irgendwie musst du dann natürlich die Variablen noch mit Werten belegen. Das kannst du bswp. schon beim Programmstart machen.

Code: Alles auswählen

program mytest;
uses uform1, uform2, formsave;
begin
Application.CreateForm(TForm1,form1);
Application.CreateForm(TForm2,form2);
Application.Run;
end.

Achtung: Damit das funktioniert, solltest musst du deinen bestehenden Quelltext überprüfen, ob du auch immer die richtigen Instanzen (Self) in den Methoden benutzt.

Natürlich kannst du das auch noch ausbauen (Listen, etc.).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Variablen und Objekte nicht übernehmen

Beitrag von flashkid »

Vielen Dank, das werde ich mir dann denke ich erst am Wochenende genauer anschauen :)

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Variablen und Objekte nicht übernehmen

Beitrag von lrlr »

sag halt fenster, anstelle von form
und versuch nicht dein problem zu beschreiben (variablen erreichen, Ich brauche die Variablen nicht Formübergreifend .usw. ) damit kann keiner etwas anfangen, weil du zuviele "fachbegriffe" falsch verwendest und durcheinander mischt..

versuche zu beschreiben was du erreichen möchtest:

willst du mehrere ("gleichberechtigte") fenster ?

willst du form2 anzeigen, oder ist es schon von anfang an sichtbar ..

soll man am hautfomular arbeiten könne, während form2 offen ist ?!?

usw.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Variablen und Objekte nicht übernehmen

Beitrag von Euklid »

Hallo flashkid,

Du kannst mit FormA.Variable1 und FormB.Variable1 meines Erachtens durchaus zwischen den gleichnamigen Variablen der verschiedenen Forms unterscheiden - wenn das das ist, was Du meinst.

Viele Grüße, Euklid

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Variablen und Objekte nicht übernehmen

Beitrag von flashkid »

@lrlr:
Ich habe ein Hauptfenster, das beim Programmstart angezeigt werden soll. Wenn ich auf einen der 3 Buttons klicke soll das 2. bzw 3. Fenster angezeigt werden und das 1. versteckt werden. Im 2. und 3. Fenster habe ich dann jeweils wieder 3 Buttons, mit denen ich auf ein anderes Fenster springen kann. Es soll immer nur 1 Fenster geöffnet sein.
Die Variablen der einzelnen Fenster sollen aber nur für das eigene Fenster sichtbar sein.
Ich hoffe das kann man nun verstehen :)

@Euklid:
Dann müsste ich ja vor jede Variable FormA, FormB oder FormC schreiben, das ist schon sehr unschön finde ich :neutral:

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Variablen und Objekte nicht übernehmen

Beitrag von lrlr »

bitte mal HIER lesen: (1. bester google hit)
objekte haben keine variablen ..
(sondern felder, properties usw. )

http://www.delphi-treff.de/sprachen/obj ... entierung/



>Die Variablen der einzelnen Fenster sollen aber nur für das eigene Fenster sichtbar sein.

dann musst du sie als z.b. protected deklarieren, ...

>Dann müsste ich ja vor jede Variable FormA, FormB oder FormC schreiben, das ist schon sehr unschön finde ich :neutral:

nein, musst du nicht ..


ich hab dir das mal ausprogrammiert..
Dateianhänge
3fenster.zip
beispiel
(3.67 MiB) 68-mal heruntergeladen

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Variablen und Objekte nicht übernehmen

Beitrag von flashkid »

Vielen Dank, das hilft schon sehr :)
Dann werde ich mal meine ganzen Variablen als private deklarieren ;)

Antworten