Guten Morgen.
Die Typvereinbarung für die Klasse TGridCracker steht ja schon an einer brauchbaren Stelle. Im auskommentierten Click-Handler machst du aber mehr als nur eine Zeile in einem Grid löschen. Du prüfst, ob in der vorletzten Spalte der letzten Zeile im SpielplanGrid ein 'H' (Heimspiel?) eingetragen ist. Wenn ja, dann entfernst du die letzte Zeile aus dem SpielfeldGrid, bevor du dann die letzte Zeile aus dem SpielplanGrid auch entfernst. Beide Grids dimensionierst du neu, indem du die Gridabmessungen grob an den Zellbereich anpasst. Ich versuche mal behutsam ein paar Änderungen an deinem Click-Handler:
Delphi-Quellcode:
procedure TFSpielplan01.BitBtnEintragLoeschenClick(Sender: TObject);
var
i, iSF, iSP: Integer;
test: String;
begin
iSP := Pred(StringGrid1.RowCount);
if StringGrid1.Cells[3, iSP] = 'H' then
begin
iSF := Pred(FSpielfeld.StringGrid1.RowCount);
DeleteRow(FSpielfeld.StringGrid1, iSF);
ResizeGrid(FSpielfeld.StringGrid1);
end;
DeleteRow(StringGrid1, iSP);
ResizeGrid(StringGrid1);
end;
Die Bedingungen unter denen eine Aktion ausgeführt werden darf, solltest du außerhalb des Aktionscodes prüfen. Ob x > 0 ist, prüfst du in deinem Code eh zu spät, der Zugriff auf die Zelle mit dem 'H' ist da schon ungeprüft gescheitert.
Hier noch die Routine ResizeGrid:
Delphi-Quellcode:
procedure ResizeGrid(sg: TStringGrid);
var
iCol, iRow: Integer;
begin
with sg do
begin
Width := ColCount * GridLineWidth + Ord(BorderStyle) * 3;
for iCol := 0 to Pred(ColCount) do
Width := Width + ColWidths[iCol];
Height := RowCount * GridLineWidth + Ord(BorderStyle) * 3;
for iRow := 0 to Pred(RowCount) do
Height := Height + RowHeights[iRow];
end;
end;
Noch ein paar allgemeine Ratschläge: Versuche deinen Variablen sprechende Namen zu geben - nicht StringGrid1 sondern SpielplanGrid. Und informiere dich mal über Actions.
Freundliche Grüße vom marabu