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
[53797] Re:Re:Re:위 두 분 답변 감사드립니다. ^^
skjoon [skjoon] 1468 읽음    2008-06-27 14:32
박지훈님, 장성호님 답변 감사드립니다.

큰 도움이 되었습니다. ^^

장성호 님이 쓰신 글 :
: 질문 올라왔을때 혹시 관련함수가 있나 찾아봤는데 안나와서
: 직접 만들어 봤었습니다.
:
:
: //함수 
: String __fastcall StrToFitStr(TCanvas *Canvas,int CanvasWid,String str)
: {
:   const String c=" ... ";
:   WideString wStr=str;
: 
:   if(Canvas->TextWidth(str)>CanvasWid)
:   {
:     int tLen=0;
:     String tmpS;
:     for(int i=1;iTextWidth(tmpS);
:       if(tLen>=CanvasWid)
:       {
:         return wStr.SubString(1,i-1)+c;
:       }
:     }
:     return str;
:   }
:   else
:     return str;
: }
: 
: //사용예
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:   TCanvas *Can=new TCanvas;
:   Can->Handle=GetDC(Panel1->Handle);
:   Can->Font=Panel1->Font;
:   String str=Edit1->Text;
:   Panel1->Caption=StrToFitStr(Can,Panel1->Width-5,str);
:   delete Can;
: }
: 

:
: 그런데 임프님의 답변을 보고 검색해보니
: PathCompactPath 라는 api 가 있네요
: http://msdn.microsoft.com/en-us/library/bb773575(VS.85).aspx
:
: 이 함수는 File_Path를 줄여주는 함수인데요
: "C:\Program Files\Borland\CBuilder6\Bin\bcb.exe" 라는 파일명이 있으면
:
: "C:\...bcb.exe"  뭐 이런식으로 바꿔주는 함수입니다.
: 즉 말줄임표("...") 가 가운데나 앞에 붙습니다.
:
: 그런데 file path가 아니라 그냥 string이면 말줄임표("...")가 뒤에 붙습니다.
: 예를 들어
: String  "ABCDEFGHIJKLMN"  의 경우  "ABCD..." 뭐 이런식으로 나오죠
:
:
:
: #include 
: //link: Shlwapi.lib
: void __fastcall TForm1::Button8Click(TObject *Sender)
: {
:   char szShortPath[30];
:   String str1="my name is jang sung ho";
:   String str2="C:\\Program Files\\Borland\\CBuilder6\\Bin\\bcb.exe";
: 
:   PathCompactPathEx(szShortPath, str2.c_str(), 28,0);
:   ShowMessage(szShortPath);               //결과 = "C:\Program Files...\bcb.exe"
: 
:   PathCompactPathEx(szShortPath, str1.c_str(), 20,1);
:   ShowMessage(szShortPath);               //결과 = "my name is jang ..."
: 
: }
: 

:
: 정리하면
: 1. 직접 Draw하시는 경우라면 임프님이 소개한 DrawTextEx 함수를 쓰면 될것 같구요
: 2. 그냥 string을 가져오려면 StrToFitStr 나 PathCompactPath 함수를 쓰시면 될듯 합니다.
:
:
: 그럼
:
: 박지훈.임프 님이 쓰신 글 :
: : 원하시는 기능의 함수로는 VCL에서는 MinimizeName()이라는 함수가 있는데..
: : 이 함수는 정확하게는 아무 문자열이나 쓰기 위한 것이 아니라 길쭉한 파일 경로명만을 위한 함수이기 때문에, 적절하지는 않습니다. 실제로 써보시면, 비슷하게는 동작하지만 뭔가 좀 이상할 겁니다.
: :
: : 그 목적에 딱 맞는 함수는 Win32 함수중의 DrawTextEx() 함수입니다.
: : 이 함수는 원래는 단순히 문자열을 지정한 Rect 영역에 그리기 위한 함수인데, DWORD 타입인 마지막 인자에 DT_END_ELLIPSIS와 DT_MODIFYSTRING 값을 넣어주면 원하시는 것처럼 문자열이 지정 Rect 영역을 벗어나는 뒷부분을 줄임표시(...)로 대체해서 줄여줍니다.
: :
: : 그럼...
: :
: :
: : skjoon 님이 쓰신 글 :
: : : 첨부한 그림은 윈도우 탐색기의 일부를 캡쳐한 것인데요.
: : : 텍스트가 지정된 Width를 넘어서면 뒷부분을 자르고 "..."을 붙여서 텍스트가 줄여짐을 나타내줍니다.
: : : 혹시 vcl이나 윈도우 api 중에서 이 기능을 해주는 녀석이 있는지 궁금하네요.
: : : 만들려고 하다가.. 먼저 찾아보고 쓰려구요 ^^;;
: : :
: : : 좋은 하루 되세요~

+ -

관련 글 리스트
53777 [질문]스트링 줄이기(?) skjoon 1218 2008/06/26
53789     Re:[질문]스트링 줄이기(?) 박지훈.임프 1715 2008/06/27
53795         Re:Re:[질문]스트링 줄이기(?) 장성호 1823 2008/06/27
53797             Re:Re:Re:위 두 분 답변 감사드립니다. ^^ skjoon 1468 2008/06/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.