Einzelnen Beitrag anzeigen

marabu

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

Re: String-Suche in einem TStringGrid

  Alt 18. Nov 2005, 12:33
Hi Alex,

ich spendiere dir diese Routine aus meiner code library, mit der du einiges anstellen kannst, wenn du weißt wie. Gesucht wird nach text und wenn das Ergebnis true ist, dann steht in gc die Gitterkoordinate der Zelle, die den Suchtext enthält. Über den letzten Parameter steuere ich bei interaktivem Einsatz, ob zuerst in der Reihe oder der Spalte gesucht werden soll:

Delphi-Quellcode:
function FindNextCell(sg: TStringGrid; text: string; var gc: TGridCoord;
  searchColBeforeRow: boolean = true): boolean;
var
  gr: TGridRect;
  gcStart: TGridCoord;
begin
  with sg do
  begin
    gc := TGridCoord(Point(Col, Row));
    gcStart := gc;
    if (Selection.TopLeft.X = Selection.BottomRight.X)
    and (Selection.TopLeft.Y = Selection.BottomRight.Y)
      then gr := TGridRect(Rect(FixedCols, FixedRows, Pred(sg.ColCount), Pred(sg.RowCount)))
      else gr := Selection;
    repeat
      if searchColBeforeRow then
      begin
        gc.X := FixedCols + (Succ(gc.X - FixedCols) mod (ColCount - FixedCols));
        if gc.X = gr.Left then
          gc.Y := FixedRows + (Succ(gc.Y - FixedRows) mod (RowCount - FixedRows));
      end else
      begin
        gc.Y := FixedRows + (Succ(gc.Y - FixedRows) mod (RowCount - FixedRows));
        if gc.Y = gr.Top then
          gc.X := FixedCols + (Succ(gc.X - FixedCols) mod (ColCount - FixedCols));
      end;
      Result := Pos(text, Cells[gc.X, gc.Y]) > 0;
    until Result or (gc.X = gcStart.X) and (gc.Y = gcStart.Y);
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat