いつも参考にさせて頂いています。
ひとつ質問させて下さい。
メインフォームとサブフォームを表示して、メインフォームを最小化するとサブフォームも一緒に最小化されますよね?この時、メインフォームのみ最小化し、サブフォームは表示したままにするにはどうしたらよいのでしょうか?
環境はDelphi5/WindowsXPです。
宜しくお願い致します。
これはDelphiの仕様です.その方が都合のいいことが多いからです.
詳しい説明は省略します.いろいろやってみると理解することができる
のではないかと思います.
メインフォームの最小化の目的にもよりますが,最小化の操作で見えなく
することは可能です.
新規のプロジェクトでフォームを2つ作成して,各々Form1(Unit1),Form2(Unit2)
とします.以下のコードを試してみてください.
----- Unit1.pas ----
public
{ Public 宣言 }
procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND;
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
// 最小化の操作で非表示にする
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
case Msg.CmdType and $FFF0 of
SC_MINIMIZE: Hide;
else
inherited;
end;
end;
end.
---- Unit2.pas ---------------
implementation
uses Unit1;
{$R *.DFM}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
end.
Mr.XRAYさん、レスありがとうございます。
早速試してみたのですが、MsgCmdType が未定義の識別子だと怒られてしまいます。
何かuses節に追加しないといけないんでしょうか?
ヘルプにも無い様なので教えて頂けないでしょうか。
>早速試してみたのですが、MsgCmdType が未定義の識別子だと怒られてしまいます。
コピペしてやりましたか.MsgCmdTypeではありません.
WMSysCommand(var Msg: TWMSysCommand);
の引数のMsgのCmdTypeです.Msg.(ドットをつけます)までタイプしたら
[Ctrl]+[Space]を押してみて下さい.
Mr.XRAYさん、ありがとうございました。
お陰様でメインフォームのみ見えなくなりました。また、サブフォームをクローズする事によって再表示する事もできるようになりました。
ただ、タスクバーをクリックすると見えないままで最小化と復元を実行している様なのでクリックしたら再表示させようと思い、
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
case Msg.CmdType and $FFF0 of
SC_MINIMIZE:Hide;
SC_RESTORE:Form1.Visible:=True;
else
inherited;
end;
end;
としてみましたが、旨くいきませんでした。
よろしかったら教えていただけないでしょうか?
>としてみましたが、旨くいきませんでした。
(1)どのような現象が起きているのか
(2)それは,最小化で非表示にしないの時の動作とどう違っているのか
(3)どんな動作が望みなのか
が私にはわかりません.できれば箇条書きで教えて下さい.
新規でプロジェクトを作成して実行すると,タスクバーのボタンをクリック
する度に,非表示と復元を繰返すのが,Delphiというより通常のアプリの
動作ですが...
少なくとも私のWindowsXP + Delphi5 では,タスクバーのボタンクリックで
その動作をします.当然ですが,Form2を表示している時は,Form2がその動作
の対象となります.
タスクバーのクリックは,そのアプリの表示状態を変更します.Form1,Form2
も同じアプリですから.最初の質問の解決にはなっている思いますよ.
>最初の質問の解決にはなっている思いますよ.
おっしゃるとおりですね。最初の問題は解決しています。
私が後からしたのは別問題でした。質問の仕方も悪かったようです。すみませんでした。
すみません、改行を失敗しました。
後からの質問に関してはまた、別スレにて質問させていただきたいと思います。
その時はまたよろしくお願いいたします。
お望みの動作はこんな感じでしょう。
procedure CreateParams(var Params: TCreateParams); override;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := 0;
end;
ツイート | ![]() |