動的に作ったリッチエディットのイベント

このQ&Aのポイント
  • 動的に作ったRichEditのサイズを調整できるようにOnResizeRequestイベントを設定したつもりなのですが、コンパイルでエラーがでます。
  • こちらの環境はWIn98, Borland C++Builder Ver.4です。どなたか、助けをお願いします。
  • C++ エラーで、Calender1.cppファイルの1092行目でエラーが発生しています。エラーメッセージは'E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,TRect &))(TObject *,TRect &)' to 'void (_fastcall * (_closure )(TObject *,const TRect &))(TObject *,const TRect &)'です。
回答を見る
  • ベストアンサー

動的に作ったリッチエディットのイベント

toshi_ynと申します。 動的に作ったRichEditのサイズを調整できるようにOnResizeRequestイベントを 設定したつもりなのですが、コンパイルでエラーがでます。 いろいろなTipsを見ながら作ったので、どこが間違っているのか 分からず困っております。 こちらの環境はWIn98, Borland C++Builder Ver.4です。 どなたか、助けをお願いします。 [C++ エラー] Calender1.cpp(1092): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,TRect &))(TObject *,TRect &)' to 'void (_fastcall * (_closure )(TObject *,const TRect &))(TObject *,const TRect &)'. //--コード-- Unit.h private: // ユーザー宣言 void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,TRect &Rect); Unit.cpp //----------- Redit[Num] =new TRichEdit(Owner); Redit[Num]->Parent = pnl[Num]; Redit[Num]->BorderStyle=bsNone; Redit[Num]->ScrollBars=ssNone; Redit[Num]->ReadOnly=true; Redit[Num]->Tag=Num; Tag=Num; Redit[Num]->Width=10; Redit[Num]->Height=10; Redit[Num]->PlainText=false; Redit[Num]->Cursor=crArrow; Redit[Num]->OnMouseDown=Redit_MouseDown; Redit[Num]->OnDragOver=Redit_DragOver; Redit[Num]->OnResizeRequest=Redit_ResizeRequest; ←ここでエラー //------------- void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,TRect &Rect) { Redit[Tag]->BoundsRect = Rect; } //------------

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

[C++ エラー] Calender1.cpp(1092): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,TRect &))(TObject *,TRect &)' to 'void (_fastcall * (_closure )(TObject *,const TRect &))(TObject *,const TRect &)'. ↑このエラーの意味わかります? ようするに、関数の型(引数の型)が違うんです void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,TRect &Rect); ではなくて void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,const TRect &Rect); である必要があるのです

toshi_yn
質問者

お礼

早速の回答ありがとうございます。 そうですね。ご指摘のとおり、引の型が違うのに気づいていませんでした。 初歩的なミスでした。 おかげで、うまく動くようになりました。ありがとうございました。 今後ともよろしくお願いします。

関連するQ&A

  • OpenDialogからテキストファイルの読み込み

    void __fastcall TForm1::N1Click(TObject *Sender) {     FILE *fp;      if(OpenDialog1->Execute()) { FNN1 = ExtractFilePath(OpenDialog1->FileName)         fp = fopen(FNN1.c_str(), "r" );              fread(txtdata,2,360,fp); } } [C++ エラー] Unit1.cpp(52): E2034 'AnsiString' 型は 'void *' 型に変換できない というエラーがでます。 解決方法を教えてください。

  • bmpやImageの配列を関数の引数で渡す

    C++BuilderXE2starterです。 ビットマップ(bmp)やTImage を配列で定義し、関数の引数として渡したいのですが よくわからないまま、次のようにすると、色んな不正な使い方らしきエラーとなります。 正しい使い方を教えてください。 なお配列でないbmpを渡すことはできます。ImageはIDEで定義するのではなく、プログラムから生成させる積もりです。 最終的にやりたいスタイル。 void __fastcall TForm1::onclick(TObject *Sender) { int n; Graphics::TBitmap *bmp[10]; TImage::Image *Imagenum[10]; for(n=0;n<10;n++){ bmp[n]=new Graphics::TBitmap(); Imagenum[n]=new TImage::TImage; // bmp,Imagenum のサイズ位置の設定 Imagenum[n]->Top= 値; Imagenum[n]->Left= 値; } sub(bmp,Imagenum); Free(bmp); // for でまわす要あり? Free(Image); } //--------------------------------------------------------------------------- void TForm1::sub2(Graphics::TBitmap *bmp[], TImage *Imagenum[]) { Image[0]->Canvas->Draw(0,0,bmp[0]); Image[1]->Canvas->Draw(0,0,bmp[1]); } unit.h class TForm1 : public TForm { __published: // IDE で管理されるコンポーネント TButton *Button1; void __fastcall onclick(TObject *Sender); private: // ユーザー宣言 void TForm1::sub(Graphics::TBitmap **bmp, TImage **Image); public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); };

  • AVIファイルを読み込む方法

    C++でプログラミング中の者です。 使っているコンポーネントはanimate、MediaPlayer、Edit、Botton、OpenDialogです。 OpenDialogで選択したファイル名をEditに表示させ、Mediaplayerを使ってAnimateに表示させるプログラミングをしたいと思っています。 なかなかうまくいかないので、アドバイスお願いいたします。 次のは現在のプログラムです。 #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //OpenDialog1->DefaultExt = "AVI"; //OpenDialog1->FileName = "*.avi"; if(OpenDialog1->Execute()==true){ // ファイル名が選択されたときに実行する処理  Edit1->Text=OpenDialog1->FileName; //Edit1に選択したファイル名を表示 //Animate1->Active=LoadFromFile(OpenDialog1->FileName); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { MediaPlayer1->Open(); MediaPlayer1->Play(); } //---------------------------------- よろしくお願いします。

  • BCBでフォームの印刷

    Borland C++ Builder 5(Pro)を使っています。 TForm上にTImageを乗せ、そこにPolyline等で図形を描いています。 それを印刷したいのですが、TImageにはPrintメソッドがないので、 TFormのPrintメソッドを呼び出していますが、印刷できません。 プリンタのジョブを監視していると、何も印刷せずに「印刷済」になっています。 印刷ボタン、印刷設定ボタンのOnClickは以下のようになっています。 間違い等ありましたらご指摘ください。 // 印刷ボタン void __fastcall TGraphForm::PrintButtonClick(TObject *Sender) {   if(PrintDialog->Execute()){     GraphForm->Print();   } } // 印刷設定ボタン void __fastcall TGraphForm::PrtSetupButtonClick(TObject *Sender) {   PrinterSetupDialog->Execute(); }

  • イベントハンドラを削除したら、再度生成されない

    エンバカデロ Code Gear C++ Builder 2009という開発ソフトを使用しています。 TCheckBoxというチェックボタンのコンポ-ネットを追加して、フォーム画面でこのチェックボタンをクリックした場合の処理のCommaCheckBoxClickイベントハンドラが自動的にUnit1.cppというファイルに void //fastcall TTestForm::CommaCheckBoxClick(TObject *Sender) { } というので自動的に作成されるのですが、一度この文字を削除してしまい、再度チェックボタンのアイコンをダブルクリックで同じコードを生成使用としたのですが、 ”メソッド CommaCheckBoxClick の実現部が見つかりません。”というエラーメッセージボックスが表示されるようになってしまい、この文を再度自動的に生成できなくなってしまったのですが、 一度消してしまうと再度作成はできないのでしょうか?

  • VB.net 割り込みの禁止

    Borland C-Builder++の内容をVB.net 2010に書き換えて居る者です。 TextBox等の割り込みを一時的に禁止したいのですが、良い方法はありませんでしょうか。 無ければフラグを用いて、フラグが立っている時のみ処理をバイパスさせる事を考えて居ます。 Builder では ComboBox1->OnChange = NULL ; とコーディングする事により、 void __fastcall TForm1::ComboBox1Change(TObject *Sender) { Edit1->Text = ComboBox1->Text; } への割り込みを禁止出来、 ComboBox->OnChange = ComboBox1Change; とコーディングする事により割り込みを再開出来ました。 これを void __fastcall TForm1::ComboBoxChange(TObject *Sender) {     ComboBox1->OnChange = NULL ; Edit1->Text = ComboBox1->Text;     ComboBox->OnChange = ComboBox1Change; } とコーディングする事により、2重割り込みを防止していました。 VBでこの様にイベント割り込みを一時的に禁止にする方法はありますでしょうか。 宜しくご回答下さい。

  • クラスのメンバ変数の宣言方法

    現在、プロジェクト内に”class PACKAGE TNumberEdit : public TEdit”というクラスを持った”NumberEdit.h”、”NumberEdit.cpp”ファイルを追加して、 Unit1.hファイル内の”class TTestForm : public TForm”このクラス内のpublicにメンバ変数として ”TNumberEdit *NumberEdit1;” このように宣言しました。 そして、 __fastcall TTestForm::TTestForm(TComponent* Owner) : TForm(Owner) { NumberEdit1 = new TNumberEdit(this); } //--------------------------------------------------------------------------- このようなプログラムを書くと次のようなエラーが出てきます。 [ILINK32 エラー] Error: 未解決の外部参照 'TNumberEdit::' が C:\MYWORK\....\CPP_BUILDER_2009\TEST_NUBEREDIT\DEBUG\UNIT1.OBJ から参照されました [ILINK32 エラー] Error: 未解決の外部参照 '__fastcall TNumberEdit::TNumberEdit(Classes::TComponent *)' が C:\MYWORK\.....\CPP_BUILDER_2009\TEST_NUBEREDIT\DEBUG\UNIT1.OBJ から参照されました このようなエラーを回避する方法はありますでしょうか?どうぞ教えて頂きますよう、お願い致します。

  • Delphiプログラミングについて

    この内容ではいけないのでしょか? また、代わりの方法なども教えていただけると嬉しいです ボタン ラベル がフォーム1の上に1つずつあるだけです お願いいたします unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; i:integer; implementation {$R *.dfm} procedure hyouji; begin repeat form1.label1.caption:= 'strike'; until i = 10; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (KEY = VK_RIGHT) then i:=i+1; end; procedure TForm1.Button1Click(Sender: TObject); begin hyouji end; end.

  • BorlandC++Builder5.0でリンカエラー

    現在A/D変換ボードの制御をしようとしています。 ボードのインストールも行なったのですが、以下のエラーが出て困っています。 外部シンボル 'AdOpen' が未解決(C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\MAG\MAIN.OBJ が参照)と出てしまいます。 mainはシンプルなのですが... void __fastcall TForm1::OpenDevClick(TObject*Sender) { device_handle = AdOpen("FBIAD1"); if(device_handle == INVALID_HANDLE_VALUE){ ShowMessage("Err : デバイスのオープンに失敗"); return; } } そもそもこのエラーはなぜ出るのですか?

  • コンパイルエラー: LNK2001

    今、ベクトル計算を簡単にするクラスを作ってみようとしています。 //vector3.h template<class TT> class vector3{ public:   enum{NUM=3};   TT x[NUM];   void set(const TT *vv)void set(const TT *vv){     int i;     for(i=0;i<NUM;i++){       x[i]=vv[i];     }   } }; のように、set関数をクラスの中に書いていると問題無いのですが、以下のように、 //vector3.h template<class TT> class vector3{ public:   enum{NUM=3};   TT x[NUM];   void set(const TT *vv); }; //test.cpp #include"vector3.h" template<class TT> void vector3<TT>::set(const TT *vv){   int i;   for(i=0;i<NUM;i++){     x[i]=vv[i];   } } と、cppファイルの中に書き換えると以下のようにエラーが出るようになります。 error LNK2001: 外部シンボル ""public: void __thiscall vector3<double>::set(double const *)" (?set@?$vector3@N@@QAEXPBN@Z)" は未解決です。 fatal error LNK1120: 外部参照 1 が未解決です。 これはいったい何故なのでしょうか? 使用しているのはVisualC++2008ExpressEditionです 宜しくお願いします。

専門家に質問してみよう