喫茶XRAYトップページ

[▲前のスレッド]

[2680] コード補完ウインドウもどき返信 削除
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.


上の図が設計時,下の図が実行時

[2681] Re:コード補完ウインドウもどき返信 削除
2009/10/7 (水) 11:41:00 Mr.XRAY
改良版です.
Delphiのコード補完ウィンドウの動作仕様を真似てみました.

サンプルプログラム集にUPしましたので,元の記事を削除しました.
2009年10月07日 午後7時20分

http://mrxray.on.coocan.jp/Delphi/plSamples/126_PopUpFormTest.htm


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82