C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74745] Cannot change visible in OnShow or OnHide 관련 에러 질문입니다.
협곡 [] 4035 읽음    2018-01-16 18:01
고수님들의 조언을 듣고자 글을 올립니다.

하나의 폼에서 시리얼로 받은 데이터를 Text와 TChart에 뿌리려고하는데
컴파일 시 저런 에러가 나타나서 어려움을 겪고 있습니다.ㅠㅠ
구글링을 해본 결과
아래와 같은 글을 봤는데,  OnShow나 OnHide를 사용하지는 않고 있는데 에러메시지가 나타납니다.
------------------------------------
elphi의 OnActivate Event에서 발생하는 오류
OnActivate Event에서 Form의 FormStyle 특성을 변경하려면 ‘Cannot Change Visible in Onshow or OnHide'에러가 발생한다.

Form 스타일 뿐만이아니라 OnActivate에서 이벤트나 메서드 호출을 할경우에도 발생한다.  정확한 원인은 생성위치문제로 동일하겠으나 일단은 ‘Cannot Change Visible in Onshow or OnHide' 에러가 발생한다면 이곳이라는 것을 알아두자.

FormStyle은 Window가 생성될 때 결정되며,OnCreate Event에서 일반적인 설정이 이루어진다.그러므로 OnShow나 OnHide, OnActivate Event에서 사용될 수 없다.

출처: http://windofwind.tistory.com/entry/오류메시지-Cannot-Change-Visible-in-Onshow-or-OnHide [개발이 뭐야?]
------------------------------------

아래는 소스 코드입니다. ㅠ
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <string.h>
#pragma hdrstop

#include "megaboot.h"
#include "global.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma link "sButton"
#pragma link "sComboBox"
#pragma link "sLabel"
#pragma link "sPanel"
#pragma link "sSkinManager"
#pragma link "SUIButton"
#pragma link "SUIDBCtrls"
#pragma link "SUIEdit"
#pragma link "SUIGroupBox"
#pragma link "SUIImagePanel"
#pragma link "SUIProgressBar"
#pragma resource "*.dfm"
TForm1 *Form1;

unsigned char   Queue[1024*100];
long            nQueuePos;
unsigned char   count = 0, flag = 0;
unsigned char   define = 0;
unsigned int    timer_cont = 0;
unsigned int    TCP_Count = 0;
unsigned int    reconnetion_count = 0;
unsigned int    reconnetion_state = 0;
unsigned int    reconnetion_count2 = 0;

unsigned int    m_nPageByte = 0;
unsigned int    com_finish = 0;
unsigned int    timer_count = 0;
char time_save[30];
_sFlash flash_data;
_sAccl    accl_data;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    /*
    Chart1->LeftAxis->Minimum = 0;
    Chart1->LeftAxis->Maximum = 2000;
    Chart1->Series[0]->Clear();
    Chart1->Series[1]->Clear();
    Chart1->Series[2]->Clear();
    Chart1->BottomAxis->Minimum = 0;
    Chart1->BottomAxis->Maximum = 1000;

    Chart2->LeftAxis->Minimum = 0;
    Chart2->LeftAxis->Maximum = 2000;
    Chart2->Series[0]->Clear();
    Chart2->Series[1]->Clear();
    Chart2->Series[2]->Clear();
    Chart2->BottomAxis->Minimum = 0;
    Chart2->BottomAxis->Maximum = 1000;
    */
}
//---------------------------------------------------------------------------
int    __fastcall TForm1::SendData( unsigned char *pData, int nSize, BYTE *MemoData)
{
    BYTE    szSend[1024], *temp;
    //unsigned int    nCompCRC=0;
    int        i = 0, j = 0;
    unsigned char       nOPCode;
    //unsigned char       szBuf[1024];
    char  szBuf[128];
    FILE *fp;
    SYSTEMTIME  ttt;

    for(j=0; j<nSize; j++)
        szSend[j] = pData[j];

    szSend[j++] = 0x0d;
    szSend[j++] = 0x0a;
    ComPort1->Write(&szSend, j);

    fn_MessageView(szSend, 1, j, MemoData);

    return true;
}
void __fastcall TForm1::ComPort1AfterClose(TObject *Sender)
{
    btn_Connect->Caption    = "연 결";
    btn_Setting->Enabled    = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1AfterOpen(TObject *Sender)
{
    btn_Connect->Caption    = "끊 기";
    btn_Setting->Enabled    = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::setting_init(void)
{
    flash_data.stat = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
{
    BYTE    c;
    char    szBuf[1024];
    int    size = 0;
    char   buffer_finish = 0;
    char   name[200];
    char   Buf[1000];
    int    nSlaveID=0;
    com_finish = 1;
    SYSTEMTIME  ttt;
    FILE *fp;

    for(int i=0; i<Count; i++)
    {
        ComPort1->Read(&c, 1);
        /*Queue1[nQueuePos1++] = c;

        if (Queue1[nQueuePos1-1] == 0x0A) {
            if (Queue1[nQueuePos1-2] == 0x0D) {
                memset(szBuf, 0, sizeof(szBuf));
                sprintf(szBuf,"RX -> %s", Queue1);
                Memo1->Lines->Add(szBuf);

                memset(Queue1, 0, sizeof(Queue1));
                nQueuePos1 = 0;
            }
        }*/

        if(flag == 0){
            if(c == 0x24)
                flag = 1;
        }
        else if(flag == 1){
            if(c == 0x52)
                flag = 2;
        }
        else if(flag == 2){
            if(c == 0x49)
                flag = 3;
        }
        else if(flag == 3){
            if(c == 0x49)
                flag = 4;
        }
        else if(flag == 4){
            if(c == 0x4D)
                flag = 5;
        }
        else if(flag == 5){
            if(c == 0x55){
                nQueuePos = 0;
                flag = 6;
            }
        }
        else if(flag == 6){
           Queue[nQueuePos++] = c;
           //memset(szBuf, 0, sizeof(szBuf));
           //sprintf(szBuf, "RX -> %s", Queue);
           //Memo1->Lines->Add(szBuf);
           if(c == 0x2A)
                flag = 7;
        }
        else if(flag == 7){
            flag = 1;
            fn_analysis(Queue, nQueuePos);
            memset(Queue, 0, sizeof(Queue));
            nQueuePos = 0;
        }
    }

}

//---------------------------------------------------------------------------
void __fastcall TForm1::sButton1Click(TObject *Sender)
{
    FILE *fp;
    unsigned char sum_h, sum_l;
    char tmp[1];
    unsigned int i;
    unsigned char size;
    char  szBuf[128];
    char name[200];
    char data_buf[500*1000];
    AnsiString string;

    string = suiEdit1->Text;
    size = string.Length();
    memset(name, 0, sizeof(name));
    memset(data_buf, 0, sizeof(data_buf));
    sprintf(name, "%s", string);

    memset( szBuf, 0, sizeof(szBuf));
    sprintf(szBuf,"요청");
    SendData(name, size, szBuf);

    /*
    memset( szBuf, 0, sizeof(szBuf));
    Memo1->Lines->Add(szBuf);
    sprintf(szBuf,"TX -> %s\n", name);
    Memo1->Lines->Add(szBuf);
    */

}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_SettingClick(TObject *Sender)
{
    ComPort1->ShowSetupDialog();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_ConnectClick(TObject *Sender)
{

    try
    {
        if(ComPort1->Connected == false)
        {
            //test
            //CheckBox6->Checked = true;
            ComPort1->Open();
            btn_Connect->Caption    = "닫 기";
            memset(Queue, 0, sizeof(Queue));
            nQueuePos=0;
        }
        else
        {
            //CheckBox6->Checked = false;
            ComPort1->Close();
            btn_Connect->Caption    = "연 결";
        }
    }
    catch (const Exception &e)
    {
        Application->MessageBoxA(" 통신포트가 사용중이거나 사용할수 없는 포트입니다. 통신포트 설정을 다시하세요. ", "aa", MB_OK);
    }

}

//---------------------------------------------------------------------------
void __fastcall TForm1::fn_MessageView(unsigned char *pdata, unsigned char rx_tx, int size, char *_msg)
{
    char        szBuf[500];

    TListItem *pTListItem = lv_MessageView->Items->Add();

    ZeroMemory(szBuf, sizeof(szBuf));
    fn_TimeString(szBuf);

    pTListItem->Caption = szBuf;

    if(rx_tx == 0)
        pTListItem->SubItems->Add("-> RX");
    else
        pTListItem->SubItems->Add("<- TX");


    pTListItem->SubItems->Add(_msg);


    ZeroMemory(szBuf, sizeof(szBuf));
    fn_DataString(pdata, size, szBuf);
    pTListItem->SubItems->Add(szBuf);

    if (lv_MessageView->Items->Count >= 5) lv_MessageView->Scroll(0, 40);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1DblClick(TObject *Sender)
{
    Memo1->Clear();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    int i=0;
    //int j=0;
    char szbuff[100];
    char szBuf[100];
    FILE *fp;
    SYSTEMTIME  ttt;

//    if(com_finish)
//    {
//        timer_count++;
//    }
//    if(timer_count>=2)
//    {
//        timer_count = 0;
//        com_finish = 0;
//        for(i=0;i<=(nQueuePos/40);i++)
//       {
//            if(i == 0)
//            {
//                memset(szbuff, 0, sizeof(szbuff));
//                memcpy(szbuff, Queue, 40);
//               memset(szBuf, 0, sizeof(szBuf));
                //sprintf(szBuf,"RX -> ");
                //for(j=0; j<40; j++) {
                //    sprintf(szBuf, "%s%c", szBuf, Queue[j]);
                //}
                //sprintf(szBuf,"RX -> %s", szbuff);
                //Memo1->Lines->Add(szBuf);

                /*
                if( CheckBox1->Checked == true)
                {
                    GetLocalTime(&ttt);
                    sprintf(time_save,"%04d%02d%02d%02d.txt", ttt.wYear, ttt.wMonth, ttt.wDay, ttt.wHour);
                    fp = fopen(time_save, "a");
                    fprintf(fp, "%02d:%02d:%02d.%03d RX ", ttt.wHour, ttt.wMinute, ttt.wSecond, ttt.wMilliseconds);
                    for( j=0;j<40;j++)
                        fprintf(fp, "%X ", Queue[j]);

                    fprintf(fp, "\n");
                } */
//            }
//            else
//            {
//                memset(szbuff, 0, sizeof(szbuff));
//              memcpy(szbuff, &Queue[i*40], 40);
//                 memset(szBuf, 0, sizeof(szBuf));
//                sprintf(szBuf,"             %s", szbuff);
//                Memo1->Lines->Add(szBuf);
                /*
                 if( CheckBox1->Checked == true)
                 {
                    fprintf(fp, "                ", ttt.wHour, ttt.wMinute, ttt.wSecond, ttt.wMilliseconds);
                    for( j=0;j<40;j++)
                        fprintf(fp, "%c ", Queue[j]);

                    fprintf(fp, "\n");
                 }
                 */
//            }
//        }
        /*
        if(CheckBox1->Checked == true)
            fclose(fp);
        */
        //memset(szBuf, 0, sizeof(szBuf));
        //sprintf(szBuf,"Total Size %d", nQueuePos/2);
//        Memo1->Lines->Add(szBuf);
        //memset(Queue, 0, sizeof(Queue));
        //nQueuePos = 0;
//    }
}

//---------------------------------------------------------------------------

void __fastcall TForm1::fn_analysis(char *_pdata, int _size)
{
    int accl_x, accl_y, accl_z;
    int acclx_g, accly_g, acclz_g;
    //char s1[] = ",77,-255,2002,10";
    char s1[32];
    char s2[] = ",";
    char* token = NULL;

    memset(s1, 0x00, sizeof(s1));
    memcpy(&s1, &_pdata[0], 32);
    //memset(Queue1, 0x000, sizeof(Queue1));
    //nQueuePos1 = 0;

    token = strtok(s1, s2);        // Seq Number
    SeqNum->Text = atoi(token);
    //Graph->SeqNum->Text = atoi(token);

    token = strtok(NULL, s2);    // X
    accl_x = atoi(token);
    ACCL_X->Text = accl_x;
    Chart1->Series[0]->Add(accl_x, NULL, clRed);
    if(accl_x > accl_data.P_max_x){
        accl_data.P_max_x = accl_x;
        Plus_X->Text = accl_data.P_max_x;
    }
    if(accl_x < accl_data.M_max_x){
        accl_data.M_max_x = accl_x;
        Minus_X->Text = accl_data.M_max_x;
    }
    acclx_g = accl_x * 16.0 / 32767;
    //Chart2->Series[3]->Add(acclx_g, NULL, clRed);

    token = strtok(NULL, s2);    // Y
    accl_y = atoi(token);
    ACCL_Y->Text = accl_y;
    Chart1->Series[1]->Add(accl_y, NULL, clGreen);
    if(accl_y > accl_data.P_max_y){
        accl_data.P_max_y = accl_y;
        Plus_Y->Text = accl_data.P_max_y;
    }
    if(accl_y < accl_data.M_max_y){
        accl_data.M_max_y = accl_y;
        Minus_Y->Text = accl_data.M_max_y;
    }
    accly_g = accl_y * 16.0 / 32767;
    //Chart2->Series[4]->Add(accly_g, NULL, clGreen);

    token = strtok(NULL, s2);    // Z
    accl_z = atoi(token);
    ACCL_Z->Text = accl_z;
    Chart1->Series[2]->Add(accl_z, NULL, clBlue);
    if(accl_z > accl_data.P_max_z){
        accl_data.P_max_z = accl_z;
        Plus_Z->Text = accl_data.P_max_z;
    }
    if(accl_z < accl_data.M_max_z){
        accl_data.M_max_z = accl_z;
        Minus_Z->Text = accl_data.M_max_z;
    }
    acclz_g = accl_z * 16.0 / 32767;
    //Chart2->Series[5]->Add(acclz_g, NULL, clBlue);
}

+ -

관련 글 리스트
74745 Cannot change visible in OnShow or OnHide 관련 에러 질문입니다. 협곡 4035 2018/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.