Ajuda com a criação de uma Grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Fernando Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Ajuda com a criação de uma Grid

Mensagem por Fernando Almeida »

Não consigo detetar onde se encontra o erro de data type mismatch que se me apresenta nesta grid.
Uso a Minigui Unicode 3.4.4.

Adianto que estou a usar o formulário,Fmg e como tal ele é criado com essas linhas todas
Se alguém me puder ajudar, eu fico muito agradecido.

Código: Selecionar todos

DEFINE GRID Grid_Pedidos
        ROW    156
        COL    600
        WIDTH  576
        HEIGHT 335
        ITEMS grid_data_Items()
        VALUE 1
        WIDTHS grid_data_widths()
        HEADERS grid_data_headers()
        FONTNAME "Arial"
        FONTSIZE 11
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONDBLCLICK Nil
        ONHEADCLICK Nil
        ONQUERYDATA QueryTest()
        MULTISELECT .T.
        ALLOWEDIT .F.
        VIRTUAL .F.
        DYNAMICBACKCOLOR grid_data_DynamicBackColor()
        DYNAMICFORECOLOR Nil
        COLUMNWHEN grid_data_columnwhen()
        COLUMNVALID Nil
        COLUMNCONTROLS grid_data_columncontrols()
        SHOWHEADERS .T.
        CELLNAVIGATION .T.
        NOLINES .F.
        HELPID Nil
        IMAGE { 'Imagens\br_ok.bmp', 'Imagens\br_no.bmp' }
        JUSTIFY grid_data_justify()
        ITEMCOUNT 5
        BACKCOLOR NIL
        FONTCOLOR NIL
        HEADERIMAGES Nil
        ROWSOURCE Nil
        COLUMNFIELDS Nil
        ALLOWAPPEND .F.
        ALLOWDELETE .F.
        BUFFERED .F.
        DYNAMICDISPLAY Nil
        ONSAVE Nil
        LOCKCOLUMNS 0
    END GRID
Segue em seguida as rotinas que o preenchem:

Código: Selecionar todos

FUNCTION grid_data_columnwhen()
LOCAL aColumnWhen

    // { || .T. } PERMITE A EDICAO
    // { || .F. } NAO PERMITE A EDICAO

   aColumnWhem := { { || .F. },;
                    { || .T. },;
                    { || .T. },;
                    { || .T. },;
                    { || .T. },;
		    { || .F. },;
                    { || .T. } }

RETURN aColumnWhen


FUNCTION grid_data_columncontrols()
LOCAL aColumnControls

   aColumnControls := { { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","NUMERIC","99,999.99" },;
                        { "TEXTBOX","NUMERIC","$ 99,999.99" },;
			{ "TEXTBOX","NUMERIC","99" },;
			{ "TEXTBOX","NUMERIC","$ 99,999.99" },;
                        { 'CHECKBOX' , 'Sim' , 'Não' } }

RETURN aColumnControls 


FUNCTION grid_data_Items()
LOCAL aColumnItems

   aColumnItems := { '',;
                     "DOSE DE BACALHAU A MODA DA CASA LOMBO",;
                     2.00,;
                     9.00,;
                     0,;
                     18.00,;
					 .t. }

RETURN aColumnItems 


FUNCTION grid_data_headers()
LOCAL aheaders

   aheaders := { "V",;
                 "Descrição ",;
		 "Quantidade",;
                 "Preco Unit.",;
                 "Desc",;
                 "Valor Total",;
                 "Pagar" }

RETURN aheaders


FUNCTION grid_data_widths()
LOCAL awidths := {}

   aWidths := { 0,220,90,90,20,100,40 }

RETURN awidths


FUNCTION grid_data_justify()
LOCAL ajustify := {}

   ajustify := { GRID_JTFY_LEFT,;
                 GRID_JTFY_LEFT,;
                 GRID_JTFY_RIGHT,;
                 GRID_JTFY_RIGHT,;
                 GRID_JTFY_RIGHT,;
		 GRID_JTFY_RIGHT,;
                 GRID_JTFY_CENTER }

RETURN ajustify


FUNCTION grid_data_DynamicBackColor()
LOCAL aDynamicBackColor := {}

   aDynamicBackColor := { bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
			  bBackColor,;
                          bBackColor }

RETURN aDynamicBackColor


Procedure QueryTest()

If This.QueryColIndex == 1
   If Int ( This.QueryRowIndex / 2 ) == This.QueryRowIndex / 2
	  This.QueryData := 0
   Else
      This.QueryData := 1
   EndIf
Else
	This.QueryData := Str ( This.QueryRowIndex ) + ',' + Str ( This.QueryColIndex )
EndIf
Return
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Ajuda com a criação de uma Grid

Mensagem por MSDN »

Para ajudar, por favor poste o erro inteiro ( print de tela ).
Fernando Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Ajuda com a criação de uma Grid

Mensagem por Fernando Almeida »

Bom dia, segue abaixo o erro e a rotina de abertura de pedido de vendas.

Código: Selecionar todos

#include "hmg.ch"

declare window Main

Function main_button_pedidos_de_venda_action
Local varQtExiste :=2
Local varQtMinima :=5

   IF IsWindowActive("Pedido_de_Vendas")
      DoMethod("Pedido_de_Vendas","MINIMIZE")
	  DoMethod("Pedido_de_Vendas","RESTORE")
	  DoMethod("Pedido_de_Vendas","SETFOCUS")
   ELSE   
	  Load Window Pedido_de_Vendas
      Center Window Pedido_de_Vendas
      Activate Window Pedido_de_Vendas
   ENDIF
Return Nil

Imagem
Anexos
image1.png
Avatar do usuário
susviela@bol.com.br
Usuário Nível 3
Usuário Nível 3
Mensagens: 236
Registrado em: 30 Jun 2017 11:17
Localização: São José / SC
Contato:

Ajuda com a criação de uma Grid

Mensagem por susviela@bol.com.br »

Código: Selecionar todos

061	LOCAL awidths := {}
062	 
063	   aWidths := { 0,220,90,90,20,100,40 }
064	 
065	RETURN awidths
Ai no array tem 7 itens... confere isso.
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ajuda com a criação de uma Grid

Mensagem por JoséQuintas »

Eu não aguentaria muito tempo usar uma coisa dessas.......
Talvez assim:

Código: Selecionar todos

FUNCTION GridGeral( nElemento )

   LOCAL aRetorno := {}, aTheGrid := { ;
      { 0,   "V",         "",                 .F., bBackColor, GRID_JTFY_LEFT,  { "TEXTBOX", "CHARACTER" } }, ;
      { 220, "DESCRIÇÃO", "DOSE DE BACALHAU", .T., bBackColor, GRID_JTFY_LEFT,  { "TEXTBOX", "CHARACTER" } }, ;
      { 90,  "QUANT",     2.00,               .T., bBackColor, GRID_JTFY_LEFT,  { "TEXTBOX", "NUMERIC", "99,999.99" } }, ;
      { 90,  "UNITARIO",  9.00,               .T., bBackColor, GRID_JTFY_RIGHT, { "TEXTBOX", "NUMERIC", "$ 99,999.99" } }, ;
      { 20,  "DESC",      0,                  .T., bBackColor, GRID_JTFY_RIGHT, { "TEXTBOX", "NUMERIC", "99" } }, ;
      {100,  "TOTAL",     18.00,              .F., bBackColor, GRID_JTFY_RIGHT, { "TEXTBOX", "NUMERIC", "$ 99,999.99" } }, ;
      { 40,  "PAGAR",     .T.,                .T., bBackColor, GRID_JTFY_CENTER,{ "CHECKBOX", "SIM", "NÃO" } } }

   AEval( aTheGrid, { | e | AAdd( aRetorno, e[ nElemento ] } )
   
   RETURN aRetorno
E usar direto ou funções intermediárias:

Código: Selecionar todos

FUNCTION grid_data_columnwhen();       RETURN GridGeral( 4 )
FUNCTION grid_data_columncontrols();   RETURN GridGeral( 7 )
FUNCTION grid_data_Items();            RETURN GridGeral( 3 )
FUNCTION grid_data_headers();          RETURN GridGeral( 2 )
FUNCTION grid_data_widths();           RETURN GridGeral( 1 )
FUNCTION grid_data_justify();          RETURN GridGeral( 6 )
FUNCTION grid_data_DynamicBackColor(); RETURN GridGeral( 5 )
Isso evitaria tamanhos errados em cada array.

Nota:
Qualquer semelhança com TBrowse console.... não é mera coincidência... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Ajuda com a criação de uma Grid

Mensagem por MSDN »

O TBrowse fez escola, de tão bom que é, na MiniGUI também tem um componente TBRowse, os exemplos de uso ficam na pasta : C:\MiniGUI\SAMPLES\Advanced e começam os nomes das pastas por Tsb_ . Se no modo console já dá pra fazer muita coisa, imagina com esse !
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ajuda com a criação de uma Grid

Mensagem por JoséQuintas »

Faltou o principal:

Pela mensagem de erro, o tamanho de algum array não está do tamanho que deveria ser.
Dá uma revisada na criação, e também em alguma atualização que possa fazer nos arrays.

Item Size Mismatch = tamanho do item não "bate"

Não sei se pode ser o tamanho do array de produtos... não tem produtos e está tentando acessar o primeiro...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Fernando Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Ajuda com a criação de uma Grid

Mensagem por Fernando Almeida »

Boa noite prezados colegas, vi as vossas respostas ao meu pedido e agradeço imenso o tempo que disponibilizaram.

Em relação ao tamanho das matrizes, elas estão todas com o mesmo tamanho, 7 itens.

Quanto a arrumação, eu pretendo fazer isso no fim, agora estou a usar o form para desenhar a tela de apresentação de vendas em modo gráfico e por isso ainda não retirei as linhas que são dispensáveis.
Aproveito e pergunto se alguém me pode fornecer a rotina de ordenação de cabeçalhos pois eu li aqui a algum tempo atras um colega referindo-se a uma rotina criada por um programador ucraniano muito bom, mas não me lembro do nome.
Era só para fazer uma comparação com o que criei para ordenar as colunas da grid e ver o que podia melhorar no que fiz, apesar de estar a funcionar bem.
Eu vou postar aqui a rotina e vocês que já dominam bem a linguagem me dizem o que acham.

Código: Selecionar todos

FUNCTION OrdenaGrid( oPassagem, n_Col, oValPesq )
Local aTwoMat :={}, i, lFound :=.f.  
Local oTotLn  :=Main.Grid_Documentos.ItemCOUNT
Local oOrdem  :=OrdName()

If oPassagem==2    //Caso seja para apresentar em modo 
   FOR i :=Main.Grid_Documentos.ItemCOUNT TO 1 STEP -1
      AADD( aTwoMat, Main.Grid_Documentos.Item(i) )
   NEXT i
Else 
    FOR i :=1 TO Main.Grid_Documentos.ItemCOUNT
      AADD( aTwoMat, Main.Grid_Documentos.Item(i) )
   NEXT i
Endif 

DoMethod("Main", "Grid_Documentos", "deleteAllItems")

FOR i :=1 TO oTotLn
   ADD Item { aTwoMat[i][1], aTwoMat[i][2] } TO Grid_Documentos OF Main
NEXT i   
Main.Grid_Documentos.Refresh

// FA?O A PROCURA DO VALOR DA CELULA ONDE SE ENCONTRAVA COM A NOVA MATRIZ ORDENANDA //
FOR i:=1 TO Main.Grid_Documentos.ItemCount
    IF Main.Grid_Documentos.Item(i)[n_Col] == &oValPesq
	   Main.Grid_Documentos.Value :={ i, n_Col }
	   lFound :=.t.
	   Exit 
	ENDIF
NEXT i

IF lFound==.f.
   Main.Grid_Documentos.Value :={ 1,1 }
ENDIF

Main.Grid_Documentos.SetFocus  
Return oPassagem 

Esta foi a forma que eu encontrei para fazer a ordenação das colunas de uma grid.
Eu estive ausente durante estes últimos 6 anos da programação, mas sinto a falta e decidi voltar a desenvolver software.
É evidente que estou a iniciar e como tal ainda não tenho muita experiencia com esta linguagem em modo gráfica, peço a vossa compreensão e ajuda. Tenho interesse porque tenho algumas aplicações de gestão comercial feitas em clipper 5.2e e tenho interesse em converte-las para modo gráfico.
Fernando Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Ajuda com a criação de uma Grid

Mensagem por Fernando Almeida »

Me desculpem mas fiz a troca por esta rotina de ordenação de colunas na Grid.
Com menos linhas e riscos, julgo eu.

Código: Selecionar todos

FUNCTION OrdenaGrid( oPassagem, n_Col, oValPesq )
Local i, lFound :=.f.  
Local oTotLn :=Main.Grid_Documentos.ItemCOUNT
Local oOrdem :=OrdName()

If oPassagem==2
   
   Asort(matDocsTwo,,, { | a, b | a[ n_Col ] > b[ n_Col ] } ) 
    
Else 
    
   Asort(matDocsTwo,,, { | a, b | a[ n_Col ] < b[ n_Col ] } ) 

Endif 

DoMethod("Main", "Grid_Documentos", "deleteAllItems")

FOR i :=1 TO oTotLn
   ADD Item { matDocsTwo[i][1], matDocsTwo[i][2] } TO Grid_Documentos OF Main
NEXT i   
Main.Grid_Documentos.Refresh

// FAÇO A PROCURA DO VALOR DA CELULA ONDE SE ENCONTRAVA COM A NOVA MATRIZ ORDENANDA //
FOR i:=1 TO Main.Grid_Documentos.ItemCount
    IF Main.Grid_Documentos.Item(i)[n_Col] == &oValPesq
	   Main.Grid_Documentos.Value :={ i, n_Col }
	   lFound :=.t.
	   Exit 
	ENDIF
NEXT i

IF lFound==.f.
   Main.Grid_Documentos.Value :={ 1,1 }
ENDIF
Main.Grid_Documentos.SetFocus  
Return( oPassagem )  
Se algum colega achar necessario alguma correção, eu agradeço sugestões.
Fernando Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Pedido de ajuda na emissão de email.

Mensagem por Fernando Almeida »

Boa noite,

Prezados, aproveito para cumprimentar todos sem exceção.

Venho desta forma pedir a V. ajuda na resolução de um problema que me apareceu na rotina de envio de email.
Há algum tempo atrás quando elaborei este aplicativo de manutenção de N/Fiscais geradas pelo AcbrMonitor, acrescentei uma rotina de compactação e envio de email para o contador da informação relativa ao mês em causa.
A rotina durante algum tempo enviava um email por dia.

Agora não consigo enviar nenhum email e dá o seguinte erro apresentado abaixo, após a imagem da rotina com os dados de envio:
Se alguem me puder ajudar, eu fico muito agradecido.
Aproveito e como já não uso este espaço a muito tempo, gostaria que me dissessem como posso apresentar as imagens diretamente na mensagem. Sei que devo usar o botão Img aqui nas opções desta rotina mas depois como posso selecionar a imagem pretendida, eu já não me lembro como é.
Se estou a fazer o processo com muitos erros, peço que compreendam e fico receptivo a algumas instruções que me possam dar.
Anexos
Captura de tela 2020-09-15 141145.jpg
Captura de tela 2020-09-15 141020.jpg
Responder