Página 1 de 1

Não entendi na hwgui oDlg:Browse:SetFocus()

Enviado: 23 Nov 2021 20:57
por JoséQuintas
O que não entendi/não encontrei é:

Como é feito o vínculo entre oDlg e oDlg:oBrowse
Teria que existir o método/propriedade oBrowse na classe HDialog()
Em algum lugar deve existir a criação/destruição, ou alguma rotina que faça esse vínculo.

Imagino que seja algo parecido com uma rotina que foi postada no tópico do Harbour, que devo ter anotada em algum lugar.
Mesmo assim, provavelmente precisaria ser pelo nome da variável.

Não entendi na hwgui oDlg:Browse:SetFocus()

Enviado: 23 Nov 2021 21:34
por JoséQuintas
Deu um trabalhinho mas encontrei.

Código: Selecionar todos

#xcommand @ <x>,<y> SAY [ <oSay> CAPTION ] <caption> ;
...
            [ TOOLTIP <ctoolt> ]       ;
          => ;
    [<oSay> := ] HStatic():New( <oWnd>,<nId>,<nStyle>,<x>,<y>,<width>, ;
        <height>,<caption>,<oFont>,<bInit>,<bSize>,<bDraw>,<ctoolt>,<color>,<bcolor>,<.lTransp.> );
    [; hwg_SetCtrlName( <oSay>,<(oSay)> )]
Esse último: hwg_SetCtrlName(), porque o nome da variável precisa vir do fonte.

E em hCustomWindow, igual já postaram por aqui:

Código: Selecionar todos

METHOD OnError() CLASS HCustomWindow

   LOCAL cMsg := __GetMessage()
   LOCAL oError
   LOCAL oItem

   IF !Empty( oItem := hwg_GetItemByName( ::aControls, cMsg ) )
      RETURN oItem
   ENDIF
No caso de erro na classe, acessar um nome que não existe, procura na lista de controles se existe algum com aquele nome, e já assume.
Como isso fica na classe comum de janelas - todo controle herda isso - acaba funcionando.
Muito doido isso.

É isso que hmg não usa, sei lá se dá pra fazer isso sem alterar a parte interna dela.
Transformaria as "mensagens" em DoMethod( "" ) ou coisa parecida (acho que é isso que hmg usa).

Não entendi na hwgui oDlg:Browse:SetFocus()

Enviado: 23 Nov 2021 22:34
por JoséQuintas
no prg

Código: Selecionar todos

   @ 5, 5 SAY oDlg CAPTION "teste"
no ppo (traduzido pelo ch)

Código: Selecionar todos

   oDlg := HStatic():New(,,,5,5,,,"teste",,,,,,,,.F. ) ; hwg_SetCtrlName( oDlg,"oDlg" )
O nome da variável, quando existe, vai no nome do controle.
É esquisito... com tanto parâmetro, um a mais não faria diferença, apesar que, o ideal seria ser o primeiro parâmetro, e isso mudaria tudo.