c++ builder XE4, 10.2 Tokyo > Tag가 동일한 TMemo에서 텍스트를 얻는 구현

8745 단어 cppBuilder#migrated
운영 환경
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)

사양


  • Button을 누르면 Button의 Tag 속성 값과 동일한 값이 Tag 속성에있는 TMemo의 Text를 가져옵니다.

    코드 v0.1



    Unit1.h
    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE で管理されるコンポーネント
        TButton *Button1;
        TMemo *Memo1;
        TMemo *Memo2;
        TMemo *Memo3;
        void __fastcall Button1Click(TObject *Sender);
    private:    // ユーザー宣言
        String __fastcall getMemoText(TForm *frmPtr, String tag);
    public:     // ユーザー宣言
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    Unit1.cpp
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #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)
    {
        if (Sender == NULL) {
            return;
        }
    
        TComponent *cmpPtr = (TComponent *)Sender;
        String ret = getMemoText(this, cmpPtr->Tag);
        ShowMessage(ret);
    }
    
    String __fastcall TForm1::getMemoText(TForm *frmPtr, String tag)
    {
        String ret = L"";
        for(int idx=0; idx < frmPtr->ComponentCount; idx++) {
            if (dynamic_cast<TMemo *>(frmPtr->Components[idx]) == NULL) {
                continue;
            }
    
            TMemo *mmPtr = (TMemo *)frmPtr->Components[idx];
            if (mmPtr->Tag != tag) {
                continue;
            }
    
            ret = mmPtr->Text;
        }
    
        return ret;
    }
    //---------------------------------------------------------------------------
    

    TForm *frmPtr을 건네주고 있는 것은, 다른 유닛에 가져가기 전 준비로서. 같은 폼으로 사용하는 경우는 this로 충분.

    설정


  • Memo1
  • Tag: 3141
  • Text: Memo3141

  • Memo2
  • Tag: 2718
  • Text: Memo2718

  • Memo3
  • Tag: 6022
  • Text: Memo6022

  • Button
  • Tag: 2718


  • 결과





    좋은 웹페이지 즐겨찾기