Form1(メインのフォーム)からForm2を呼び出して表示しています。
Form2の内容を確認しながらForm1で入力をしたいので Form2のFormStylleをfsStayOnTop
にしました。Form1のFormStylleはfsNormalです。また、Form1からは Form2.Show;
で表示します。
こうするとForm2を前に表示させたまま後ろのForm1の操作ができるのですが、ユーザーか
指摘があり何かの拍子でForm2が隠れてしまい、Form1の操作ができなくなるときがあるら
しいです。私もいろいろ操作をしてみたのですが再現ができません。
このようなご経験はありますか?
過去ログをみるとMessageBoxでは報告されていますけど今ひとつ該当しないようです。
何か情報ありませんでしょうか?
環境 Delphi 7+Windows Xp SP3
客先環境は Xp ですけど SP はバラバラです。
以下のAPIを使用してはいかがでしょうか?
procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowPos( self.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE );
end;
"[Delphi:90835] fsStayOnTopのフォームなのに隠れてしまう" において
Hirao <hi...@stannet.ne.jp> さんは書きました
>Form1(メインのフォーム)からForm2を呼び出して表示しています。
>Form2の内容を確認しながらForm1で入力をしたいので Form2のFormStylleをfsStayOnTop
>にしました。Form1のFormStylleはfsNormalです。また、Form1からは Form2.Show;
>で表示します。
>
>こうするとForm2を前に表示させたまま後ろのForm1の操作ができるのですが、ユーザーか
>指摘があり何かの拍子でForm2が隠れてしまい、Form1の操作ができなくなるときがあるら
>しいです。私もいろいろ操作をしてみたのですが再現ができません。
これはいかがでしょう。
Form1 からForm2 を表示:
var
f: TForm;
:
:
f := TForm2.Create(Self);
SetWindowLong(f.Handle, GWL_HWNDPARENT, Handle); // Handle はForm1 のウィンドウハンドル
補足:
ウィンドウの関係を Owned/Owner の関係にすると ウィンドウ間の Z-Order が保障されます。
#Owned が Owner の前
どの Delphi からかは忘れてしまいましたが、 Delphi 2007/2009 では API を使わなくとも
新設された、TFormのPopupMode/PopupParent プロパティで Owner/Owned ウィンドウの
関係を作ることができます。
+---------------------------------------------+
|Takuo Nakamura from Hino City, Tokyo JAPAN |
+---------------------------------------------+
返事くださいましてありがとうございます。
> var
> f: TForm;
> :
> :
> f := TForm2.Create(Self);
> SetWindowLong(f.Handle, GWL_HWNDPARENT, Handle); // Handle はForm1 のウィンドウハンドル
unit Unit2には既に
var
Form2: TForm2;
があるので、unit Unit1では
var
f: TForm;
は加えず、下記のように変えた上で、動作テストしたところ、見かけ上は希望通りに
動作しましたが、何かまづいことがあるでしょうか?
なお、動作テストに先立ち、
プロジェクト-オプション
で表示される画面で、Fom2は「自動作成の対象」ではなく、「選択可能なフォーム」
に変更しましたが、これも正しい操作でしょうか?
*************************************************************
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
SetWindowLong(Form2.Handle, GWL_HWNDPARENT, Handle);
Form2.show;
end;
----- Original Message -----
From: "Takuo Nakamura" <naka...@asahi.email.ne.jp>
To: <Del...@ml.users.gr.jp>
梅津さんのご提示のコードで試してみます。
Nagao さん、おぉ同士。そちらはですか?私のほうは今日プログラムを差し替えて
しばらく試してもらいます。
無事何事もなければいいのですが...
画像から顔認識などの画像認識をDelphiでやりたいと思っています。
IntelのOpenCVが使えると簡単にできそうなのですが,
http://opencv.jp/
これをDelphiでどう使ったらよいか悩んでおります。C++のDLLを使うためのラッ
パークラスがあると助かるのですが見つけられずにおります。既にラッパークラ
スがあればその所在を,ないのであればC++のDLLをDelphiで使うための手順を教
えていただけるとうれしいです。
開発ではDelphi2007とDelphi2009を使っておりますが,良い方法がございました
らご教授いただけるとありがたいです。
よろしくお願いいたします。
確かCソースをDelphiに変換するツールがあったと
思いますので、これを使ってある程度まではCのヘッダを
変換出来ると思います。
その後、細かいところを手修正という感じでしょうか。
たぶん、これがそのツールだと思います。
以上、ご確認の程よろしくお願いいたします。
Form2 は「自動作成の対象」の場合、Application.CreateForm が自動的にフォームを作って
その参照を入れる先として確保されているグローバルな変数なので、
「選択可能なフォーム」はフォームの場合は自由に使ってかまいません。
補足:
Windows では伝統的に特定のウィンドウの前に別のウィンドウを「浮かす」場合、
Owned/Owner の関係を使っていますが、Delphi では伝統的に fsStayOnTop(TopMopst)を
使ってきました。これが原因みたいです。
関連情報
[Delphi-ML:82715] メッセージボックスが親フォームの後ろに隠れる
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=082715
「Windows XP で 実行時エラー '5' が発生する」(多分関連してます(^^;)
http://support.microsoft.com/default.aspx?scid=kb;ja;811469
nagao_support さんは書きました:
----------
東京都 日野市 中村拓男
----- Original Message -----
From: ""中村拓" "男"" <tknak...@brain-tokyo.jp>
To: <Del...@ml.users.gr.jp>
Sent: Tuesday, November 04, 2008 12:25 PM
Subject: [Delphi:90849] Re: fsStayOnTopのフォームなのに隠れてしまう
> 中村@ブレーンです。
お久しぶりです (^_^ゞ
> 補足:
>
> Windows では伝統的に特定のウィンドウの前に別のウィンドウを「浮かす」場合、
> Owned/Owner の関係を使っていますが、Delphi では伝統的に
> fsStayOnTop(TopMopst)を
> 使ってきました。これが原因みたいです。
補足の補足
StayOnTop の API って W98 以降で仕様変更って、 MSDN で公示がありませんでしたっけ?
だって Windows の System でエラーが発生しても StayOnTop で隠されてしまうので...
NT4 以降では System側で占有となったと記憶しているんですが...
---- (-_-)(-_-)(-_-) THE REAL PROGRAMMER (-_-)(-_-)(-_-) ----
At the beach, The Real Programmer is the one drawing flowcharts in the sand.
戸田 英夫 mailto: Hideo...@hiroshima.ntt-west.jp
----- Original Message -----
From: ""中村拓" "男"" <tknak...@brain-tokyo.jp>
To: <Del...@ml.users.gr.jp>
Sent: Tuesday, November 04, 2008 12:25 PM
Subject: [Delphi:90849] Re: fsStayOnTopのフォームなのに隠れてしまう