컴퓨터에 Windows Core 글꼴 중 하나가 설치되어 있지 않은 수많은 경우에 Courier New, Comic Sans MS, Arial 등의 문제가 발생했습니다. 이 중 하나를 만들려고 할 때마다 관련된 글꼴 또는 실제로 다른 글꼴로 넘어지지 않고 오류가 발생합니다.DotNET의 하드 코딩 글꼴
내가 Courier가되고 싶다면 Font를 구성하는 가장 좋은 방법은 무엇입니까?하지만 특별히 그것에 집착하지는 않습니까?
컴퓨터에 Windows Core 글꼴 중 하나가 설치되어 있지 않은 수많은 경우에 Courier New, Comic Sans MS, Arial 등의 문제가 발생했습니다. 이 중 하나를 만들려고 할 때마다 관련된 글꼴 또는 실제로 다른 글꼴로 넘어지지 않고 오류가 발생합니다.DotNET의 하드 코딩 글꼴
내가 Courier가되고 싶다면 Font를 구성하는 가장 좋은 방법은 무엇입니까?하지만 특별히 그것에 집착하지는 않습니까?
글꼴을 얻기 위해 글꼴을 리소스로 포함하고 unsafe
키워드를 사용할 수 있으며 '안전하지 않은 글꼴'로 컴파일해야합니다 ... 다음은 사용자 정의 글꼴을 입력 할 때 사용한 코드의 예입니다 'OCR은'
private PrivateFontCollection pfc = new PrivateFontCollection(); private Font _fntOCRFont = null; private enum FontEnum{ OCR = 0 };
... 글꼴 'OCR은'따라서 자원 이름이 될 것이다, '갑'은 네임 스페이스 이름 지정 규칙을 사용하여 리소스로 포함되는 'foo는 .ocraext.ttf '... 폰트를로드하여 콜렉션에 추가하는'InitOCRFont '를 찾으십시오.
private void InitOCRFont(){ try{ System.IO.Stream streamFont = this.GetType().Assembly.GetManifestResourceStream("foo.ocraext.ttf"); if (streamFont != null){ byte[] fontData = new byte[streamFont.Length]; streamFont.Read(fontData, 0, (int)streamFont.Length); streamFont.Close(); unsafe{ fixed(byte *pFontData = fontData){ this.pfc.AddMemoryFont((System.IntPtr)pFontData, fontData.Length); } } }else{ throw new Exception("Error! Could not read built-in Font."); } }catch(Exception eX){ throw new Exception("InitOCRFont Method - Exception occurred!\nException was: " + eX.Message); } }
여기에서 컨트롤을 설정하여 컬렉션을 반복하여 'InitializeCtlFont'참조하고 글꼴 크기는 10이며 굵은 'type-face'인 글꼴을 'OCR'글꼴로 설정합니다.
이 도움이try{ if (this._fntOCRFont != null) this._fntOCRFont.Dispose(); }catch{ } try{ if (this.pfc != null) this.pfc.Dispose(); }catch{ }
희망, 안부, 톰 : 사용자 컨트롤이 배치됩니다
private void InitializeCtlFont(){ this._fntOCRFont = new Font(this.pfc.Families[0], 10.0F, System.Drawing.FontStyle.Bold); if (this._fntOCRFont != null){ foreach(Control ctl in this.Controls){ if (ctl != null && ((ctl is Label) || (ctl is TextBox))){ ctl.Font = this._fntOCRFont; } } } }
, Dispose
방법으로 다음과 같이 폰트가 차지하는 리소스를 확보하는 것이 필수적이다.
글쎄, 당신은 대신 특별히 택배, 에게 고정 폭 글꼴을 얻을 FontFamily.GenericMonospace
을 사용할 수
Font f = new Font(FontFamily.GenericMonospace, 12, FontStyle.Regular);
가 a few more such generic font families as well을있다.
원하는 글꼴을 사용하고 예외로 실행 한 후 최후의 수단으로 사용할 수도 있습니다.
요하네스에게, 제가 이것을 적용 할 수 있는지 좀 더 조사 할 필요가 있습니다. –
이것은 매우 드문 경우입니다. Windows 글꼴 매퍼는 프로그램이 대상 컴퓨터에서 사용할 수없는 글꼴을 요청할 때 항상 대체 글꼴을 제공합니다. 대체 글꼴은 대개 XP의 Microsoft Sans Serif, 이후 버전의 Segoe UI입니다. 그것들 중 어느 것도 문제를 일으키지 않아야합니다.
그렇다면 다시 말하지만, 기계가 너무 엉망이어서 사용 가능한 핵심 글꼴이 없으면 전혀 사용할 수있는 트루 타입 글꼴이 없을 수 있습니다. 예, 그러면 프로그램이 폭파됩니다. 솔직히 말해서, 이것은 정말로 귀중한 고객이 아닌 이상 다루어야 할 것이 아닙니다. 그렇지 않은 경우 고객 지원팀에서 사소한 문제로 해결합니다.
안녕하세요 nobugz, 이미 여러 번 발생했지만 제한적으로 보입니다. '이상한'현지화 (터키어, 중국어, 한국어 등)가있는 사람들에게 윈도우 글꼴 - 대체 논리가 충돌을 막을 수 있다고 생각 했었지만 분명히 그렇지 않습니다. 응답 주셔서 감사합니다, 지금은 이것을 무시하는 것이 최선의 방법 일 수 있습니다 ... –
아, 그들은 라이센스가있는 Windows 사본을 사용하고 있습니까? 와인 같은 것 같아. 너의 문제는 아니야. –
nobugz, 나도 몰라. 그리고 내가 그들에게 물어 본다면 아마 거짓말을하게 될 것입니다. 요점은, 그들이 Windows를 훔쳤 든, 우리 *의 * 합법적 인 고객들입니다. 이 수정 프로그램이 물론 어려운 것은 아니지만 ("글꼴 X 만 설치하기"), 코드가 왜 왜 엉망이되는지에 대한 호기심을 자극합니다. –
Tommie, 아름다운 반응에 감사드립니다. 나는 그것이 나에게 잘 잘되지 않을까 걱정된다. 우리는 이러한 글꼴을 모두 배포 할 수 없으며, 내 응용 프로그램은 비트 심도있는 불가 지론이 있어야하며 Mono를 통해 Mac에서도 실행해야합니다. 나는이 하드 코어 솔루션에 의지하지 않을 것을 진심으로 바란다. –
@David : Mac에서 Mono가 PrivateFontCollection을 가졌는지 확신 할 수 없다. 내가 쓸모 없을 것이라고 생각한다 ....순수한 크로스 플랫폼이 작동하려면 핀볼이없고 Win32 전용 API가 필요하지 않습니다. – t0mm13b