RAD Studio 11でTDockTabSetを表示した時、「TTabDockPanelは親ウィンドウを持っていません。」というエラーが発生する

提供: Support
移動先: 案内検索

対象となるバージョン

  • RAD Studio/Delphi/C++Builder 11.0
  • RAD Studio/Delphi/C++Builder 11.1
  • RAD Studio/Delphi/C++Builder 11.2

問題

フォーム上にTDockTabSetコンポーネントを配置し、TDockTabSetを表示した時に以下のようなエラーが発生します。


Thumb03002015ujpn.png

例外クラスは EInvalidOperation メッセージは、'コントロール 'TTabDockPanel($0A3B77D0)' は親ウィンドウを持っていません。 パス:TTabDockPanel($0A3B77D0)'。

この問題は、RAD Studio 10.4以前のバージョンでは発生せず、RAD Studio 11固有の不具合であり、Embarcadero Quality Portalへ既に報告済みです。

ケース番号 タイトル
RSP-38160 TDockTabSet Demo Error

(Embarcadero Quality Portalへのログインは、EDNアカウントが必要)

解決

こちらの不具合は、RAD Studio 11.3で修正済みです。

この問題を解決するには、大変お手数をおかけいたしますが、RAD Studio 11.3へアップデートしてください。

RAD Studio 11.3のインストーラーは、my.embarcadero.comのサイトからダウンロードいただけます。

RAD Studio 11.3へアップデートを行う際のご注意は、こちらをご参照ください。


なお、RAD Studio 11.0、11.1、11.2などのバージョンでこの問題を解決したい場合は、<製品のインストールフォルダ>¥source¥vcl¥Vcl.Forms.pasを自身のプロジェクトフォルダへコピーし、修正してください。

修正箇所は以下の通りです。


Vcl.Forms.pas

procedure TCustomForm.SetParent(AParent: TWinControl);
var
  LRecreate: Boolean;
begin
  if (Parent <> AParent) and (AParent <> Self) then
  begin
    LRecreate := Parent = nil;
    if LRecreate then
      UpdateRecreatingFlag(True);
    try
      if LRecreate then
        DestroyHandle;
      if not (csDesigning in ComponentState) then
        FActiveControl := nil;
      FFocusedControl := nil;
      inherited SetParent(AParent);
      if Parent = nil then UpdateControlState;


      //if not (csDestroying in ComponentState) then  コメントアウト
      if not (csDestroying in ComponentState) and HandleAllocated then //追加
      begin
        if (FClientWidth > 0) then
          inherited ClientWidth := ScaleValue(FClientWidth);


        if (FClientHeight > 0) then
          inherited ClientHeight := ScaleValue(FClientHeight);
      end;
    finally
      if LRecreate then
        UpdateRecreatingFlag(False);
    end;
  end;
end;

修正したVcl.Forms.pasの適用方法は、以下のドキュメントを参照してください。

関連情報