2009/10/7 (水) 01:18:49 Mr.XRAY |
寝る前に(いつもは0時前なのですが,今日は...)
忘れないうちにUP.
新規フォームをアクティブにせずに表示するには
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200910/09100005.txt
というスレッドにレスしたのですが,また見に行かなく可能性が
ありますので.ただ,この質問者の意図することとは違うかも
知れません.ちょっと合間に作成.
動作確認 Windows XP(SP3) + Delphi 7 Pro
メインフォームのコード(Form1 Unit1)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AppEvnts;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
ApplicationEvents1: TApplicationEvents;
procedure Button1Click(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure ApplicationEvents1Deactivate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
//=============================================================================
// テストなどでボタンクリックで別フォーム表示
// そのフォームをアプリの最前面表示
// 実際には表示位置も設定した方がいいだろう
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
//FormStyleはオブジェクト・インスペクタでの設定がbetter
Form2.FormStyle := fsStayOnTop;
Form2.BorderStyle := bsNone;
Form2.Show;
//こんな処理を入れればこのフォームがアクティブ
Edit1.SetFocus;
//Form1.SetFocus;
end;
//=============================================================================
// 本フォームにフォーカスが無くなってもActive状態と同じにする
// (キャプションバーをアクティブな色のままとする)
//=============================================================================
procedure TForm1.FormDeactivate(Sender: TObject);
begin
Self.Perform(WM_NCACTIVATE,1,0);
end;
//=============================================================================
// 本アプリにフォーカスが無くなったら非Active状態と同じにする
// (キャプションバーを非アクティブな色にする)
//
// このイベントは,[Additional]の[TApplicationEvent]の
// OnDeactivateイベント
//=============================================================================
procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
Self.Perform(WM_NCACTIVATE,0,0);
//当然閉じた方がいいだろう
Form2.Close;
end;
end.
コード補完ウインドウもどき(Form2 Unit2)
ウィンドウのスタイルを変更するには,例えば
http://mrxray.on.coocan.jp/Halbow/Chap01.html#Chap1-3-3
を参考にしてみてください(リサイズ可能にしたいとか)
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
private
{ Private 宣言 }
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public 宣言 }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
//=============================================================================
// このフォームをコード補完ウィンドウのように使うとする
// 影付きなのでカッコつけて真似してみる
//=============================================================================
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
end;
end.
上の図が設計時,下の図が実行時
|
|