喫茶XRAYトップページ

[スレッド全体
]

[8369] 814_コンテキストメニュー コンポーネント返信 削除
2015/1/6 (火) 17:03:14 sato
今年もよろしくお願いします。
お屠蘇気分の抜けないうちから申し訳ありません。
814_コンテキストメニュー コンポーネントの
plContextMenu.pas を登録しようとすると、14行目の
nIDNewItem  : UINT_PTR;
のところで、未定義の識別子、「UINT_PTR」となるのですが、
ヒントだけでもいただけないでしょうか。
Delphi7、Windows7 です。



[8370] Re:814_コンテキストメニュー コンポーネント返信 削除
2015/1/6 (火) 17:51:07 Mr.XRAY
▼ satoさん

> nIDNewItem  : UINT_PTR;

なるほど,これですね.えっとですね.
MSDN の記述をそのまま使用していますね.
あまりよくないですね.
誰が書いたコードなんでしょう? (って,しらぱくれる)

Delphi 7 であれば 32 ビットであることは確実なので,
符号なしの 32 ビット値が格納できれば問題ないと思います.
以下のいずれかに変更してください.

Pointer
Cardinal

あるいは以下のように定義してしまうとかですね.
  type
    UINT_PTR = Cardinal;  //Delphi XE ではこちらになっています

  type
    UINT_PTR = UINT;  //あるいはLongWordととか...

えっ?  何か文句あります?
いい加減だって.そう,いい加減なんですよ.

[Windows Data Types]
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx#UINT_PTR


[8371] Re2:814_コンテキストメニュー コンポーネント返信 削除
2015/1/7 (水) 22:56:09 sato
▼ Mr.XRAYさん
ありがとうございました。
うまく登録でき、plContextMenuも使えるようになりました。
ついでで申し訳なく、plContextMenuとも無関係なのですが、
ShellListViewに表示されたファイル名をダブルクリックした時、
関連付けられたアプリケーションで開くものだと思ったのですが、
Word、Excel、pdfのファイルは開くのですが、テキストやファイルメーカー
のファイルは開かないのです、ただnotepad.exeやFilemaker.exeの
プロセスは起動しています。
また、plContextMenuの右クリックの「開く」からだといずれも開けます。
何か、ヒントをいただけるとありがたいのですが。
よろしくお願いします。
Delphi7,Windows7です。

正月に天気がよかったので近所の公園に散歩に行きました。
なんと、桜の花が満開でした。(大阪)
ヒマラヤザクラは1、2月に咲くのだそうです。
また、さくらの起源はヒマラヤだそうです。知らなかったです。




[8372] Re3:814_コンテキストメニュー コンポーネント返信 削除
2015/1/7 (水) 23:26:53 Mr.XRAY
▼ satoさん

> ShellListViewに表示されたファイル名をダブルクリックした時、

この ShellListView って,
http://mrxray.on.coocan.jp/Delphi/Others/ShellCtrlComponent.htm
のやつですか ?
としても,確認してみないと分かりませんが...

> ヒマラヤザクラは1、2月に咲くのだそうです。
> また、さくらの起源はヒマラヤだそうです。知らなかったです。


えっ,知りませんでした.思わず検索してしまいました (^^
なるほど.サクラが何か身近に,と言っても身近ですが,感じました.


[8373] Re4:814_コンテキストメニュー コンポーネント返信 削除
2015/1/8 (木) 00:34:39 sato
▼ Mr.XRAYさん

>http://mrxray.on.coocan.jp/Delphi/Others/ShellCtrlComponent.htm
>のやつですか ?

そうです。Delphi7のDemoにある「ShellCtrls.pas」の
ShellListView ( TShellListView ) です。

このShellListViewを使うと、ファイルをコピーしようとして、
右クリックした時に、Exploreと同じポップアップメニュー
(シェルポップアップ?というのですか)が出るのですが、コピーを
選んで、別のフォルダーの空いた場所(何と言うのでしょうか
ShellListViewのアイテムの無い場所)に貼り付けようとして、
右クリックするとポップアップメニューが出ないので、
plContextMenuを使用させていただこうと思った次第です。
おんぶにだっこで申し訳ありません。

[8374] Re5:814_コンテキストメニュー コンポーネント返信 削除
2015/1/8 (木) 11:17:15 Mr.XRAY
▼ satoさん

>ShellListViewのアイテムの無い場所)に貼り付けようとして、
>右クリックするとポップアップメニューが出ないので、


例えば,次のようにすることで可能ではないかと.

//=============================================================================
//  ShellListView1のOnMouseUpイベント処理
//  ShellListView1のItemが選択されていない場合にもコンテキストメニューを表示
//
//  ShellListView1のAutoContextMenuをFalseにして,コンテキストメニューの表示を
//  常にコードで行う方法も考えられる
//=============================================================================
procedure TForm1.ShellListView1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then begin
    if ShellListView1.Selected = nil then begin
      InvokeContextMenu(ShellListView1,
                        ShellTreeView1.SelectedFolder,
                        X,
                        Y);
    end;
  end;
end;


サンプル UP してみました.
動作確認は,Windows 7 U64(SP1) + Delphi 7 Pro です.
このサンプルでは,テキストファイルもダブルクリックで開きます.
ファイルメーカーは持っていないので未確認です.
TplContextMenu も配置してテストしましたが,開きます.
管理者権限で実行しても,一般ユーザで EXE を実行しても
開きました.

>ただnotepad.exeやFilemaker.exeのプロセスは起動しています。

これが気になりますね.

http://mrxray.on.coocan.jp/Delphi/zip/ShellComponent_D7.zip


[8375] Re6:814_コンテキストメニュー コンポーネント返信 削除
2015/1/8 (木) 16:10:31 sato
▼ Mr.XRAYさん

いろいろとご足労をおかけしてありがとうございました。
> http://mrxray.on.coocan.jp/Delphi/zip/ShellComponent_D7.zip
でも、私の環境ではTXTファイルが開けなかったので、しかたなく
ShellListViewのAutoNavigateをFalseにして、ダブルクリック時に
ShellExecuteで開くことにしました。
そうすると、またまた問題が。
ダブルクリックの対象がファイルの時はうまく開くのですが、フォルダーだと
うんともすんとも言わないので(当たり前田の...ですが)、しかたなく
ShellListViewのOnChangeでSelectedFolder.IsFolderがTrueなら、あわてて
AutoNavigateをTrueeにし、FalseならAutoNavigateをFalseにすると
見た目は、いけているようです。  こんなんでいいんですかね。
「動けば官軍」と教えられたもので......

つぎは、ColumnClickでのソートです。(これもやっかいそうですが)

>ただnotepad.exeやFilemaker.exeのプロセスは起動しています。
> これが気になりますね.

これは、私の力には負えません。


[8376] Re7:814_コンテキストメニュー コンポーネント返信 削除
2015/1/8 (木) 19:45:41 Mr.XRAY
▼ satoさん

> >ただnotepad.exeやFilemaker.exeのプロセスは起動しています。
> > これが気になりますね.
> これは、私の力には負えません。


う〜む.なんだべ?
最近何か悪いことしていません ?
ほら,職場の忘年会か新年会で,職場の若くて綺麗で可愛い女の子をホテルに
連れ込もうとして,ローヒールのかかとで殴られそうになったとか ?
(ん? それは私か ?)

覚えがない ? そうですか ?
それとも,そんなの関係ない ?


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82