LoginSignup
0
1

More than 5 years have passed since last update.

c++ builder XE4, 10.2 Tokyo > 自動付加された数値のsuffix (例 "Edit12"の12)を取得する実装

Last updated at Posted at 2016-07-05
動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)

コンポーネント名のEdit12から12を取得したり、Button3から3というインデックスを取得したい。

http://qiita.com/7of9/items/90c60cb9baa6c435b0cd
で実装していたものでは"_"始まりの数値しか取得できなかった。

以下でStrToIntDef()を使った実装をした。

Unit1.cpp
static int16_t getSuffixIndex(String name)
{
    String work;
    int16_t val;

    for(int idx=0; idx < name.Length(); idx++) {
        work = name.SubString(idx + 1, MAXINT);
        val = StrToIntDef(work, -99);
        if (val != -99) {
            return val;
        }
    }
    return -1;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int16_t val = getSuffixIndex(L"Button314");
    ShowMessage(IntToStr(val));

    val = getSuffixIndex(L"Edit12");
    ShowMessage(IntToStr(val));

    val = getSuffixIndex(L"Edit12_34");
    ShowMessage(IntToStr(val));
}

上記の結果、314, 12, 34の数値が取得できるようになった。

引数をSenderにした場合の実装は以下。
関連 http://qiita.com/7of9/items/d4d0a62d44c170b58dda

static int16_t getSuffixIndex(TObject *Sender)
{
    TComponent *cmpPtr = (TComponent *)Sender;
    String name = cmpPtr->Name;

    String work;
    int16_t val;

    for(int idx=0; idx < name.Length(); idx++) {
        work = name.SubString(idx + 1, MAXINT);
        val = StrToIntDef(work, -99);
        if (val != -99) {
            return val;
        }
    }
    return -1;
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1