Componente COMBOBOX tem limite ?

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Pessoal,

Alguém saberia me dizer se o componente COMBOBOX tem limite para popular ?

Porque eu estou tentando popular um combo com os município do estado do Rio de Janeiro, tem um total de 92 mas não mostra todos, mas o Len de aItems mostre
92.

Outra coisa, tem como limpar o COMBOBOX, como se faz no no componente LISTBOX com o método Clear() ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Descobri como limpar um COMBOBOX, agora só resta saber dessa limitação na exibição.

Código: Selecionar todos

hwg_Sendmessage( ThisForm:oComboUF:handle, CB_RESETCONTENT, 0, 0 )
ThisForm:oComboUF:aItemsBound := {}
hwg_Comboaddstring( ThisForm:oComboUF:handle, "" )
ThisForm:oComboUF:Refresh()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Correção do exemplo anterior:

Código: Selecionar todos

hwg_Sendmessage( ThisForm:oComboUF:handle, CB_RESETCONTENT, 0, 0 )
ThisForm:oComboUF:aItems := {} //Para COMBOBOX de 1 elemento
ThisForm:oComboUF:aItemsBound := {} //Para COMBOBOX de 2 elementos, AddItem
hwg_Comboaddstring( ThisForm:oComboUF:handle, Nil )
ThisForm:oComboUF:Refresh()
ThisForm:oComboUF:AddItem("RJ", "RIO DE JANEIRO")
ThisForm:oComboUF:SetItem(1) // Para mostrar o primeiro item do combobox
ThisForm:oComboUF:Refresh()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Componente COMBOBOX tem limite ?

Mensagem por JoséQuintas »

Interessante... parecido com GTWVG.... rs

Só não implementei o reset.

Código: Selecionar todos

CREATE CLASS wvgTstCombobox INHERIT wvgtstControl

   VAR ClassName             INIT   "COMBOBOX"
   VAR ObjType               INIT   objTypeComboBox
   VAR Style                 INIT   WIN_WS_CHILD + WIN_WS_BORDER + WIN_WS_GROUP + CBS_DROPDOWNLIST // WIN_WS_TABSTOP +
   METHOD AddItem( cText )   INLINE ::SendMessage( CB_ADDSTRING, 0, cText )
   METHOD SetValue( nIndex ) INLINE ::SendMessage( CB_SETCURSEL, nIndex - 1, 0 )

   ENDCLASS
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

resolvido com DISPLAYCOUNT 10, vai limitar 10 items por vez na visualização

Código: Selecionar todos

  @ 042,022 GET   COMBOBOX oComboCidades ;
             VAR   cComboCidades ;
             ITEMS {} ;
             TEXT  ;
             SIZE  110,24 ;
             ON CHANGE {|| SetCidade() } ;
             DISPLAYCOUNT 10  
Resolvi o problema usando o designer, muito bom
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Componente COMBOBOX tem limite ?

Mensagem por JoséQuintas »

Agora tem... rs

Código: Selecionar todos

   METHOD Clear()            INLINE ::SendMessage( CB_RESETCONTENT, 0, 0 )
Achei melhor chamar de clear(), porque Reset() poderia parecer que tá resetando tudo e não apenas o texto.

Mas não achei na API Windows aonde limitar a altura, pelo menos numa procura rápida.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Pra não ficar replicando código, criei o método Clear() na classe HComboBox
Para minha versão modificada da HwGui 2.17

Código: Selecionar todos

METHOD Clear() CLASS HComboBox 

   IF Len( ::aItems ) != 0 .OR. Len( ::aItemsBound ) != 0
      hwg_Sendmessage( ::handle, CB_RESETCONTENT, 0, 0 )
      IF Len( ::aItems ) != 0
         ::aItems := {}
      ENDIF
      IF Len( ::aItemsBound ) != 0
         ::aItemsBound := {}
      ENDIF
      hwg_Comboaddstring( ::handle, Nil )
      ::Refresh()
   ENDIF

RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Quintas

Olhando o código da HComboBox, não sei se vai te ajudar

hwg_Sendmessage( ::handle, CB_SETITEMHEIGHT, - 1, ::nHeightBox )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Descobri como redimensionar o COMBOBOX

//hwg_Movewindow( ::handle, ::nLeft, ::nTop, ::nWidth, ::nHeight )

hwg_Movewindow( ThisForm:oComboCidade:handle, 502, 22, 256, 150 )

::nHeight = altura
2018-10-19 14_28_57-Window.png
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Componente COMBOBOX tem limite ?

Mensagem por JoséQuintas »

asimoes escreveu:Olhando o código da HComboBox, não sei se vai te ajudarhwg_Sendmessage( ::handle, CB_SETITEMHEIGHT, - 1, ::nHeightBox )
é exatamente a solução.
SendMessage é da API Windows.
É indicar o Handle, o comando, e os parâmetros, como foi feito aí.

Na GTWVG a mesma coisa, a diferença é que existe o método SendMessage() na janela base de tudo.
Ao usar o método ::SendMessage() do controle, ele já sabe qual é seu próprio Handle, então economiza parâmetros no fonte.

Se fizerem isso na HWGUI, economiza parâmetros em tudo que é lugar.
Ao invés de hmg_SendMessage( nHandle, ... ), seria controle:SendMessage( ... )
É que pra quem mexe com linguagem C, fonte misturado C + PRG, pode atrapalhar usar cada vez de um jeito, então acabaram optando por usar sempre igual, deve ser isso.

Código: Selecionar todos

METHOD WvgWindow:sendMessage( nMessage, nlParam, nwParam )
   RETURN wapi_SendMessage( ::hWnd, nMessage, nlParam, nwParam )
Mas esses detalhezinhos que sempre me chamaram atenção na WVG, não pelo uso da WVG, mas pelo fonte interno.
Nesse caso, dá até pra deixar igual na HWGUI e GTWVG, o que sugere, mesmo que pequena, uma padronização entre as duas.
E usando hbwin que centraliza tudo que se refere a Windows, e está padronizada pra PRG, inclusive nos parâmetros.

Traduzindo: se criar esse sendmessage() como método na hwgui, o fonte do controle fica igual na hwgui e gtwvg. (dessa parte pelo menos)

Disso que comento também: com parte do fonte padronizado, podemos inventar algo mais, nem importa que usamos LIBs diferentes.
E principalmente se pudesse padronizar isso no Xharbour... na contrib de windows...
Menos trabalho pros desenvolvedores e mais recursos pra nós. Todos ganham.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Componente COMBOBOX tem limite ?

Mensagem por alxsts »

Olá!

Muito bom! Com uma pesquisa letra-a-letra, se é que ainda não tem, ficaria perfeito.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

alxsts escreveu:Muito bom! Com uma pesquisa letra-a-letra, se é que ainda não tem, ficaria perfeito.
O componente já faz pesquisa por letra inicial.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Tem como fazer pesquisa no COMBOBOX, só funciona como EDIT
No terceiro digito se achar, completa a caixa de edição com o texto achado

Código: Selecionar todos

@ 502,022 GET   COMBOBOX oComboCidade ;
          VAR   cComboCidade  ;
          ITEMS {}  ;
          EDIT  ;
          SIZE  256,24 ;
          DISPLAYCOUNT 10 ;
          ON INTERACTIVECHANGE {|value,This| Pesquisa( value, This ) }

FUNCTION Pesquisa( value, This )
LOCAL cTexto, nPos
   
   cTexto := Trim( Upper( This:GetText() ) )
      
   nPos := aScan( This:aItems, {| a | a = cTexto } )
    
   IF nPos > 0 .and.  cTexto  = Left( This:aItems[nPos], 3 ) 
      This:Refresh()
      This:SetItem(nPos)
   ENDIF   
         
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Componente COMBOBOX tem limite ?

Mensagem por alxsts »

Olá!

Bacana. Mas este EDIT permite que se altere os itens do Combobox?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Componente COMBOBOX tem limite ?

Mensagem por asimoes »

Não, é opcional

Para modificar:

cTexto := Trim( Upper( This:GetText() ) )

This:SETVALUE( cTexto )

Ou para adicionar:

This:AddItem( cTexto )

This:Refresh()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder