DBGridの列移動について


DelDel  2007-08-23 15:35:31  No: 27485  IP: 192.*.*.*

いつもお世話になっています。

DBGridにデータを表示して1行選択した状態にします。
その選択された行で「→キー」が押下された場合
次の列へ移動したいのですが、
このDBGridのOptionsプロパティのdgRowSelectをTrueにした状態では
常に「→キー」押下時、SelectedIndex=0となっています。
(行選択状態で、「→キー」の列移動は不可能なのでしょうか?)

どなたか対処方法を教えてください。
よろしくお願い致します。

編集 削除
HOta  2007-08-23 17:53:54  No: 27486  IP: 192.*.*.*

この場合、カーソルを移動させるのでしょうか?それとも列そのものを移動させるのでしょうか?

編集 削除
DelDel  2007-08-23 17:59:34  No: 27487  IP: 192.*.*.*

HOtaさま
ありがとうございます
<この場合、カーソルを移動させるのでしょうか?それとも列そのものを移動させるのでしょうか?

カーソルを移動させます。
よろしくお願いします。

編集 削除
HOta  2007-08-24 09:54:08  No: 27488  IP: 192.*.*.*

DBGridのOptionsプロパティのdgRowSelectをTrueだと、列の選択は出来ません。カーソルは、行全体を示しています。

編集 削除
通りすがお  2007-08-24 15:22:54  No: 27489  IP: 192.*.*.*

的外れかもしれませんがOptionsプロパティのdgRowSelectはfalseの状態で今選択している1行全体を描画してはいかがでしょうか。

もしくは http://www1.cncm.ne.jp/~ogawate/ にお望みのものがあるかと思います。

編集 削除
通りすがお  2007-08-24 15:26:08  No: 27490  IP: 192.*.*.*

おしりに空白が入ってました。。。

http://www1.cncm.ne.jp/~ogawate/

編集 削除
DelDel  2007-08-25 20:51:08  No: 27491  IP: 192.*.*.*

通りすがおさま
ご返信ありがとうございます。

<的外れかもしれませんがOptionsプロパティのdgRowSelectはfalseの状態で今選択している1行全体を描画してはいかがでしょうか。

当初その方法で1行色を変えようとしたのですが、
選択されている行がうまく取得できません。
DrawColumnCellメソッド内で、gdSelected判定はダメ?・・・OTL

☆実現したいこと・・・

①選択行の場合、1行分セルの色を変更する。
②DBGridからフォーカスが外れても色の変更を保持。

☆以下、やったこと...

procedure TCustomFixDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;Column: TColumn; State: TGridDrawState);
begin

 with Self.Canvas do  
 begin

  if gdSelected in State then 
  begin

   Brush.Color := clHilighted;
   Font.Color := clWhite; 
   FillRect(Rect);

  end;

 end;

 DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

編集 削除
通りすがお  2007-08-29 09:59:53  No: 27492  IP: 192.*.*.*

var
  rowno : Integer;     //行位置保持用

//行位置の保持
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  rowno := DataSet.RecNo;
end;

//描画
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with TDBGrid(Sender) do
  begin
    //保持している変数と選択されている行が一致する場合
    if (DataSource.DataSet.RecNo = rowno) then
      Canvas.Brush.Color := clred;

    DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;

もっといい方法があると思いますが自分のレベルではこれが限界です。

ちなみにFixDBGridは「AsRowSelect」プロパティをTrueにするだけでできます。

編集 削除
DelDel  2007-08-30 09:19:18  No: 27493  IP: 192.*.*.*

通りすがおさま。
返信が遅くなり大変申し訳ございません。
以下の方法で、実現できました。
(AsRowSelectの中身を追いかけると、色をハイライトにしたいだけなら
HighlightCellメソッドを変更するだけ?ただ、前回教えていただいた方法とまったく違うので自信がありません。)

// =============================================================== //

function TMyDBGrid.HighlightCell(DataCol, DataRow: Integer; const Value: string;
  AState: TGridDrawState): Boolean;
begin

  Result := inherited HighLightCell(DataCol,DataRow,Value,AState);
  if DataLink.Active then
    Result := Result or (DataLink.ActiveRecord = Row-Ord(dgTitles in Options));
  
end;

編集 削除
AVA  2007-09-06 19:23:07  No: 27494  IP: 192.*.*.*

TDBGridに表示しているデータベースのコンポーネントは何でしょうか?
TTable,TQuery,TClientDataSetならNextでカーソル移動すればよいのでは。
TDBGridのOnKeyUpイベントで

if Key = vkLeft then
  ClientDataSet1.Next;

てな感じで
上に上げるときはPriorで

編集 削除