|
เวลาที่เราออกแบบหน้าตาโปรแกรมอยู่ที่เครื่องของเรา การกำหนดฟอนต์ต่างๆให้กับ Control หากใช้ฟอนต์มาตรฐานมันก็ไม่มีปัญหา เมื่อเวลาที่เราต้อง Deployment โปรแกรมของเรา เพื่อนำไปใช้งานกับเครื่องอื่น แต่กรณีที่ใส่ฟอนต์ประหลาดเพิ่มเติมโดยที่ในตัว Windows ไม่มี มันก็จะไม่สามารถแสดงผลฟอนต์ให้ถูกต้องได้ หากเราไม่นำเอาฟอนต์ไปติดตั้งที่ %WinDir%\Fonts ของเครื่องปลายทาง ซึ่งการนำฟอนต์ไปใช้งานก็จะมีวิธีหลักๆอยู่ 3 วิธี คือ ...
1. ทำชุดติดตั้ง (Setup) อันนี้ไม่ว่าจะเป็น SetupFactory หรือ Inno Setup ที่แอดมินใช้ มันสามารถติดตั้งลงใน %WinDir%\Fonts และทำการ Registry ได้อย่างถูกต้อง ไม่มีปัญหาใดๆ
2. ไม่ทำชุดติดตั้ง แต่ Registry ฟอนต์เข้าไป กรณีนี้ไม่ได้ผล 100% หากเรานำไปไว้ที่ %WinDir%\Fonts เพราะ Windows 10 จะป้องกันเอาไว้ ดังนั้นจึงต้องทำ Registry ในตำแหน่งที่โปรแกรม EXE ของเราอยู่ แต่ทว่าหากเครื่องปลายทางนั้นมีฟอนต์ที่เราจะใช้อยู่แล้ว มันก็จะทำให้เกิดข้อผิดพลาดต่อโปรแกรมอื่นที่ต้องใช้ฟอนต์ตัวเดียวกัน
3. เรียกใช้ฟอนต์ด้วยโค้ด วิธีนี้ก็คือโค้ดชุดนี้นั่นเอง แต่อาจจะไม่สะดวกหากเรามี Control อยู่จำนวนมาก เพราะเราต้องกำหนดฟอนต์ด้วยโค้ดให้กับ Control ทุกๆตัว
ดาวน์โหลดฟอนต์ Kanit
มาดูโค้ดฉบับเต็มกันเถอะ ...
- Imports System.IO
- Imports System.Environment
- Imports System.Drawing.Text
- Public Class frmCustomFont
- Dim pfc As New PrivateFontCollection()
- Private Sub frmInstallFont_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- Try
- '// Check Font exist.
- If My.Computer.FileSystem.FileExists(Environment.GetEnvironmentVariable("windir") & "\fonts\Kanit-regular.ttf") Then
- MessageBox.Show("Font already exist.")
- Else
- MessageBox.Show("Font not found.")
- End If
- '// Load Font to Control.
- pfc.AddFontFile(MyPath(Application.StartupPath) & "Kanit-Regular.ttf")
- Me.btnLoad.Font = New Font(pfc.Families(0), 9, FontStyle.Regular)
- Me.btnExit.Font = New Font(pfc.Families(0), 9, FontStyle.Regular)
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
- Private Sub btnLoad_Click(sender As System.Object, e As System.EventArgs) Handles btnLoad.Click
- Call InitializeGrid()
- Call FillData()
- End Sub
- ' / --------------------------------------------------------------------
- Private Sub FillData()
- Dim dt As New DataTable
- dt.Columns.Add("ID")
- dt.Columns.Add("Name")
- dt.Columns.Add("PositionName")
- dt.Columns.Add("Salary")
- dt.Columns.Add("HireDate")
- dt.Rows.Add("00001", "นายทองก้อน ทับทิมกรอบ", "Managing Director", "99,999.99", "01/01/2562")
- dt.Rows.Add("00002", "นายบุญห่อ พ่อรวย", "Labour", "15,000.00", "01/06/2562")
- dt.Rows.Add("00003", "นางสาวคำหล้า น่ารัก", "Secretary", "19,999.50", "13/02/2562")
- dt.Rows.Add("00004", "นางบัวผัน ทันใจ", "House Keeper", "9,000.99", "24/01/2562")
- DataGridView1.DataSource = dt
- End Sub
- ' / --------------------------------------------------------------------
- '// การตั้งค่าเริ่มต้นให้กับตารางกริดในแบบ @Run Time
- Private Sub InitializeGrid()
- With DataGridView1
- .RowHeadersVisible = False
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- .AllowUserToResizeRows = False
- .MultiSelect = False
- .SelectionMode = DataGridViewSelectionMode.FullRowSelect
- .ReadOnly = True
- .RowTemplate.MinimumHeight = 30
- .RowTemplate.Height = 30
- .Font = New Font(pfc.Families(0), 10, FontStyle.Regular)
- '/ จัดความกว้างของแต่ละหลัก โดยการจัดเรียงฟิลด์จาก QUERY ดังนี้
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- '/ Adjust Header Styles
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.White
- .Font = New Font(pfc.Families(0), 11, FontStyle.Regular)
- End With
- End With
- End Sub
- ' / --------------------------------------------------------------------------------
- ' / Get my project path
- ' / AppPath = C:\My Project\bin\debug
- ' / Replace "\bin\debug" with ""
- ' / Return : C:\My Project\
- Function MyPath(ByVal AppPath As String) As String
- '/ MessageBox.Show(AppPath);
- AppPath = AppPath.ToLower()
- '/ Return Value
- MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
- '// If not found folder then put the \ (BackSlash) at the end.
- If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
- End Function
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|