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
[49868] 감사합니다. 정확하게 잘 작동되네요.
leo21c [leo21c] 1073 읽음    2007-07-11 09:34
두번째 방법을 사용했습니다.
정확한 값이 나오는 것 같습니다. 지금 만들어서 해보니 잘 되네요.
왜 이 생각을 못했는지.....
정말 감사합니다.

장성호 님이 쓰신 글 :
: 제대로 된 답변이 될런지는 모르겠지만....
:
:
:
: 일단 Canvas가 없으면 GetDC로 HDC를 얻을 수있습니다.
:
: 방법1)
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: //    INT size;
:     tagSIZE size;
:     char *ch="abcd";
:     GetTextExtentPoint32(GetDC(Edit1->Handle),ch ,4,&size);
:     ShowMessage(IntToStr(size.cx)+"  "+IntToStr(size.cy));
: }
: //---------------------------------------------------------------------------
:
:
:
: 방법2)
: 그런데 위 방법은 값이 좀 맞지 않는것 같더군요
: 그래서 아래와같이 Canvas를 만들어서...
: VCL의 TextExtent , TextWidth, TextHeight 를 이용해봤습니다.
:
: void __fastcall TForm1::BitBtn1Click(TObject *Sender)
: {
:      tagSIZE size;
:     TCanvas *Can=new TCanvas;
:     Can->Handle=GetDC(Edit1->Handle);
:     size=Can->TextExtent("abcd");
:
:     Can->Font->Size=Edit1->Font->Size;                     //Canvas의 Font를 설정해준다.
:     int hei=Can->TextHeight("abcd");
:     int wid=Can->TextWidth("abcd");
:
:     ShowMessage(IntToStr(size.cx)+"  "+IntToStr(size.cy));
:     delete Can;
: }
: //---------------------------------------------------------------------------
:
: 두번째 방법으로 하면  뭐 맞는것 같기도 하구 그러네요....
:
: 그럼....
:
: leo21c 님이 쓰신 글 :
: : 현재 TEdit이 포함된 폼을 parent form에서 New로 동적 생성하여 사용하고 있는데
: :
: : 이럴 경우 동적 생성한 폼에 있는 TEdit에서 글자를 마우스로 drag해서 선택할수가 없더군요.
: :
: : 물론 Text입력 커서 위치를 마우스 클릭으로 위치 변경을 할 수도 없습니다.
: :
: : 테스트 한 결과 아래와 같이 하면 될 듯한데 글자 크기를 알수 없어 정확한 위치를 확인하지 못하고 있습니다.
: :
: : Modal로 띄울 경우 정삭으로 Text select가 되지만 동적으로 만들면 선택되지가 않아
: :
: : 직접  Edit->SelStart = SelectStX;
: :         Edit->SelLength = Length
: :
: : 이런 식으로 선택하려고 합니다. 그런데 EditMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) 에서 X값은 글자 개수에 해당하는 것이 아니기 때문에 글자의 크기로 나눈다면 정확한 글자의 시작과 길이를 알수가 있습니다.
: :
: : TEdit은 Property로 Canvas를 가지고 있지 않아 GetTextExtentPoint32(hdc, tString, 2, &size); 이런 형식의 함수도
: : 사용할수가 없네요.
: :
: : 혹시 비슷한 경험이 있으신 분은 답변 부탁드립니다.

+ -

관련 글 리스트
49853 TEdit에서 글자 size(font width)를 알수 있는 방법이 있을까요? leo21c 1045 2007/07/10
49857     Re:TEdit에서 글자 size(font width)를 알수 있는 방법이 있을까요? 장성호 1304 2007/07/10
49868         감사합니다. 정확하게 잘 작동되네요. leo21c 1073 2007/07/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.