C++ Builder 2009でStaticText1に数字を入力できない問題

このQ&Aのポイント
  • C++ Builder 2009のCode Gearでプログラムをしている際、StaticText1に数字を入力することができません。
  • StaticText1のCaptionプロパティに数字を代入するためには、特定の設定が必要です。
  • 可能な解決策としては、StaticText1をラベルではなく編集可能なテキストボックスに変更することが考えられます。
回答を見る
  • ベストアンサー

テキストボックスに数値を入力できない。

TStatickTextというツールを StaticText1 StaticText2 StaticText3 3つ使用して、StaticText1 ,StaticText2に入れた数字の合計をStaticText3に代入するため void __fastcall TForm1::Button1Click(TObject *Sender) { int test_total=0; int x = StaticText1->Caption.ToInt(); int y = StaticText2->Caption.ToInt(); test_total = x + y; StaticText3->Caption = test_total; } このようにプログラムを作ってデバッグをしました。そのときに ”StaticText1->Caption”に数字を入力することができないのですが、入力するために必要な設定などありますでしょうか? 現在Code Gear C++ builder 2009でプログラムしています。 どうぞ教えて頂きますよう、よろしくお願いします。

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

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.1

Code Gear C++ builderは存じませんが Captionからint型の値を取り出すのにToInt()メソッドを使ってることからすると >int x = StaticText1->Caption.ToInt(); Captionはint型ではないのでは? Captionの型(クラス)を調べてそれに応じた設定すればよいだけかと。

diy_sunny
質問者

お礼

回答頂きありがとうございます。 TStaticText プロパティ http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/delphivclwin32/!!MEMBERTYPE_Properties_StdCtrls_TStaticText.html こちらの一覧を確認してみたのですが、どうもTStaticTextには、テキストボックスのような使い方はないみたいで、 TEditというのだと、自分がしたいことができました。 助かります。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

>入力するために必要な設定などありますでしょうか? Static Textには多分ないので、別途入力をハンドリングしてCaptionとして設定するなどのプログラミングが必要かと。 https://www.google.co.jp/search?hl=ja&q=%22VCL%22+control+%22Edit+Text%22&lr=lang_ja#hl=ja&sclient=psy-ab&q=%22VCL%22+control+TEdit&oq=%22VCL%22+control+TEdit&aq=f&aqi=&aql=&gs_l=serp.3...6361.9555.0.9789.16.14.0.0.0.1.227.1974.2j11j1.14.0...0.0.odXkERRFWKY&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=f2721ed52552bac5&biw=990&bih=910

diy_sunny
質問者

お礼

回答頂きありがとうございます。 自分がやりたかった方法はTStatictextではなく、TEditというのでできることがわかりました。 関連資料などのサイト頂ありがとうございます。活用させて頂きます。

関連するQ&A

  • C-Builderで数値(数字)以外を入力出来ない様にしたい。

    C-Builder V5 で数値(数字)を入力すべきところで、実行時に文字等を入力すると、システムからエラーメッセージが表示されるので、これを防ぐ為にEditで入力時に数字以外をはじきたいのですが、可能でしょうか。 以前C-Builder V4で作った時は出来た様な気がしたのですが、どの様にやったか思い出せないでいます。 ネットではC-Builderのサンプルが見つからず、Delphiのサンプルでは昔の記憶と同じ処理を行っていましたが、これだと文字判定以前にEditの枠に既に文字が入ってしまっており、文字の排除が出来ませんでした。 どなたか数字以外をはじく方法ご存知の方、お教え下さい。 // Edit1->ImeMode = imDisable; // 初期化部分で実行 void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if(Key<48 || Key>57) { Key = 0; } }

  • 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(); }

  • 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でこの様にイベント割り込みを一時的に禁止にする方法はありますでしょうか。 宜しくご回答下さい。

  • Borland社のコンパイラを使ったDLL

    C++BuilderでDLLファイルを使っておりますが、Vectorコンテナの値をコールバック出来ませんでした。Vectorコンテナを使ったコールバックを可能とする記述方法を教えてください。 Edit1には、思惑通りに102が返ります。Edit2には、1が、Edit3には2が返ります。この例では、201、202を返したいのです。 本体側 #include <vector> ・ ・ extern "C" __declspec(dllimport) int __stdcall test(int*,vector<int>); #pragma package(smart_init) #pragma resource "*.dfm" using namespace std; TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { vector<int> b; b.push_back(1); b.push_back(2); int *a; *a=1; Edit1->Text = IntToStr(test(a,b)); Edit2->Text = IntToStr(b[0]); Edit3->Text = IntToStr(b[1]); b.clear(); dll側 extern "C" __declspec(dllexport) int __stdcall test(int*,vector<int>*);//コンテナの引数の実験 ・ ・ //----------------------------------------------------------------------------- int __stdcall test(int *a,vector<int> &b) { //dllの引数の可能性の実験 for(unsigned int i;i<b.size();i++){ b[i] +=200; } *a+=1; return *a+100; } //-----------------------------------------------------------------------------

  • 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(); } //---------------------------------- よろしくお願いします。

  • 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); };

  • 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 *' 型に変換できない というエラーがでます。 解決方法を教えてください。

  • 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.

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

    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; } //------------

  • Borland C++ Builder

    void __fastcall TForm1::Timer1Timer(Object* Sender) { a=?; b=?; c=?; for (int y= 1; y<4; ++y){   char z[3][1]; z[1][1]='a'; z[2][1]='b'; z[3][1]='c'; Form1->Image1->Picture->Bitmap->LoadFromResorceName((int)HInstance,"z[y][1]"); } } Image1にa→b→cと一秒間隔で順番に画像を出力したいのです。 ?の部分に画像イメージを割り当ててforでまわせばいいと思ったのですがどう記述すれば割り当てられるのかが分かりません。 それと、この書き方でImage1に順番に出力できるのでしょうか。教えてください。

専門家に質問してみよう