Startwert zuweisen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Vexator
Beiträge: 5
Registriert: Di 13. Dez 2011, 16:35

Startwert zuweisen

Beitrag von Vexator »

Guten Abend,

ich glaube ich habe einen kleinen Denkfehler oder ich weiß es wirklich nicht. Ich hab erst vor kurzem angefangen mit Lazarus, vorher ein wenig mit Delphi. Ich bin gerade dabei ein Schere - Stein - Papier Programm zu machen , bei dem per Buttondruck auch Punkte addiert werden. Meine Frage : Wie kann ich einer Variable den Startwert 0 zuweisen, aber nur einmal, ansonsten gehen ja die Punkte wieder auf 0. Hier der Quelltext für den Schere-Button:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var geg,punktep,punkteg   :extended;
 
begin
geg := random(3) ;
 
if (geg = 0)  then
  begin
 
  end;
if (geg = 1) then
begin
  punkteg := punkteg +1;
end;
if (geg = 2) then
begin
  punktep := punktep +1;
  end;
Edit1.text := floattostr(punktep);
Edit2.text := floattostr(punkteg);
end  ;
end.
Dieser funktioniert eben nicht, es kommt die Fehlermeldung : Local variable "x" does not seem to be initialized.
Ich freu mich auf Hilfe :)

TErxleben
Beiträge: 18
Registriert: Mi 24. Mär 2010, 18:54

Re: Startwert zuweisen

Beitrag von TErxleben »

Hallo,

Du darfst Deine Variablen Punkteg und punktep nicht in der OnClick-Routine definieren, sondern im Kopf Deines Form1-Objektes. Mit einem beliebigen Wert kannst Du sie dann einmalig in der Routine TForm1.Create initialisieren.

Vexator
Beiträge: 5
Registriert: Di 13. Dez 2011, 16:35

Re: Startwert zuweisen

Beitrag von Vexator »

Danke schonmal, aber jetzt passiert gar nichts mehr wenn ich auf den Button drücke.

TErxleben
Beiträge: 18
Registriert: Mi 24. Mär 2010, 18:54

Re: Startwert zuweisen

Beitrag von TErxleben »

Na dann mal ein Komplettbeispiel :wink: :

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    punktep, punkteg: Integer;
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  punkteg := 0;
  punkteg := 0;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 var geg:extended;
 
begin
geg := random(3) ;
 
if (geg = 0)  then
  begin
 
  end;
if (geg = 1) then
begin
  punkteg := punkteg +1;
end;
if (geg = 2) then
begin
  punktep := punktep +1;
  end;
Edit1.text := inttostr(punktep);
Edit2.text := inttostr(punkteg);
end;
 
 
end.

Vexator
Beiträge: 5
Registriert: Di 13. Dez 2011, 16:35

Re: Startwert zuweisen

Beitrag von Vexator »

Hmm, er addiert trotzdem nichts, egal wie oft ich drücke ... :cry:

TErxleben
Beiträge: 18
Registriert: Mi 24. Mär 2010, 18:54

Re: Startwert zuweisen

Beitrag von TErxleben »

Kann nicht sein. Wahrscheinlich hast Du irgendwo einen Fehler in der Anpassung Deines Codes gemacht (vielleicht läuft Dein Klickevent ins Leere?). Um das beurteilen zu können, müsstet Du deinen Code allerdings hier komplett hineinkopieren.

Vexator
Beiträge: 5
Registriert: Di 13. Dez 2011, 16:35

Re: Startwert zuweisen

Beitrag von Vexator »

Es ist erstmal der komplette Code nur für die Ausgabe vom Scherebutton und ich verstehe nicht was falsch ist, aber ich denke es hat was mit dem FormCreate zu tun, kannst du mir sagen wie man die procedur eigentlich erstellt ohne sie selbst zu schreiben, denn wenn ich über Form1 zu Ereignisse gehe und dann auf OnCreate wird die procedur unter alles im Quelltext gesetzt, ist das egal?

Vexator
Beiträge: 5
Registriert: Di 13. Dez 2011, 16:35

Re: Startwert zuweisen

Beitrag von Vexator »

Wie komisch ist das denn, ich hab den Quelltext vom Scherebutton einfach in den vom Steinbutton kopiert und kompiliert und der Steinbutton funktioniert o.O?

Edit: Hab den Button neu gemacht, jetzt geht alles und danke für deine Hilfe !

-closed-

Antworten