BLOQUEAR CHANGE DO COMBO SEU USAR LOCKED

USUARIO.EXCLUIDOS 15/04/2004 17:47:05
#20824
Bem, no meu programa tem um COMBOBOX, certo? Gostaria de fazer com que no combo ficasse desabilitada a digitaçao, enquanto o Recordset estivesse em modo de ediçao, mas nao a navegaçao, entendem?

Entao eu fiz +ou -assim:

Private sub COMBO_keypress(keyascii as integer)
if not data1.recordset.editmode = 0 then
keyascii = 0
endif

Bem, isso funciona, mas de vez em quando da uns probleminhas, sera que nao teria uma forma mais viaÂÂÂ'vel? bem, esta eÂÂÂ' a minha pergunta, se nao tiver, acho q isso ja ta bom demais para mim, heh.

Falow!!
USUARIO.EXCLUIDOS 20/04/2004 23:31:06
#21708
Resposta escolhida

Desalibite e habilite a edição de combos via API:

' Exemplo de uso:
' Habilita edição : Call EnableComboEdit(Combo1.hwnd)
' Desabilita edição: Call DisableComboEdit(Combo1.hwnd)

Option Explicit

Public Const EM_SETREADONLY = &HCF

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long

Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
ByVal lpsz1 As String, ByVal lpsz2 As String) As Long


Public Sub DisableComboEdit(cmbHnd As Long)
Dim hwndEdit As Long

hwndEdit = FindWindowEx(cmbHnd, 0&, vbNullString, vbNullString)
If hwndEdit 0 Then Call SendMessage(hwndEdit, EM_SETREADONLY, 1&, ByVal 0&)
End Sub

Public Sub EnableComboEdit(cmbHnd As Long)
Dim hwndEdit As Long

hwndEdit = FindWindowEx(cmbHnd, 0&, vbNullString, vbNullString)
If hwndEdit 0 Then Call SendMessage(hwndEdit, EM_SETREADONLY, 0&, ByVal 0&)
End Sub
USUARIO.EXCLUIDOS 20/04/2004 23:54:16
#21714
Esqueci que alguns operadores não aparecem no forum.
Corrija os IFs de: If hwndEdit 0 Then Call
para: If hwndEdit DIFERENTE 0 Then Call
USUARIO.EXCLUIDOS 21/04/2004 19:40:34
#21792
Marcelo,
Combos possuem a propriedade Style que define o modo de exibição e comportamento da mesma, essa propriedade não pode ser alterada em tempo de execução e aceita os seguintes valores:
0 - DropDown Combo (vbComboDropDown) - O usuario pode selecionar através de uma lista drop-down ou digitar um valor na combo;
1 - Simple Combo (vbComboSimple) - A combo tem o comportamento de uma text box e não é possivel selecionar um item através da lista drop-down;
2 - DropDown List (vbComboDropDownList) - A combo não aceita digitação de valores e o item desejado deve ser obrigatórimanete selecionado atraves da lista drop-down.

As funções postadas acima alternam a propriedade style da combo entre "DropDown Combo" e "DropDown List" através de APIs uma vez que via VB isso não é possivel.

Obs: A propriedade Style da combo deve iniciar com valor "0 - DropDown Combo" para as funções a acima funcionem !
Tópico encerrado , respostas não são mais permitidas