喫茶XRAYトップページ

[スレッド全体
]

[1474] Re:コンテキストメニューの作成返信 削除
2007/12/23 (日) 01:48:24 宮 〔HomePage
▼ 宮さん
> 宮です。
> 次の件を教えて頂きたいのですがよろしくお願いいたします。
>


いろいろ、サイトをはいずり回っていたら下記のサイトを発見しました。
http://homepage3.nifty.com/m-and-i/tips/shellext.htm
Delphiで作るシェル拡張(ShellExtention)・・・コンテキストメニューの追加

これが、コンテキストメニュー?(初めて知った名前です)をいじくる
解説ではないかと、実行しているのですが、そうでしょうか?

文の中程に
「シェル拡張プログラム(DLL)は簡単に作成できましたが・・・」
と有りますがDLLを作成するというのは、やったことがないため
簡単にはいきません。どうしたら出来るのでしょうか?

なんか普通のアプリケーションと違うようで?????
結構大変ですね。
どうぞ、ご指導をお願いします。




[1477] Re2:コンテキストメニューの作成返信 削除
2007/12/23 (日) 13:19:28 Mr.XRAY
▼ 宮さん,こんちには.

> これが、コンテキストメニュー?(初めて知った名前です)をいじくる
> 解説ではないかと、実行しているのですが、そうでしょうか?


そうですね.エクスプローラなどで右クリックして現れるポップアップメニュー
のことです.これはWindowsのShell(シェル)という機能の一部です.

宮さんも,すでにこのShellの機能を使用していするハズです.
usse に例えばShellAPIなど,先頭にShが付くものがShellの機能を使用している
ものです.

http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_SomeDialogs_Shell.htm
こういったものもShellが提供しています.

コンテキストメニューですが,この実装は結構プログラム的には難しい部類に
入るのではないかと思います.
標準のメニューの実装もそうですが,独自のメニューはさらに...
独自のメニューは,

http://homepage3.nifty.com/m-and-i/tips/shellext.htm

ここに書いてあるように,そのインターフェイスを定義するグローバルユニーク
識別子であるGUID(グイド)を割り当てます.
(これらの実装技術をOLEあるいはCOMと言います.正確ではないけど...)


http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_SpecialFolderPath.htm
このサンプルで,ゴミ箱を選択すると,下のフォル・#95;名が
{645FF040-5081-101B-9F08-00AA002F954E}
となります.ゴミ箱は表示名はごみ箱ですが,WindowsのCOMオブジェクトとして
内部ではこのGUIDで管理されているということです.
レジストリをこのGUIDの文字列で検索すると,いろいろな情報が見えてきます.


>と有りますがDLLを作成するというのは、やったことがないため

DLLというのは,通常のユニット同様,関数類を収めたものです.
通常のユニットは,コンパイルすると,EXEファイルの中に入りますが,DLLは
実行時に読み込んで使用します.
関数類をDLLとして使用すると,EXEファイルのサイズが小さくなりますが,実行
時にDLLを配布する必要があります.
また,例えばグローバルフックのように,DLL内の関数ででないと機能しないもの
もあります.

何かDLLのいい例があればと思うのですが...
「DLLの作成 Delphi」
で検索するといいサイトがあるかも知れません.




[1478] Re3:コンテキストメニューの作成返信 削除
2007/12/23 (日) 17:08:07 宮 〔HomePage
▼ Mr.XRAYさん
> 何かDLLのいい例があればと思うのですが...

早速教えて頂きありがとうございます。
いままでDLLなんてWindowsフォルダに入っているファイルと
しか認識していませんでしたが
まさか、これを作る羽目になるとは・・・
キーワードが判れば検索したらたくさん出てきましたので
ひとつひとつ探してみます。
残念ながら、D6 Personalにはこのデモファイルは
入っていませんでした。
GUIDは作成できました。レジストリーを開くといっぱい
出てくるキーですね。

ひとつ、質問がありますが
新規作成→DLL作成ウェザードで開くと次のようなさっぱりとした物しかでませんが
library Project1;
uses
  SysUtils,  Classes;
{$R *.res}
begin
end.
 http://homepage3.nifty.com/m-and-i/tips/shellext.htm
の例では、どうみてもフォームのないユニットだと思いますが
これをどのようにコンパイルするとDLLになるのでしょうか。
コンパイルの仕方が判りません。
よろしくお願いします。


[1479] DLLの作成方法返信 削除
2007/12/23 (日) 17:26:17 Mr.XRAY
▼ 宮さん

>  http://homepage3.nifty.com/m-and-i/tips/shellext.htm
> の例では、どうみてもフォームのないユニットだと思いますが
> これをどのようにコンパイルするとDLLになるのでしょうか。


上のURLの内容は確認していませんが,
宮さんは,EXEファイルを作成する時に[実行]ボタン(右矢印)か[F9]キーを
押下していると思いますが,この操作は,実は

(1) 必要なPASファイルなど,コードをコンパイルし,中間コードを作成
(2) それらの中間ファイルを関連付けて必要なオブジェクトを結合する
(3) 最終的に,実行可能なファイル(EXE)ファイルを作成する

などを一気に実行するものです(Delphiが初めて実現しました.後の言語も
これに追従しました).

この(1)(2) (コンパイル)は,キー操作では[Ctrl]+[F9],
メニューでは[プロジェクト][XXXXXをコンパイル]です.
(XXXXXはプロジェクト名です.デフォルトではProject1です)
この時,必要なファイル(PASまたはDCU)がないとエラーとなります.

ユニットの先頭にlibraryがあると,自動的にDLLファイルができます.
注意することは,コンパイルすべきユニットなりプロジェクトがアクティブに
なっている必要があります.
これは,複数のプロジェクトをIDEで開いて開発している時は重要です.

そうしないと,DLLのユニットのコードを変更したのに,そのDLLを利用する
プログラムに結果が反映されず,
「あれっ?! 直したハズなのに...?」
ということになることがあります(よくやってしまいまうんですよね).



[1480] Re:DLLの作成方法返信 削除
2007/12/24 (月) 02:44:06 Mr.XRAY
▼ 宮さん

> の例では、どうみてもフォームのないユニットだと思いますが
> これをどのようにコンパイルするとDLLになるのでしょうか。


簡単に言うと,EXEファイルを作成する[実行]ではなく,コンパイルだけを
行います.
コンパイルだけをするには[Ctrl]+[F9]です.
メニューでは[プロジェクト][XXXXXをコンパイル]

ということです.


[1481] Re2:DLLの作成方法返信 削除
2007/12/24 (月) 11:54:12 宮 〔HomePage
▼ Mr.XRAYさん
>
> 簡単に言うと,EXEファイルを作成する[実行]ではなく,コンパイルだけを
> 行います.
> コンパイルだけをするには[Ctrl]+[F9]です.
> メニューでは[プロジェクト][XXXXXをコンパイル]
>
> ということです.


易しく解説して頂きありがとうございました。
やっと判りました。

Delphiを初めてやり出したとき、フォームにコンポーネントを貼り付け
F9を押して、「ほら、出来たでしょう」にびっくりして、
その後、その延長で、ぺたぺたコンポを貼り付けて
アプリを作った(いや、出来てしまった)ので、その他のことは全く無知なんです。

最近では「DelphiQ&A」も私が質問している内容から中級レベルと想定されて
高度な回答をいただくのですが、さっぱり判らないのです。
最後は、やっぱりココにお願いすることになります。すみません。<(_ _)>

そろそろ、やりたい自作アプリも完成してきたので、かねてから疑問に
思ったこと、知りたかったことをボチボチ勉強したり、バグつぶしにいそしんでいます。

今回の件も、じっくり取り組んでマスターしていきます。
ちまたでDelphiの将来を危惧されるページも散見しますが、
Delphiは、今更ながらすごい言語ですね。
判らなくてもそこそこのアプリが出来るのですから。
先日教えて頂いたC#言語など#系は、調べたのですが結局マイクロソフトが
WindowsにくくりつけてLinuxなどへ流出するのを防ぐための戦略ですね。
好きにはなりませんでした。

ありがとうございました。
では。




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