AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

StringGrid - Aktuelle Zeile löschen

Ein Thema von Sturmrider · begonnen am 9. Mai 2006 · letzter Beitrag vom 26. Jul 2007
Antwort Antwort
Seite 2 von 2     12
marabu

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

Re: StringGrid - Aktuelle Zeile löschen

  Alt 10. Mai 2006, 21:49
Sag einmal - warum hast du Formular und Unit voneinander entkoppelt? Geschieht bei dir überhaupt irgendetwas, wenn du auf die Schalter in deiner Werkzeugleiste klickst?

Ich vermute, dass du im Eifer des Gefechts die Zeile {$R *.DFM} aus dem Implementation-Abschnitt gelöscht hast. Füge die Zeile gleich als erste im Abschnitt wieder ein, speichere die Unit, entferne sie aus deinem Projekt und füge sie dann wieder hinzu. Syntaktisch ist alles in Ordnung und Testen kannst du dann auch.

marabu
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 13. Mär 2006
30 Beiträge
 
#12

Re: StringGrid - Aktuelle Zeile löschen

  Alt 10. Mai 2006, 22:41
ups, stimmmt dummer Fehler
Ich habe genau das gemacht, was du geschrieben hast ... jetzt kommen zwar keine Fehlermeldungen mehr, aber dafür funktioniert das mit dem löschen leider immer noch nicht (alle anderen Buttons funktionieren wieder wie immer ^^)
Könntest du vielleicht nocheinmal kurz drüber gucken? (da ist nämlich glaube ich noch irgendwo ein kleiner Fehler drin uu *ihn aber nicht findet*)

Gruß Sturmrider
Angehängte Dateien
Dateityp: zip spielplan_2_148.zip (35,5 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
marabu

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

Re: StringGrid - Aktuelle Zeile löschen

  Alt 10. Mai 2006, 23:08
Du musst mal genau beschreiben, was du von der Löschfunktion erwartest. Ein "Fehler" tritt eigentlich nicht auf. Wie soll ich testen?

Ich fürchte meine Batterie ist alle... Morgen geht es weiter.

Gute Nacht

marabu
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 13. Mär 2006
30 Beiträge
 
#14

Re: StringGrid - Aktuelle Zeile löschen

  Alt 10. Mai 2006, 23:15
Ich erwarte, dass wenn man auf löschen (diesen roten X-Button) klickt, der aktuell ausgewählte Eintrag im StringGrid gelöscht wird und der der sich unter diesem Beitrag befindet (wenn dort einer ist) eins weiter nach oben rückt ^^
k, bis Morgen dann gute Nacht ^^

Achtung hier nach nur noch 1 Beitrag, dann nächste Seite
  Mit Zitat antworten Zitat
marabu

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

Re: StringGrid - Aktuelle Zeile löschen

  Alt 11. Mai 2006, 08:37
Guten Morgen.

Die aktuelle Zeile steht in der Eigenschaft Row:

Delphi-Quellcode:
procedure TFSpielplan01.BitBtnEintragLoeschenClick(Sender: TObject);
var
  iSF: Integer;
begin
{
  if StringGrid1.Cells[3, iSP] = 'H' then
  begin
    iSF := Pred(FSpielfeld.StringGrid1.RowCount);
    DeleteRow(FSpielfeld.StringGrid1, iSF);
    ResizeGrid(FSpielfeld.StringGrid1);
  end;
}

  DeleteRow(StringGrid1, StringGrid1.Row);
  ResizeGrid(StringGrid1);
end;
Allerdings musst du dir etwas einfallen lassen um die zugehörige Zeile aus dem SpielfeldGrid zu identifizieren. Momentan wird dort einfach die letzte Zeile im Grid gelöscht. Das ist bestimmt nicht richtig so. Dabei könnte dir diese Funktion helfen:

Delphi-Quellcode:
function LocateRow(sg: TStringGrid; index: Integer; value: String): Integer;
begin
  Result := sg.Cols[index].IndexOf(value);
end;
Du brauchst dann eine spezielle (unsichtbare) Spalte in beiden Grids. Im SpielfeldGrid enthält sie einen eindeutigen Schlüssel für die jeweilige Zeile, im SpielplanGrid enthält sie den Schlüssel der zugehörigen Zeile aus dem SpielfeldGrid.

marabu
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 13. Mär 2006
30 Beiträge
 
#16

Re: StringGrid - Aktuelle Zeile löschen

  Alt 11. Mai 2006, 14:38
*nickt* soetwas habe ich mir schon gedacht (dass ich unsichtbar für jede Zeile eine ID mitlaufen lassen muss...)
aber genau das ist ja mein Problem, wie ich die aktuelle, markierte Zeile herausfinden kann (das mit dem löschen ist dann denke ich weniger das Problem)
Was macht diese funktion denn, die du mir da gepostet hast? *erlichgesagt keine Ahnung hat*
(Ich weiß, das gehört nicht zum Thema, aber kennst du vielleicht eine gute Delphi-Seite mit der/auf der man/ich noch ein bischen etwas dazu lernen kann? wir in der Schule sind leider an das Buch: "Ojektorientierte Programmierung mit Delphi - Ein Unterrichtswerk Bankd 1" gebunden...und das Buch ist leider voll mit Fehlern und geht auf wirklich wesentliche Dinge gar nicht ein <<")

Achso, übrigens das was ich bisher habe (auch upgeloadet habe) funktioniert leider überhaupt nicht (das mit dem löschen) auch nicht mit dem letzten Eintrag in die Tabelle ->auch nicht, wenn ich wie du im Post den Teil in dem loeschButtonClick lösche/kommentiere...

Gruß Sturmrider

PS: Tut mir leid, dass ich mich so doof anstelle :$
  Mit Zitat antworten Zitat
Sturmrider

Registriert seit: 13. Mär 2006
30 Beiträge
 
#17

Re: StringGrid - Aktuelle Zeile löschen

  Alt 15. Mai 2006, 10:18
k, hab das Problem gelöst ^-----^ danke für eure/deine Hilfe!!!
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#18

Re: StringGrid - Aktuelle Zeile löschen

  Alt 26. Jul 2007, 19:54
Ich habe mir mal selbst add- und delete-Methoden für TStringGrid geschrieben, die so, wie folgt, meiner Meinung nach objekt-orientiert implementiert sind:
Delphi-Quellcode:
{
  @author
          Nogge
  @description
          TStringGridEx extends TStringGrid with two methods, which based on
          methods and properties of TStringGrid. So TStringGridEx can easily be
          used as type-cast class without creating an instance of it.
            - addRow
                  Adds a new row to the end of the StringGrid and fills a
                  specific string in each column
            - deleteRow
                  Clears the content of each column of the row specified by an
                  index and, if applicable, deletes it from the StringGrid
}

unit StringGridEx;

interface

uses Grids, SysUtils;

type
  EListError = class(Exception);

  TStringGridEx = class(TStringGrid)
  public
    function addRow(const VCols: array of String): Integer;
    (* HINT for reintroduce:
        - overrides virtual method of TCustomGrid
        - changes access right from protected to public
    *)

    procedure deleteRow(ARow: Longint); reintroduce;
  end;

implementation

function TStringGridEx.addRow(const VCols: array of String): Integer;
var
  i: Integer;
begin
  // catch exception
  if (Length(VCols) > ColCount) then
    raise EListError.CreateFmt('Col index out of bounds (%d)', [High(VCols)])
  else
  begin
    // execute code
    if (Length(Cells[0, FixedRows]) = 0) then // wenn kein Zeichen enthalten ist
    begin
      for i := Low(VCols) to High(VCols) do
        Cells[i, FixedRows] := VCols[i];
    end
    else
    begin
      RowCount := RowCount +1;
      for i := Low(VCols) to High(VCols) do
        Cells[i, RowCount-1] := VCols[i];
    end;
    Result := RowCount -1;
  end;
end;

(*
    Clears all entries (Strings[] AND Objects[]) of the specific row
*)

procedure TStringGridEx.deleteRow(ARow: Longint);
begin
  // FixedRows should not be deleted
  if (ARow < FixedRows) or (ARow >= RowCount) then
  begin
    raise EListError.CreateFmt('Row index out of bounds (%d)', [ARow]);
  end
  else
  begin
    if (RowCount-1 > FixedRows) then
      inherited DeleteRow(ARow)
    else // FixedRows is always less than RowCount
      Rows[FixedRows].Clear;
  end;
end;
Verwendungsbeispiel:
Delphi-Quellcode:
uses: [...], StringGridEx;
[...]
// als einfacher Aufruf...
TStringGridEx(StringGrid1).deleteRow(2);
// ...oder als Methode
procedure DeleteRow(sg: TStringGrid; index: Integer);
begin
  TStringGridEx(sg).deleteRow(index);
end;
Hierdurch werden alle public-Methoden und Properties der Klasse TStringGrid sowie die beiden zusätzlichen public-Methoden von TStringGridEx zur Verfügung gestellt, ohne das private-Methoden und Attribute sichtbar werden.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 15:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf