หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

กระดานข่าวสาร เว็บบอร์ด - www.g2gnet.com
ดาวน์โหลดฟรีโปรแกรม และ Free Souce Code ได้ที่นี่ ...
รู้จักกับเว็บมาสเตอร์ - www.g2gnet.com
::: โปรแกรมมาใหม่ :::
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ (iPayPost Software)
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ
โปรแกรมจุดรับชำระค่าบริการ (iPayLite Software)
โปรแกรมจุดรับชำระค่าบริการ
::: BarcodeSoft :::
::: Printing :::
โปรแกรมพิมพ์รหัสบาร์โค้ด - BarcodeSoft Printing
โปรแกรมรหัสไปรษณีย์ทั่วไทย
::: G2GNet PostCode :::
!!!!! แจกฟรี !!!!!
ดาวน์โหลดโปรแกรมรหัสไปรษณีย์ทั่วไทย G2GNet PostCode Thailand
Visitors - Session views
 4 2 0 1 9 6 3

7 ธันวาคม พ.ศ.2549
16 Users On-Line.
Visitors - Page views
 7 1 9 6 4 2 6
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  
    ดาวน์โหลด และ แนะนำวิธีการติดตั้ง Active Report Professional 2.0
    แจกฟรี Source Code โปรแกรมขายสินค้า - Point Of Sale (โดย เว็บมาสเตอร์-ทองก้อน
    แจกฟรี Source Code การพิมพ์ใบกำกับภาษี - Active Report 2.0 (โดย ctx-9000@hotmail.com)
    SourceCode การดึงข้อมูลมาแสดงผลลงใน SharpGrid (โดย dos_network@hotmail.com)
    แจกฟรี Source Code VB6+Access โปรแกรมฐานข้อมูลครุภัณฑ์
    แจกโปรแกรมดูทีวี ดูหนัง ฟังวิทยุ ฟังเพลงออนไลน์ - G2GnetTV On Line ... ฟรีๆๆๆๆ
          ข้อมูลสถานี/รายการ (XML)  ข้อมูลสถานี/รายการ (HTML)
โปรแกรมระบบบัญชี Profit - Account

การตั้งค่ารูปแบบปฏิทิน - รูปแบบวันที่ โดยไม่ผ่าน Control Panel

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 28/2/2552   เวลา: 18:59
(อ่าน : 15776)/(ตอบ : 7)  ข้อคิดเห็น   |   พิมพ์   |  
ปัญหาที่เกิดขึ้นมาตลอดก็คือเรื่องของรูปแบบวันที่ เพราะเราต้องเขียนโค้ดติดต่อ (Interface) กับผู้ใช้งานคนไทยในรูปแบบของปี พ.ศ. เพราะบรรดาฐานข้อมูลนั้นถูกกำหนดให้ "เก็บข้อมูลในรูปแบบของ ค.ศ." ทีนี้ก่อนที่โปรแกรมจะทำงาน เราก็ควรตั้งรูปแบบปฏิทิน - รูปแบบวันที่ ให้กับ User ด้วยการกำหนดให้เองโดยผ่านทางการเขียนโค้ด (ลำบากขึ้น) เพิ่มเติม ด้วยการเรียกใช้งาน API (Application Programming Interface)
ดาวน์โหลด
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
ข้อมูลเพิ่มเติม
ทำการอ่านค่ารูปแบบวันที่ของระบบเพื่อนำไปประยุกต์ใช้งานกับ MS Access
เริ่มต้นกระบวนการทำงาน

จาก Control Panel --> Regional and Langauge Options


ก่อนเปลี่ยน ...


สั่งให้โปรแกรมทำงาน
มาดูโค้ดกันเถอะ ...

Option Explicit

Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" ( _
    ByVal Locale As Long, _
    ByVal LCType As Long, _
    ByVal lpLCData As String, _
    ByVal cchData As Long) _
    As Long

Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
    ByVal Locale As Long, _
    ByVal LCType As Long, _
    ByVal lpLCData As String) _
    As Boolean

Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long

Global DefaultCalendarType As String    ' เก็บค่าปฏิทินเดิมเอาไว้
Global DefaultShortDate As String             ' เก็บรูปแบบวันที่ (dd/MM/yy)
Global DefaultLongDate As String             ' เก็บรูปแบบวันที่ (dd/MM/yyyy)

' โปรแกรมย่อย (Main) ที่เป็น Start up Project ได้ทันที
Sub Main()
    
    Dim LCID As Long
    Dim Symbol As String
    Dim iRet As Long
    
    ' หาค่า Locale ID (information) ในระบบ ... ไทยแลนด์ = 1054
    LCID = GetSystemDefaultLCID()
    
    ' ส่วนแรกจะเป็นการปรับรูปแบบปฏิทินจากอะไรก็แล้วแต่ ... ให้เป็น พุทธศักราช (พ.ศ.)
    ' ค่าคงที่ที่ประกาศไว้ Module RegionalSetting ... ผมยกเอามาให้ดูครับ ... พี่น้อง
    ' Public Const LOCALE_ICALENDARTYPE   As Long = &H1009
    
    ' กระโดดไปโปรแกรมย่อย GetUserLCID เพื่อหาค่าว่าปฏิทินใช้ในรูปแบบไหนกันแน่
    Symbol = GetUserLCID(LCID, LOCALE_ICALENDARTYPE)
    ' ค่าที่จะถูก Return กลับมา (String) เช่น "1" หรือ "7"
    ' --> "1" Gregorian (localized)
    ' --> "2" Gregorian (English strings always)
    ' --> "3" Era: Year of the Emperor (Japan)
    ' --> "4" Era: Year of Taiwan Region
    ' --> "5" Tangun Era(Korea)
    ' --> "6" Hijri (Arabic lunar)
    ' --> "7" Thai ... ไทยแลนด์มีค่าเท่ากับ 7
    ' --> "8" Hebrew (Lunar)
    ' --> "9" Gregorian Middle East French
    ' --> "10" Gregorian Arabic calendar
    ' --> "11" Gregorian Transliterated English
    ' --> "12" Gregorian Transliterated French
    
    ' เก็บค่าเอาไว้ในตัวแปรแบบ Global ... สำหรับตอนที่ปิดโปรแกรมแล้วก็ค่อยคืนค่ากลับไปตามเดิม
    DefaultCalendarType = Symbol
    
    ' เปลี่ยนค่าปฏิทินให้เป็น พุทธศักราช
    Symbol = "7"
    ' หรือทดสอบกำหนด Symbol = "1" ... ก็จะเห็นเป็นปี ค.ศ.
    ' หากว่า iRet ถูกส่งกลับมาเป็น 0 คือ มีการเกิด Error ขึ้นมาน่ะครับ
    iRet = SetLocaleInfo(LCID, LOCALE_ICALENDARTYPE, Symbol)
    
    ' สำหรับรูปแบบวันที่แบบสั้น - Short Date
    Symbol = GetUserLCID(LCID, LOCALE_SSHORTDATE)
    DefaultShortDate = Symbol
    ' เปลี่ยนค่าตามที่ต้องการ ... M ตัวใหญ่น่ะครับ
    Symbol = "dd/MM/yy"
    iRet = SetLocaleInfo(LCID, LOCALE_SSHORTDATE, Symbol)
    
    
    ' สำหรับรูปแบบวันที่แบบยาว -  Long Date
    Symbol = GetUserLCID(LCID, LOCALE_SLONGDATE)
    DefaultLongDate = Symbol
    ' เปลี่ยนค่าตามที่ต้องการ
    Symbol = "dd MMMM yyyy"
    iRet = SetLocaleInfo(LCID, LOCALE_SLONGDATE, Symbol)

End Sub

' โปรแกรมย่อยที่ใช้ในการหาค่ารูปแบบต่างๆ ... และส่งค่ากลับไปเป็นแบบ String
' ศึกษาเรื่องของการรับส่งค่าด้วย ByVal และ ByRef ด้วยน่ะครับผม
' http://www.g2gnet.com/News/activeNews_view.asp?articleID=101
Public Function GetUserLCID(ByRef LCID As Long, ByVal LCType As Long) As String

    Dim Symbol As String
    Dim iRet As Long

    ' หาขนาดของชนิดข้อมูลที่ต้องการ (Locale Type) เช่น ...
    ' กรณีของรูปแบบปฏิทิน LOCALE_ICALENDARTYPE = &H1009  หรือ 4105 (ฐาน 10)
    ' กรณีของวันที่แบบสั้น LOCALE_SSHORTDATE = &H1F หรือ 31 (ฐาน 10)
    ' ค่าที่ว่ามานี้ เป็นการกำหนดค่าคงที่เอาไว้ เพื่อใช้งานผ่านทาง WinAPI น่ะครับผม
    iRet = GetLocaleInfo(LCID, LCType, Symbol, Len(Symbol))
    
    ' ไม่มีการเกิด Error ... ค่า iRet จะไม่เป็น 0 (หากเป็น 0 หรือเป็น เท็จ หรือ False นั่นเองครับ ... จำไว้ให้ดี)
    If iRet Then
        ' จับจองพื้นที่ในหน่วยความจำ (Buffer) ... Space เป็นการกำหนดขนาดตามจำนวนของ iRet
        Symbol = Space$(iRet)
        
        ' และเรียกซ้ำอีกครั้ง ... เพื่อกำหนดขนาดหน่วยจำที่ต้องการ (Buffer)
        iRet = GetLocaleInfo(LCID, LCType, Symbol, Len(Symbol))
        ' หากสามารถทำงานได้สำเร็จ ... iRet ต้องมากกว่า 0
        If iRet Then
            ' นั่นคือ iRet จะเป็นตัวกำหนดขนาดของหน่วยความจำเอาไว้
            ' คืนค่ากลับผ่านทางฟังค์ชั่น (String)
            GetUserLCID = Left$(Symbol, iRet - 1)
        End If
        
        ' จาก Statement ด้านบน เขียนสั้นแบบนี้ก็ได้ ... If iRet Then GetUserLCID = Left$(Symbol, iRet - 1)
        
    End If
    
End Function
Conclusion:
จากโปรแกรมย่อย GetUserLCID (ฟังค์ชั่น) ตัวนี้ ... พี่น้องสามารถนำไปประยุกต์ใช้งานได้อย่างกว้างขวางมากมาย ไม่ว่าจะเป็นเรื่องของรูปแบบของตัวเลข เวลา หรือ สกุลเงิน เพื่อจัดรูปแบบให้ตรงกับระบบฐานข้อมูล (DataBase) แต่ละตัวที่ได้เลือกมาใช้งาน ... แบบเป็นอิสระ โดยไม่ต้องไปพะวงว่าจะมีผลกระทบต่อการใช้งานโปรแกรมอื่นๆที่อยู่ในเครื่องเดียวกันหรือไม่

ร่วมแสดงความคิดเห็น

[ความเห็นที่:  1] จากคุณ : Mr.Den เมื่อ 2/3/2552 11:30:59  IP: 58.9.102.118

เยี่ยมยอดครับ..มืออาชีพมากครับ..

ขอบคุณมากครับ.

[ความเห็นที่:  2] จากคุณ : ctx-90,000 เมื่อ 4/3/2552 15:44:40  IP: 117.47.73.154

เยี่ยมหละเน๊าะ
ของเขาดีจริงๆ  หนึ่งกำลังใจในการสร้างสรรค์ผลงานครับ
จาก ทหารน้อยผู้ด้อยปริญญา วาสนา รร.นายสิบ 

[ความเห็นที่:  3] จากคุณ : ctx-90,000 เมื่อ 4/3/2552 15:48:39  IP: 117.47.73.154

"ต่างกันที่ว่า "จะทำหรือไม่ทำ" ... เพราะหลายต่อหลายคนเมื่อเข้าสู่วังวนของคำว่า "มนุษย์เงินเดือน" กล่าวคือ ทำมาก ทำน้อย ก็ได้เงิน ได้ผลตอบแทนเท่าเดิม เรื่องอะไรตูต้องไปเสนอหน้า หรือ ทำไปทำไมให้มันเหนื่อยแรง (ว่ะ) เหอๆๆๆๆ ... หากใครที่ยังมีแนวคิดแบบนี้อยู่ ผมว่าคงมีอนาคตรุ่งริ่งเป็นแน่แท้ ... "

ผมชอบตรงนี้มากกว่า แม้แต่ในระบบราชการ
ได้ครับพี่  นี่ลูกหลานผม  ฝากด้วยครับนาย  ผมหละเบื่อ

[ความเห็นที่:  4] จากคุณ : ทาโร่ เมื่อ 10/6/2552 9:46:18  IP: 125.24.197.44

เจ๋งไปเลย 

[ความเห็นที่:  5] จากคุณ : นัน เมื่อ 10/7/2552 14:54:57  IP: 168.120.34.33

ได้ลองใช้แล้วครับ ติดปัญหา คือ ตรง Regional ยังไม่เป็น THAI ครับ แต่ รูปแบบ วันที่ถูกต้องครับ 
ขอบคุณครับ

[ความเห็นที่:  6] จากคุณ : อุด เมื่อ 7/8/2552 10:57:18  IP: 125.26.72.78

ท่านเทพ visual basic ผมอยากทราบว่าที่ท่านเขียนโค๊ดมาให้ดูถ้าผมพิมพ์ตามท่านทั้งหมดมันจะรันขึ้นมาได้หรือป่าวคับ อยากทราบจริงๆ เมล์มาบอกผมด้วยนะท่านเทพ ที่ clash_oud@hotmail.com ขอบพระคุณอย่างสูงนะครับท่านเทพ 

[ความเห็นที่:  7] จากคุณ : สมชาย เมื่อ 2/10/2553 0:35:22  IP: 117.47.248.78

gadget รูปปฏิทินที่ตั้งไว้ในหน้าเดสท๊อป ถ้าอยากจะให้มันเรียงเริ่มจากวันอาทิตย์ ไปถึงวันเสาร์เหมือนกับการเรียงของปฏิทินไทยที่ใช้กัน จะสามารถทำได้ไหมครับ  รบกวนถามหน่อยครับ  ขอบคุณครับ หากไม่เป็นการรบกวน ผมขอฝากเมล์ไว้นะครับ elderest@hotmail.com


ก่อนการคลิ๊กโพสต์ข้อความ ขอความกรุณาใช้ถ้อยคำที่สุภาพด้วยครับ เว็บไซต์แห่งนี้เป็นแหล่งเผยแพร่ความรู้ ดังนั้นสำหรับท่านที่พยายามจะป่วนเว็บไซต์ หากท่านเป็น "คนไทย" เช่นเดียวกันกับผม ก็ขอความกรุณาได้โปรดเห็นใจ "คนไทย" อีกจำนวนไม่น้อย ที่เข้ามาขอความช่วยเหลือ จากเว็บไซต์ของผมด้วยน่ะครับ และหากท่านใดไม่เข้าใจในตรงจุดไหน ก็ขอให้ระบุสิ่งที่อยากจะถามออกมา บทความของผมแทบทั้งหมดต้องอาศัยทักษะการปฏิบัติเป็นหลัก ดังนั้นขอให้ดู และ ทดสอบจากโค้ดโปรแกรมประกอบตามไปด้วย
IP Address: 54.80.56.175
ชื่อของคุณ:

ข้อคิดเห็น:

2 + 1 = ?  (กรุณาป้อนคำตอบลงในช่องด้านล่างให้เป็น ภาษาไทย ตามผลบวกของตัวเลขให้ถูกต้องก่อนด้วยน่ะครับ เช่น ศูนย์)
  


จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: thongkorn@hotmail.com หรือ โทร. 08-6862-6560