C++ Builder XE4, 10.2 Tokyo > Bug? > TStreamMemory > WriteCopmponent() > TShape->Brush->Color = clWhiteの時だけ、色情報をコピーできない > clWhiteがデフォルトColorであるため
C++ Builder XE4
Rad Studio 10.2 Tokyo
前回
不可解な動作
上記の実装を使っていたが、不可解な動作となる
- コピー元のTShapeがBrush->Color = clWhiteの時、色情報がコピーできない
実装
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// Shape1は白に、他は任意の色
Shape1->Brush->Color = clWhite;
Shape2->Brush->Color = clAqua;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
copyProperties((TControl *)Shape1, (TControl *)Shape2);
// 重なっているため
Shape2->Left = Shape1->Left + 150;
}
void __fastcall TForm1::copyProperties(TControl *srcCtrl, TControl *dstCtrl)
{
// 元の名前を保持
String orgName_src = srcCtrl->Name;
String orgName_dst = dstCtrl->Name;
// プロパティコピー
TMemoryStream *strm = new TMemoryStream;
Shape1->Name = L""; // to avoid source collision
try {
strm->WriteComponent(srcCtrl);
strm->Position = 0;
strm->ReadComponent(dstCtrl);
}
__finally
{
delete strm;
}
srcCtrl->Name = orgName_src;
dstCtrl->Name = orgName_dst;
}
動作例
サイズに関するプロパティはコピーできたが、Brush->Color(=clWhite)はコピーできていない。
IDEのバグのようだ。
Shape1のBrush->ColorがclWhite以外の時はColorもコピーされる。
対処
以下のように、Colorをコピーしなおす処理が必要だろう。
copyProperties((TControl *)Shape1, (TControl *)Shape2);
Shape2->Brush->Color = Shape1->Brush->Color;
10.2 Tokyoでも同じ実装を確認したところ、再現した。
StackOverflow
StackOverflowにて質問をしている。
回答が付いたらここにも記載する予定。
2018-12-28
回答をいただいた。
clWhiteがdefaultカラーであるための挙動であるとのこと。
RTTIによるコピー方法のコード例も合わせて教えていただいた。
I appreciate it, Remy Lebeau.
Author And Source
この問題について(C++ Builder XE4, 10.2 Tokyo > Bug? > TStreamMemory > WriteCopmponent() > TShape->Brush->Color = clWhiteの時だけ、色情報をコピーできない > clWhiteがデフォルトColorであるため), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/2e22992c6a044361bdca著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .