Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: StringGrid - Aktuelle Zeile löschen

  Alt 10. Mai 2006, 08:00
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] = 'Hthen
  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
  Mit Zitat antworten Zitat