2009-06-08 9 views
3

私はDelphi用のプロパティエディタを作成していますので、マルチモニタサポートの正しい画面に表示して欲しいと思います。その位置づけのために、私はDelphi IDEの「メイン」フォームへの参照をしたいと思います。Delphi IDEのメインフォームはどのように入手できますか?

私はアプリケーションのMainFormプロパティとApplicationオブジェクト自体を使用しようとしましたが、どちらもうまくいかないようです。私は(「申込書」で検索)のMainFormが実際にNathanial Woollsによって、この資料で参照隠しのTApplicationのインスタンスであるため、これがあると信じて:

http://www.installationexcellence.com/articles/VistaWithDelphi/Original/Index.html

、誰もが目に見えるメインのハンドルを取得する方法を知っていますIDE用のフォーム。私は、すべてのフォームを反復し、キャプションで "CodeGear RAD Studio"を検索するなど、気の利いたものを避けようとしています。

+0

プロパティエディタは、プロパティエディタを呼び出すために使用したものに応じて、オブジェクトインスペクタまたはフォームデザイナと同じ画面に表示されます。誰が応募書類を気にしますか? –

+0

私は同意しますが、オブジェクトインスペクタウィンドウのハンドルを取得する方法がわからなかったので、大部分のユーザーにとって正しいと思われる簡単な作業から始めました。私はまた、マウスの位置を取得して、それを監視して、それが現在では、それを使用していると考えています。 –

+0

@Jeremy Mullin:あなたの発見を共有してもらえますか? – menjaraz

答えて

4

IDEのメインフォームはApplication.MainFormです。私の簡単なテスト・デザイン・パッケージ:

procedure DoStuff(Form: TCustomForm); 
var 
    S: string; 
begin 
    S := Form.Caption; 
    Form.Caption := S + ' - this one'; 
    try 
    ShowMessage(Format('%s [%s] on monitor %d', [Form.Name, Form.ClassName, Form.Monitor.MonitorNum])); 
    finally 
    Form.Caption := S; 
    end; 
end; 

initialization 
    DoStuff(Application.MainForm); 

この私の場合は、「モニター0にAppBuilderは[TAppBuilder]」表示され、私は見ることができます - メインフォームのキャプションでサフィックスを「これ」。 あなたのケースではうまくいかないようですね。

+0

私はそれをフォームの所有者として割り当ててから、Form.Positionを使用してフォームをpoOwnerCenterに正しく配置しようとしています。私が仕事に入ると、私は正しいフォームを取得していることを確認し、あなたのようにForm.Monitorプロパティをチェックします。ありがとう! –

+0

私はそれを有効にしました、それは範囲の問題でした。私は、私の設計時のBPLではなく、ロードしていたDLLのApplication.MainFormを参照していました。その範囲では、それはnilを返していました。 DLL内に作成されたフォームでTForm.Positionプロパティを使用することはできませんでしたが(私は同じスコープの理由であると仮定しています)、BPLで手動で取得したApplication.MainForm.Monitorの位置と寸法を使用することができましたフォームを配置します。正しい方向に押してくれてありがとう! –

2

メインフォームはTAppBuilderとなりますので、FindWindow('TAppBuilder',nil)のようなものがあなたの出発点になるかもしれません。

関連する問題