Clipper On Line • Ver Tópico - Componente COMBOBOX tem limite ?

Componente COMBOBOX tem limite ?

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 19 Out 2018 11:09

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 19 Out 2018 11:36

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

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 19 Out 2018 11:51

Correção do exemplo anterior:

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor JoséQuintas » 19 Out 2018 12:08

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

Só não implementei o reset.

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 19 Out 2018 12:42

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

  @ 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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor JoséQuintas » 19 Out 2018 12:51

Agora tem... rs

   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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 19 Out 2018 13:42

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

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 19 Out 2018 14:10

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 19 Out 2018 14:30

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor JoséQuintas » 19 Out 2018 15:22

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.

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Componente COMBOBOX tem limite ?

Mensagempor alxsts » 20 Out 2018 04:41

Olá!

Muito bom! Com uma pesquisa letra-a-letra, se é que ainda não tem, ficaria perfeito.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 20 Out 2018 08:34

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 20 Out 2018 10:14

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

@ 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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Componente COMBOBOX tem limite ?

Mensagempor alxsts » 20 Out 2018 16:25

Olá!

Bacana. Mas este EDIT permite que se altere os itens do Combobox?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Componente COMBOBOX tem limite ?

Mensagempor asimoes » 20 Out 2018 16:32

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Próximo



Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro