StringGrid上で違う行に連続でポップアップの表示をするには?


ダイキ  2008-11-06 19:23:58  No: 32487  IP: 192.*.*.*

StringGridにPopupActionBarの表示を行っているのですが、
Row=1のセルで最初に右クリックをし、そのままRow=2のセルに
右クリックをしたときポップアップの表示ができません。
もう一度Row=2のセルで右クリックすると、ポップアップが表示されます。

グリッドの位置の認識が出来てないのでしょうか?
もしくは、何か初期化が必要でしょうか?
ご存知の方がいらしたら、ご教授ください。

if (Button = mbRight) then
begin
  MouseToCell(X,Y,intCol,intRow);
  if intRow = 0 then
  begin
      Exit;
  end;
  pmnTComInfo.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;

編集 削除
Syake  2008-11-07 08:24:45  No: 32488  IP: 192.*.*.*

var
 cp,sp :TPoint;
 bRect :TRect;
begin
 //スクリーンのカーソル座標を取得
 GetCursorPos(cp);
 //スクリーンの座標からクライアントの座標へ
 sp := StringGrid1.ScreenToClient(cp);
 //ColとRowを取得
 StringGrid1.MouseToCell(sp.X,sp.Y,intCol,intRow);
 if (intCol >= 0) and (intRow >= 0) and (Bottun = mbRigth) then
 begin
   if ・・・  tnen //ポップアップを表示するか否か判定
   begin
     //ポップアップ位置を指定のCellを基準に
     bRect := StringGrid1.CellRect(intCol,intRow);
     cp := StringGrid1.ClientToScreen(sp);
     PopMenu.PopUp(cp.X+10,cp.Y+10); //ちょとずらして表示


外れてるかもしれませんが、如何でしょうか?
X,Y値ではなくカーソルの位置を取得し、それをGridの座標に変換
そして、ColとRow値を取得する。
これで上手くいった気がしましたが・・・
ちなみにコピペでないので綴りが違うかも

編集 削除
Syake  2008-11-07 08:27:46  No: 32489  IP: 192.*.*.*

間が抜けてた
bRect := StringGrid1.CellRect(intCol,intRow);
sp.X := bRect.Left;
sp.Y := bRect.Top;
cp := StringGrid1.ClientToScreen(sp);
<m(__)m>

編集 削除
ダイキ  2008-11-07 17:07:41  No: 32490  IP: 192.*.*.*

Syakeさん、ありがとうございます。

試してみたのですが、上手く行きませんでした。
Row=1のセルで最初に右クリックすると、ポップアップが表示され
その状態でRow=2のセルを右クリックしたのですが、表示されなかったです。
グリッドは選択された状態にはなっているのですが。。。

編集 削除
ダイキ  2008-11-07 17:14:45  No: 32491  IP: 192.*.*.*

ちなみに、ポップアップのアイテムはプロパティでは登録せず、
プログラム内で動的に発生させてます。

設定している内容は、
PopMenu.Caption
PopMenu.Tag
PopMenu.OnClick
になります。

何か欠けているのはあるでしょか?

編集 削除
念のため  2008-11-07 20:15:15  No: 32492  IP: 192.*.*.*

その現象は1回目がRow=1、2回目がRow=2の時だけで、それ以外のケースでは正しく動作するのでしょうか。
たとえばクリックするたびにポップアップが出る→消える→出る→消える……となっているだけ、というようなことはありませんか?
また、行の判定処理をはずしても現象は同じでしょうか? まずそのあたりを切り分けてみてください。

一応、OnMouseDownイベントを使っていると仮定して同じコードを試してみましたが
こちらでは正しく動いています(クリックするたびその場所にポップアップメニューが出ます)。

編集 削除
ダイキ  2008-11-11 10:54:20  No: 32493  IP: 192.*.*.*

TPopupMenuであれば、クリックする度にその場所に表示されます。
しかし、PopupActionBarだと、右クリックを押すたびにポップアップが
出る→消える→出る→消えるを繰り返します。

TPopupMenuとPopupActionBarは同じ動きが出来ないのでしょうか?

編集 削除