いつもお世話になってます。今回、2個質問させてください。
私が今、行おうとしているのは、アプリから他のアプリを起動させるというものです。ShellExcute関数を使うことで一応クリアできました。
---------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ShellExecute( Handle, NULL, "..\\Concurrentor\\CAServer\\CAServer.exe", NULL, NULL, SW_SHOWNORMAL );
}
---------------------------------------------------------------------
上のようにすることでできたわけですが、この部分をコンポーネントとしたいのです。そこで問題なのが、「Handleって何?」とういうことです。
どこからきているのかさっぱりわかりません。
あと、コンポーネントとして作成した場合は、「Handleが定義されておりません。」となってしまいます。コンポーネントとして上のShellExcuteを実行させる方法ありませんでしょうか?
その自作コンポーネントがTWinControlかまたはTWinControlを派生させたコントロールから派生させているならばHandleを所有しているはずですが、
それ以外からの派生はHandleを所有していないのでは?
なるほど、早速やってみます。
ところで、Handleを所有しているとはどういったことなんでしょうか?
どこかで値をもっているのでしょうか?
TWinControlクラスをHelpで調べてプロパティを見てみてください。
Handleがありますよね。
その前のTControlクラスにはHandleのプロパティはありません。
ヘルプって結構難しくかいていますね。
じっくり読み解きたいと思います。
Halbow です。
TForm1 のメソッドの中で、Handle と書けば、それはウィンドウハンドル
のことです。ウィンドウを識別するために、ウィンドウズでは各ウィンドウに
整数値の番号付けをしています。それがハンドルです。
ShellExecute( ) の第一パラメータで特にハンドルがない場合は、ゼロを
設定しても大丈夫です。
レスポンスありがとうございます。Handleについて理解が深まりました。
TForm1の中でのHandleとは、TForm1というWindowの通し番号なんですね!?
ただ、Handleと書いただけで「Handleという変数が定義できてません」という風にでないということは、どこかで宣言されているのでしょうか?
あと、早速、第一パラメータに0をいれてみて起動チェックしてみると、確かに0でも他のアプリケーションが起動しました。ありがとうございます。でも、第一パラメータを0にしたときとHandleにしたときで内部的に違いとかやっぱりあるのか・・・な?
第一パラメータは「メッセージボックスが表示されたときの、親になる ウインドウのハンドル」というのは、よくいろんなHPで見つけているのですが、この意味がよくわかりません。(泣
もう少し、わかりやすく教えていただけないでしょうか?
「メッセージボックスが表示されたときの、親になる ウインドウのハンドル」というのは、関数が失敗してWindows(OS)がエラーダイアログなどを表示する時にそのダイアログを指定されたウィンドウの子ウィンドウとして表示するということです。
なお、「関数の失敗」とは、指定したプログラムの実行に失敗したということではなく、何らかの異常により関数そのものが正常に実行できないということのようです。
噛み砕いてくださり、ありがとうございます。
なんとか理解できました〜。
ありがとうございました。
ツイート | ![]() |