2017-02-12 8 views
0

私は、テキストエディタコンポーネントをポップアップウィンドウで開発しています。ポップアップウィンドウの幅は、自分のコンポーネントのプロパティエディタ内でデザイン時に設定する必要があります。コンポーネントのプロパティでDPI対応の値を使用する方法?

設定した幅を画面の解像度に適用するにはどうすればよいですか?

Widthの値を入力すると、Delphiは値を.dfmファイルに保存します。また、PixelsPerInch値が格納されています。私は.DFM内で、100%のWindowsのDPI設定を使用していながら、私は= 96の幅を置く場合は保存されます。

PixelsPerInch = 96 
Width = 96 

私は150%に今設定私のWindowsのDPIを変更し、これを再度開く場合Delphiのプロジェクトでは、プロパティエディタが幅148を表示します。

私は自分の価値のためにあまりにもこれを持っているしたいと思います:

published 
    property PopupWidth: Integer read FPopupWidth write FPopupWidth; 

...しかし、Delphiは、私の値について取り扱いをPixelsPerInchを適用しません。

どうしてですか?そして、私はこれをどのように実装できますか?

enter image description here

+0

- *「なぜいけないのでしょうか?」* - コンパイラがあなたの心を読み取ることができませんので。 * * ".. how .." * - TCustomForm.ReadStateにコードがあるはずです。これは関連しているかもしれません:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Considerations_When_Dynamically_Resizing_Forms_and_Controls –

+0

また、ピクセルカウントではない他の整数値もスケールしません。それらをスケールする必要がありますか? –

+0

@DavidHeffernan:はい、スケールする必要があります - それが私が望むものです。 Delphiにプロパティを拡張するように指示するにはどうすればよいですか? – Tahtu

答えて

2

この変倍機構は、VCLに明示コードによって処理されます。フレームワークは、コントロールを参加させるためにTControlの仮想ChangeScaleメソッドを提供します。

あなたがあなたのコントロールのためにChangeScaleをオーバーライドして、このようにそれを実装します:

procedure TMyControl.ChangeScale(M, D: Integer); 
begin 
    if sfWidth in ScalingFlags then 
    PopupWidth := MulDiv(PopupWidth, M, D); 
    inherited; 
end; 
関連する問題