-1

BDS XE6 では、Canvas->FillText を使用してテキストを配置しようとしています。const 宣言に問題があり、問題を解決できません。

TRect *Rect = new TRect(0, 0, 100, 30);
Canvas->FillText(*Rect, "Hello", false, 100, TFillTextFlags() << TFillTextFlag::RightToLeft, TTextAlign::Center, TTextAlign::Center);

コンパイラ エラーが発生します。

[bcc32 Error] MyForm.cpp(109): E2522 Non-const function _fastcall TCanvas::FillText(const TRectF &,const UnicodeString,const bool, const float,const TFillTextFlags,const TTextAlign,const TTextAlign) called for const object
  Full parser context
    LavEsiti.cpp(107): parsing: void _fastcall TMyForm::MyGridDrawColumnCell(TObject *,const TCanvas *,const TColumn *,const TRectF &,const int,const TValue &,const TGridDrawStates)

私の間違いについての情報を入手したいと思います。前もって感謝します。

4

2 に答える 2

1

TRect *Rect = 新しい TRect(0, 0, 100, 30);

を動的に割り当てる必要はありませんTRect。代わりにスタックベースのインスタンスを使用してください。

TRect Rect(0, 0, 100, 30);
Canvas->FillText(Rect, ...);

または、Rect()変数をまったく指定せずに関数を使用します。

Canvas->FillText(Rect(0, 0, 100, 30), ...);

コンパイラ エラーが表示されます: [bcc32 エラー] MyForm.cpp(109): E2522 Non-const function _fastcall TCanvas::FillText(const TRectF &,const UnicodeString,const bool, const float,const TFillTextFlags,const TTextAlign,const TTextAlign) const オブジェクトに対して呼び出されます

Delphi (VCL が記述されている) にはconst、C++ のように、クラス メソッドの -ness の概念がありません。イベントのCanvasパラメータは(理由はわかりませんが)と宣言されていますが、メソッドは と宣言されていません。そのため、エラーが発生します。Delphi では問題ありませんが、C++ では問題があります。OnDrawColumnCellconstTCanvas::FillText()constNon-const function ... called for const object

すでに発見したようconst_castに、エラーを取り除くことができますが、それは解決策というよりもハックです。イベント ハンドラーは、最初からオブジェクト ポインターを宣言するべきではありませんconst。これは、最初にそのイベントを作成した人に対する見落としです。

于 2014-05-15T23:09:50.397 に答える