' ==========================================================
' ¡Ò÷´ÊͺáÅÐà»ÃÕºà·Õº¡ÒÃà¾ÔèÁäÍà·çÁ (Add Item) ã¹ ComboBox ´éÇÂ
' 1. ¡ÒÃà¾ÔèÁäÍà·çÁ´éÇ¡ÒÃãªé Method AddItem µÒÁ»¡µÔ
' 2. ¡ÒÃà¾ÔèÁäÍà·çÁ´éÇ¡ÒÃãªé Win32 API (Application Programming Interface)
' URL: http://www.g2gnet.com
' eMail: [email protected] ËÃ×Í [email protected]
' ==========================================================
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any _
) As Long
' ͸ԺÒ¨ҡ SendMessage
' hWnd ¤×Í Çѵ¶Ø (Object) ËÃ×Í Control ·ÕèàÃÒµéͧ¡ÒõԴµè͡ѺÁѹ ã¹·Õè¹Õé¤×Í ComboBox
' wMsg ¤×Í ÊÔè§·ÕèÊè§ä»ºÍ¡Çѵ¶ØÇèÒ¨ÐãËéÁѹ·ÓÍÐäà 㹷Õè¹Õé¤×Í¡ÒÃà¾ÔèÁäÍà·çÁ â´Â¡ÒáÓ˹´¤èÒ¤§·ÕèãËé¤×Í 143 °Ò¹ 16
' wParam áÅÐ Param ¤×Í ¾ÒÃÒÁÔàµÍÃìàÊÃÔÁà¢éÒä» «Öè§ÁÕ˹éÒ·Õè áÅÐ ¤ÇÒÁËÁÒÂᵡµèÒ§¡Ñ¹ä»ã¹ Message áµèÅЪ¹Ô´
' ¾ÒÃÒÁÔàµÍÃì·Ñé§ÊͧµÑǹÕéËÒ¡äÁèä´éãªé§Ò¹ µéͧ¡Ó˹´¤èÒ 0 äÇé´éÇ Êèǹ㹡óչÕé
' wParam = 0 ËÁÒ¤ÇÒÁÇèÒ äÁèä´éãªé§Ò¹
' lParam ¤×Í ¤èÒ·ÕèÊè§ä»ãËé¡Ñº ComboBox ã¹·Õè¹Õé¤×Í ¤èÒ¨Ò¡ strItemText
' ¡Ó˹´¤èÒ¤§·Õèà¾×èÍÃкØÇèÒà»ç¹¡ÒÃà¾ÔèÁäÍà·çÁ â´Â¡Ó˹´¤èÒ¤§·Õèà»ç¹ 143 àÅ¢°Ò¹ 16
Private Const CB_ADDSTRING = &H143
' ËÃ×Í ¡Ó˹´ãËéźäÍà·çÁÍÍ¡¡çãªé
Private Const CB_DELETESTRING = &H144
' ËÃ×Í ¡Ó˹´ãËéÅéÒ§äÍà·çÁ·Ñé§ËÁ´ÍÍ¡¡çãªé
Private Const CB_RESETCONTENT = &H14B
' ================================================================
' ËÁÒÂà˵Ø: ËÒ¡¤Ø³ÂéÒ¤èÒ¤§·ÕèàËÅèÒ¹Õéä»äÇéã¹ Module (¹ÒÁÊ¡ØÅ .BAS)
' ¤Ø³µéͧà»ÅÕ蹨ҡ Private ãËéà»ç¹ Public à¾×èÍãËé·Ø¡æ¿ÍÃìÁÊÒÁÒöÁͧàËç¹´éÇÂà´éÍ ... ¾Õè¹éͧ
' ä¿Åì´ÒǹìâËÅ´·Õè¼ÁãËéÁÒ¨ÐÁÕ¤èÒ¤§·Õè (Constant) ÊÓËÃѺ¡ÒÃãªé SendMessage ÁÒ´éǤÃѺ
' ãËé´ÙµÑÇÍÑ¡ÉõÑÇ˹éÒÊÓËÃѺ Control áµèÅеÑÇ´éÇ àªè¹
' CB ËÁÒ¶֧ ComboxBox ËÃ×Í
' LB ËÁÒ¶֧ ListBox ËÃ×Í
' TB ËÁÒ¶֧ TextBox ¹Õèà»ç¹µÑÇÍÂèÒ§ äÁèãªèà»ç¹µé¹ (äÁé) ... 55555 ... â»Ãá¡ÃÁàÁÍÃìÍÒÃÁ³ìÊØ¹·ÃÕÂì
' ================================================================
' ·´Êͺ´éÇ¡ÒÃãªé Win32 API
Private Sub cmdComboAPI_Click()
Dim strItemText As String
Dim CountIndex As Integer
Dim StartTimer As Double
cmbTest.Clear
' àÃÔèÁ¨ÑºàÇÅÒ
StartTimer = Timer
' ÇÔ¸Õ¡ÒÃà¾ÔèÁäÍà·çÁ´éÇ¡ÒÃãªé§Ò¹ Win32 API
' ·ÓÃÒ¡ÒâÖé¹ÁÒà¾ÔèÁà¢éÒä»ÊÑ¡ 5000 ÃÒ¡Òà ¨Ðä´éàË繡ѹªÑ´æÇèҢͧã¤Ã¹èÐÁѹá¹è¡Çèҡѹ
For CountIndex = 1 To 5000
strItemText = "ÅӴѺ·Õè: " & CStr(CountIndex)
' Êè§ Message 仺͡
' ComboxBox (ª×èÍ cmbTest), ´éÇÂÇÔ¸Õ¡ÒÃà¾ÔèÁ¤èÒà¢éÒä» (¡Ó˹´¤èÒ 143 àÅ¢°Ò¹ 16), 0 = äÁèä´éãªé, ÃкØà»ç¹¤èÒ (ByVal) ¢Í§ strItemText
SendMessage cmbTest.hWnd, CB_ADDSTRING, 0, ByVal strItemText
Next
' StartTimer ¤×Í àÇÅÒ·ÕèàÃÒ¡Ó˹´¤èÒÁÒ¡è͹ «Öè§¡ç¤×ÍàÇÅÒàÃÔèÁµé¹ÅèФÃѺ
' Timer ¤×Í àÇÅһѨ¨ØºÑ¹ ³ ¢³Ð¹Õé «Öè§¡ç¤×ÍàÇÅÒ·ÕèÊÔé¹ÊØ´¢Í§¡Ò÷ӧҹ
MsgBox "ãªéàÇÅÒ: " & Format(Timer - StartTimer, "0.000") & " ÇÔ¹Ò·Õ", vbOKOnly + vbInformation, "¡ÒÃãªé Win32 API"
' ËÒ¡¤Ø³ÍÂÒ¡ÅͧàÅ蹡ѺÁѹ´éÇ¡ÒÃÊÑè§ãËé Clear ¤èÒã¹ ComboBox
' 㹡Òà Clear »¡µÔàÃÒÊÑ觴ѧ¹Õé ... cmbTest.Clear
' ÊÓËÃѺ Win32 API
' SendMessage cmbTest.hWnd, CB_RESETCONTENT, 0, 0
' 0 ¡Ñº 0 ·ÕèàË繤×Í àÃÒäÁèä´éãªé§Ò¹ wParam, lParam áµèàÃÒµéͧÃкؤèÒ 0 äÇéãËéÃÙéÇèÒàÃÒäÁèÁÕ¡ÒÃãªé§Ò¹¾ÒÃÒÁÔàµÍÃì¹Õé¤ÃѺ¼Á
' ËÃ×ÍÍÂÒ¡ÅͧźäÍà·çÁµÒÁ Index ·ÕèªÕéÍÍ¡ä» ¡çãªé´Ñ§¹Õé
' àªè¹ ¡ÒÃãªé Method 㹡Òà Remove »¡µÔàÃÒÊÑ觴ѧ¹Õé ... cmbTest.RemoveItem 2
' ËÁÒ¤ÇÒÁÇèÒµéͧ¡ÒÃźäÍà·çÁ·ÕèÁÕ Index = 2 ÍÍ¡ä» (¡ÒÃàÃÔèÁµé¹¹Ñº Index ã¹ ComboBox ¨ÐàÃÔèÁ¨Ò¡ 0 ¹èФÃѺ)
' ÊÓËÃѺ Win32 API
' â´Â»¡µÔàÁ×èÍàÃÒàÅè¹ API ÍÂèÒ§¹Õé ËÒ¡ÁÕ¢éͼԴ¾ÅÒ´à¡Ô´¢Öé¹ àªè¹ ¤Ø³ÁÕ Index ·Ñé§ËÁ´¨Ò¡ 0 - 9 áµè¤Ø³ÊÑè§ä»Åº Index ·Õè 10
' àÃÒ¡çµéͧµÒÁ仵ÃǨÊͺàÍÒàͧ äÁè§Ñé¹ÁѹäÁèºÍ¡¤Ø³ËÃÍ¡ ... àÍêÐ áÅéÇÁѹ§èÒ¡ÇèÒËÃ×Íà»ÅèÒÅèÐà¹ÕèÂ
' ¡ÒõÃǨÊͺẺ§èÒÂæÇèÒÁÕ Error ËÃ×ÍäÁè ´éÇ¡Ò÷´Êͺ¤èÒ·Õè Return ¡ÅѺÁÒ
' Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (
' .................
' ) As Long ¡ç¤×Íà¨éÒµÑǹÕéáËÅÐà»ç¹¤èÒ·Õèµéͧ Return ¡ÅѺÁÒ
' Dim Result As Long
' Result = SendMessage(cmbTest.hWnd, CB_DELETESTRING, 2, 0)
' MsgBox Result
' ¡Ã³Õ¹Õé Result = 4999
' Result = SendMessage(cmbTest.hWnd, CB_DELETESTRING, 20000, 0)
' MsgBox Result
' ¡Ã³Õ¹Õé Result = -1 ¹Ñ蹤×Í à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¢Öé¹ÁÒ¹èФÃѺ ... ¾Õè¹éͧ ... »Ò·Ñ§¡éÒ àÍê ÂÙàáéÒ
' ÅͧàÅè¹´Ùà¶ÍФÃѺ¾Õè¹éͧ ... Learning By Doing Áѹ¤×Í àÃÕÂ¹ä» ¡ç·Óä» áµèµéͧãªéÊÁͧ¤Ô´+¨Ô¹µ¹Ò¡ÒõÒÁä»´éÇÂ
End Sub
' ·´Êͺ´éÇ Method AddItem µÒÁ»¡µÔ
Private Sub cmdComboVB_Click()
Dim strItemText As String
Dim CountIndex As Integer
Dim StartTimer As Double
cmbTest.Clear
StartTimer = Timer
' ÇÔ¸Õ¡ÒÃà¾ÔèÁäÍà·çÁà¢éÒÊÙè ComboBox ´éÇ¡ÒÃãªé§Ò¹ Method AddItem µÒÁ»¡µÔ
' ·ÓÃÒ¡ÒâÖé¹ÁÒà¾ÔèÁà¢éÒä»ÊÑ¡ 5000 ÃÒ¡ÒÃ
For CountIndex = 1 To 5000
strItemText = "ÅӴѺ·Õè: " & CStr(CountIndex)
cmbTest.AddItem strItemText
Next
MsgBox "ãªéàÇÅÒ: " & Format(Timer - StartTimer, "0.000") & " ÇÔ¹Ò·Õ", vbOKOnly + vbInformation, "¡ÒÃãªé Method AddItem µÒÁ»¡µÔ"
End Sub
Private Sub Form_Load()
cmbTest.Clear
End Sub
|