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?
Mas não tem isso no grid?
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
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:
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
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.

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:
e acrescentando isso...
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)
Problema autualização HMG Extended
Enviado: 22 Fev 2024 08:55
por JoséQuintas
Confirmado.
Primeira solução mais prática.
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