AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Stringgrid nach einem Begriff durchsuchen und....
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid nach einem Begriff durchsuchen und....

Ein Thema von capo · begonnen am 12. Nov 2006 · letzter Beitrag vom 14. Nov 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#11

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 11:31
Hallo,

ja, meine ich auch, aber
Stringgrid2.Rowcount := Stringgrid2.Rowcount;

Mein Vorschlag(s.a. Beitrag #2 mkinzler bzgl. IndexOf):
Delphi-Quellcode:
with StringGrid2 do
  begin
  for i := Stringgrid1.FixedRows to Stringgrid1.RowCount-1 do
    if Stringgrid1.Rows[i].IndexOf('Suchbegriff') >-1 then
     begin
     Rows[RowCount-1] := Stringgrid1.Rows[i];
     RowCount := RowCount+1;
     end;
  if RowCount > FixedRows+1 then
    Rowcount := Rowcount-1;
  end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

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

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 11:33
Hallo Hansa,

wenn man sich auf das Wesentliche konzentriert, dann sieht der Code wirklich nicht sehr aufregend aus:

Delphi-Quellcode:
procedure CopyRowsContaining(sg, sgResult: TStringGrid; search: String);
var
  i: Integer;
begin
  ClearGrid(sgResult);
  with sg do
    for i := FixedRows to Pred(RowCount) do
      if AnsiContainsText(Rows[i].Text, search) then
        AppendRow(sgResult, Rows[i]);
end;
Hier noch das Unwesentliche für Grids ohne FixedCols:

Delphi-Quellcode:
procedure ClearGrid(sg: TSTringGrid);
var
  iCol: Integer;
begin
  with sg do
  begin
    RowCount := Succ(FixedRows);
    for iCol := FixedCols to Pred(ColCount) do
        Cells[iCol, FixedRows] := '';
    Tag := 0; // internal rowcount
  end;
end;

procedure AppendRow(sg: TStringGrid; s: TStrings);
begin
  with sg do
  begin
    if Tag > 0 then
      RowCount := RowCount + 1;
    Rows[Pred(RowCount)].Assign(s);
    Tag := Succ(Tag); // internal rowcount
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 11:37
Zitat von Lannes:
ja, meine ich auch, aber
Stringgrid2.Rowcount := Stringgrid2.Rowcount;
Das war in der Tat eine Nullnummer.
Gruß
Hansa
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 14:58
Hallo und vielen Dank für euer Interesse.

Ich habs nun der einfachkeithalber so gemacht, bekomme aber immer nur ein Suchergebnis angezeigt auch wenn mehrere vorhanden sein müßten:
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var
  res: TPoint;
  finddlg: TFinddlg;
  findparams: TFindparams;
  i, j: integer;
begin
  FindDlg := TFindDlg.Create(self);
  try
    if (finddlg.Showmodal = mrOk) then
    begin
      findparams := [];
      if finddlg.Chkcase.Checked then findparams := findparams + [fnMatchCase];
      if finddlg.Chkfull.Checked then findparams := findparams + [fnMatchFull];
      if finddlg.Chkregular.Checked then findparams := findparams + [fnMatchRegular];
      if finddlg.dir.itemindex = 1 then findparams := findparams + [fnDirectionLeftRight];
      if finddlg.where.itemindex = 1 then findparams := findparams + [fnFindInCurrentCol];
      if finddlg.where.itemindex = 2 then findparams := findparams + [fnFindInCurrentRow];
      res := StringGrid1.findfirst(finddlg.findtext.text, findparams);
      if res.x >= 0 then
      begin
        with StringGrid1 do begin
          for i := 1 to RowCount - 1 do // Alle Zeilen durchlaufen
          begin

            for j := 1 to ColCount - 1 do // Alle Spalten durchlaufen
            begin
              Form3.Stringgrid2.RowCount := 1;
              res := StringGrid1.findfirst(finddlg.findtext.text, findparams);
              if res.x >= 0 then begin
                StringGrid1.Col := res.x;
                StringGrid1.row := res.y;

                Form3.Stringgrid2.Rows[Form3.Stringgrid2.RowCount] := StringGrid1.Rows[res.y];
                Form3.Stringgrid2.RowCount := Form3.Stringgrid2.RowCount + 1; // Zeile um 1 erhöhen
              end;
            end;
          end;
        end;
        form3.ShowModal;
      end
      else
        MessageDlg('Keine Adresse gefunden', mtinformation, [mbOK], 0);
    end;
  finally
  end;
end;
Wie ich das einbauen soll weiß ich überhaupt nicht:

Delphi-Quellcode:
procedure CopyRowsContaining(sg, sgResult: TStringGrid; search: String);
var
  i: Integer;
begin
  ClearGrid(sgResult);
  with sg do
    for i := FixedRows to Pred(RowCount) do
      if AnsiContainsText(Rows[i].Text, search) then
        AppendRow(sgResult, Rows[i]);
end;
Hotte
  Mit Zitat antworten Zitat
marabu

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

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 15:37
Vielleicht so:

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var
  s: String;
begin
  s := '';
  if InputQuery('Suchen nach ...', 'Suchtext', s) and (s <> '') then
    CopyRowsContaining(StringGrid1, StringGrid2, s);
end;
Bedenke, dass es bei meinem Ansatz um Vereinfachung geht. KISS - keep it small, simple! Was willst du mit einem FindDialog und zig Optionen, wenn du doch alle Treffer in einem zweiten Grid zeigen möchtest? Also ist mein Code als Ersatz und nicht als Erweiterung zu sehen.

Freundliche Grüße
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 15:55
Hallo marabu

ich habe dein beispiel gerade getestet:

Delphi-Quellcode:
procedure CopyRowsContaining(sg, sgResult: TStringGrid; search: String);
var
  i: Integer;
begin
  ClearGrid(sgResult);
  with sg do
    for i := FixedRows to Pred(RowCount) do
      if AnsiContainsText(Rows[i].Text, search) then
        AppendRow(sgResult, Rows[i]);
end;
procedure TForm1.Button2Click(Sender: TObject);

var
  s: String;
begin
  s := '';
  if InputQuery('Suchen nach ...', 'Suchtext', s) and (s <> '') then
    CopyRowsContaining(StringGrid1, Form3.StringGrid2, s);
end;
erhalte folgende Fehler, magst du mir sagen was ich falsch mache?
Zitat:
Erzeugen
[Fehler] Unit1.pas(328): Undefinierter Bezeichner: 'ClearGrid'
[Fehler] Unit1.pas(331): Undefinierter Bezeichner: 'AnsiContainsText'
[Fehler] Unit1.pas(332): Undefinierter Bezeichner: 'AppendRow'
[Fataler Fehler] Unit1.pas(8): Verwendete Unit 'Unit1' kann nicht compiliert werden
Hotte
  Mit Zitat antworten Zitat
marabu

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

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 15:58
Das ist einfach: Die Prozeduren ClearGrid() und AppendRow() hatte ich in meinem Beitrag #12 beigefügt und die Funktion AnsiContainsText() steckt in der Unit StrUtils.
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 16:58
@marabu
das klappt *steinvomherzfall*
ist das coool
danke
Hotte
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#19

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 13. Nov 2006, 17:26
Zitat von capo:
Ich habs nun der einfachkeithalber so gemacht, bekomme aber immer nur ein Suchergebnis angezeigt auch wenn mehrere vorhanden sein müßten:

Delphi-Quellcode:
for j := 1 to ColCount - 1 do // Alle Spalten durchlaufen
            begin
              Form3.Stringgrid2.RowCount := 1;
Siehst du es selber ? Seltener Fall, auf Anhieb einen Fehler in (fast) unbekannem Source zu entdecken. 8) Das ganze Programm-Umfeld erscheint mir immer noch zu kompliziert.
Gruß
Hansa
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Stringgrid nach einem Begriff durchsuchen und....

  Alt 14. Nov 2006, 00:24
Zitat von Hansa:
Siehst du es selber ?
jepp, das kann so ja nicht funktionieren
gn8
capo
Hotte
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:17 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