C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[185] [팁] 설치된 폰트들의 리스트 얻기
박지훈.임프 [cbuilder] 8537 읽음    2001-08-29 00:43
임프랍니다.

대단한 건 아닙니다만, 필요한 분이 있을지도 모르겠고.. 마땅히 팁으로 올릴 만한 것이 생각나지 않아 간단한 걸로 하나 올립니다.

현재 시스템에 설치된 폰트들의 리스트를 얻어내는 것은 Win32 API의 EnumFontFamilies() 함수와 그 함수에 인자로 넘기는 EnumFontsProc() 콜백 함수에 의존합니다. 별로 복잡하지 않으므로 그냥 소스만 올리겠습니다.

int CALLBACK EnumFontsProc(LOGFONT *lplf, TEXTMETRIC *lptm, DWORD dwType,LPARAM lpData)
{
    Form1->Memo1->Lines->Add(lplf->lfFaceName);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Memo1->Lines->Clear();
    EnumFontFamilies(GetDC(0), NULL, (FONTENUMPROC)EnumFontsProc, NULL);
    Caption = 11;
}


그럼 이만...
장성호 [nasilso]   2010-05-25 15:26 X
위 코드에 문제점이 한가지 있네요

CALLBACK 함수에서 return 값을 1로 줘야 계속 callback이 발생하는데..
return값을 따로 주지 않으므로.. 쓰레기 값이 return되겠네요..

callback이 한번만 발생할수도 있구.. 아닐수도 있구.. 그렇습니다.


그리고 가능하면  callback함수에서 전역변수 접그하기보다..
Callback함수 호출할때 LParam으로 객체 Pointer를 넘겨서 처리하는것이 더 좋을것 같습니다.

다음 링크를 참조하세요

http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=61164
장성호 [nasilso]   2010-05-25 15:28 X
앗참 그리고
Screen객체에 Fonts 라는 것이 있네요

다음과 같이 한줄이면 더욱 쉽게 될듯합니다.
Memo1->Lines->Assign(Screen->Fonts);

그럼..


+ -

관련 글 리스트
185 [팁] 설치된 폰트들의 리스트 얻기 박지훈.임프 8537 2001/08/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.