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
[12361] Re:Re:콜님 다시 한번 부탁드립니다. Re:UpDown컴포넌트를 눌렀을때 hex값으로 증가시키게 할수
heartsim [] 672 읽음    2001-11-06 10:29
안녕하세요 꼴님. 이제 정말로 마지막입니다.^^
답변에 주신 내용 이해를 한 것 같습니다.

그러니간 Edit5에 있는 28(원래는 10진수임)이란 숫자를 16진수로 생각하고 10진수로 만들어서
Position에 저장하라는 거죠?(맞는 것 같은데^^)
요로케요.......UpDown1->Position=AnsiString("0x"+Edit5->Text).ToInt();

그리고 UpDown컴포넌트를 눌러서 증가를 시킨다음에 원하는 값이 되면
그걸 Edit5에 표시할때는 16진수로 바꾸어서 표시하구요...(이것도 맞는 것 같은데^^)
  Edit5->Text=IntToHex(UpDown1->Position,4);
  Table1->FieldByName("50")->AsString="&H"+Edit5->Text;

근데 실행은 되는데 , 그냥 10진수 모드에서는 증가가 되지 않고
또 16진수 모드에서는 데이터베이스(GBgrid의 어느 한 필드 선택 클릭)하면 다음과 같은 에러가 납니다.

Project ss1ver1_p.exe raised exception class EDatabaseError with message 'Table1:
Dataset not in edit or insert mode'.Process stopped. Use Step or Run to continue.

컴파일과 실행이 되는것을 봐서는 어느정도 로직은 맞는 것 같은데,
마지막에서 에러가 나네요.
마지막이라 생각하고 바쁘신와중에 여유가 되시면 도움 부탁드립니다.
좋은 하루 되세요..(3일째 이것 때문에 다음과정이 진행이 안됨^^)






void __fastcall TForm1::Edit5Change(TObject *Sender)
{
       Table1->Edit();  //데이터 수정 초기화 설정

       if(strchr(Table1->FieldByName("50")->AsString.c_str(),'&'))
       {
               Edit5->Text=IntToHex(UpDown1->Position,4);
               Table1->FieldByName("50")->AsString="&H"+Edit5->Text;
       }
       else
       Table1->FieldByName("50")->AsString=Edit5->Text;

       Table1->Post(); //데이터 수정 초기화 해제
}
//---------------------------------------------------------------------------

void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
        UpDown1->Position=AnsiString("0x"+Edit5->Text).ToInt();
}
//---------------------------------------------------------------------------















꼴 님이 쓰신 글 :
: 이런 문제는 기준을 잘 잡아야 합니다.
: 왜 이런 기능이 필요한지는 잘 모르겠지만..
: 지금 님께서 원하시는 기능은 기능 자체에 일관성이 없어보입니다.
:
: 28일때 옵션2로 해서 29,2A,2B로 증가하는건 말이 되지만..
: 거꾸로 2C일때 옵션을 1로 바꾸면 어떻게 되는거죠.?
: 이 부분이 정의되지 않았으니 구현도 알쏭달쏭할 수 밖에요.
:
: 자 그럼.. 위문제부터 풀면..
: 기준을 UpDown콤포의 Position이라고 하면 됩니다. 물론 십진수면 되죠.
: Position은 UpDown콤포에서 내부 숫자를 저장하기 위해 사용합니다.
: Edit와 연결되면 이 Position값이 십진수로 변환되서 보여지는거구요.
:
: 그러니까 Edit콤포하고는 연결하지 말고 옵션에 따라서 보여주는 숫자 형태를
: 10진수 또는 16진수로 하면 되겠죠.
:
: 여기서 문제는 28이란 숫자를 16진수로 봤을때 이것을 다시 10진수로 바꿔서
: Position에 저장해야 보여지는 숫자가 제대로 나오겠죠.?
:
: 그래서 옵션이 16진수로 바뀐다면..
: UpDown1->Position = AnsiString("0x"+Edit1->Text).ToInt();
: 이렇게 다시 16진수 값으로 바꿔주고
: Edit콤포에 표시할때도 16진수로 표시하면..
: 십진수 28이 16진수 28로 표시가 되겠죠.
:
: 이해가 되셨나여??
:
: 그럼... 좋은 프로그램 만드시길.. ^^
:
: PS.
: 제 아이디는 '콜'이 아니라 '꼴'이라고 불러주세요.
:
:
:
:
: heartsim 님이 쓰신 글 :
: : 답변 주신내용에 대해 정말 감사드립니다.
: :
: : 근데 문제가 있는데요.
: : 처음부터 값을 증가시키는 것은 이해를 했습니다.그런데 ....
: :
: : Edit5->Text에는 숫자 값이 이미 들어가 있습니다.
: : 이 상태에서 UpDown컴포넌트를 누르면 1씩 증가가 되지요.
: : 근데 어떤 옵션에서는 UpDown 컴포넌트를 누르면 hex값으로 증가를 시켜야 되거든요.
: : 가령 Edit5->Text에 28이란 숫자가 들어가 있으면 이것을 hex값으로 증가시켜야 됩니다.
: : 옵션 1의 경우는 그냥 28, 29, 30, 31..........
: : 옵션 2의 경우는      28, 29, 2A, 2B, 2C,.....
: : ^^넘 질문이 많아서 죄송하네요.
: : 아참 한가지 더 있는데, UpDown컴포넌트에서 Position의 의미가 뭔지 알려주시면 감사.
: : 아직 초보라 많이 모릅니다. 이해해 주십시요.^^
: : 좋은 하루 되세요.
: :
: :
: :
: :
: :
: :
: :
: :
: :
: : 생각을 좀 바꿔 봅시다.
: : 이미 자동으로 증가 잘되는 UpDown콤포넌트는 그냥 나두고
: : 보여주는 숫자만 16진수로 보여주면 되겠죠
: :
: : 자~ 해볼까요.
: : Edit콤포넌트 두개 떨어뜨리고
: : Edit1 Change이벤트랑
: : UpDown1 Click이벤트에 아래 처럼 코딩하세요.
: : 주의할건 UpDown1의 Associate 프로퍼티는 그냥 비워두셔야 함다.
: :
: :
: : void __fastcall TF_Child1::Edit1Change(TObject *Sender)
: : {
: :     Edit1->Text = AnsiString::IntToHex(UpDown1->Position, 4);
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TF_Child1::UpDown1Click(TObject *Sender, TUDBtnType Button)
: : {
: :    Edit1->Text = UpDown1->Position;
: :    Edit2->Text = UpDown1->Position;
: :
: : }
: :
: : 박경원 님이 쓰신 글 :
: : : 안녕하세요.
: : : 질문이 있답니다.
: : : 잘 안되서요..^^
: : :
: : : UpDown컴포넌트를 TEdit컴포넌트와 결합시키는 것까지는 성공을 했고,
: : : 또 윗쪽 화살표버튼을 눌렀을 때는 1씩 증가하고 아랫쪽 화살표 버튼을
: : : 누르면 1씩 자동 감소하더라구요.(하나도 코딩작업없이 컴포넌트가 알아서 다 지원해주더군요)
: : :
: : : 근데 문제는 일반숫자증가가 아니라 hex값으로 증가를 시켜야 되거든요.
: : : 가령 Edit컴포넌트에 24라는 숫자가 있을때 UpDown컴포넌트를 증가하는 방향으로 눌렀을때
: : : 25, 26, 27, 28, 29, 2A, 2B, 2C, 2D, 2E, 30........
: : : 이런 식으로 해야하는데 잘 안돼네요.............
: : : 도움좀 주세요.
: : : 제 생각에는 UpDown컴포넌트의 이벤트를 이용해서 해야 할 듯 한데요...^^
: : : UpDown컴포넌트 이벤트 중에 OnChange이벤트와 OnMouseUp, OnMouseDown 이벤트의 차이점에 대해서도
: : : 설명좀 해주십시요.
: : :
: : : 그럼 기다리겠습니다.^^
: : : 즐거운 하루되세요

+ -

관련 글 리스트
12340 콜님 다시 한번 부탁드립니다. Re:UpDown컴포넌트를 눌렀을때 hex값으로 증가시키게 할수 있나요 heartsim 720 2001/11/05
12343     Re:콜님 다시 한번 부탁드립니다. Re:UpDown컴포넌트를 눌렀을때 hex값으로 증가시키게 할수 있 737 2001/11/05
12361         Re:Re:콜님 다시 한번 부탁드립니다. Re:UpDown컴포넌트를 눌렀을때 hex값으로 증가시키게 할수 heartsim 672 2001/11/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.