AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi procedure Fehler (procedure zum Filtern eines Stringgrids)
Thema durchsuchen
Ansicht
Themen-Optionen

procedure Fehler (procedure zum Filtern eines Stringgrids)

Ein Thema von maximus Caesar · begonnen am 25. Sep 2005 · letzter Beitrag vom 25. Sep 2005
Antwort Antwort
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#1

procedure Fehler (procedure zum Filtern eines Stringgrids)

  Alt 25. Sep 2005, 15:11
Hallo!
Ich versuche gerade eine Procedure zu schreiben, die alle Zellen eines StringGrid nach einem Stichwort durchsucht, und jede Zeile, in der es vorkommt in ein anderes Stringgrid kopiert.
Dies ist mein bisheriger TExt:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var Zellen:Integer;
    i,i2,i3,i4:Integer;
    Zeilen:Integer;
    Daten:String;
begin
  i4:=0;
  Stringgrid1.ColCount:=Form1.StringGrid1.ColCount;
  StringGrid1.Rows[0]:=Form1.StringGrid1.Rows[0];
  StringGrid1.DefaultColWidth:=Form1.StringGrid1.DefaultColWidth;
  StringGrid1.RowCount:=1;
  Zellen:=Form1.StringGrid1.ColCount;
  Zeilen:=Form1.StringGrid1.RowCount;
  for i:=0 to Zeilen do begin
    i3:=0;
    for i2:=0 to Zellen do begin
      if pos(lowercase(Form1.StringGrid1.Cells[i2,i]),lowercase(Edit1.Text))<>0 then i3:=1;
    end;
   // showmessage(lowercase(Form1.StringGrid1.Cells[i2,i]));
   // showmessage(lowercase(Edit1.Text));
    if i3=1 then begin
      StringGrid1.RowCount:=StringGrid1.RowCount+1;
      i4:=i4+1;
      Stringgrid1.Rows[i4]:=Form1.StringGrid1.Rows[i];
      StringGrid1.FixedRows:=1;
    end;
  end;
aber irgendwie funzt das net. kann mir jemand weiterhelfen?

PS: Form1.Stringgrid1 ist das Stringgrid, aus dem die Daten kommen, Stringgrid1 ist das, in das die Zeilen kopiert werden sollen.
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: procedure Fehler (procedure zum Filtern eines Stringgrid

  Alt 25. Sep 2005, 16:11
Der Pos-Befehl funktioniert andersrum: Erst der Substring, dann der lange.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: procedure Fehler (procedure zum Filtern eines Stringgrid

  Alt 25. Sep 2005, 16:42
Hai maximus Caesar,

da sowohl die Rows als auch die Cols eines StringGrids vom Typ TStrings sind und Du ja die gesamte Zeile prüfen möchtest ist es nicht notwendig eine extra Schleife für die einzelnen Zellen zu machen. Du kannst direkt StringGrid.Rows[n].Text prüfen.

Bei mir seiht der Code jetzt so aus:
Delphi-Quellcode:
function CopySGRows(aSource, aDest: TStringGrid; aSearch: string): integer;
var
  rowscopy: integer;
  ndx: integer;
begin
  rowscopy := 0;
  for ndx := aSource.FixedRows to Pred(aSource.RowCount) do // Alle Zeilen ausser den "Titeln" durchlaufen
  begin
    if (Pos(aSearch, aSource.Rows[ndx].Text) > 0) then // Wenn in der Zeile das Suchwort ist dann:
    begin
      Inc(rowscopy); // Anzahl der betroffenen Zeilen erhöhen
      aDest.RowCount := aDest.FixedRows + rowscopy; // Neue Zeile im Ziel SG erzeugen
      aDest.Rows[aDest.RowCount - 1].Text := aSource.Rows[ndx].Text; // Text aus der Source-Zeile in die Dest-Zeile
    end;
  end;
  Result := rowscopy;
end;

procedure TForm1.btn_CopySGRowsClick(Sender: TObject);
var
  foo: integer;
begin
  foo := CopySGRows(StringGrid1, StringGrid2, 'blubb');
  ShowMessage(IntToStr(foo));
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: procedure Fehler (procedure zum Filtern eines Stringgrid

  Alt 25. Sep 2005, 16:48
funktioniert leider auch nur mit einem Buchstaben. sobald ich mehr angebe, bekomme ich als Ergebniss 0, obwohl der gesuchte TExt vorkommt.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: procedure Fehler (procedure zum Filtern eines Stringgrid

  Alt 25. Sep 2005, 16:53


Ich habe mein Test SG mit diesen Daten gefüllt:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  x: integer;
  y: integer;
begin
  for y := StringGrid1.FixedRows to Pred(StringGrid1.RowCount) do
  begin
    for x := StringGrid1.FixedCols to Pred(StringGrid1.ColCount) do
    begin
      Stringgrid1.Cells[x, y] := Format('meow %d/%d', [x, y]);
    end;
  end;
  StringGrid1.Cells[1, 2] := 'blubb test';
  StringGrid1.Cells[2, 3] := 'blubb test';
  StringGrid1.Cells[4, 5] := 'blubb test';
end;
Und die Funktion dann so aufgerufen:
Delphi-Quellcode:
procedure TForm1.btn_CopySGRowsClick(Sender: TObject);
var
  foo: integer;
begin
  foo := CopySGRows(StringGrid1, StringGrid2, 'blubb');
  ShowMessage(IntToStr(foo));
end;
Und es werden alle Zeilen kopiert in denen in einer Zelle die Zeichenfolge blubb vorkommt.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: procedure Fehler (procedure zum Filtern eines Stringgrid

  Alt 25. Sep 2005, 17:00
was bewirkt die Formatierung?

ich habe in Zeile 1 in Zelle 3 "Gezahlt" stehen. Wenn ich nach g suche, so wird die Zeile kopiert, suche ich nach ge oder mehr buchstaben, sobekomme ich als ergebnis 0, und keine Zeile wird kopiert.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: procedure Fehler (procedure zum Filtern eines Stringgrid

  Alt 25. Sep 2005, 17:11
Ahhh... jetzt ist alles Klar

Post berücksichtigt (entegegen manchen OnlineHilfen) die Gross/Kleinschreibung! Wenn Du unabhängig von dieser sein möchtest dann ändere diese Zeile:
if (Pos(aSearch, aSource.Rows[ndx].Text) > 0) then so ab:
if (Pos(AnsiLowerCase(aSearch), AnsiLowerCase(aSource.Rows[ndx].Text)) > 0) then bzw. ändere aSearch einmalig in klein Buchstaben:
Delphi-Quellcode:
begin
  aSearch := AnsiLowerCase(aSearch);
  for ndx := aSource.FixedRows to Pred(aSource.RowCount) do
  begin
    if (Pos(aSearch, AnsiLowerCase(aSource.Rows[ndx].Text)) > 0) then
.
.
end;
Dann muss aSearch nicht für jede Zeile neu "konvertiert" werden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: procedure Fehler (procedure zum Filtern eines Stringgrid

  Alt 25. Sep 2005, 17:17
Super!!!
Jetzt funktionierts!

Kann es sein, das lowercase nicht so richtig gut funktioniert?
Sonst hätte meine allererste procedure eigentlich funktionieren müssen... (ist nicht gepostet!)

PS: DAnn ist die bei Delphi mitgelieferte Hilfe fehlerhaft....
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:40 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