AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Überschreitung des Maximums (-1) im stringgrid
Thema durchsuchen
Ansicht
Themen-Optionen

Überschreitung des Maximums (-1) im stringgrid

Ein Thema von Veepas · begonnen am 19. Dez 2013 · letzter Beitrag vom 26. Dez 2013
Antwort Antwort
Veepas

Registriert seit: 19. Dez 2013
2 Beiträge
 
#1

Überschreitung des Maximums (-1) im stringgrid

  Alt 19. Dez 2013, 20:56
hallo Leute,
folgendes ist mir gerade passiert, er soll an der kommentierten stelle checken ob die vorhandenen Koordinaten außerhalb meines Stringgrids liegen. Mein stringgrid geht von 0 -9 in beide richtungen. bitte helft mir.. weiß echt nicht mehr weiter)

Code:
if Form1.stringgrid1.cells[Globala, Globalb]='1' then
      begin
      Form1.stringgrid1.cells[Globala,Globalb]:='3';
      if (Form1.stringgrid1.cells[Globala+Globala1,Globalb+Globalb1]='2')or (Form1.stringgrid1.cells[Globala+Globala1,Globalb+Globalb1]='4') or(Globala+Globala1<0) or (Globala+Globala1>9) or (Globalb+Globalb1<0) or (Globalb+Globalb1>9) then // hier an dieser stelle kommt der error sobald globala oder globalb -1 oder kleiner ist..
        begin
          if (Form1.stringgrid1.cells[Globalx-Globala1,Globaly-Globalb1]='2') or (Form1.stringgrid1.cells[Globalx-Globala1,Globaly-Globalb1]='4') or (Globalx-Globala1<0) or (Globalx-Globala1>9) or (Globaly-Globalb1<0) or (Globaly-Globalb1>9) then
            begin
            versenkt:=1;
            showmessage('Schiff Versenkt');
            counter:=counter-1;
            flaute:=0;
            zugbeginn;
            end
          else
            begin
            showmessage('Ich habe dein Schiff getroffen' + inttostr(globalx)+'/'+ inttostr(globaly))  ;
            treffer2;
            end;

      end
      else
          begin
          treffer2;
          end;
      end
    else
      begin
        Form1.stringgrid1.cells[Globala,Globalb]:='5';
        Flaute:=0;

      end;
end;
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Überschreitung des Maximums (-1) im stringgrid

  Alt 19. Dez 2013, 23:27
Also bevor ich mich dazu äußere eine Frage: ist deine Formatierung ein Ding des Zufalls oder steckt da System dahinter?

Hier sind 6 Zeichen eingerückt
Delphi-Quellcode:
if Form1.stringgrid1.cells[Globala, Globalb]='1then
      begin
Hier zwei 2 Zeichen
Delphi-Quellcode:
          else
            begin
Hier 4 Zeichen
Delphi-Quellcode:
      else
          begin
Schwer zu entscheiden, oder?

also deinen Fehler kann ich nicht überprüfen, da da einiges fehlt, aber diese Zeile gefällt mir persönlich nicht so recht:
Delphi-Quellcode:
      if (Form1.stringgrid1.cells[Globala+Globala1,Globalb+Globalb1]='2')or (Form1.stringgrid1.cells[Globala+Globala1,Globalb+Globalb1]='4') or(Globala+Globala1<0) or (Globala+Globala1>9) or (Globalb+Globalb1<0) or (Globalb+Globalb1>9) then // hier an dieser stelle kommt der error sobald globala oder globalb -1 oder kleiner ist..
//...
Was gefällt mir da nicht?
Delphi-Quellcode:
if (Form1.stringgrid1.cells[Globala+Globala1,Globalb+Globalb1]='2')or (Form1.stringgrid1.cells[Globala+Globala1,Globalb+Globalb1]='4') ...
//...
Zuerst greifst du anscheinend auf das StringGrid zu, per Zeilen- und Spaltenwert...
Delphi-Quellcode:
... or(Globala+Globala1<0) or (Globala+Globala1>9) or (Globalb+Globalb1<0) or (Globalb+Globalb1>9) then // hier an dieser stelle kommt der error sobald globala oder globalb -1 oder kleiner ist..
//...
... aber erst nach dem du zugegriffen hast, prüfst du ob die Werte ok sind.

Was hältst du davon zuerst zu prüfen ob die Werte ok sind, und dann erst auf das StringGrid zuzugreifen?

Etwa so (ungeprüft):
Delphi-Quellcode:
  if NOT ((Globala+Globala1<0) or (Globala+Globala1>9) or (Globalb+Globalb1<0) or (Globalb+Globalb1>9)) then //ich denke NOT ist hier gewünscht
    if (stringgrid1.cells[Globala+Globala1, Globalb+Globalb1] = '2') or (stringgrid1.cells[Globala+Globala1,Globalb+Globalb1]='4') then //
//...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Überschreitung des Maximums (-1) im stringgrid

  Alt 20. Dez 2013, 07:15
Zitat:
Mein stringgrid geht von 0 -9 in beide richtungen.
Zitat:
// hier an dieser stelle kommt der error sobald globala oder globalb -1 oder kleiner ist..
Eigentlich müsste in dem Fall der Fehler schon sehr viel früher auftreten, nämlich bei
Zitat:
if Form1.stringgrid1.cells[Globala, Globalb]='1then
, da hier auf eine Zelle zugegriffen wird, die es nicht gibt. Und noch 2 Dinge: falls das eine Methode von TForm1 sein sollte, dann lass das "Form1." überall weg oder ersetze es durch "Self.". Und benutze Zwischenvariablen, damit wird der Code auch deutlich lesbarer. Von der Trennung von Logik und Darstellung will ich gar nicht erst anfangen.
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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Überschreitung des Maximums (-1) im stringgrid

  Alt 20. Dez 2013, 08:58
Ein bischen Trennung hilft schon:
Delphi-Quellcode:
function CheckPosition(x, y: Integer): Boolean;
begin
  Result := (y >= 0) and (y <= 9) and (y >= 0) and (y <= 9);
end;

function GetPosition(x, y: Integer): string;
begin
  if CheckPosition(x, y) then
    Result := Form1.stringgrid1.cells[x, y]
  else
    Result := '#'; // außerhalb des Spielfelds
end;

function SetPosition(x, y: Integer; AValue: string);
begin
  if CheckPosition(x, y) then
    Form1.stringgrid1.cells[x, y] := AValue;
end;

{ob der Ablauf so richtig ist...}
  if GetPosition(Globala, Globalb) = '1then
  begin
    SetPosition(Globala, Globalb) := '3';
    s := GetPosition(Globala + Globala1, Globalb + Globalb1);
    if (s = '2') or (s = '4') or (s = '#') then
    begin
      s := GetPosition(Globalx - Globala1, Globaly - Globalb1);
      if (s = '2') or (s = '4') or (s = '#') then
      begin
        versenkt:=1;
        showmessage('Schiff Versenkt');
        counter:=counter-1;
        flaute:=0;
        zugbeginn;
      end
      else
      begin
        showmessage('Ich habe dein Schiff getroffen' + inttostr(globalx)+'/'+ inttostr(globaly));
        treffer2;
      end;
    end
    else
    begin
      treffer2;
    end;
  end
  else
  begin
    SetPosition(Globala, Globalb) := '5';
    Flaute:=0;
  end;

Geändert von Blup (20. Dez 2013 um 09:33 Uhr)
  Mit Zitat antworten Zitat
Veepas

Registriert seit: 19. Dez 2013
2 Beiträge
 
#5

AW: Überschreitung des Maximums (-1) im stringgrid

  Alt 26. Dez 2013, 02:48
Vielen Dank für all eure Antworten, es war tasächlich der Fehler gewesen, dass ich erst auf das stringgrid zu gegriffen habe und dann gechekct habe ob es überhaupt drin liegt, also prompt mal getauscht jetzt löuft es wie geschmiert, vielen dank leute ihr seit super ! und fröhliche Weihnachten euch allen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Überschreitung des Maximums (-1) im stringgrid

  Alt 26. Dez 2013, 08:20
Und wieso überall Form1 angeben. Ich gehe davon aus das du den Codeauszug als Methode des entsprechenden Formular definiert hast.
Hier ist dann der Zugriff auf Form1 eher Problemen behaftet wenn man mal den Code umbaut oder extrahiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:08 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