AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Doppelte Eintrage in StringGris loeschen aber wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Eintrage in StringGris loeschen aber wie?

Ein Thema von lucius · begonnen am 10. Okt 2005 · letzter Beitrag vom 11. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 21:51
Erstmal Guten Abend an alle.
Ich habe ein StringGrid das gefuellt wird mit Daten, jetzt moechte ich mittels einen Timer Doppelte Eintraege im SG loeschen, geht sowas?
Mit einer Listbox gehts:

Delphi-Quellcode:
procedure TMainForm.Timer1Timer(Sender: TObject);
var
D1, D2: integer;
begin

while D1 < listbox1.Items.Count do
begin
  for D2 := (listbox1.Items.Count - 1) downto 0 do
  begin
    if (listbox1.Items.Strings[D1] = listbox1.Items.Strings[D2]) and (D1 <> D2) then
      listbox1.Items.Delete(D2);
  end;
  inc(D1);
end;

end;
Vielleicht gut zu wissen die StringGrid hat 5 Cols und 5 Rows.
Danke im voraus.
  Mit Zitat antworten Zitat
marabu

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

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 22:07
Hallo lucius,

nur ein Ansatz - ungetestet:

Delphi-Quellcode:
procedure DeleteRow(sg: TStringGrid; iRow: integer);
var
  i: integer;
begin
  with sg do begin
    if iRow < FixedRows then
      raise Exception.Create('you cannot delete a fixed row');
    for i := Succ(iRow) to RowCount - 1 do
      Rows[i-1].Assign(Rows[i]);
    RowCount := RowCount - 1;
  end;
end;

procedure DeleteDuplicateRows(sg: TStringGrid);
var
  iLow, iHigh: integer;
begin
  for iLow := sg.FixedRows to sg.RowCount - 2 do
    for iHigh := Pred(sg.RowCount) downto Succ(iLow) do
      if sg.Rows[iHigh].Text = sg.Rows[iLow].Text then
        DeleteRow(sg, iHigh);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 22:15
Aaa der gute marabu, hallo

Ich hatte folgendes gedacht:

Delphi-Quellcode:
procedure TMainForm.Timer1Timer(Sender: TObject);
var
S1, S2: integer;
begin

while S1 < SG1.Rows.Count do
begin
  for S2 := (SG1.Rows.Count - 1) downto 0 do
  begin
    if (SG1.Rows.Count[S1] = SG1.Rows.Count[S2]) and (S1 <> S2) then
      StringGrid1.Rows[S2].Clear();
  end;
  inc(S1);
end;

end;
  Mit Zitat antworten Zitat
marabu

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

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 22:28
Du hast S1 nicht initialisiert. Und wenn du etwas im OnTimer-Ereignis erledigst, dann ist es oft ratsam den Timer für die Dauer der Verarbeitung zu deaktivieren. Außerdem fällt mir auf, dass da nirgends ein Vergleich auf doppelte Zellwerte statt findet. Ob man mit Rows.Clear() wirklich eine Zeile aus dem Grid entfernen kann, so dass die anderen Zeilen die Lücke schließen? Probiere es einfach mal aus.

Gute Nacht vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 23:11
man kann sich das ganze löschen von zeilen auch einfacher machen, da das tstringgrid die methoden moverow implementiert hat, aber leider verteckt ist.....(das ganze gibt es auch für movecolumn)

lösung die methode in einer abgeleiteten klasse wieder sichtbar machen!

Delphi-Quellcode:
type
tmovestringgrid=class(tstringgrid)
public
  procedure moverow(fromrow, torow: Integer);
end;

procedure tmovestringgrid.moverow(fromrow, torow: Integer);
begin
  inherited;
end;
..nun zum thema: die entsprechende zeile ans ende verschieben und dann rowcount dekrementieren.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 23:34
Puuu das hoert sich ja schwierig an.
Mein code funzt soweit:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ndx : Integer;
begin
  StringGrid1.RowCount := StringGrid2.RowCount;

  for ndx := 0 to StringGrid1.RowCount do
  begin
    StringGrid2.Rows[ndx] := StringGrid1.Rows[ndx];
  end;
end;
Aber ich moechte eigenlich das die erste row nicht mit kopiert wird(unveraendert bleibt), alles was ich jetzt kriege ist 2 lere SG`s.
Etwa so SG.Row := 1, dan faengt er erst ab der zweiten Reihe zu zaehlen und das ist mein Ziel.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#7

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 23:44
1..du machst ja auch keine inhaltsabfrage!
2..warum überprüfst du nicht gleich beim füllen des grids, ob der eintrag schon vorhanden ist, dann kannst du dir den ganzen anderen mist sparen.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 23:46
Uuu ibp gib mal bitte einen Ansatzcode von was du meinst damit ich mich orientieren kann.
Herzlichen dank.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 10. Okt 2005, 23:59
... da stand aber eben ein anderer code..

Zitat von lucius:
Puuu das hoert sich ja schwierig an.
Mein code funzt soweit:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ndx : Integer;
begin
  StringGrid1.RowCount := StringGrid2.RowCount;

  for ndx := 0 to StringGrid1.RowCount do
  begin
    StringGrid2.Rows[ndx] := StringGrid1.Rows[ndx];
  end;
end;
Aber ich moechte eigenlich das die erste row nicht mit kopiert wird(unveraendert bleibt), alles was ich jetzt kriege ist 2 lere SG`s.
Etwa so SG.Row := 1, dan faengt er erst ab der zweiten Reihe zu zaehlen und das ist mein Ziel.
dein code müsste bei der ausführung knallen! die schleife darf nur bis rowcount-1 laufen!

..so sollte es gehen!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ndx : Integer;
  dst :integer;
  arow: integer;
  anzrows:integer;
  post:boolean;
begin
  anzrows:=StringGrid1.RowCount;
  StringGrid2.RowCount:=anzrows;

  dst:=0;
  for ndx := 0 to anzrows-1 do
  begin
    post:=true;
    for arow:=0 to dst do
      if StringGrid2.Rows[arow]=StringGrid1.Rows[ndx] then
        post:=false;

    if post then
    begin
      StringGrid2.Rows[dst]:=StringGrid1.Rows[ndx];
      inc(dst);
    end;
  end;
end;
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Doppelte Eintrage in StringGris loeschen aber wie?

  Alt 11. Okt 2005, 00:13
Klapt wunderbar, nochmals Danke fuer deine Arbeit und Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 +1. Es ist jetzt 17:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz