Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Variabeln aus eigenen Prozeduren nicht nur lokal verwenden


inf0fan - Fr 26.06.09 17:49
Titel: Variabeln aus eigenen Prozeduren nicht nur lokal verwenden
kurzes Beispielprogramm:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.bsp(x:integer);
begin
  x:=5;
end;

procedure TForm1.Button1click...;
begin
  showmessage(inttostr(x));
end;

Hier würde bei mir statt 5 0 angeszeigt werden, was muss ich machen, damit das funktioniert?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Fr 26.06.09 17:58

Hallo! :welcome:

Ich sehe keinen Zusammenhang zwischen den beiden Prozeduren. :nixweiss:
Meinst du sowas?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function TForm1.bsp(AValue: Integer): Integer;
begin 
  Result := AValue + 5;
end

procedure TForm1.Button1Click(Sender: TObject);
var
  x: Integer;
begin
  x := bsp(50);
  ShowMessage(IntToStr(x)); // 55
end;


NTcomputer - Fr 26.06.09 17:59


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.bsp; 
begin 
x:=5
end


procedure TForm1.Button1click...; 
begin 
showmessage(inttostr(x)); 
end;


und oben unter

Delphi-Quelltext
1:
2:
private
  x:integer;


Damit definierst du eine Variable als global.


inf0fan - Fr 26.06.09 18:10

Erstmal danke für die schnellen antworten!
@jaenicke: ich wollte keine function benutzen, weil die procedure nicht nur dazu dient einen rückgabewert zu liefern, wa in meinem bsp. nicht so deutlich wird.(geht das mit function trotzdem?)
@NTcomputer: funktioniert so auch nicht.


jaenicke - Fr 26.06.09 18:11

user profile iconinf0fan hat folgendes geschrieben Zum zitierten Posting springen:
@NTcomputer: funktioniert so auch nicht.
Wenn du bsp nie aufrufst, natürlich nicht...
Wo du das tust hast du ja bisher nicht gepostet.

(Das meinte ich damit, dass ich keinen Zusammenhang sehe. Neben der ebenfalls fehlenden Variablendeklaration in deinem geposteten Code.)


inf0fan - Fr 26.06.09 18:12

edit: es funktioniert doch noch nicht.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.schwer1;
begin

  mittel(b);
  if b=true then schwer(c);
  if c=true then einfach;
end;


Mittel wird nicht immer durchgeführt und wenn nicht ist b=true(hier ist nicht der fehler). Trotzdem geht er nie in schwer rein.


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.mittel(b:boolean);
begin
    b:=true;
...
end;


PS: wie mache ich diese Quellcodes?

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


NTcomputer - Fr 26.06.09 20:34

1. ich hab angenommen, dass du TForm1.bsp irgendwann früher aufrufst (sonst macht es ja gar keinen sinn)
2. verstehe ich nicht, was du mit deinem letzten Post meinst, gibts da irgendeinen zusammenhang?
3. Was willst du überhaupt erreichen?


Delete - Fr 26.06.09 20:39

Kann es sein, dass Du einen Call By Reference meinst?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.bsp(var x:integer); //mit var davor
begin
  x:=5;
end;

procedure TForm1.Button1click...;
var a: integer;
begin
  bsp(a);
  showmessage(inttostr(a));
end;


inf0fan - Sa 27.06.09 15:26

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Kann es sein, dass Du einen Call By Reference meinst?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.bsp(var x:integer); //mit var davor
begin
  x:=5;
end;

procedure TForm1.Button1click...;
var a: integer;
begin
  bsp(a);
  showmessage(inttostr(a));
end;


Ja, bei mir fehlte das var, deshalb war das alles nur der name der procedure und die variabeln waren nicht global verwendbar. Tut mir Leid, dass ich mich ein bischen unverständlich ausgedrückt habe und vielen Dank für die Hilfe!