|
Initialize File ซึ่งมันก็คือ Text File ธรรมดาๆนี่เองแหละครับ โดยไฟล์เหล่านี้จะมีนามสกุลเป็น INI (ปกติแอดมินจะอ่านสั้นๆว่า อินอิท) ซึ่งถูกใช้มานมนานแล้วตั้งแต่ยุค DOS, MS Windows 3.0/3.11 (Work Group) มาเรื่อยๆจนถึงปัจจุบันนี้ แต่มันก็ค่อยๆลดบทบาทลงไปเนื่องจากถูกเอกสาร XML (eXtensible Markup Language) เข้ามาแทนที่มันไปแล้วครับ ไฟล์ INI นี้มักจะจัดเก็บข้อมูล ข่าวสาร การตั้งค่าระบบที่สำคัญๆเอาไว้ ในลักษณะของการจัดเก็บข้อมูลแบบ Line By Line เพื่อหลีกเลี่ยงการเขียนโค้ดโปรแกรมที่ยุ่งยาก และเพื่อให้ง่ายต่อการปรับแต่งระบบ ส่วนอีกตัวที่มาคู่กันเพื่อจัดการกับระบบก็คือการควบคุมผ่าน Registry อันนี้ค่อนข้างจะยุ่งยากกว่า แถมมีการป้องกันของ Windows แอดมินก็จะขอนำไปกล่าวอีกครั้งในภายหลังล่ะกันครับ ...
INI File จะมีส่วนสำคัญ 3 ส่วน ดังนี้คือ ...
Section ส่วนของชื่อที่ปิดด้วยเครื่องหมาย Bracket [] ... เพื่อตั้งชื่อเป็นกลุ่มข้อมูล
Key เป็นชื่อเฉพาะที่มีค่าไม่ซ้ำกัน หรือ ก็คือตัวแปรดีๆนี่เองแหละครับ
Value เป็นค่าที่ถูกกำหนดให้กับ Key เพื่อใช้ในการอ่าน และ เขียนเข้าไปใน INI File
ตัวอย่างในวันนี้แอดมินจะนำเสนอการประยุกต์ใช้ INI เพื่อทำการเก็บข้อมูลขนาดเล็กๆเอาไว้พิมพ์รายงาน ซึ่งค้างเอาไว้จากเรื่อง แจกฟรีโค้ด ActiveReports.NET การพิมพ์ใบแจ้งค่าใช้จ่าย สำหรับหอพัก ห้องเช่า อพาร์ทเมนท์ แบบกระดาษครึ่ง A4 ... ความมหัศจรรย์ของ Get/WritePrivateProfileString ซึ่งถูกบรรจุเอาไว้ใน Windows API (Application Programming Interface) ... ณ วันนี้ที่เรามาจนถึง Dot Net Framework แต่กลับหนี API ไปไม่พ้น ซึ่งหากท่านที่พัฒนาการเขียนโปรแกรมมาจาก VB6 จะรู้เลยว่า API นี่คืออาวุธลับสำคัญในการเสริมเขี้ยวเล็บอันทรงพลังและมีประสิทธิภาพให้กับ VB6 ...
การประกาศใช้ Library Get/WritePrivateProfileString (อยู่ใน modFunction.vb)
- ' / --------------------------------------------------------------------
- ' / Initialized Management
- Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringW" ( _
- ByVal lpApplicationName As String, _
- ByVal lpKeyName As String, _
- ByVal lpString As String, _
- ByVal lpFileName As String _
- ) As Int32
- Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
- ByVal lpApplicationName As String, _
- ByVal lpKeyName As String, _
- ByVal lpDefault As String, _
- ByVal lpReturnedString As String, _
- ByVal nSize As Int32, _
- ByVal lpFileName As String _
- ) As Int32
- ' / --------------------------------------------------------------------
คัดลอกไปที่คลิปบอร์ด เราประกาศฟังค์ชั่นเป็นแบบ Private ก็เพราะเราจะใช้ ReadIni/WriteIni เป็นตัวกระทำในแบบ Public แทน
การเรียกใช้งานฟังค์ชั่น ReadIni เพื่อทำการอ่านข้อมูล INI
- ' / --------------------------------------------------------------------
- Public Function ReadIni(ByVal IniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamDefault As String) As String
- Dim ParamVal As String = Space$(1024)
- Dim LenParamVal As Long = GetPrivateProfileString(Section, ParamName, ParamDefault, ParamVal, Len(ParamVal), IniFileName)
- ReadIni = Left$(ParamVal, LenParamVal)
- End Function
คัดลอกไปที่คลิปบอร์ด พารามิเตอร์ที่ต้องการ จะประกอบไปด้วย IniFileName, Section, ParamName ตัวนี้คือ Key นั่นเอง และ ParamDefault คือ Value ที่ต้องการจัดเก็บ ... อธิบายให้ฟังง่ายๆก็คือ เราต้องส่งค่าต่างๆเหล่านี้ที่ถูกกำหนดเอาไว้เป็นรูปแบบ (Pattern) ที่แน่นอนไปยัง GetPrivateProfileString API ส่วนที่เหลือฟังค์ชั่นมันจะจัดการแยกแยะให้เรานั่นเอง โดยที่เราแทบไม่ต้องไปสนใจเลย
ตัวอย่างการเรียกใช้งานแบบ Line by Line ...
- txtOwner.Text = ReadIni(strFileINI, "Config", "Owner", "")
คัดลอกไปที่คลิปบอร์ด เป็นการอ่านค่าจาก Section=Config, มี Key=Owner จากนั้นมันก็จะ Return ค่ากลับมาเก็บเอาไว้ใน txtOwner.text (แต่ถ้าหากหาข้อมูลไม่เจอ มันจะคืนค่าว่างเปล่า "" ซึ่งเป็นค่า Default กลับมาให้แทน) เช่น
[Config]
Owner=ทองก้อน ฮาเร็ม อพาร์ทเมนท์
การเรียกใช้งานฟังค์ชั่น WriteIni เพื่อทำการเขียนข้อมูลเข้าไปใน INI
- ' / --------------------------------------------------------------------
- Public Function WriteIni(ByVal iniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamVal As String) As Integer
- WriteIni = WritePrivateProfileString(Section, ParamName, ParamVal, iniFileName)
- End Function
คัดลอกไปที่คลิปบอร์ด ก็เช่นเดียวกันกับการ Read โดยมีการส่งค่าพารามิเตอร์ที่ถูกกำหนดเอาไว้ไปยังฟังค์ชั่น WriteIni จากนั้นข้อมูลเหล่านี้มันจะถูกจัดการภายใน WritePrivateProfileString ให้เอง
มาดูโค้ดในส่วนของฟอร์มหลักในการเรียกใช้งาน (frmSetting.vb)
- Public Class frmSetting
- Dim strFileINI As String
- ' / --------------------------------------------------------------------
- Private Sub frmSetting_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- strFileINI = MyPath(Application.StartupPath) & "Config.ini"
- '// เช็คว่ามีไฟล์ Config.ini อยู่หรือไม่???
- If My.Computer.FileSystem.FileExists(strFileINI) Then
- txtOwner.Text = ReadIni(strFileINI, "Config", "Owner", "")
- txtAddress.Text = ReadIni(strFileINI, "Config", "Address", "")
- txtHeader.Text = ReadIni(strFileINI, "Config", "Header", "")
- txtRemark1.Text = ReadIni(strFileINI, "Config", "Remark1", "")
- txtRemark2.Text = ReadIni(strFileINI, "Config", "Remark2", "")
- '// กรณีไม่เจอ ให้เริ่มต้นค่าใหม่
- Else
- txtOwner.Text = "ทองก้อน ฮาเร็ม อพาร์ทเมนท์"
- txtAddress.Text = "123/456 ถ.กลางเมือง ต.เมืองเก่า อ.เมือง จ.ขอนแก่น โทร.043-XXX-XXX"
- txtHeader.Text = "- ใบแจ้งค่าใช้จ่าย -"
- txtRemark1.Text = "[1] กรุณาชำระเงินภายในวันที่ 32 ของทุกเดือน"
- txtRemark2.Text = "[2] การเงินมีปัญหา ใส่ชุดนักศึกษามาหาป๋าทองก้อนได้ตลอด 24 ชั่วโมง"
- End If
- End Sub
- Private Sub txtElectricRate_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtHeader.KeyPress
- e.Handled = CheckDigitOnly(Asc(e.KeyChar))
- End Sub
- ' / --------------------------------------------------------------------
- '// บันทึกไฟล์ INI
- Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
- WriteIni(strFileINI, "Config", "Owner", txtOwner.Text)
- WriteIni(strFileINI, "Config", "Address", txtAddress.Text)
- WriteIni(strFileINI, "Config", "Header", txtHeader.Text)
- WriteIni(strFileINI, "Config", "Remark1", txtRemark1.Text)
- WriteIni(strFileINI, "Config", "Remark2", txtRemark2.Text)
- '//
- MessageBox.Show("บันทึกการตั้งค่าระบบเรียบร้อย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Me.Close()
- End Sub
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- Private Sub frmSetting_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด ดาวน์โหลดโปรแกรมต้นฉบับ VB.NET (2010) ได้ที่นี่
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|