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


ダイキ  2008-11-07 04:23:58  No: 32487

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 17:24:45  No: 32488

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 17:27:46  No: 32489

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


ダイキ  2008-11-08 02:07:41  No: 32490

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

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


ダイキ  2008-11-08 02:14:45  No: 32491

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

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

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


念のため  2008-11-08 05:15:15  No: 32492

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

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


ダイキ  2008-11-11 19:54:20  No: 32493

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加