環境はDelphi2007,WindowsVistaです
FormMain で FormStyle=fsStayOnTop を設定し、
FormMain に複数のボタンを配置し、ボタンが押されるとShow で
フォーム(例えば:FormSub)を表示するのですが、
この FormSub 上にボタンがあり、このボタンを押すと
OpenDialog を使用してファイル名を取得するプログラムですが、
Diallog が FormSub の下に表示されます。
FormSub の FormStyle=fsNormal になっています。
FormMain はランチャーのように動作させておきたいので
常に最上位に表示させておき、 FormSub は最上位でなくても
いいのですが FormMain に連動しているようです。
どうすればよいのでしょうか。
2006 + XP で再現しないのでなんとも言えませんが
>FormMain に連動しているようです。
とするならば
public
function OpenDialog: Boolean;
end;
function TFormMain.OpenDialog: Boolean;
begin
Result := OpenDialog1.Execute;
end;
procedure TFormSub.Button1Click(Sender: TObject);
begin
if FormMain.OpenDialog = True then
begin
end;
end;
として FormSub から SubMain の OpenDialog 使用するように
したらどうでしょうか?
SubMain → FormMain
KHE00221さん
ありがとうございます。
早速試してみたのですが、変化がありませんでした。
コードは以下のとおりです。
プロパティの設定変更は主に次のようにしています
FormMain FormStyle = true;
Position = poScreenCenter;
Scaled = false;
FormSub FormStyle = fsNormal;
Position = poScreenCenter
Scaled = false;
<FormMain>
procedure TFormMain.Button1Click(Sender: TObject);
begin
FormSub.ShowModal;
end;
<FormSub>
procedure TFormSub.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute = true then begin
end;
end;
↓↓↓変更後↓↓↓
procedure TFormSub.Button1Click(Sender: TObject);
begin
if FormMain.OpenDialog1.Execute = true then begin
end;
end;
症状は
FormSub.ShowModal を呼び出して、FormSub が表示されたときに
FormSub の FormStyle=fsNormal なのに 最上位になっています。
最上位のフォームから呼ばれた Dialog はこのフォームの下に
隠れてしまって見えなくなるといった状態になっています。
以上よろしくお願いします。
Mr.XRAYです.
文章が読みづらいので書き直しました.
以下でいいでしょうか.
環境はWindows Vista + Delphi 2007
1. 新規プロジェクト作成
このFormをFormMainとする
FormStyle := fsStayOnTop;
ボタンを1つ配置
2. Formを追加.FormSubとする
このFormSubのFormSytleはfsNormal
ボタンとTOpenDialogを各1つ配置
3. 以下のボタンクリックコードを実行する
FormMainではボタンクリックでFormSubをShowMadalで表示
usseにFormSubのユニット名が必要
([ファイル][ユニットを使う]で追加可能)
procedure TFormMain.Button1Click(Sender: TObject);
begin
FormSub.ShowModal;
end;
表示したFormSubでボタンクリックでOpenDialogを表示
すると,OpenDialogが後(どこの?)に隠れてしまう.
procedure TFormSub.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
end;
end;
もしかしたら以下でOpenDialogが最前面に表示されるかも知れません.
動作確認は,Windows Vista + Delphi 2007-R2 Pro
これはVista特有の現象です.
Windows XP上で作成したEXEは,Vista上ではTrueでもFalseでも同じです.
なお,FormMainでForsub.ShowModalとしているのは,
FormMainのFormStyleがfsStayOnTopとなっているためです.
このままでFormSubをShowすると,FormSubがFormMainの後に(Zオーダで)いってしまいます.
[プロジェクト][ソース表示]で以下のTrueの部分をFalseにする.
Application.MainFormOnTaskbar := True;
Mr.XRAYさんありがとうございます。
Application.MainFormOnTaskbar := False で直りました。
ありがとうございます。
私の説明不足を直していただいた上に
正回答までいただきどうもすみませんでした。
ちなみに
>OpenDialogが後(どこの?)に隠れてしまう.
FormMain,FormSub のメニューの後ろに
隠れてしまってDailogのメニューがみえなくなるということです。
ツイート | ![]() |