MiniGui Grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

MiniGui Grid

Mensagem por Toledo »

Só mais uma observação:

Cell(CellRowIndex,3) corresponde a coluna 3 da Grid, onde estaria a data de vencimento, então altere a coluna conforme as colunas do seu Grid.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

MiniGui Grid

Mensagem por Nascimento »

desculpa a falta de conhecimento ainda mais nao compreendi
att: Nascimento
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

MiniGui Grid

Mensagem por Toledo »

Amigo, segue um exemplo (com algumas alterações em relação a minha última mensagem, na linha 5)

Código: Selecionar todos

#include "minigui.ch"

Function Main
Local aRows [20] [3]
Local fColor := { |val| iif( CTOD(val[3])<DATE() .AND. EMPT(CTOD(val[5])) , { 255,0,0 } , { 0,0,0 } ) }	

SET DATE  TO BRITISH
SET CENT  ON

	aRows [1]	:= {'001','Homer','10/11/2015','150.00','  /  /    '}
	aRows [2]	:= {'002','Fox','10/10/2015','125.00','  /  /    '}
	aRows [3]	:= {'003','Max','15/09/2015','170.00','10/09/2015'}
	aRows [4]	:= {'004','Pepe','06/10/2015','134.00','  /  /    '}
	aRows [5]	:= {'005','James','12/11/2015','145.00','  /  /    '}
	aRows [6]	:= {'006','Carlos','10/10/2015','315.00','10/10/2015'}
	aRows [7]	:= {'007','Ned','19/09/2015','235.00','10/09/2015'}
	aRows [8]	:= {'008','John','30/07/2015','950.00','  /  /    '}
	aRows [9]	:= {'009','Flavio','20/08/2015','760.00','20/08/2015'}
	aRows [10]	:= {'010','Juan','15/11/2015','215.00','  /  /    '}
	aRows [11]	:= {'011','Raul','18/12/2015','150.00','  /  /    '}
	aRows [12]	:= {'012','Javier','12/02/2015','150.00','12/02/2015'}
	aRows [13]	:= {'013','Alberto','17/07/2015','180.00','  /  /    '}
	aRows [14]	:= {'014','Ambo','26/11/2015','560.00','  /  /    '}
	aRows [15]	:= {'015','Gol','21/10/2015','500.00','  /  /    '}
	aRows [16]	:= {'016','Amigo','11/05/2015','125.00','11/05/2015'}
	aRows [17]	:= {'017','Flavio','19/03/2015','500.00','19/03/2015'}
	aRows [18]	:= {'018','Armando','05/08/2015','180.00','  /  /    '}
	aRows [19]	:= {'019','Alejandra','20/10/2015','250.00','  /  /    '}
	aRows [20]	:= {'020','Monica','17/12/2015','598.00','  /  /    '}


	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 640 ;
		HEIGHT 400 ;
		TITLE 'Demo Cor Grid' ;
		MAIN 

		@ 10,10 GRID Grid_1 ;
			WIDTH 620 ;
			HEIGHT 330 ;
			HEADERS {'Cod','Nome','Vencto','Valor','Pagto'} ;
			WIDTHS {60,230,100,100,100} ;
			JUSTIFY {2,0,2,1,2};
			ITEMS aRows ;
			DYNAMICFORECOLOR {fColor, fColor, fColor, fColor, fColor}

	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return Nil
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

MiniGui Grid

Mensagem por Nascimento »

Ficou perfeito muito obrigado amigo...
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

MiniGui Grid

Mensagem por syslink »

aproveitando o tópico...
tenho o seguinte código:

Código: Selecionar todos

      DEFINE GRID Grid_1
         ROW 140
         COL 410
         PARENT Form_1
         WIDTH  350
         HEIGHT 200
         HEADERS {"Descricao","Cobrar S/N","Valor"}
         WIDTHS {150,80,100}
         ROWSOURCE "DB10035"
         COLUMNFIELDS { "DB10035->DESCRICAO", "DB10035->SIMNAO", "DB10035->VALOR" }
         // ONCHANGE MOVE_GRID_ARQUIVO () // eliminei pois QUERO QUE ALTERE OS DADOS DO BANCO DBF AUTOMATICAMENTE E TESTANDO SE COM A ROWSOURCE O DBF é atualizado...
         NOLINES .F.
        JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_CENTER, BROWSE_JTFY_RIGHT } 	
      END GRID
Mas, observo que o CLIQUE DUPLO do mouse não funciona pra que eu possa alterar a COLUNA/LINHA do GRID...

caso exista uma função do GRID que permita essa alteração, a DESCRIÇÃO não pode ser alterada e o COBRAR S/N somente aceitar S ou N e o campo VALOR só aceitar números (inteiros e centavos) e não aceitar string

quero também acrescentar um tipo de controle (tipo senha) pra que o usuári osó altere o "valor" do campo se digitar a senha.

é POSSÍVEL isso ser feito?
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

MiniGui Grid

Mensagem por syslink »

gente, peguei o exemplo da pasta samples /controls/grid/grid 34 efiz minhas adaptações.

Quero usar a propriedade .SAVE.

Então, no exemplo oficial, quando-se clica na opção do menu popup o ONCHANGE é acionado e então entra numa PROCEDURE que apenas para estudo mostra através de mensagens gráfica os resultados.

Código: Selecionar todos

Então, pra facilitar a ajuda dos colegas quanto ao meu problema, vou postar parte do código.
- parte que cria o botão pra SALVAR e o GRID:
DEFINE BUTTON BUTTON_4
               PARENT Form_Main
               ROW  365
               COL  530
               CAPTION 'Salvar' 
               TOOLTIP 'Clique aqui para Salvar alterações feitas nos valores das cobranças acima'
               ACTION Form_Main.Grid_1.Save
    END BUTTON

      
      DEFINE GRID Grid_1
         PARENT Form_Main
         ROW 140
         COL 405
         WIDTH  360
         HEIGHT 200
         HEADERS {"Cod","Descricao","Cobrar S/N","Valor"}
         COLUMNCONTROLS { {'TEXTBOX','NUMERIC','9'},{'TEXTBOX','CHARACTER','AAAAAAAAAAAAAAAAAAAA'},{'TEXTBOX','CHARACTER','A'},{'TEXTBOX','NUMERIC','9.99'} }
         WIDTHS {40,200,80,55}
      ITEMS aRows  // se optar por usar ITEMS não pode usar ROWSOURCE e COLUMNFIELDS
         // ROWSOURCE "DCI10035" // abre os campos da tabela DBF dentro do GRID automaticamente  // campos da tabela DBF - se usar este tem q usar em conjunto o COLUMNFIELDS e não pode usar ITEMS aROWS
         // COLUMNFIELDS { "DCI10035->DESCRICAO", "DCI10035->SIMNAO", "DCI10035->VALOR" } // campos da tabela DBF - se usar este tem q usar em conjunto o ROWSORCE e não pode usar ITEMS aROWS
         CELLNAVIGATION .T.
         DYNAMICFORECOLOR { fColor , fColor, fColor, fColor, fColor } // muda as cores de frente dinamicamente uma linha após a a outra
      DYNAMICBACKCOLOR { bColor , bColor , bColor , bColor , bColor , bColor } // muda as cores de fundo dinamicamente uma linha após a aoutra 7/2/19w
         ALLOWEDIT .T. // se estiver em .T. não funciona o ONDBLCLICK e funciona o COLUMNWHEN
         // COLUMNVALID 1
         // NOLINES .T. // desaparece as linhas de grade em .T.
       JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER }   
         // COLUMNWHEN  { { || This.CellValue <> nil } , Nil , Nil , Nil } 
      COLUMNWHEN { { || .F. } ,  { || .F. } , { || .T. } ,  { || .T. }  } // trava/destrava colunas pra serem editadas. Mas, o ALLOWEDIT tem que estar em .T. pra funcionar
         // LOCKCOLUMNS 2
      // VALUE { 1 , 4 } 
         // ONDBLCLICK MOVE_GRID_ARQUIVO () // duplo click do mouse aciona esta função
         // ONCHANGE MOVE_GRID_ARQUIVO () // apenas um click do mouse aciona esta função
      // EDIT 
      // ALLOWAPPEND .T. // pra usar esse tem q usar o ROWSOURCE senão não funciona
      // ALLOWDELETE .T. // pra usar esse tem q usar o ROWSOURCE senão não funciona
         ONSAVE OnSaveTest()
      END GRID
Bom, agora a procedure ONSAVETEST() extraída do exemplo GRID 34 que acrescentei apenas 6 MSGINFO pra ver o que está acontecendo (conteúdo e tipo):

Código: Selecionar todos

*******************************************************************************
Procedure OnSaveTest()
*******************************************************************************
Local i
Local s
Local cMark
Local j


  * Show Edited Cells ***************************************************
   msginfo(This.EditBuffer)
   msginfo(valtype(This.EditBuffer))
   if This.EditBuffer <> nil
      For i := 1 To len( This.EditBuffer )
    s := ''
    nLogicalRow  := This.EditBuffer [ i ] [ 1 ] 
    nLogicalCol  := This.EditBuffer [ i ] [ 2 ] 
    xValue    := This.EditBuffer [ i ] [ 3 ] 
    nPhysicalRow  := This.EditBuffer [ i ] [ 4 ] 
    s += 'RecNo():' + Str( nPhysicalRow ) + chr(13) + chr(10)
    s += 'Logical Row: ' + Str( nLogicalRow )  + chr(13) + chr(10)
    s += 'Logical Col: ' + Str( nLogicalCol )  + chr(13) + chr(10)
    s += 'Value:       ' + xToC( xValue )      + chr(13) + chr(10)
    MsgInfo ( s , 'Edited Cell #' + str(i) )
      Next i
   endif

  * Show Deleted / Recalled Records *****************************************

   msginfo(This.MarkBuffer)
   msginfo(valtype(This.MarkBuffer))
   if This.MarkBuffer <> nil
      For i := 1 To len( This.MarkBuffer )
    s := ''
    nLogicalRow  := This.MarkBuffer [ i ] [ 1 ] 
    nPhysicalRow  := This.MarkBuffer [ i ] [ 2 ] 
    cMark    := This.MarkBuffer [ i ] [ 3 ] 
    s += 'RecNo():' + Str( nPhysicalRow ) + chr(13) + chr(10)
    s += 'Logical Row: ' + Str( nLogicalRow )  + chr(13) + chr(10)
    s += 'Mark:       ' + if ( cMark == 'D' , 'Delete' , 'Recall' ) + chr(13) + chr(10)
    MsgInfo ( s , 'Marked Row #' + str(i) )
      Next i
   endif

  * Show Appended Records ************************************************
   msginfo(This.AppendBuffer)
   msginfo(valtype(This.AppendBuffer))
   if This.AppendBuffer <> nil
      For i := 1 To len( This.AppendBuffer )
    s := ''
    s+= xToC ( This.AppendBuffer [ i ] [ 1 ] ) + ' , ' 
    s+= xToC ( This.AppendBuffer [ i ] [ 2 ] ) + ' , ' 
    s+= xToC ( This.AppendBuffer [ i ] [ 3 ] ) + ' , ' 
    s+= xToC ( This.AppendBuffer [ i ] [ 4 ] ) + ' , ' 
    s+= xToC ( This.AppendBuffer [ i ] [ 5 ] ) + ' , ' 
    s+= xToC ( This.AppendBuffer [ i ] [ 6 ] ) 
    MsgInfo ( s , 'Appended Record #' + str(i) )
      Next i
   endif
Return // OnSaveTest()
Agora o(s) problema(s):
- se conseguirem entender, me expliquem, o porquê do de o botão não acionar o ONCHANGE OnSaveTest() - posso clicar nele que ele aciona mas não chama a PROCEDURE ONSAVETEST()
- estranho q assim q o sistema executa, o ONSAVE já é executado em primeiro plano.
- é como se o SALVE estivesse acontecendo AUTOMATICAMENTE... aí não tem conteúdo criado ainda, gera uma mensagem de erro de ARRAY. Por isso que no código para os 3 ARRAY (THIS.xxxx) coloquei um IF/ENDIF para proibir do laço FOR/NEXT ser acionado com os 3 arrays com contéudo "U" (Valtype retorna "U")

Obrigado.
Responder