Autor Beitrag
arminho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Di 08.03.05 21:27 
hallo habe ein stringgrid..und ich will die aktuell ausgewählte zeile löschen, alle zeilen drunter sollen natürlich um eine nach oben verschoben werden.
habs mal so versucht aber da kommt eine fehlermeldung: Gitterindex außerhalb des zulässigen bereichs... k.A.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Zeilelschen1Click(Sender: TObject);
var n:word; 
begin 
  with stringgrid1 do
  begin
    row:=stringgrid1.rowcount;
    if row<rowcount-1 then 
      for n:=stringgrid1.rowcount to rowcount-2 do
        rows[n]:=rows[n+1];

    rowcount:=rowcount-1
  end
end;
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 08.03.05 21:32 
Hallo!

Such mal nach Suche in: Delphi-Forum, Delphi-Library STRINGGRID ZEILE LÖSCHEN.

Gruß
Tino
arminho Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Di 08.03.05 21:34 
hab mir alles mögliche angeschaut in der suche aber ich packs einfach nicht...
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 08.03.05 21:52 
Versuch es mal mit diesem Sourcecode:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure GridDelRow (aRowNumber : Integer; aGrid : TStringGrid);
var 
  Loop : Integer;
begin
  aGrid.Row := aRowNumber;
  if (aGrid.Row = aGrid.RowCount -1then
    aGrid.RowCount := aGrid.RowCount - 1
  else
    begin
      for Loop := aRowNumber To aGrid.RowCount - 1 do
        aGrid.Rows[Loop] := aGrid.Rows[Loop  + 1];
      aGrid.RowCount := aGrid.RowCount - 1;
    end;
end;
arminho Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Di 08.03.05 22:13 
funzt leider nicht..... Zugriffsverletzung ...
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.03.05 22:17 
Wo kommt da eine Zugriffsverletzung? Ist dein Index zu hoch gewählt? Beschreib das mal genauer.
arminho Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Di 08.03.05 22:20 
wenn ich den code bei meinem mainmenü fürs löschen einfüge und zur Laufzeit dann auf das Menü drücke...kommt ne fehlermeldung "Zugriffsverletzung" und das Programm hängt.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 08.03.05 22:39 
Setze mal einen Breakpoint [F5] auf die erste auführbare Zeile (in meinem Beispiel oben die Zeile 5) und gehe dann Schritt für Schritt [F8] deinen Code durch und prüfe wo der Fehler erscheint.
arminho Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Di 08.03.05 22:43 
wann wird denn deine procedur ausgeführt?
procedure GridDelRow (aRowNumber : Integer; aGrid : TStringGrid);

wie muss ich denn das jetzt verändern... habs gemacht geht aber wie gesagt nicht.
schon ganz am anfang wird der fehler angezeigt...ich habs jetzt so stehen:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Zeilelschen1Click(Sender: TObject);
var   
  Loop : Integer;
  aRowNumber : Integer;
  aGrid : TStringGrid;
begin  
  aGrid.Row := aRowNumber;  
  if (aGrid.Row = aGrid.RowCount -1then  
    aGrid.RowCount := aGrid.RowCount - 1  
  else  
    begin  
      for Loop := aRowNumber To aGrid.RowCount - 1 do  
        aGrid.Rows[Loop] := aGrid.Rows[Loop  + 1];  
      aGrid.RowCount := aGrid.RowCount - 1;  
    end;  
end;
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.03.05 23:00 
kein Wunder:
du musst die Prozedur genauso wie Tino sie gepostet hat bei dir im Quelltext einfügen, unterhalb von implementation und dort wo du sie aufrufen willst schreibst du:

ausblenden Delphi-Quelltext
1:
GridDelRow(1,StringGrid1);					
arminho Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Di 08.03.05 23:05 
jetzt löscht er aber immer die oberste zeile...er soll aber die, die ausgewählt ist löschen!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 09.03.05 12:26 
Du solltest dir auch ein bisschen den Sourcecode anschauen und versuchen zu verstehen.

Die Procedure, GridDelRow, die ich dir gepostet habe erwartet zwei Parameter: aRowNumber und aGrid. aRowNumber gibt an welche Zeile gelöscht werden soll und aGrid gibt das Grid an in wechlem die Zeile gelöscht werde soll.

Wenn Du also die Funktion GridDelRow so aufrufst wie in den Beispiel von OneOfTen dann ist es doch klar das immer die erste Zeile gelöscht wird da der erste Parameter eine 1 ist.

Du musst also statt der 1 dort die aktuelle Zeile des Grids angeben. Wie du die aktuelle Zeile des Grid bekommst erfährst du in der Delphi Hilfe unter TStringGrid -> Eigenschaften.

Gruß
Tino