AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Varibleninhalt wird gelöscht

Ein Thema von Denny · begonnen am 25. Nov 2006 · letzter Beitrag vom 26. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Denny

Registriert seit: 22. Nov 2006
Ort: Stollberg
9 Beiträge
 
Delphi 7 Personal
 
#1

Varibleninhalt wird gelöscht

  Alt 25. Nov 2006, 20:08
Hallo!

Ich habe folgendes Problem. Der Variableninhalt wird nach Abschluss jeder Prozedur automatisch gelöscht. Wie kann ich diese Variable auch in anderen Prozeduren nutzen, ohne dass der Inhalt gelöscht wird. Bei Visual Basic konnte man eine public Variable in einem Modul deklarieren. Wie funktioniert das bei Delphi?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#2

Re: Varibleninhalt wird gelöscht

  Alt 25. Nov 2006, 20:09
Indem Du die Variable auf der zugehörigen Klasse deklarierst. z.B. in der Formularklasse im private, protected oder auch public bereich, je nachdem, von wo aus man auf die Variable zugreifen können muss.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Varibleninhalt wird gelöscht

  Alt 25. Nov 2006, 20:12
Hi,

du hast jetzt warhscheinlich einen Code dieser Art:
Delphi-Quellcode:
procedure eins;
var i : Integer;
begin
  i := 0;
  inc(i);
  dec(i); // sinnlos, ist auch nur ein Beisipel
end;

procedure zwei;
begin
  machwas(i) // hier kracht es
end;
Oben im Private-Teil solltest du die Variable schreiben, wenn du mehrere Units benutzt, musst du das in den public-Teil schreiben und in der anderen Unit z.B. Form1.i.

Ich hoffe, ich habe dich richtig verstanden.


Arghs, roter Kasten, wo bist du ?
  Mit Zitat antworten Zitat
Denny

Registriert seit: 22. Nov 2006
Ort: Stollberg
9 Beiträge
 
Delphi 7 Personal
 
#4

Re: Varibleninhalt wird gelöscht

  Alt 25. Nov 2006, 20:25
Das ist mein Code:

Delphi-Quellcode:
var
  Form1: TForm1;
  Richtung, RWeite: integer;
Delphi-Quellcode:
procedure TForm1.tmrBall2Timer(Sender: TObject);
begin
Randomize;
if Richtung = 0 then
  begin
    Richtung := Random(1);
    RWeite := Random(5);
  end;

Ball.Top := Ball.Top - 10;

if Richtung = 0 then
  Ball.Left := Ball.Left - Rweite
else
  Ball.Left := Ball.Left + Rweite;
end;
Wenn Richtung noch kein Wert zugewiesen wurde soll er den Variablen Richtung und RWeite Werte zuweisen. Wenn Richtung nicht 0 ist, also einen Wert hat, soll die if-Anweisung übersprungen werden und nur die Bewegung durchgeführt werden. Richtung und RWeite werden aber logischerweise nach einmaligem auführen gelöscht und der Ball fliegt eine Kurve, weil ihm dauernd neue Flugdaten gegeben werden.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Varibleninhalt wird gelöscht

  Alt 26. Nov 2006, 07:36
Hai Denny,

in deinem Code ist ein grundlegender Fehler.
Zitat von Denny:
Das ist mein Code:
    Richtung := Random(1);
Das bedeutet das Richtung immer den Wert 0 haben wird. Random liefert einen Zufallswert im Bereich von 0 bis < Range zurück.
Wenn der Range 1 ist wird also immer eine Zufallszahl zwichen 0 und 0 erzeugt

BTW: Delphi-Referenz durchsuchenRandomize sollte nur einmal beim Programmstart (OnCreate der Form) aufgerufen werden.
Stephan B.
  Mit Zitat antworten Zitat
Denny

Registriert seit: 22. Nov 2006
Ort: Stollberg
9 Beiträge
 
Delphi 7 Personal
 
#6

Re: Varibleninhalt wird gelöscht

  Alt 26. Nov 2006, 08:27
Achso, danke! Wie könnte ich das dann schreiben, dass wenn der Ball an diesem gewissen Punkt ist eine Flugrichtung bekommt und dann in diese Richtung weiterfliegt, bis er wieder an dem nächsten Grenzpunkt ist. Mit Richtung wollte ich eigentlich eine 0 bzw. 1 erzeugen. 0 -> fliegt nach links, 1 -> fliegt nach rechts. RWeite ist der Winkel, in dem der Ball fliegt.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Varibleninhalt wird gelöscht

  Alt 26. Nov 2006, 08:30
Hai Denny,

ein Random(2) erzeugt eine Zufallszahl von 0 bis <2 also 0 bis 1 oder aus der Menge {0/1}.

Den Rest musst Du in deiner Programmlogik machen.
Stephan B.
  Mit Zitat antworten Zitat
Denny

Registriert seit: 22. Nov 2006
Ort: Stollberg
9 Beiträge
 
Delphi 7 Personal
 
#8

Re: Varibleninhalt wird gelöscht

  Alt 26. Nov 2006, 08:34
so! thx. nun bleibt noch mein hauptproblem. ich arbeite noch nicht lange mit deplphi, genauer gesagt, seit 3 wochen. wenn ich variablen als public deklarieren will, wo muss ich das genau hinschreiben? bitte mal auf idiotendeutsch erklären.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Varibleninhalt wird gelöscht

  Alt 26. Nov 2006, 08:43
Hai Denny,

deklariere sie innerhalb deiner Klasse für das Formular.

Delphi-Quellcode:
  TDemo_Form = class(TForm)
    Button1: TButton;
    Ball: TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    Richtung: Integer;
    RWeite: Integer;
  public
    { Public-Deklarationen }
  end;

Wenn Du das ganze dann noch eleganter machen möchtest würde ich für die Richtung ein Delphi-Referenz durchsuchenSet anlegen um mit aussagekräftigen Namen arbeiten zu können. Das könnte dann so aussehen:
Delphi-Quellcode:
unit U_Main;

interface

uses
  Windows, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type

  TRichtung = (links, rechts, undefiniert);

  TDemo_Form = class(TForm)
    Button1: TButton;
    Ball: TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    Richtung: TRichtung;
    RWeite: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Demo_Form: TDemo_Form;

implementation


{$R *.dfm}

procedure TDemo_Form.FormCreate(Sender: TObject);
begin
  Randomize;
  RWeite := 0;
  Richtung := undefiniert;
end;

procedure TDemo_Form.Button1Click(Sender: TObject);
begin
  if Richtung = undefiniert then
  begin
    Richtung := TRichtung(Random(2));
    RWeite := Random(5);
  end;
  case Richtung of
    links: Ball.Left := Ball.Left - Rweite;
    rechts: Ball.Left := Ball.Left + Rweite;
  end;
  Ball.Top := Ball.Top - 10;
end;
Stephan B.
  Mit Zitat antworten Zitat
Denny

Registriert seit: 22. Nov 2006
Ort: Stollberg
9 Beiträge
 
Delphi 7 Personal
 
#10

Re: Varibleninhalt wird gelöscht

  Alt 26. Nov 2006, 09:00
Erstmal vielen Dank für deine Mühe. Ich habe vorerst die erste Variante genommen, weil ich die Zweite nicht gleich hinbekommen habe. Der Ball fliegt jedoch immernoch Kurven, weil im ständig neue Werte übermittelt Werten.

Delphi-Quellcode:
unit Tischtennis;

interface

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

type
  TForm1 = class(TForm)
    tmrBall: TTimer;
    tmrBall2: TTimer;
    Shape1: TShape;
    Wand: TShape;
    Shape5: TShape;
    Shape3: TShape;
    Shape4: TShape;
    Schlaeger: TShape;
    Shape2: TShape;
    Ball: TShape;
    procedure tmrBallTimer(Sender: TObject);
    procedure tmrBall2Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
      Richtung, RWeite: integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Tempo: integer;

implementation

{$R *.dfm}

procedure TForm1.tmrBallTimer(Sender: TObject);
begin
if Ball.Top + Ball.Height >= Schlaeger.Top then
  begin
    tmrBall.Enabled := false;
    tmrBall2.Enabled := true
  end
else
  Ball.Top := Ball.Top + Tempo;
end;

procedure TForm1.tmrBall2Timer(Sender: TObject);
begin
Randomize;
if Richtung = 0 then
  begin
    Richtung := Random(2);
    RWeite := Random(5);
  end;

Ball.Top := Ball.Top - Tempo;

if Ball.Top <= Wand.Top + Wand.Height then
  tmrBall2.Enabled := false
else
  if Richtung = 0 then
    ball.Left := ball.Left - Rweite
  else
    ball.Left := ball.Left + Rweite;
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Richtung := 0;
Rweite := 0;
Tempo := 20;
end;

end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:49 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