Must AutoIt
Сообщения: 3054
Благодарности: 1009
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
Как то так:
Код:
#include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $sDB_File = @ScriptDir & '\DB.dat'
Global $aDB = StringSplit(StringStripCR(FileRead($sDB_File)), @LF)
GUICreate('DB Auto Complete Example', 400, 300)
$iCombo = GUICtrlCreateCombo('', 20, 20, 360, 50)
$hCombo = GUICtrlGetHandle($iCombo)
_GUICtrlComboBox_BeginUpdate($hCombo)
For $i = 1 To $aDB[0]
If $aDB[$i] Then
_GUICtrlComboBox_AddString($hCombo, $aDB[$i])
EndIf
Next
_GUICtrlComboBox_EndUpdate($hCombo)
$iSave_Bttn = GUICtrlCreateButton('Save', 20, 270, 70, 20)
$iDel_Bttn = GUICtrlCreateButton('Delete', 100, 270, 70, 20)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $iSave_Bttn
_DB_Add(GUICtrlRead($iCombo), False)
Case $iDel_Bttn
_DB_Delete(GUICtrlRead($iCombo))
EndSwitch
WEnd
Func _DB_Delete($sText)
If Not $sText Then
Return
EndIf
_GUICtrlComboBox_ResetContent($hCombo)
Local $aTmp[$aDB[0] + 1]
Local $hFile = FileOpen($sDB_File, 2)
For $i = 1 To $aDB[0]
If $aDB[$i] And $aDB[$i] <> $sText Then
$aTmp[0] += 1
$aTmp[$aTmp[0]] = $aDB[$i]
FileWriteLine($hFile, $aDB[$i])
_GUICtrlComboBox_AddString($hCombo, $aDB[$i])
EndIf
Next
FileClose($hFile)
ReDim $aTmp[$aTmp[0] + 1]
$aDB = $aTmp
EndFunc
Func _DB_Add($sText, $fDuplicate = False)
If Not $sText Then
Return
EndIf
If Not $fDuplicate Then
For $i = 1 To $aDB[0]
If $aDB[$i] = $sText Then
Return
EndIf
Next
EndIf
FileWriteLine($sDB_File, $sText)
_GUICtrlComboBox_AddString($hCombo, $sText)
_GUICtrlComboBox_SetEditText($hCombo, '')
$aDB[0] += 1
ReDim $aDB[$aDB[0] + 1]
$aDB[$aDB[0]] = $sText
EndFunc
Func _Edit_Changed()
_GUICtrlComboBox_AutoComplete($iCombo)
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg
Local $hWndCombo = $hCombo
Local $hWndFrom = $lParam
Local $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
Local $iCode = BitShift($wParam, 16) ; Hi Word
Switch $hWndFrom
Case $iCombo, $hWndCombo
Switch $iCode
Case $CBN_EDITCHANGE
_Edit_Changed()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
|
-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.” Альберт Эйнштейн
P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»
http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community
Отправлено: 22:27, 22-04-2019
| #5
|