コマンドライン引数によって起動時のフォームを切替える
Delphiではプロジェクトオプションで最初に表示するフォームや、フォームを自動生成するかどうかを変更出来ます。なんとなく最初に表示させるフォームがメインプログラムのような感じを受けますが、実際にはすべてのフォームは同じ条件のもとに動作します。
通常はコマンドライン引数の処理を、最初に生成されるフォームのOnCreateイベントで処理しますが、このコマンドライン引数で表示するフォームを切替える場合にはやっかいな事になります。
例えば、コマンドラインのスイッチによっていは、最初に生成されるフォームではなく別のフォームを表示させたい場合です。OnCreateの処理内では、自分自身のフォームの表示状態を変更することが出来ないため、結構姑息な手段を取ったりしなければなりません。
Delphiのプロジェクトファイルは、それ自体がDelphiのプログラムになっており、ここで自動生成に指定されている各フォームの生成と起動を行なっています。
このプロジェクトソース内で、コマンドライン引数をチェックして、その内容に応じて必要なフォームだけを生成して実行させるようにすれば、とても簡単に起動フォームの切替えを実現出来ます。また、コマンドライン引数が設定されていない場合にはフォームを一切生成せずにプログラムを終了するといったことも可能です。
|
program MiScProp; uses Forms, PropUnit in 'PropUnit.pas' {PropForm}, Unit1 in 'Unit1.pas' {Schedule}, Unit2 in 'Unit2.pas' {Option}, Unit3 in 'Unit3.pas' {LogView}; {$R *.RES} begin Application.Initialize; // ParamCoutはコマンドライン引数の数を保持している if ParamCount = 0 then Exit; // ParamStrはコマンドラインの文字列を保持している // ParamStr(0)は起動されたアプリケーションのフルパス名で // (1)以降が引数となっている if ParamStr(1) = '/P' then begin // 一行しかありませんが、CreateForm()の最後に';'がないと、プロジェクト // ソースにエラーがあると判断されますので、必ずbegin/endで区切って';'を // つけること Application.CreateForm(TPropForm, PropForm); end else if ParamStr(1) = '/L' then begin Application.CreateForm(TLogView, LogView); end else Exit; Application.Run; end. |