AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Globale Variable in anderen Forms = 0 obwohl schon definiert

Globale Variable in anderen Forms = 0 obwohl schon definiert

Ein Thema von DelphiforIngBachelor · begonnen am 10. Jun 2018 · letzter Beitrag vom 11. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2   
DelphiforIngBachelor

Registriert seit: 8. Jun 2018
3 Beiträge
 
#1

Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 10. Jun 2018, 19:27
Hallo Leute,

Ich habe folgendes allgemeines Problem

BSP:
In Form 6 wird die Variable "ZimmerG" mit 6 definiert

In Form 8 soll die Variable angezeigt werden. Anstatt 6 wird jedoch 0 angezeigt.


Weiß jemand wie ich das Problem in den Griff bekomme?


Mit freundlichen Grüßen

Jan

Hier die relevanten Ausschnitte des Quellcodes der Unit6:

Delphi-Quellcode:
unit Unit6;

interface

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

type
  TForm6 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit4: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    Edit5: TEdit;
    Label10: TLabel;
    Edit6: TEdit;
    Label11: TLabel;
    Edit7: TEdit;
    Button1: TButton;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Button2: TButton;
    Label3: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Label18: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public


  function Zimmer(a, b, c, d, e, f: Real):Real;

  function BerechneAbluft(Baeder, Kuechen, Toiletten, HWR: Real): Real;

  function BerechneZuluft(Nutzer: Real):Real;

  function Innenliegend(Baeder, Kuechen, Toiletten, HWR: Real): Real;
    { Public-Deklarationen }
  end;


var


  Form6: TForm6;
  Baeder, Kuechen, Toiletten, HWR, Schlafzimmer, Wohnzimmer, Nutzer, ZimmerG, Innen, a, b, c, d, e, f: Real;



implementation

uses Unit7;

function TForm6.Innenliegend(Baeder, Kuechen, Toiletten, HWR: Real): Real;
begin
Innenliegend := Baeder+Kuechen+Toiletten+HWR
end;


 function TForm6.BerechneAbluft(Baeder, Kuechen, Toiletten, HWR: Real): Real;

 begin
 BerechneAbluft := (Baeder+Kuechen)*60+(Toiletten+HWR)*30;
 end;

 function TForm6.Zimmer(a, b, c, d, e, f: Real): Real;
 begin
Zimmer := a+b+c+d+e+f;
 end;

 function TForm6.BerechneZuluft(Nutzer: Real):Real;

 begin
 BerechneZuluft := (Nutzer*30);
 end;
{$R *.dfm}


procedure TForm6.Button1Click(Sender: TObject);

begin
a := StrToFloat(Edit8.Text);
b := StrToFloat(Edit9.Text);
c := StrToFloat(Edit10.Text);
d := StrToFloat(Edit11.Text);
e := StrToFloat(Edit7.Text);
f := StrToFloat(Edit6.Text);
ZimmerG := (Zimmer(a, b, c, d, e, f));
Innen := (Innenliegend(Baeder, Kuechen, Toiletten, HWR));

Nutzer := StrToFloat(Edit5.Text);
Baeder := StrToFloat(Edit1.Text);
Kuechen := StrToFloat(Edit2.Text);
Toiletten := StrToFloat(Edit3.Text);
HWR := StrToFloat(Edit4.Text);
Label16.Caption := FloatToStr(BerechneZuluft(Nutzer));
Label13.Caption := FloatToStr(BerechneAbluft(Baeder, Kuechen, Toiletten, HWR));
Label18.Caption := FloatToStr(ZimmerG);


if

Label16.Caption = '0'

then

showmessage ('Bitte prüfen Sie Ihre Angaben');

end;


procedure TForm6.Button2Click(Sender: TObject);
begin
Form7.Show;
end;

end.

[B]und der Unit 8[/B]

unit Unit8;

interface

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

type
  TForm8 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label14: TLabel;
    Button1: TButton;
    Label13: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form8: TForm8;

  Bewertung, Infiltration, Feuchteschutz, Innen, ZimmerG, Nutzer: Real;

implementation

{$R *.dfm}

procedure TForm8.Button1Click(Sender: TObject);
begin
Label17.Caption := FloatToStr(ZimmerG);
Label16.Caption := FloatToStr(Nutzer);
Label18.Caption := FloatToStr(Bewertung);

if
Feuchteschutz < Infiltration
then
Label13.Caption := 'Ja'
else
Label13.Caption := 'Nein';

if
Innen > 0
then
Label15.Caption := 'Ja'
else
Label15.Caption := 'Nein'


end;


end.

Geändert von mkinzler (10. Jun 2018 um 20:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 10. Jun 2018, 20:09
Bearbeite bitte Deinen Text und setze Deinen Code innerhalb [ DELPHI] Dein Code [ /DELPHI] (ohne die leerzeichen in den eckigen Klammern) damit es lesbarer wird, Danke.
Ps: Wenn es mehrere Dateien sind, benutze mehrere [ DELPHI] Blöcke, Danke.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 10. Jun 2018, 20:15
Du hast in beiden Units jeweils eine lokale Variable mit dem selben Namen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 10. Jun 2018, 20:25
Du meinst globale Variable
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#5

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 10. Jun 2018, 21:02
Ich reduziere deinen Code auf das Wesentliche:
Delphi-Quellcode:
unit Unit6;

interface

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

var
  ..., ZimmerG, ...: Real;
Delphi-Quellcode:
unit Unit8;

interface

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

var
  ..., ZimmerG, ...: Real;
So wie es aussieht hast du in Unit6 und Unit8 beide Male ZimmerG als globale Variable daklariert. Wenn du also in Unit6 der Variable einen Wert zuweist, und du eine gleichnamige Variable in Unit8 hast, greifen Funktionen in Unit8 auch auf die Variable in Unit8. Nicht auf die in Unit6.

Geändert von Alallart (10. Jun 2018 um 22:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 10. Jun 2018, 21:10
Wenn er den Namespace voranstellt klappt das schon, aber ob das dann Sinn und Zweck erfüllt steht in einem anderen Kapitel.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.625 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 10. Jun 2018, 22:51
Ein Paradebeispiel warum globale Variablen keine gute Idee sind.
Wäre das eine Eigenschaft des Formulars, wäre diese eindeutig mit Form8.ZimmerG angesprochen worden.

Der Übersicht halber würde es auch Sinn machen statt der Standardnamen wie Form8 besser der Funktion entsprechende eigebe Namen zu benutzen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 11. Jun 2018, 04:18
Hallo,
so schlimm sing globale Variablen nicht.

Aber ich würde alla globalen Varablen zumindestens in ein separate Unit auslagern.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.625 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 11. Jun 2018, 04:59
so schlimm sing globale Variablen nicht.
Dazu kommt, dass du schlecht siehst wer diese wann initialisiert und hineinschreibt. Deshalb gibt das nur unnötige Folgefehler, wenn man sie ohne Not verwendet (wie es meistens der Fall ist). Wartbar ist etwas anderes...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.145 Beiträge
 
Delphi 12 Athens
 
#10

AW: Globale Variable in anderen Forms = 0 obwohl schon definiert

  Alt 11. Jun 2018, 10:50
Und niemals extern auf die Variablen direkt zugreifen, möglichst immer über Property/Methoden.
Wenn es erstmal nur ein einfaches preperty ist, was direkt auf die Variablen geht, so kann man später immernoch Getter und Setter einfügen.
Gut, um Schreibzugriffe zu prüfen und auch zum Debuggen ganz praktisch, um da Haltepunkte reinzumachen und und und
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:38 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