Autor Beitrag
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: So 01.06.03 14:31 
Hi ihr.

Ich habe ein Problem mit folgender Schleife:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TFischform.ZubClick(Sender: TObject);
begin
NGrid.RowCount:=NGrid.RowCount+1;
For Z:=0 To NGrid.RowCount-1 Do
    Begin
    If (NGrid.Cells[0, Z]=P1.Text) And (NGrid.Cells[1, Z]=P2.Text)
    Then Begin
         ShowMessage('Dieser Spieler existiert bereits.');
         End
    Else Begin
         NGrid.Cells[0, NGrid.RowCount-1]:=P1.Text;
         NGrid.Cells[1, NGrid.RowCount-1]:=P2.Text;
         End;
    End;
P1.Clear;
P2.Clear;
If NGrid.RowCount>1 Then NGrid.FixedRows:=1;
end;


Ich habe zwei Edit-Felder (P1 & P2) und ein StringGrid(NGrid). Wenn ich nun den Button klicke, sollen die Werte aus P1 und P2 in die Zeilen eingetragen werden, die oben angegeben sind. Nun habe ich aber das Problem, daß in dem StringGrid nur 2 Spalten (ColCount=2) und eine Zeile (RowCount=1) ist. In dieser Zeile steht nach Programmstart "Name" in der einen Spalte & "Vorname" in der anderen drin (daher If NGrid.RowCount...). Ich bekomme bei Eintragung die Meldung, der Spieler existiere bereits, obwohl er der erste Spieler ist, der eingetragen wird. Nun bin ich heute irgendwie nicht ganz bei mir und kann den Fehler nicht finden (muß an der Sonne liegen). Kann mir jemand schnell auf die Sprünge helfen und mich mal kneifen, damit ich hier aufwache?

_________________
Hasta La Victoria Siempre


Zuletzt bearbeitet von Terra23 am Di 03.06.03 18:59, insgesamt 1-mal bearbeitet
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: So 01.06.03 23:52 
Titel: Re: Problem in der Schleife..
Hallo!

So sollte es funzen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TFischform.ZubClick(Sender: TObject);
var 
  z:longint;
  vorhanden:Boolean;

begin
  vorhanden := False;

  For Z:=1 To NGrid.RowCount-1 Do
    begin
    If (NGrid.Cells[0, Z]=P1.Text) And (NGrid.Cells[1, Z]=P2.Text) Then
    Begin
      ShowMessage('Dieser Spieler existiert bereits.');
      vorhanden := True;  
     end;
    End;

  if not vorhanden then
  begin
    NGrid.RowCount:=NGrid.RowCount+1;
    NGrid.Cells[0, NGrid.RowCount-1]:=P1.Text;
    NGrid.Cells[1, NGrid.RowCount-1]:=P2.Text;
    NGrid.FixedRows:=1;
  end;

  P1.Clear;
  P2.Clear;
end;


Da das Grid die 1. Zeile fest hat, darf die Schleife nur ab der 2. Zeile (Row=1) laufen!
Das Vergrößern des Grids sollte auch nur erfolgen, wenn was eingefügt wird (bei Deinem Source wird jedesmal eingefügt, auch wenn der Name schon existiert - leere Einträge sind die Folge). Beim Einfügen weiß ich ja, daß mehr als 1 Zeile da sind, so daß ich damit FixedRows setzen kann.
Die Variable z deklarieren wir bitte lokal, sonst kann es bei der ereignisgesteuerten Windows-Programmierung zu Seiteneffekten kommen (keiner weiß, was alles gleichzeitig läuft, z.B. auf Timer- Tastatur- und Mausereignisse!)

Gruß

Dietmar Brüggendiek
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Mo 02.06.03 00:28 
Ja, danke. Es funktioniert. Am Anfang hat meine Prozedur auch funktioniert, nur dann habe ich ein paar Dinge umgestellt und die Position verändert, dann kam es so, daß ich bei jedem Eintrag diese Meldung bekam. Jetzt geht es wieder, danke. :-) Schönen Abend noch..

_________________
Hasta La Victoria Siempre