TextSetFont

이 함수는 그리기 방법을 사용하여 텍스트를 표시하는 글꼴을 설정하고 해당 작업의 결과를 반환합니다. 크기가 -120(12pt)인 Arial 글꼴이 기본적으로 사용됩니다.

bool  TextSetFont(
   const string  name,            // 디스크의 폰트명 또는 폰트 파일의 경로
   int           size,            // 폰트 사이즈
   uint          flags,           // 플래그 조합
   int           orientation=0    // 텍스트 기울기 각도
   );

Parameter

name

[in]  시스템의 폰트명 또는 디스크에 있는 폰트 파일 또는 폰트 경로를 포함하는 리소스의 이름입니다.

size

[in]  양수 및 음수 값을 사용하여 설정할 수 있는 글꼴 크기. 양수 값의 경우 표시되는 텍스트의 크기는 운영 체제의 글꼴 크기 설정에 따라 달라지지 않습니다. 음수 값의 경우 이 값은 점의 10분의 1로 설정되며 텍스트 크기는 운영 체제 설정("표준 척도" 또는 "대 척도")에 따라 달라집니다. 모드 간의 차이에 대한 자세한 내용은 아래 참고 사항을 참조하십시오.

flags

[in]  폰트 스타일을 설명하는 플래그 조합.

orientation

[in]  X축에 대한 텍스트의 수평 기울기, 측정 단위는 0.1도입니다. 즉, orientation=450은 45도 기울기를 나타냅니다.

반환값

현재 글꼴이 성공적으로 설치된 경우 true를 반환하고, 그렇지 않은 경우 false를 반환합니다. 가능한 코드 에러:

  • ERR_INVALID_PARAMETER(4003) - name presents NULL or "" (empty string),
  • ERR_INTERNAL_ERROR(4001) - 운영 체제 오류(예를 들어, 존재하지 않는 글꼴 만들기 시도).

참고

글꼴 이름에 "::"가 사용되는 경우, 글꼴은 EX5 리소스에서 다운로드됩니다. 이름 글꼴명이 확장명으로 지정되면, 파일에서 글꼴이 다운로드 되고, 경로가 "\" 또는 "/"에서 시작하면, 파일은 MQL5 디렉토리를 기준으로 검색됩니다. 그렇지 않으면, TextSetFont() 함수라고 하는 EX5 파일의 경로를 기준으로 검색됩니다.

글꼴 크기는 양수 또는 음수 값을 사용하여 설정합니다. 이 점은 운영 체제 설정(크기 척도)에서 텍스트 크기의 종속성을 정의합니다.

  • 크기가 양수를 사용하여 지정된 경우 이 크기는 논리 글꼴을 실제 글꼴로 변경할 때 장치의 물리적 측정 단위(픽셀)로 변환되며, 이 크기는 사용 가능한 글꼴에서 선택한 심볼 글리프의 높이에 해당합니다. 이 경우는 TextOut() 함수로 표시되는 텍스트와 OBJ_LABEL ("레이블") 그래픽 객체에 의해 표시되는 텍스트를 차트에서 함께 사용하는 것이 좋습니다.
  • 음수를 사용하여 크기를 지정한 경우 이 숫자는 논리 포인트의 10분의 1로 설정되고 10으로 분할됩니다(예: -350은 논리 점 35과 동일함). 획득한 값은 장치의 물리적 측정 단위(픽셀)로 변환되며 사용 가능한 글꼴에서 선택한 심볼 높이의 절대 값에 해당합니다. 개체 속성에 지정된 글꼴 크기에 -10을 곱하면 화면의 텍스트 크기가 OBJ_LABEL 개체의 텍스트 크기와 비슷해집니다.

플래그를 글꼴 너비를 지정하는 플래그 중 하나와 스타일 플래그의 조합으로 사용할 수 있습니다. 아래에 플래그 이름이 나와 있습니다.

글꼴 스타일 지정 플래그

플래그

설명

FONT_ITALIC

이탤릭

FONT_UNDERLINE

언더라인

FONT_STRIKEOUT

취소선

 

글꼴 너비를 지정하기 위한 플래그

플래그

FW_DONTCARE

FW_THIN

FW_EXTRALIGHT

FW_ULTRALIGHT

FW_LIGHT

FW_NORMAL

FW_REGULAR

FW_MEDIUM

FW_SEMIBOLD

FW_DEMIBOLD

FW_BOLD

FW_EXTRABOLD

FW_ULTRABOLD

FW_HEAVY

FW_BLACK

 

예:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   COORD_X    200
#define   COORD_Y    100
#define   OBJ_NAME   "TestTextGetSizeBitmapLabel"
#define   RES_NAME   "TestTextGetSizeResource"
#define   COLOR_NULL 0x00FFFFFF
/+------------------------------------------------------------------+
//| Script program start function                                   |
/+------------------------------------------------------------------+
void OnStart()
  {
//--- 현재 차트 ID
   long   chart_idChartID();
   
   string font_names[] ={"Arial""Tahoma""Calibri"};
   uint   flags_array[]={0FONT_ITALICFONT_UNDERLINEFONT_STRIKEOUT};
   uint   fw_array[]={FW_DONTCAREFW_THINFW_EXTRALIGHTFW_ULTRALIGHTFW_LIGHT,
                      FW_NORMALFW_REGULARFW_MEDIUMFW_SEMIBOLDFW_DEMIBOLD,
                      FW_BOLDFW_EXTRABOLDFW_ULTRABOLDFW_HEAVYFW_BLACK};
   
//--- 가격 차트의 속성 그리기 모두 비활성화
   ChartSetInteger(chart_idCHART_SHOWfalse);
   
//--- 그래픽 리소스의 매개변수를 선언합니다.
   uint rc_width =(int)ChartGetInteger(chart_idCHART_WIDTH_IN_PIXELS); 
   uint rc_height=(int)ChartGetInteger(chart_idCHART_HEIGHT_IN_PIXELS); 
   uint rc_data[]; 
   uint rc_size=rc_width*rc_height;
  
//--- 텍스트 출력을 위한 그래픽 리소스 생성
   if(!CreateResource(chart_idrc_datarc_widthrc_height))
      return;
   
//--- 글꼴 이름을 반복합니다
   for(int i=0i<(int)font_names.Size(); i++)
     {
//--- 글꼴 플래그를 반복합니다
      for(int j=0j<(int)flags_array.Size(); j++)
        {
//--- 배열에서 얻은 글꼴 및 스타일 플래그로 텍스트를 그립니다.
         DrawText(font_names[i], flags_array[j], rc_datarc_widthrc_height);
         Sleep(800);
         ArrayInitialize(rc_dataCOLOR_NULL);
        }
      Sleep(800);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- 모든 텍스트를 다양한 글꼴 크기와 스타일로 출력한 후,
//--- 다른 글꼴 너비 플래그로 텍스트를 표시
   for(int i=0i<(int)fw_array.Size(); i++)
     {
//--- 너비 플래그로 텍스트를 표시하기 위한 글꼴 크기와 이름을 설정합니다.
      string font_name="Tahoma";
      int    size=-140;
      TextSetFont(font_namesizefw_array[i]);
      
//--- 그려진 텍스트 문자열을 생성하고 이를 리소스 픽셀 배열에 출력하고 리소스를 업데이트합니다.
      string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)"i+1font_nameFlagWidthDescription(fw_array[i]), sizesize/-10);
      TextOut(textCOORD_XCOORD_YANCHOR_LEFT_UPPERrc_datarc_widthrc_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      Update(RES_NAMErc_datarc_widthrc_heighttrue);
//--- 잠시 기다립니다
      Sleep(1000);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- 5초간 기다린 후 리소스를 해제하고 그래픽 객체를 삭제합니다.
      Sleep(5000);
   ResourceFree(RES_NAME);
   ObjectDelete(chart_idOBJ_NAME);
   
//--- 가격 차트의 모든 속성을 그릴 수 있게 합니다
   ChartSetInteger(chart_idCHART_SHOWtrue);
   ChartRedraw(chart_id);
   /*
   스크립트 실행의 결과로 차트에 텍스트 메시지가 표시됩니다.
  텍스트에는 다양한 글꼴, 스타일 및 너비 플래그가 있습니다.
   */ 
  }
/+------------------------------------------------------------------+
//| 서로 다른 5개의 텍스트 문자열을 표시합니다                           |
//| 지정된 글꼴 및 플래그를 사용한 크기                                 |
/+------------------------------------------------------------------+
void DrawText(const string font_nameuint flagsuint &pixels_array[], uint res_widthuint res_height)
  {
//--- 서로 다른 글꼴 크기를 가진 5개의 텍스트 문자열을 출력합니다.
   for(int i=0i<5i++)
     {
//--- 그리기 메서드를 사용하여 글꼴 크기를 계산하고 텍스트 출력용 글꼴을 설정합니다.
      int size=-140+10*i;
      TextSetFont(font_namesizeflags);
      
//--- 그려진 텍스트 문자열을 생성하고 이를 리소스 픽셀 배열에 출력하고 리소스를 업데이트합니다.
      string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)"i+1font_nameFlagDescription(flags), sizesize/-10);
      TextOut(textCOORD_XCOORD_Y+22*iANCHOR_LEFT_UPPERpixels_arrayres_widthres_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      Update(RES_NAMEpixels_arrayres_widthres_heighttrue);
      //--- 잠시 기다립니다
      Sleep(800);
     }
  }
/+------------------------------------------------------------------+
//| 글꼴 스타일 플래그에 대한 설명을 반환합니다.                          |
/+------------------------------------------------------------------+
string FlagDescription(const uint flag)
  {
   switch(flag)
     {
      case FONT_ITALIC     :  return(" Italic");
      case FONT_UNDERLINE  :  return(" Underline");
      case FONT_STRIKEOUT  :  return(" Strikeout");
     }
   return("");
  }
/+------------------------------------------------------------------+
//| 글꼴 너비 플래그에 대한 설명을 반환합니다                            |
/+------------------------------------------------------------------+
string FlagWidthDescription(const uint flag)
  {
   switch(flag)
     {
      case FW_DONTCARE  :  return(" Dontcare");
      case FW_THIN      :  return(" Thin");
      case FW_EXTRALIGHT:  return(" Extralight");
      case FW_ULTRALIGHT:  return(" Ultralight");
      case FW_LIGHT     :  return(" Light");
      case FW_NORMAL    :  return(" Normal");
      case FW_REGULAR   :  return(" Regular");
      case FW_MEDIUM    :  return(" Medium");
      case FW_SEMIBOLD  :  return(" Semibold");
      case FW_DEMIBOLD  :  return(" Demibold");
      case FW_BOLD      :  return(" Bold");
      case FW_EXTRABOLD :  return(" Extrabold");
      case FW_ULTRABOLD :  return(" Ultrabold");
      case FW_HEAVY     :  return(" Heavy");
      case FW_BLACK     :  return(" Black");
     }
   return("");
  }
/+------------------------------------------------------------------+
//| 전체 차트에 대한 그래픽 리소스를 만듭니다                            |
/+------------------------------------------------------------------+
bool CreateResource(const long chart_iduint &pixel_data[], const uint widthconst uint height)
  {
//--- 픽셀 배열의 크기를 설정합니다
   ResetLastError(); 
   uint size=width*height;
   if(ArrayResize(pixel_datasize)!=size
     { 
      PrintFormat("%s: ArrayResize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- 픽셀 배열을 투명한 색상으로 채우고 이를 기반으로 그래픽 리소스를 만듭니다.
   ArrayInitialize(pixel_dataCOLOR_NULL); 
   if(!ResourceCreate(RES_NAMEpixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE)) 
     { 
      PrintFormat("%s: ResourceCreate() failed. Error code ",__FUNCTION__GetLastError()); 
      return(false); 
     } 
  
//--- 차트의 왼쪽 상단 모서리 좌표에 그래픽 레이블 객체를 생성합니다.
   if(!ObjectCreate(0OBJ_NAMEOBJ_BITMAP_LABEL000)) 
     { 
      PrintFormat("%s: ObjectCreate() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- 생성된 비트맵 객체의 너비와 높이를 그래픽 리소스의 너비와 높이와 같게 설정합니다.
//--- 객체 앵커 포인트를 중앙으로 설정합니다.
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_XSIZEwidth))
     {
      PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_YSIZEheight))
     {
      PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
//--- 이전에 비트맵 객체에 대해 생성된 그래픽 리소스를 이미지 파일로 지정합니다
//--- 이 경우 사용된 그래픽 리소스의 이름을 나타내기 위해 이름 앞에 "::"를 추가해야 합니다
   if(!ObjectSetString(chart_idOBJ_NAMEOBJPROP_BMPFILE"::"+RES_NAME))
     {
      PrintFormat("%s: ObjectSetString() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
    
//--- 모든게 작동합니다
   return(true);
  }
/+------------------------------------------------------------------+
//| 그래픽 리소스 데이터를 업데이트 합니다                               |
/+------------------------------------------------------------------+
void Update(const string res_nameconst uint &pixel_data[], const uint widthconst uint heightconst bool redraw
  { 
//--- 0차원이 전달되면 그대로 둡니다 
   if(width==0 || height==0
      return
//--- 리소스 데이터를 업데이트하고 차트를 다시 그립니다
   if(ResourceCreate(res_namepixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE) && redraw
      ChartRedraw(); 
  } 

참고 항목

Resources, ResourceCreate(), ResourceSave(), TextOut()