13

バグかどうかは分かりませんが…「Windows」以外のVCLスタイルを設定するとウィンドウ幅が狭くなってしまいます。

ウィンドウ スタイル 他のスタイルはこのように見えます... -

これに対する解決策はありますか?

更新 これを QC に送信しました: http://qc.embarcadero.com/wc/qcmain.aspx?d=103697 彼らが修正してくれることを願っています...

4

8 に答える 8

6

これは vcl スタイルのバグではありません。これが vcl スタイルの仕組みです。各スタイル (スキン) には独自の境界線の幅と高さがあり、ネイティブ ウィンドウの境界線のサイズと一致しない場合があります。

次の画像をチェック

ここに画像の説明を入力

カーボン スタイルの境界線の幅と高さは 5 ピクセルです

ここに画像の説明を入力

Amakrits スタイルの境界線の幅と高さは 6 ピクセルです

ここに画像の説明を入力

を使用して、各スタイルの枠線スタイルのサイズを確認できます。VCL Styles Designer

  • オブジェクト -> フォーム - > 画像 -> LeftBorder -> 幅
  • オブジェクト -> フォーム - > イメージ -> RigthBorder -> 幅
  • オブジェクト -> フォーム - > イメージ -> BottomBorder -> 高さ

したがって、上記のプロパティに応じて、フォームのスタイル フックはクライアント領域の境界を再計算します。

于 2012-02-25T21:40:38.160 に答える
4

これは確かに VCL のバグのようです。ClientWidthプロジェクト オプションでスタイルがシステム スタイル以外に設定されている場合、プロパティは .dfm ファイルから適切にストリーミングされません。

QualityCentralに報告を提出することをお勧めします。当面は、フォームの作成後に .dpr ファイルにスタイルを設定することで、この問題を回避できる場合があります。

Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
TStyleManager.SetStyle('Amakrits');//after CreateForm, rather than before
Application.Run;

ただし、起動時にすべてを作成する必要はなく、その場でフォームを作成できるようにする必要があるため、これでうまくいくとは思いません。

于 2012-02-25T19:19:20.240 に答える
0

この問題は、Delphi XE8 にも存在します。簡単な回避策は、次のコードを使用することです。これは、設計時のClientWidth/ClientHeightを復元するだけですが、いくつかの注意事項があります (最も重要なのは、AutoScrollに設定する必要がありますFalse)。

type
  TFormHelper = class helper for Vcl.Forms.TCustomForm
  private
    procedure RestoreDesignClientSize;
  end;

procedure TfrmTestSize.FormCreate(Sender: TObject);
begin
  RestoreDesignClientSize;
end;

{ TFormHelper }

procedure TFormHelper.RestoreDesignClientSize;
begin
  if BorderStyle in [bsSingle, bsDialog] then
  begin
    if Self.FClientWidth > 0 then ClientWidth := Self.FClientWidth;
    if Self.FClientHeight > 0 then ClientHeight := Self.FClientHeight;
  end;
end;

次の設計時のフォームが与えられます。

設計時フ​​ォーム

これにより、次のランタイムが修正されます。

ここに画像の説明を入力

に:

ここに画像の説明を入力

私のブログに詳細と写真があります: http://marc.durdin.net/2015/07/fixing-the-incorrect-client-size-for-delphi-vcl-forms-that-use-styles/

于 2015-07-24T02:00:50.547 に答える
0

ここには XE2 はありませんが、これはよく知られているように聞こえます。境界線のサイズではなくクライアントのフォームサイズを保存するには、 AutoScrollTrue (奇妙なことに、この回答の反対)に設定してみてください。

于 2012-02-25T19:26:07.963 に答える