RAD Studio 11でTDockTabSetを表示した時、「TTabDockPanelは親ウィンドウを持っていません。」というエラーが発生する
対象となるバージョン
- RAD Studio/Delphi/C++Builder 11.0
- RAD Studio/Delphi/C++Builder 11.1
- RAD Studio/Delphi/C++Builder 11.2
問題
フォーム上にTDockTabSetコンポーネントを配置し、TDockTabSetを表示した時に以下のようなエラーが発生します。
例外クラスは 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の適用方法は、以下のドキュメントを参照してください。