[Delphi] 델파이 10.4 Sydney 윈도우 프로그램으로 폰트 설치

    728x90

    안녕하세요

    로로봉입니다 : )

    오늘은 델파이에서 윈도우 프로그램을 개발하여 배포하던 중, 무료 폰트를 프로그램 리소스에 추가하고 싶었는데 여러 시도 끝에 성공하여 공유하고자 합니다.

    델파이 폰트 설치 등으로 구글링 하면 기본 자료가 나오지만 막상 시도해보면 프로그램 화면에서 반응이 없는 것을 볼 수 있었습니다.

    폰트를 접근하기 위해 아래 파일들을 uses에 추가해주어야 합니다.

    uses
      WinAPI.Windows, FMX.Platform.Win, Winapi.Messages;

    폰트 설치는 윈도우에 아에 설치하는 방법과 프로그램 사용중에만 사용하고 해제되는 경우가 있습니다.

    // 윈도우 폰트 설치
    AddFontResource(PChar('SCDream3.otf'));
    SendMessage(WindowHandleToPlatform(Form1.Handle).Wnd, WM_FONTCHANGE, 0, 0);
    
    // 윈도우 폰트 설치 제거
    RemoveFontResource(PChar('SCDream3.otf'));
    SendMessage(WindowHandleToPlatform(Form1.Handle).Wnd, WM_FONTCHANGE, 0, 0);

    Form1은 해당 폼이름으로 변경해주시면 됩니다.

    그리고 AddFontResource나 RemoveFontResource의 경우 여러개를 추가한 후 마지막에 SendMessage를 호출해주어도 일괄로 등록이 완료됩니다.


    프로그램이 실행중일때만 폰트를 설치하고 싶은 경우 아래와 같이 설정해주면 됩니다. 3개의 폰트를 일괄로 해보겠습니다.

    // 프로그램 실행중일 때만 폰트 사용(종료시 자동 해제 됨)
    AddFontResourceEx(PChar('SCDream3.otf'), FR_PRIVATE, nil);
    AddFontResourceEx(PChar('SCDream4.otf'), FR_PRIVATE, nil);
    AddFontResourceEx(PChar('SCDream5.otf'), FR_PRIVATE, nil);
    SendMessage(WindowHandleToPlatform(Form1.Handle).Wnd, WM_FONTCHANGE, 0, 0);

    이렇게 처리하면 폰트가 표시되어야 하는데, 실제 폰트 파일이 C:\Windows\Fonts\ 폴더에 옮겨져 있어야 정상적으로 처리가 되는 것을 발견했습니다.

    폰트 리소스를 추가하기 전에 CopyFile을 이용해서 폰트 파일을 옮겨주면 됩니다.

    CopyFile(PChar(ExtractFilePath(ParamStr(0))+'SCDream3.otf'),'C:\Windows\Fonts\SCDream3.otf',False);
    CopyFile(PChar(ExtractFilePath(ParamStr(0))+'SCDream4.otf'),'C:\Windows\Fonts\SCDream4.otf',False);
    CopyFile(PChar(ExtractFilePath(ParamStr(0))+'SCDream5.otf'),'C:\Windows\Fonts\SCDream5.otf',False);

    ExtractFilePath(ParamStr(0))은 현재 실행 파일의 경로를 불러오기 때문에 프로그램 경로에 폰트파일이 존재하는 경우에 정상 처리되는 것을 볼 수 있습니다.

    보편적으로는 프로그램의 OnCreate() 함수에 처리하시면 됩니다.

     

    좋아요 ♥ + 구독부탁드립니다 : )

    728x90
    반응형

    댓글