|
제대로 된 답변이 될런지는 모르겠지만....
일단 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); 이런 형식의 함수도
: 사용할수가 없네요.
:
: 혹시 비슷한 경험이 있으신 분은 답변 부탁드립니다.
|