2017-11-06 2 views
0

내 응용 프로그램에서 테마를 사용할 수 있도록 허용하고 있습니다. 그래서 사용자의 테마 선택에 따라 글꼴을 만듭니다. 그러나 글꼴 스타일을 일반 글꼴에서 굵은 글꼴로 변경해야하지만 글꼴을 다시 만들지 않아도됩니다.이미 일반 글꼴로 만든 글꼴에서 글꼴 스타일을 굵게 변경하는 방법

모든 사용자가 자신의 컴퓨터에 글꼴을 설치하지 않았기 때문에이 방법을 사용하고 있습니다. 그래서 응용 프로그램에 글꼴을 포함합니다. 예를 들어

:

txtbox.font = theme_font 

단순히 굵게 스타일을 변경할 수있는 방법이 있나요 :이 같은 글꼴을 할당 텍스트 상자를 가질 수있다?

txtbox.font = theme_font.fontstyle.bold ' <-- this doesn't work 

는이 같은 폰트 생성 서브 루틴 호출

Public Shared theme_font = BerlinSans.GetInstance(theme_font_size, FontStyle.Regular) 

을 그리고 이것은 호출되는 서브 루틴입니다 :

Module BerlinSans 

    'PRIVATE FONT COLLECTION TO HOLD THE DYNAMIC FONT 
    Private _pfc As PrivateFontCollection = Nothing 

    Public ReadOnly Property GetInstance(ByVal Size As Single, ByVal style As FontStyle) As Font 

     Get 
      'IF THIS IS THE FIRST TIME GETTING AN INSTANCE 
      'LOAD THE FONT FROM RESOURCES 
      If _pfc Is Nothing Then LoadFont() 

      'RETURN A NEW FONT OBJECT BASED ON THE SIZE AND STYLE PASSED IN 
      Return New Font(_pfc.Families(0), Size, style) 

     End Get 

    End Property 

    Private Sub LoadFont() 

     Try 
      'INIT THE FONT COLLECTION 
      _pfc = New PrivateFontCollection 

      'LOAD MEMORY POINTER FOR FONT RESOURCE 
      Dim fontMemPointer As IntPtr = Marshal.AllocCoTaskMem(My.Resources.BRLNSR.Length) 

      'COPY THE DATA TO THE MEMORY LOCATION 
      Marshal.Copy(My.Resources.BRLNSR, 0, fontMemPointer, My.Resources.BRLNSR.Length) 

      'LOAD THE MEMORY FONT INTO THE PRIVATE FONT COLLECTION 
      _pfc.AddMemoryFont(fontMemPointer, My.Resources.BRLNSR.Length) 

      'FREE UNSAFE MEMORY 
      Marshal.FreeCoTaskMem(fontMemPointer) 

     Catch ex As Exception 
      'ERROR LOADING FONT. HANDLE EXCEPTION HERE 
     End Try 

    End Sub 


End Module 

답변

0

당신은 Font(Font, FontStyle) constructor을 사용할 수 있습니다. 이전 글꼴과 사용하려는 새 스타일을 전달하면 이전 글꼴의 속성을 새 스타일로 복사합니다 (스타일은 물론입니다).

txtbox.Font = New Font(theme_font, FontStyle.Bold) 
+0

감사합니다. 나는 그것을 시도하고 그것은 말한다 : \t 좁은 변환없이 접근 가능한 'New'를 호출 할 수 없기 때문에 과부하 해결에 실패했다 : – user2721815

+0

@ user2721815 : 그 이상의 정보가 있어야 하는가? 그게 문제가 무엇인지 말해 줄만큼 충분하지 않기 때문입니다. 정확히 코드에서 작성한 것은 무엇입니까? 아니면 그냥 복사 붙여 넣기나요? –

+0

@ user2721815 : 문제가 어디에 있는지 알 것 같습니다. 명확하지는 않지만 가능성이 있습니다 :'theme_font'를 유추하기보다는 특정 타입으로 선언 해보십시오. 컴파일러가 어떤 타입인지 완전히 알지 못하기 때문에 어떤 오버로드를 고를 지 확신 할 수 없습니다. 그 변수가'Font'인지를 확인하고 그것이 작동하는지 봅니다 :'Public Shared theme_font As Font = BerlinSans.GetInstance (theme_font_size, FontStyle.Regular)' –

관련 문제