Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Textsuche im StringGrid


galagher - Do 07.01.16 20:57
Titel: Textsuche im StringGrid
Hallo zusammen!

Ich möchte in einem TStringGrid nach Text in den Cells suchen, der Code soll dort stoppen, wo der Suchtext gefunden wurde. Die Abwärtssuche funktioniert ganz korrekt, Col und Row passt und der Text wird stets gefunden.

Nur die Aufwärtssuche funktioniert nicht: Suchtext, der sich in einem Col der aktuell ausgewählten Row befindet, wird gefunden, dann aber "springt der Code" in eine Reihe oberhalb, die zwar ebenfalls den Suchtext enthält, markiert aber die erste Col, die den Suchtext enthält, nicht die letzte. Ich möchte hier aber, dass der Code wie gewünscht von rechts nach links sucht. Es müsste also stets von rechts nach links gesucht werden.

Was ist im Teil ab dem else falsch?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
function GridFindText(const Grid: TStringGrid; const FindDialog: TFindDialog;
  Msg, Rowselect: Boolean): Boolean;
var
  i, r, c: Integer;
  FindStr, RowStr, ColStr: String;
begin
  Result := False;

  if not Rowselect then  {In der selben Reihe weitersuchen}
  begin
    if frDown in FindDialog.Options then  {Abwärts suchen}  //korrekt!
    begin
      for i := Grid.Col+1 to Grid.ColCount-1 do
      begin
        if Pos(FindDialog.FindText, Grid.Cells[i, Grid.Row]) > 0 then
        begin
          Grid.Col := i;
          Result := True;
          exit;
        end;
      end;
    end
    else  {Aufwärts suchen}  //nicht korrekt!
    begin
      for i := Grid.Col-1 downto 0 do
      begin
        if Pos(FindDialog.FindText, Grid.Cells[i, Grid.Row]) > 0 then
        begin
          Grid.Col := i;
          Result := True;
          exit;
        end;
      end;
    end;
  end;  {if not}


galagher - Do 07.01.16 22:00

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Suchtext, der sich in einem Col der aktuell ausgewählten Row befindet, wird gefunden, dann aber "springt der Code" in eine Reihe oberhalb, die zwar ebenfalls den Suchtext enthält, markiert aber die erste Col, die den Suchtext enthält, nicht die letzte.

Habe den Fehler gefunden: Er war in dem Code, der nach dem geposteten Codes steht, da hatte ich vergessen, frDown zu berücksichtigen. Hätte eher und besser suchen sollen!