2017年11月15日

2017-11-15 Delphi でクリックしたフォームの表示の挙動

2017-11-15 Delphi でクリックしたフォームの表示の挙動

Delphi XE2 とDelphi 7 で開発を行っていますが、別のフォームを show で表示した時の挙動が異なります。

■Delphi 7
Form1 から Form2.show で別のフォームを表示した後に、Form2 を Form1 の上に移動して、半分位を重ね合わせます。
Form1 をクリックするとフォーカスが移動して、Form1 の全体が表示されます。

■Delphi XE2
Form1 から Form2.show で別のフォームを表示した後に、Form2 を Form1 の上に移動して、半分位を重ね合わせます。
Form1 をクリックするとフォーカスが移動しますが、Form1 のうち、Form2 が重なっている部分は Form2 が表示されます。
本当は、クリックしてので、全体が表示して欲しいと思います。


XE2 で全体を表示するには、以下の対策があります。

■プロジェクトファイルを変更する

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},

{$R *.res}

begin
Application.Initialize;
Application.MainFormOnTaskbar := False; //Falseにする
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.


■全てのフォームに記述する

type
TForm1 = class(TForm)

procedure CreateParams(var Params: TCreateParams); override;

{$R *.dfm}

//クリックした時にフォームをアクティブにするために必要
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := Application.Handle;
end;


type
TForm2 = class(TForm)

procedure CreateParams(var Params: TCreateParams); override;

{$R *.dfm}

//クリックした時にフォームをアクティブにするために必要
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := Application.Handle;
end;


以下を参考にしました。有益な情報の提供をしていただき、ありがとうございました。

http://mrxray.on.coocan.jp/Delphi/plSamples/122_PluralForms.htm#list6

http://d.hatena.ne.jp/au2010/20110616/1308233783
posted by bonworld at 09:11| Comment(0) | TrackBack(0) | Delphi
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/181577552
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック