2017-01-30 3 views
-2

質問があります:アプリケーションで新しく作成されたすべてのフォームにOnKeyPressプロシージャが実装され、KeyPreviewがTrueに設定されていますか?Escape用のOnKeyPressがデフォルトでフォームを閉じます

この手順をOnKeyPressイベントに常に追加し、KeyPreviewをTrueに手動で設定しないことをお勧めします。

+0

下線を削除してください。 – SovereignSun

+0

ダウンボートは何ですか?少なくともコメントする。 – SovereignSun

答えて

0

私が見つけた最良の方法は、フォームのテンプレートを作成し、リポジトリにそれを追加することです。その後、新しいフォーム "レポジトリ"に設定します。

この場合、新しいフォームを作成するたびにそのテンプレートが作成されます。名前とキャプションを変更するだけです。

これはデルファイ7で役に立ちました。

2

TFormから継承した独自のフォームTKPFormを定義し、KeyPrviewをTrueに設定し、キープレスを使用して目的の処理を行うコンストラクタを追加します。 もちろん、TKPFormの新しいインスタンスに固有のコードが必要な場合は、keyprssをオーバーライドする必要があります。

私はDelphiをやって以来、非常に長い時間がかかりましたが、これは遠すぎてはいけません。

unit KPForm; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls, Buttons; 

type 
    TKPForm = class(TForm) 

private 
    { Private declarations } 
    public 
    constructor CreateNew(AOwner: TComponent); override; 
    end; 
var 
    TKPForm: TKPForm 

implementation 

{$R *.dfm} 
constructor KPForm.CreateNew(AOwner: TComponent); 
begin 
    inherited Create(AOwner); 
    Self.KeyPreview = true; 
    Self.OnKeyPress = YourKeyPressEventProcedure; 
end; 

新しいフォームが必要なときは、新しいKPFormを使用します。

Visual Form Inheritanceを見てください。

希望します。

+0

私は 'OnKeyDown'イベントハンドラの使用を好むので、' TKPForm'のユーザがハンドラを設定できるようにパブリック関数を提供する方が良いでしょうか?率直に言って、これらを手動で設定するのは大きな問題ではありません。 'KeyPreview'のようなフォームのプロパティはまれにしか変更されません。 – AlainD

関連する問題