2016-12-19 4 views
8

現在、VCLスタイル対応アプリケーションのさまざまな側面をテストしています。VCLスタイルを使用したWindowsタイトルバーの視覚的なバグアプリケーションとディスプレイのスケーリング

デフォルトの96dpi/100%より高いWindowsスケーリングの場合、 VCLフォームのアイコンとタイトルバーのテキストが大きすぎます - 両方が一緒に閉じる - 付属していますスクリーンショット。これは、200%または250%(たとえば、4KディスプレイおよびWindows 10で使用)などの高倍率では特に当てはまりますが、144 dpi/150%の倍率であっても問題は既に目に見えます。

これは、RAD Studioで提供されるすべてのスタイルに当てはまります。マニフェストの高Dpi認識はプロジェクト設定で有効になります。 アプリケーションでVCLスタイルを無効にすると、アイコンとタイトルバーのテキストのサイズが正確になります。

ここに何か不足していますか?ディスプレイのスケーリングを有効にした状態で、表示されたスタイルが表示されていない状態で動作してはいけませんか?または、これを修正するために調整できる設定がいくつかあります。

おかげで、

enter image description here enter image description here

+0

これは決して完璧ではありませんが、各フォームのタイトルの前に2つのスペース文字を追加するだけで何のメリットもなく、VCLハッキングはありません。 – frogb

+0

これは質問に対するコメントであり、答えではありません。視覚的なバグの修正は扱っていません。それは単にクルーディの回避策です。 –

+0

私はそれについても考えましたが、あなたがアプリに15の異なるフォームを持っていて、フォームで他のDLLをロードしたり、TOpenDialogなどを実行すると、これは解決できません。 –

答えて

2

[OK]を、ここでは視覚的なバグのための私の解決策がある、参照してください。添付されたスクリーンショット。私はVcl.Forms.pasの3か所で修正を行いました。

タイトルバーの修正1でコメントされた最初の修正では、VCLスタイルのアプリケーションでデフォルトの96dpi Windows上でアイコンが正しく描画されないという問題が修正されました。私はJames JohnstonのWM_GETICON、ICON_SMALL2についての知見に基づいてこれを修正することができました。 https://stackoverflow.com/a/35067909 ありがとう、James!

他の2つの修正では、アイコンが大きすぎて描画が有効になり、アイコンとタイトルバーテキストの間の距離が小さすぎるという問題に対処しています。これらは、コード内のタイトルバーの修正2と3でコメントされた修正です。 GetDpiは、アプリケーション内のCソースから取得した現在のdpi値のゲッターです。

結果は完璧ではありませんが、今のところそれがあります。これにより、VCLスタイルのアプリケーションは、少なくともスケーリングされた状況では受け入れられます。

入力いただきありがとうございます。ここ

left original, right 'fixed'

Title bar fix 1

Title bar fix variables

Title bar fix 2

Title bar fix 3

+1

Peteさんのために**これまで**コードの画像を投稿してはいけませんコード画像はまったく役に立たず、コピー/貼り付けは視覚障害者にとっては不可能ですが、多くの企業プロキシの背後では利用できず、モバイルデバイスを使用している人にとっては絶対に悪臭を放ちます。検索の一部ではありません....さらに、 –

+0

@KenWhite私はあなたの意見を理解しており、私はスクリーンショットの投稿を知っていましたが、私はあなたのソリューションを共有したいと賞賛しています。実際には、私は実際には16k行の特定の場所を指し示すことを意図していました。ファイルを変更した場所で、これを何らかの相違点のビューとして欲しかったので、場所に焦点を当てます第一にeの違い。 –

+0

コード内のこれらの場所は**手順**には含まれていません。また、その場所を参照できる**行番号**はありません。 –

10

VCLスタイルが適切高DPIスケーリングをサポートしていません。

VCLスタイルを使用する場合、アプリケーションマニフェストから高いDPI認識を削除する必要があります。 VCLスタイルのための一般的な高DPIのサポートを要求する


QPレポート:NCエリアの VCL styles don't scale properly under high DPI configurations

関連QCレポート:Styled form's non-client area incorrectly scaled under High DPI

+0

@Dalija Prasnikar、情報とあなたのQCのおかげで、これは今私を助けません。私はEmbarcaに興味がありません。いずれにせよ、私はすでに何年もの間、自分のバグと分け合っていました。マニフェストでDPI認識を使用する必要があります。現在の10.1リリースで動作するソリューションを探しています。 –

+0

- スタイルデザイナーには、サブアイテムがたくさんあるObjects \ Form \ Image \ Title \ Captionがあります。役立つプロパティはありますか?私はLeftやMarginLeftのようにいくつか変更しようとしましたが、違いはありません。 - または、誰かが、キャプションテキストが配置されていないVCLスタイル.pasソースの場所に私をヒントできますか?また、バグを修正できる場合は、.pasソースを変更してプロジェクトにリンクすることも検討します。 ありがとう –

+0

Vcl.Forms TFormStyleHookクラス、PaintNCメソッドの可能性があります。 –

0

は、DPI対応のアプリケーションでVCLスタイルを可能にする手段です。

VCL.Styles.DPIAware.pas

だけでメインフォームのステートメントを使用して実装に追加し、FormCreateハンドラに次のコードを追加ユニットを使用すること。

procedure TFrmMain.FormCreate(Sender: TObject); 
Var 
    StyleDPIAwareness : TStyleDPIAwareness; 
begin 
    StyleDPIAwareness := TStyleDPIAwareness.Create(Self); 
    StyleDPIAwareness.Parent := Self; 

デフォルトでは、コンポーネントのスタイルは100%の倍数で調整されます。あなたは、行を追加して、それを変更することができます。この文のスタイルで

StyleDPIAwareness.RoundScalingFactor := False; 

がScreen.PixelsPerInchのためのどんなスケーリングファクタ結果にスケーリングされています。ほとんどのスタイルは正常に動作しますが、いくつかは視覚的な欠陥を示すことがあります。

関連する問題