名前 題名 ▼ 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. > > > 上の図が設計時,下の図が実行時 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link