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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 3109
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: 3109
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