DBGridで複数行選択されたレコードを調べる

TDBGridの Optionsには複数行選択のためのオプション dgMultiSelectがあり、 ユーザーが複数行を選択できます。
では、コード上でその複数選択された行を調べるにはどうしたらいいのでしょうか? DBGridの SelectedRowsプロパティを使用します。ただちょっと面倒です。
以下の例は DBGrid1で選択されているレコードのあるフィールドを ListBox1へ出力します。

■ 複数選択された行を調べる例
  procedure TForm1.Button1Click(Sender: TObject);
  var
    ix : integer;
  begin
    if  DBGrid1.SelectedRows.Count > 0  then  begin
      for ix  :=  0 to  DBGrid1.SelectedRows.Count - 1  do  begin
        //カレント行を移動
        Query1.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[ix]));
        ListBox1.Items.Add(Query1.FieldByName('FIELDNAME').AsString);
      end;
    end;
  end;

ただし、グリッド上の選択行が1行の場合、SelectedRows.Count がゼロを返す場合があります。その場合は以下のようにします。

■ カレント行を選択状態にする

      if  (DBGrid1.SelectedRows.Count = 0)  then  begin
        DBGrid1.SelectedRows.CurrentRowSelected :=  True;
      end;
      for i :=  0 to  DBGrid1.SelectedRows.Count - 1  do  begin
        Query1.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));