Q&A

  • [질문] 일단 읽어라도 주세요 cport관련질문입니다..
일단 간략하게 설명드리겠습니다......
cport통신이용할려고하는데요

에디트창을만들어서 입력받은값을 헥사로 바꿔서 쓸려고 하는데요 잘안되네요........
제가 장비로 보내고 싶은값은
#$02#$30#$30#$42#$30#$30#$ㅁㅁ#$33#$67#$03;
또는#$02+#$30+#$30+#$42+#$30+#$30+#$30+#$ㅁㅁ+#$67+#$03;
입니다.....요걸 그냥 write써서 보내면 반응을 합니다. 문제는 이 값들이 바꿔주어야 한다는 겁니다.

예를 들어 텍스트창에 3을 입력하면 ㅁㅁ 자리에 hex값이 입력되게끔 구현하고 싶은데요
어찌하면될까요?

무작정물어보는건아니구요 제생각을 말씀드리면 일단 텍스트는 스트링으로 받으니 그걸 int로 변환한후 ㅁㅁ 자리에 넣주면 된다는 굉장히 어설푼 생각인데요 이리 하면 형변환문제가 발생하네요 pchar 이랑 안맞는다고......ㅡ.ㅡ;;; 소스 올려볼게요 수정이나 아니면 방법을 알려주세요...ㅡ.ㅡ


<!--CodeS-->
var senddata: pchar;
        s:string;
       i:integer;
begin
     s:=edit1.text;                               <--------2자리 정수로 입력받아요 1-99 까지
     mm:=strtoint(s);
    
   if com1.Connected=true then
      begin
    SendData:=#$02#$30#$30#$42#$30#$mm#$30#$33#$67#$03  
    Com1.Write(sendData,Length(SendData));    
     end;

<!--CodeE-->

이런식으로 하면될거같은데요....ㅡ.ㅡ mm을 헥사값으로 바꾸는거랑 inttohex(mm);<----맞나요
또 mm을 넣는 방법이랑 맞는지좀 봐주세요...ㅡ.ㅡ 너무 허접한걸로 질문드려 대단히 죄송합니다.ㅡ.ㅡ;;;;
끝까지 읽어주셔서 감사합니다....
8  COMMENTS
  • Profile
    최용일 2009.10.06 04:18
    그냥 정수로 바꾸시면 될듯하네요.

    ...+#$30+#$ㅁㅁ+#$67+...
    ...+#$30+Char(StrToInt(Edit1.Text))+#$67+...
  • Profile
    오델로 2009.10.06 17:39
    답변과 관심 감사드리구요

    제가 생각하는건 만약 13을 입력하면 1과3으로 분리한후
    ...+#$ㅅㅅ+#$ㅁㅁ+#$67+... 에서
    ㅅㅅ에는 1을 16진수로 ㅁㅁ에는 3을 16진수로 입력할려고 합니다....도움좀 주세요 ㅜㅡㅜ
  • Profile
    홍성락 2009.10.06 21:01
    # 는 ASC코드로,
    $ 는 16진수를 10진수로....
    #$20는 $20(16진수 20을 10진수값 32)의 아스키코드값으로 결과는 Space를 나타냅니다.

    마찬가지로 최용일님 말한 '정수 그대로 사용'하라는 말씀은 Char(32)가 16진수인 #$20입니다. 보내는 메세지는 같다는 겁니다.
    또, IntToHex는 #32와 같이 10진수를 아스키코드값인 20으로 변환합니다.(#32와는 다른게 아스키 값을 받는나 그 코드값을 문자로 표시하느냐가 다릅니다)
    따라서, IntToHex 함수는 10진수를 16진술 보이기만하는겁니다.
    Chr(StrToint('$'+IntToHex(32, 2)))처럼 해도, 즉 16진수를 10진수로 바꾼후 아스키 값을 구해도 내부에서는 같습니다( Chr(StrToint('$' + '20')) ).

    ///////////////////////////////////////////////////
    예로 아래 mm은 다 같습니다
    var
    senddata: PChar;
    mm: Char;
    s :string;
    begin
    s := edit1.text;
    mm := Chr(StrToint('$'+IntToHex(13, 2)));
    mm := Chr(StrToint('13'));
    mm := Chr(StrToint('$0D')); //13의 16진수는 0D
    SendData := PChar(#$02#$30#$30#$42#$30+mm+#$30#$33#$67#$03);
    showmessage(sendData);
    end;


  • Profile
    오델로 2009.10.07 03:27
    최용일님 말씀처럼 해보면

    ...+#$30+Char(StrToInt(Edit1.Text))+#$67+... 요부분에서

    [Pascal Error] xc1000Unit1.pas(186): E2010 Incompatible types: 'string' and 'PAnsiChar'

    이오류가 발생하구요

    홍성락님 말씀대로 해보면

    SendData := PChar(#$02#$30#$30#$42#$30+mm+#$30#$33#$67#$03);

    역시나 요부분에서 같거나 비슷한 오류가 발생하네요....ㅜㅡㅜ 돌아불것어요

    아 그리고 제가 질문을 잘못한것같네요

    (#$02#$30#$30#$42#$30+mm+ss#$33#$67#$03) 에서 mm과 ss가 따로 들어 갑니다 텍스트창에 '13'입력시 1과 3이 따로 들어가요 mm자리에 1이 들어가고 ss자리에 3이 들어가도록 하고싶은데요......아 값들이 hex값으로 들어가야 하고요 1의 헥사값 30이 mm에들어가고 3의 헥사값 33이 ss자리에 들어가도록 하고싶습니다....제발 좀 도와주세요 정말 돌지도 모르겟어요 ㅜㅡㅜ;;;;;;;;; 얼추 비슷하게나마 이것저것 해보는데 자꾸 위의 오류가 뜨네요 ...........참담합니다.....
  • Profile
    최용일 2009.10.07 03:59
    1의 헥사값 31이 mm에들어가고 3의 헥사값 34이 ss자리에 들어가도록 하고싶습니다....

    위 질문대로라면 그냥 문자열 그대로 넣으시면 됩니다.

    #$30+Edit1.Text+#$67+...
  • Profile
    홍성락 2009.10.07 04:09
    mm은 Char형이구요.
    1과 3의 헥사를 구해 넘긴다면 Chr와 StrToint와 '$' + IntToHex() 등등을 사용하겠지만,
    '1'과 '3' 헥사 즉 Char 자체로 넘기는 거라면 같은건데....

    var
    senddata: PChar;
    mm, ss : Char;
    begin
    Edit1.Text := '13';
    mm := Edit1.Text[1]; //'1'
    ss := Edit1.Text[2]; //'3'
    SendData := PChar(#65#66#67+mm+ss); //ABC에 13 추가
    showmessage(sendData); //결과는 ABC13
    end;
  • Profile
    김홍균 2009.10.07 14:27
    보낼 때
    var
    ss : word;
    H_ss, L_ss : word;
    begin
    ss :=strtoint('$'+(Edit1.Text)); // Edit1.Text = '13' ---> ss = $13
    H_ss := ss Shr 4; //H_ss = 1
    L_ss := ss And $0F; //L_ss = 3

    SendData := ~~~ + chr(H_ss) + chr(L_ss) + ~~~; // ~~~ + #$31 + #$33 + ~~~
    end;

    받을 때
    var
    H_ss, L_ss : word;
    aaa, bbb : string[1];
    begin
    RecvData := ~~~ + aaa + bbb + ~~~; // ~~~ + #$31 + #$33 + ~~~
    H_ss := word(aaa) And $0F; // 1
    L_ss := word(bbb) And $0F; // 3
    Edit1.Text := inttostr(H_ss) + inttostr(L_ss); // '13'
    end;

    나 이뽀? ㅋㅋ
  • Profile
    오델로 2009.10.07 19:35
    큭.....여러분들의 소중한 답변 진심으로 감사드립니다....ㅜㅜ

    특히나 늦은시간까지 답글달아주신 김홍균님ㅋ 이뿌진않고 멋지십니다.ㅋ

    방금확인했으니 해봐야겟네요 응용모드로.....제가 질문을 잘못한거같아서요 머 그렇다고 도움이 안된건아니지만
    writestr로 날리는게 아니라 write로 날리는거라서요

    아무튼 다들감사합니다....

    모두 즐겁고 행운가득한 하루되세요
    • cdrd
    • 2009.10.14 18:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 아르스
    • 2009.10.13 19:57
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 초보임당
      2009.11.10 05:34
      흠...저도 그문제 때문에 골치가 좀 아팠는데요.. 리모트 데이터모듈 소스 보시면 updateRegistry ...
    • 초보임당
      2009.11.18 18:20
      리모트데이터모듈 을 등록하는 방법을 알아냈네요.. 그냥 exe 화일을 실행하지 마시고.. 실행시 실...
    • 아르스
      2009.11.27 22:51
      감사합니다 ^^ 레지스트리에 강제로 등록하는 프로그램을 만들어서 등록을 했었는데 /regserver ...
    • 강중규
    • 2009.10.13 18:49
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.16 19:45
      TMemo 의 OnMouseUp 이벤트에서 마우스 우클릭이 일어났을때 캐럿의 위치를 저장하고, 숨겨두었던 TStri...
    • 강중규
      2009.10.17 02:39
      procedure TSangSik_Get.ContentMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState...
    • 구창민
      2009.10.20 03:21
      메모장에서 우클릭시 컨텍스트 메뉴가 안나오게 하고 싶단 의미라면.. 아래처럼 TMemo 의 ContextPopup...
    • 강중규
      2009.10.20 07:11
      감사합니다. 컨텍스트 메뉴가 안나오게 하고 싶었거든요. 그런데, 우클릭시 스트링그리드가 나오고, 그...
    • 강중규
      2009.10.20 16:18
      Content.SetSelTextBuf()를 사용하니 되내요. 그런데, 스트링그리의 목록중 하나를 했을때의 코딩 Cont...
    • 구창민
      2009.10.20 18:22
      델파이 7 버전이신가봐요? SetSelTextBuf 는 아마도 인자가 PAnsiChar 이어서 그럴겁니다. code_grid....
    • 강중규
      2009.10.21 16:37
      답변 감사합니다. 위와 같이 하니 되내요. 즐거운 하루 되세요.
    • 이강석
    • 2009.10.13 02:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.16 03:51
      관련 내용을 팁게시판에 올려둘께요 참고하시기 바랍니다. 그럼 즐거운 프로그래밍 하시구요~
    • 백록화
      2009.10.13 18:55
      해당 url을 호출하고 완료되는 시점을 확인하실려는것인가요? 아님 그 결과값을 알고자 하시는것인지?? ...
    • ▷◁병부잡이
      2009.10.13 19:52
      var s : string; begin s := IdHTTP1.Get('http://222.122.111.123/pb_reg.jsp?aid=abc&pwd=1234'...
    • phono
      2009.10.10 02:50
      단순히 시간을 클라이언트에 set 하는 방법은 NET TIME \\서버명 /SET /YES 로 하시면 되는데 ...
    • 윤중현
      2009.10.10 03:19
      와우~ 저희 회사에도 도움이 되겠는데요~ 저도 플리즈~~ 헬 ~~ 프~~ 미~~ ^^;; 도움이 안되는 댓글 죄송...
    • 강중규
    • 2009.10.07 22:02
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박종철
    • 2009.10.07 19:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박종철
      2009.10.07 19:21
      어이쿠 자답입니다. ISNULL에다가 ''만 넣었네요... ㅠ_ㅠ 왜 이런 실수를 했을까... ''''로 변경...
    • 강중규
    • 2009.10.06 20:22
    • 12 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2009.10.06 23:14
      '스트링 그리드 콤보 박스' 검색해도 많이 나오는데요....자료실에 제가 예전에 올린 테스트 소스도 있습...
    • 강중규
      2009.10.07 05:45
      답변 감사합니다. 그런데, 버튼을 하나 만들고, 버튼을 누르면 쇼메시지에 보이게는 어떻게 하죠. show...
    • 홍성락
      2009.10.07 18:20
      객체를 Tcombobox형으로 해서 읽어보세요 showmessage( Tcombobox(test_gred.objects[1,test_gred.row])...
    • 강중규
      2009.10.07 18:54
      감사합니다. 그건 해결을 했습니다. 그런데, 콤보박스의 목록중 하나를 선택하면, 그리드의 콤보박스...
    • 홍성락
      2009.10.07 22:18
      조금 수정했습니다 1. 한번만 생성되도록 2. 동적 콤보박스 생성시 부모가 윈도우 클래스냐에 따라 이...
    • 강중규
      2009.10.08 05:24
      답변 감사합니다. procedure TForm1.MyComboBoxChange(Sender: TObject); begin test_grid.Cell...
    • 홍성락
      2009.10.08 05:54
      스트링 그리드의 OnClick에서 처리하신다고 하지 않나요. OnClick이라면 MyComboBoxChange 이후 사라질거...
    • • • •
    • 오델로
    • 2009.10.06 04:06
    • 8 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.10.06 04:18
      그냥 정수로 바꾸시면 될듯하네요. ...+#$30+#$ㅁㅁ+#$67+... ...+#$30+Char(StrToInt(Edit1.Text))+...
    • 오델로
      2009.10.06 17:39
      답변과 관심 감사드리구요 제가 생각하는건 만약 13을 입력하면 1과3으로 분리한후 ...+#$ㅅㅅ+#$...
    • 홍성락
      2009.10.06 21:01
      # 는 ASC코드로, $ 는 16진수를 10진수로.... #$20는 $20(16진수 20을 10진수값 32)의 아스키코드...
    • 오델로
      2009.10.07 03:27
      최용일님 말씀처럼 해보면 ...+#$30+Char(StrToInt(Edit1.Text))+#$67+... 요부분에서 [Pascal ...
    • 최용일
      2009.10.07 03:59
      1의 헥사값 31이 mm에들어가고 3의 헥사값 34이 ss자리에 들어가도록 하고싶습니다.... 위 질문대로라...
    • 홍성락
      2009.10.07 04:09
      mm은 Char형이구요. 1과 3의 헥사를 구해 넘긴다면 Chr와 StrToint와 '$' + IntToHex() 등등을 사용하겠...
    • 김홍균
      2009.10.07 14:27
      보낼 때 var ss : word; H_ss, L_ss : word; begin ss :=strtoint('$'+(Edit1.Text)); // ...
    • • • •
    • 배경
    • 2009.10.02 00:59
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Elpira
    • 2009.10.01 21:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 정경철
    • 2009.10.01 16:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오병주
      2009.10.14 01:55
      미들웨어는 그냥 CORBA로 사용해도 충분히 될것은데요 그리고 데몬프로그램은 소켓통신을 이용하는게 제...
    • cdrd
    • 2009.10.01 01:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • cdrd
      2009.10.01 20:15
      아래와 같이 함수를 수정하였습니다. 결국 유니코드 문제였습니다. <!--CodeS--> function IP...
    • 김동원
    • 2009.09.30 08:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • phono
      2009.09.30 22:12
      procedure DB_Open(adoConnect: TADOConnection; CONNECT_ADDR: string); var DBPW: string; i...
    • 김동원
      2009.10.05 22:49
      대단히 감사합니다. 정말 귀한 정보 감사드립니다.
    • phono
      2009.10.05 23:54
      GetDBCONNID, GetDBCONNDB, GetDBCONNPW는 제가 임의 사용하는 함수 입니다. SQL서버에 등록한 ID, 생...
    • 한만희
    • 2009.09.30 02:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 엽기블랙
      2009.09.30 18:59
      DoubleBuffered := TRUE; 델파이에서는 하시면 대부분 해결됩니다.