Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehlermeldung bei begin und then (https://www.delphipraxis.net/122991-fehlermeldung-bei-begin-und-then.html)

foerster7892 25. Okt 2008 16:22

Re: Fehlermeldung bei begin und then
 
@helmi hab ich geändert danke für den tipp

@jfhans aber ich hab ne frage kannst du mir kurz GANZ GENAU sagen was ich in procedure zeile ändern muss (hab mir das heute erst erfragt mit dem unterprogramm auf formular beziehen(das mit dem target))


plz :roteyes:

DeddyH 25. Okt 2008 16:25

Re: Fehlermeldung bei begin und then
 
Zeig doch mal den Aufruf der Prozedur. Außerdem musst Du noch nicht einmal nil übergeben, sondern es genügt, wenn Du Dich mit dem Zeilen-/Spaltenindex vertan hast.

taaktaak 25. Okt 2008 16:28

Re: Fehlermeldung bei begin und then
 
Hallo Foerster.
Du hast jetzt eine freie Prozedur, aus dieser kannst du nicht direkt auf Controls des Forms zugreifen. Mache daraus eine Methode, dann brauchst du den Parameter gar nicht mehr, weil du das Grid direkt ansprechen kannst.

DeddyH 25. Okt 2008 16:30

Re: Fehlermeldung bei begin und then
 
Zitat:

Zitat von taaktaak
Du hast jetzt eine freie Prozedur, aus dieser kannst du nicht direkt auf Controls des Forms zugreifen.

Wie bitte?

foerster7892 25. Okt 2008 16:32

Re: Fehlermeldung bei begin und then
 
so also mein stringgrid hat 7 Spalten(6 die ich benutze) und 8 Zeilen (7 die ich benutze)

das is der ganze quelltext (soll mal nen 4 Gewinnt werden(muss danach nur noch die Abfrage für spalten und diagonalen machen (nichts vorsagen was die beiden abfragen angeht das will ich alleine austüfteln 8) )))

Delphi-Quellcode:
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Label1: TLabel;
    Button8: TButton;
    Button9: TButton;
    procedure Button8Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;
  Spieler, y, x :integer;
implementation

{$R *.dfm}

procedure Kontrolle(const Target: TStringgrid);
var a, b, r, richtig :integer;
    gefunden :boolean;
begin
  y:=-1;

    begin
      For r := 1 to 6 do
      begin
        For a := 1 to 4 do
        begin
          richtig:=0;
          For b := 1 to 4 do
          begin
            y:=a+b;
            gefunden:=Target.cells[r,y]=IntToStr(Spieler);
            if
              gefunden
            then
              richtig:=richtig+1
          end;
          if
            richtig=4
          then
            break;
        end;
        if
          richtig=4
        then
          break;
      end;
      if
        richtig=4
      then
        break;
    end;

  if
    richtig=4
  then
    showmessage('Spieler' +IntToStr(Spieler) +'hat gewonnen!');


end;

procedure Spielstein(const Target: TStringgrid);
begin
  If
    Spieler=2
  then
    Spieler:=0;
    Spieler:=Spieler+1;

  If
    (Target.cells[y,1] ='1') or (Target.Cells[y,1] ='2')
  then
    showmessage('Hier passt kein Spielstein mehr rein wählen sie eine andere Reihe!')
  else
    begin
      If
        (target.cells[y,2] ='1') or (target.Cells[y,2] ='2')
      then
        target.cells[y,1]:=IntToStr(Spieler)
      else
        begin
          If
            (target.cells[y,3] ='1') or (target.Cells[y,3] ='2')
          then
            target.cells[y,2]:=IntToStr(Spieler)
          else
            begin
              If
                (target.cells[y,4] ='1') or (target.Cells[y,4] ='2')
              then
                target.cells[y,3]:=IntToStr(Spieler)
              else
                begin
                  If
                    (target.cells[y,5] ='1') or (target.Cells[y,5] ='2')
                  then
                    target.cells[y,4]:=IntToStr(Spieler)
                  else
                    begin
                      If
                        (target.cells[y,6] ='1') or (target.Cells[y,6] ='2')
                      then
                        target.cells[y,5]:=IntToStr(Spieler)
                      else
                        target.cells[y,6]:=IntToStr(Spieler)
                    end;
                end;
            end;
        end;
    end;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  y:=1;
  Spielstein(Stringgrid1);
  Kontrolle(Stringgrid1)
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
  y:=2;
  Spielstein(Stringgrid1);
  Kontrolle(Stringgrid1)
end;

procedure TForm3.Button3Click(Sender: TObject);
begin
  y:=3;
  Spielstein(Stringgrid1);
  Kontrolle(Stringgrid1)
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
  y:=4;
  Spielstein(Stringgrid1);
  Kontrolle(Stringgrid1)
end;

procedure TForm3.Button5Click(Sender: TObject);
begin
  y:=5;
  Spielstein(Stringgrid1);
  Kontrolle(Stringgrid1)
end;

procedure TForm3.Button6Click(Sender: TObject);
begin
  y:=6;
  Spielstein(Stringgrid1);
  Kontrolle(Stringgrid1)
end;

procedure TForm3.Button7Click(Sender: TObject);
begin
  y:=7;
  Spielstein(Stringgrid1);
  Kontrolle(Stringgrid1)
end;

procedure TForm3.Button8Click(Sender: TObject);
begin
  For y:= 1 to 7 do
  begin
    For x:= 1 to 6 do
    begin
      Stringgrid1.Cells[y,x]:='';
    end;
  end;
end;

procedure TForm3.Button9Click(Sender: TObject);
begin
  close;
end;

end.

DeddyH 25. Okt 2008 16:38

Re: Fehlermeldung bei begin und then
 
Zitat:

Delphi-Quellcode:
        For a := 1 to 4 do
        begin
          richtig:=0;
          For b := 1 to 4 do
          begin
            y:=a+b;
            gefunden:=Target.cells[r,y]=IntToStr(Spieler);

Wenn a = 4 und b = 4, wird y zu 8, da Du 8 Zeilen hast, hat die letzte den Index 7. Du liest also über die verfügbaren Zeilen hinaus. Vermutlich gibt es noch mehrere solche Stellen, ich habe beim ersten Fund aufgehört zu suchen.

foerster7892 25. Okt 2008 16:44

Re: Fehlermeldung bei begin und then
 
ich lese nciht über die zeilen hinaus :gruebel:

mit dem ersten kontrolliere ich die spalten
mit dem zweien such ich mir jeweils eine spalte aus
und mit dem letzten kontrolliere ich die diese und die 3 folgenden auf true
wo gehe ich da über die zeilen hinaus???????????????? 1-7 nutze ich und die 0.Zeile lass ich weg

taaktaak 25. Okt 2008 16:46

Re: Fehlermeldung bei begin und then
 
Zitat:

Wie bitte?
Detlef, sorry! Hab es anders gemeint, als geschrieben! Bitte meine Bemerkung ganz schnell vergessen :oops:

DeddyH 25. Okt 2008 16:51

Re: Fehlermeldung bei begin und then
 
Bei 8 Zeilen hat die erste Index 0 und die letzte Index 7. Jeder Zugriff auf Cells[x,8] führt ins Nirvana.

foerster7892 25. Okt 2008 16:55

Re: Fehlermeldung bei begin und then
 
ja richtig
und wann bitte greif ich auf die 8. zu???


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz