Página 2 de 3

Problema autualização HMG Extended

Enviado: 21 Fev 2024 19:26
por JoséQuintas
Peguei nos exemplos:

Tem MULTISELECT = TRUE
Tem MULTISELECT .T.

No segundo deixou selecionar e retorna selecionados, caso contrário, é array row,col

Problema autualização HMG Extended

Enviado: 21 Fev 2024 19:31
por ivanil
Ola;
Mensagem por JoséQuintas » 21 Fev 2024 19:15
Ivanil, NÃO HÁ O QUE DISCUTIR.
Sem problemas Sr. Quintas;


At;

Ivanil

Problema autualização HMG Extended

Enviado: 21 Fev 2024 19:33
por JoséQuintas
Atualizei o post anterior, porque nem todo exemplo é igual.

Mas continua valendo: apenas compile o teste e comprove. compilei com HMG 24.01

Problema autualização HMG Extended

Enviado: 21 Fev 2024 19:49
por JoséQuintas
Se você preferir......

Você está certo do seu ponto de vista, mas está errado do ponto de vista da HMG.

O comando VALUE aponta pra isso

Código: Selecionar todos

#xcommand VALUE <value> ;
   =>;
   _HMG_ActiveControlValue := <value>
Cadê isso nos fontes?
grid1.png
Mas não tem isso no grid?
grid2.png
E agora complicou. Como é que seleciona vários registros com aquilo, se aquilo nem é usado ?

Problema autualização HMG Extended

Enviado: 21 Fev 2024 20:01
por JoséQuintas
grid3.png
Pois é... VALUE não serve pra nada NA DECLARAÇÃO do grid, NA SINTAXE ALTERNATIVA.

VALUE da declaração NÃO É o value da PROPRIEDADE.

Se for multiselect, a propriedade VALUE retorna selecionados
Se for normal, a propriedade VALUE retorna linha/coluna
NÃO TESTEI se com uma coluna, igual listbox, faria diferença.

Lembrando também:

GRID nem sempre é GRID.
Se olhar i_hmgcompat.ch, grid chama browse.

Código: Selecionar todos

#xcommand @ <row>, <col> GRID <name> ;
...
   => ;
      _HMG_BrowseSyncStatus := .T. ;;
      @ <row>, <col> BROWSE <name> ;
...
Não sei se tem outras situações onde o GRID não é GRID.

Mas, deixando todas as explicações de lado, é compilar o teste e ver o que acontece.
só tem isto:

Código: Selecionar todos

#include "minigui.ch"
A dúvida é:
Como a DEFINIÇÃO funcionava na versão anterior?
O que será que tinha de diferente?

Problema autualização HMG Extended

Enviado: 21 Fev 2024 20:12
por JoséQuintas
BINGO !!!!!

Ivanil, ajudou a talvez resolver a questão.
Basta alterar

Código: Selecionar todos

#xcommand END GRID ;
E modificar somente o GRID pra pegar aquele outro VALUE.

Problema autualização HMG Extended

Enviado: 21 Fev 2024 20:21
por JoséQuintas
Pior que não....

Código: Selecionar todos

#xcommand END GRID ;
   =>;
_HMG_ActiveControlDef   := .F.      ;;
_DefineGrid ( _HMG_ActiveControlName ,    ;
      _HMG_ActiveControlOf ,    ;
      _HMG_ActiveControlCol ,      ;
      _HMG_ActiveControlRow ,      ;
      _HMG_ActiveControlWidth ,       ;
      _HMG_ActiveControlHeight ,       ;
      _HMG_ActiveControlHeaders ,    ;
      _HMG_ActiveControlWidths ,    ;
      _HMG_ActiveControlItems ,    ;
      _HMG_ActiveControlValue ,   ;
Pelo que está aí, aquele valor deveria entrar.

Problema autualização HMG Extended

Enviado: 21 Fev 2024 20:38
por ivanil
Ola Quintas;

Este exemplo deve sanar qualquer dúvida;

tome um cuidado especial ao mexer com as constantes, tudo funciona muito bem da forma como está, se tirar algo do lugar obterá erros inexplicáveis;

Código: Selecionar todos

#include <hmg.ch>
Function Main(  )
    DEFINE WINDOW MAIN AT 265, 980 WIDTH 373 HEIGHT 286  TITLE "" MAIN ON INIT (Main_Oninit())

        DEFINE GRID oGrid1
            HEADERS { "test1" }
            ITEMS { { "01" } , { "02" } , { "03" } }
            WIDTHS { 150 }
            ONCHANGE (Main_oGrid1_Onchange())
            MULTISELECT .T.
            COL 26
            HEIGHT 150
            ROW 14
            VALUE { 1 , 3 }
            WIDTH 150
        END GRID

        DEFINE GRID oGrid2
            HEADERS { "test2" }
            ITEMS { { "01" } , { "02" } , { "03" } }
            WIDTHS { 150 }
            ONCHANGE (Main_oGrid2_Onchange())
            COL 185
            HEIGHT 150
            ROW 14
            VALUE 2.00
            WIDTH 150
        END GRID

        DEFINE LABEL oLabel1
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 26
            HEIGHT 21
            ROW 173
            WIDTH 41
        END LABEL

        DEFINE LABEL oLabel2
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 185
            HEIGHT 21
            ROW 173
            WIDTH 41
        END LABEL

        DEFINE LABEL oLabel3
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 26
            HEIGHT 21
            ROW 201
            WIDTH 41
        END LABEL

        DEFINE LABEL oLabel4
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 185
            HEIGHT 21
            ROW 201
            WIDTH 41
        END LABEL

    END WINDOW

    Main.Center
    Main.activate()

    REturn .T.

    ***********************************************
    ///////////////////////////////////////////////
    ***********************************************
Static Function Main_oGrid1_Onchange( )
    Local cText:="",i
    Main.oLabel1.value := alltrim(cStr(Main.oGrid1.value))+space(5)
    for each i in Main.oGrid1.value
        cText += str(i,1)+":"+ Main.oGrid1.item(i)[1]+"-"
    next
    Main.oLabel3.value:=cText
    Return .T.

    ***********************************************
    ///////////////////////////////////////////////
    ***********************************************
Static Function Main_oGrid2_Onchange( )
    Main.oLabel2.value := alltrim(cStr(Main.oGrid2.value))+space(5)
    Main.oLabel4.value := Main.oGrid2.item(Main.oGrid2.value)[1]+space(5)
    
    Return .T.


    ***********************************************
    ///////////////////////////////////////////////
    ***********************************************
Static Function Main_Oninit( )
    Main_oGrid1_Onchange( )
    Main_oGrid2_Onchange( )
    Return .T.


Problema autualização HMG Extended

Enviado: 21 Fev 2024 20:55
por JoséQuintas
troquei hmg.ch por minigui.ch pra ver se fazia diferença.

Agora temos 2 fontes, cada um com um resultado diferente.
Imagino que seja por ter uma única coluna.
fazer teste aqui alterando isso

Problema autualização HMG Extended

Enviado: 21 Fev 2024 20:58
por ivanil
O Hmg.ch é mais completo, contempla todos os includes necessários;
Pode por quantas colunas quiser o resultado é o mesmo;

Problema autualização HMG Extended

Enviado: 21 Fev 2024 21:13
por JoséQuintas
alterei esta parte, pra ter 2 colunas:

Código: Selecionar todos

        DEFINE GRID oGrid2
            HEADERS { "col1", "col2" }
            ITEMS { { "01", "01" } , { "02", "02" } , { "03", "03" } }
            WIDTHS { 50, 50 }
            ONCHANGE (Main_oGrid2_Onchange())
            COL 185
            HEIGHT 150
            ROW 14
            VALUE {1,1}
            WIDTH 150
        END GRID
fonte completo alterado

Código: Selecionar todos

#include "minigui.ch"
Function Main(  )
    DEFINE WINDOW MAIN AT 265, 980 WIDTH 373 HEIGHT 286  TITLE "" MAIN ON INIT (Main_Oninit())

        DEFINE GRID oGrid1
            HEADERS { "test1" }
            ITEMS { { "01" } , { "02" } , { "03" } }
            WIDTHS { 150 }
            ONCHANGE (Main_oGrid1_Onchange())
            MULTISELECT .T.
            COL 26
            HEIGHT 150
            ROW 14
            VALUE { 1 , 3 }
            WIDTH 150
        END GRID

        DEFINE GRID oGrid2
            HEADERS { "col1", "col2" }
            ITEMS { { "01", "01" } , { "02", "02" } , { "03", "03" } }
            WIDTHS { 50, 50 }
            ONCHANGE (Main_oGrid2_Onchange())
            COL 185
            HEIGHT 150
            ROW 14
            VALUE {1,1}
            WIDTH 150
        END GRID

        DEFINE LABEL oLabel1
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 26
            HEIGHT 21
            ROW 173
            WIDTH 41
        END LABEL

        DEFINE LABEL oLabel2
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 185
            HEIGHT 21
            ROW 173
            WIDTH 41
        END LABEL

        DEFINE LABEL oLabel3
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 26
            HEIGHT 21
            ROW 201
            WIDTH 41
        END LABEL

        DEFINE LABEL oLabel4
            AUTOSIZE .T.
            CLIENTEDGE .T.
            VCENTERALIGN .T.
            COL 185
            HEIGHT 21
            ROW 201
            WIDTH 41
        END LABEL

    END WINDOW

    Main.Center
    Main.activate()

    REturn .T.

    ***********************************************
    ///////////////////////////////////////////////
    ***********************************************
Static Function Main_oGrid1_Onchange( )
    Local cText:="",i
    Main.oLabel1.value := alltrim(cStr(Main.oGrid1.value))+space(5)
    for each i in Main.oGrid1.value
        cText += str(i,1)+":"+ Main.oGrid1.item(i)[1]+"-"
    next
    Main.oLabel3.value:=cText
    Return .T.

    ***********************************************
    ///////////////////////////////////////////////
    ***********************************************
Static Function Main_oGrid2_Onchange( )
    Main.oLabel2.value := alltrim(cStr(Main.oGrid2.value))+space(5)
    Main.oLabel4.value := Main.oGrid2.item(Main.oGrid2.value)[1]+space(5)

    Return .T.


    ***********************************************
    ///////////////////////////////////////////////
    ***********************************************
Static Function Main_Oninit( )
    Main_oGrid1_Onchange( )
    Main_oGrid2_Onchange( )
    Return .T.
grid1.png
O resultado está como você disse..... mas não muito...

Há um detalhe muito importante, ESTÁ TRATANDO AS DUAS COLUNAS COMO SENDO UMA SÓ



No outro teste, dá pra ver que cada coluna é isolada

provavelmente isto:

Código: Selecionar todos

              CELLNAVIGATION .T.
e acrescentando isso...
ivanil.png
agora seu exemplo ficou doidão.

É como eu disse antes:
Cada um está certo, de seu ponto de vista.
Tudo muda com esse CELLNAVIGATION

Até o "ficou doidão" depende do ponto de vista, deve estar mostrando o conteúdo como array e por isso caracteres especiais.

Problema autualização HMG Extended

Enviado: 21 Fev 2024 23:29
por ivanil
Ola Quintas;

CELLNAVIGATION muda os resultados e a forma de tratar os valores, já que a navegação é por célula;


O programa do amigo que iniciou este tópico está com problema de lógica;

O grid esta sendo iniciado vazio então não adianta definir valor na criação;

Para resolver, há 2 soluções;

01) Passar a matriz na criação do controle e retirar de ONINIT

Código: Selecionar todos

       DEFINE GRID Grid_1 
              ROW     10             
              COL     10
              WIDTH   420
              HEIGHT  330
              items aRows
              HEADERS { 'Sobrenome' , 'Nome' } 
              WIDTHS  { 80, 180 }
              CELLNAVIGATION .T.
              ONHEADCLICK aHEADCLICK
              ONDBLCLICK id('Form_1','Grid_1',1)
              Value {1,1}
       END GRID   


02) Acrescentar a atribuição de VALUE na função chamada por ONINIT;

Código: Selecionar todos

Procedure FillGrid()
/*********************************************************/
Local i 
For i := 1 To Len( aRows )
    Form_1.Grid_1.AddItem ( aRows [ i ] )
Next
Form_1.Grid_1.value := {1,1}
Return


Problema autualização HMG Extended

Enviado: 21 Fev 2024 23:40
por JoséQuintas
Fiz pra curiosidade, usando hb_ValToExp(), o último é esquisito

Código: Selecionar todos

    Main.oLabel2.value := hb_ValToExp(Main.oGrid2.value)+space(5)
    Main.oLabel4.value := hb_ValToExp( Main.oGrid2.item(Main.oGrid2.value)[1])+space(5)
grid.png

Problema autualização HMG Extended

Enviado: 22 Fev 2024 08:55
por JoséQuintas
Confirmado.
Primeira solução mais prática.

Código: Selecionar todos

              ITEMS aRows
Com isso tudo funciona normalmente.

Fernando
O Grigory disse que vai incluir a mudança pra compatibilidade nesta próxima versão, que está quase saindo.
Fica a seu critério se vai esperar a versão, ou se já vai colocar o ITEMS nos browses pra já tocar tudo em frente sem precisar aguardar.

Pois é... trabalhando juntos chegamos a algum lugar, e todos ganharam com isso.
Comentei lá pro Grigory adicionar o detalhe do CELLNAVIGATION na documentação do grid, evita voltar nisso no futuro.

Problema autualização HMG Extended

Enviado: 22 Fev 2024 09:04
por ivanil
Bom dia,

Na verdade, embora o Grigory tenha confirmado o Bug, não acho que seja um bug;
Na primeira vista me passou despercebido, acredito que isso também tenha acontecido com ele;


Se você inicia um grid sem conteudo, então não faz sentido determinar em que ponto estará parado; quando foi passado a matriz para a criação do combo, aí sim faz sentido e tudo funciona;
alimentar o grid futuramente é o mesmo, zerou o grid , value deve ser zero, ao retroalimentá-lo você deve determinar uma nova posição; Qualquer coisa diferente seria ilógico;

Grande abraço.

Ivanil