라자루스 IDE (Lazarus IDE) default 폰트 문제 해결법

라자루스 IDE (Lazarus IDE) 에서 폰트이름의 기본값은 'default' 이다. DefFontData 에 그렇게 정의되어 있다.

 DefFontData: TFontData = (
    Handle: 0;
    Height: 0;
    Pitch: fpDefault;
    Style: [];
    Charset: DEFAULT_CHARSET;
    Quality: fqDefault;
    Name: 'default';
    Orientation: 0;
    );                

폰트의 기본값을 초기에 정하지 않고 상황에 따라서 시스템의 폰트를 다르게 하여 표시하겠다는 의도이다. 실제 컨트롤에 폰트를 표시하려면 시스템의 폰트를 알아내야 한다. 문제는 현재 라자루스 IDE 버전(2.0.12)에서는 시스템폰트이름을 제대로 읽어내지 못한다. 윈도우10 에서의 시스템폰트는 '맑은 고딕' 이지만 자꾸 '굴림' 폰트를 사용한다. 폰트가 너무 얇아서 가독성이 떨어지는 것이 문제이다. 단순히 라자루스 IDE 폰트만 문제가 되는 것이 아니라, 폼 위에 컨트롤을 올리는 순간 폰트가 '굴림' 폰트가 되는 것이 문제다.

해당 기능을 구현한 코드를 수정한 후 라자루스 IDE 를 다시 빌드하면 된다.

해당코드는 (설치 드라이브가 C드라이브일경우) C:\lazarus\lcl\interfaces\win32\win32winapi.inc 에 TWin32WidgetSet.CreateFontIndirect 로 구현되어 있다. 해당 함수를 다음과 같이 수정하면 된다.

function TWin32WidgetSet.CreateFontIndirect(const LogFont: TLogFont): HFONT;
var
  TempLogFontW: TLogFontW;
  TempLogFont: TLogFontA absolute TempLogFontW;
  FontName: String;
begin
  FontName := LogFont.lfFaceName;

  TempLogFont := LogFont;
  if IsFontNameDefault(FontName) then
  begin
    TempLogFontW.lfFaceName := Screen.SystemFont.Name; //
    //TempLogFontW.lfFaceName := UTF8ToUTF16(FMetrics.lfMessageFont.lfFaceName); 
    // FMetrics must be UTF16
  end
  else
  begin
    TempLogFontW.lfFaceName := UTF8ToUTF16(FontName);
  end;

  if TempLogFont.lfHeight = 0 then
    TempLogFont.lfHeight := FMetrics.lfMessageFont.lfHeight;

  Result := Windows.CreateFontIndirectW(@TempLogFontW);
end;

주석처리한 부분이 문제인데, FMetrics.lfMessageFont.lfFaceName 으로 들어오는 값이 '맑은 고딕' 이 아니다. Screen.SystemFont.Name 으로 수정한다.

메뉴에서 Tools -> Configure "Build Lazarus" 를 선택한후 Build 버튼을 누른다.



시스템 기본 폰트인 '맑은 고딕' 으로 라자루스 IDE 가 변한다.

변경 전
변경 후