Clipper On Line • Ver Tópico - Ajuda com a criação de uma Grid

Ajuda com a criação de uma Grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Ajuda com a criação de uma Grid

Mensagempor Fernando Almeida » 22 Dez 2019 19:51

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.

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:
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
Fernando Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 12
Data de registro: 24 Set 2016 12:53
Cidade/Estado: Dourados - MS
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Ajuda com a criação de uma Grid

Mensagempor MSDN » 22 Dez 2019 23:34

Para ajudar, por favor poste o erro inteiro ( print de tela ).
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 786
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 164 vezes
Mens.Curtidas: 109 vezes

Ajuda com a criação de uma Grid

Mensagempor Fernando Almeida » 23 Dez 2019 13:16

Bom dia, segue abaixo o erro e a rotina de abertura de pedido de vendas.
#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


[img]image1.png[/img]
Anexos
image1.png
Fernando Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 12
Data de registro: 24 Set 2016 12:53
Cidade/Estado: Dourados - MS
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Ajuda com a criação de uma Grid

Mensagempor susviela@bol.com.br » 24 Dez 2019 09:36

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 de usuário

susviela@bol.com.br
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 207
Data de registro: 30 Jun 2017 11:17
Cidade/Estado: São José / SC
Curtiu: 127 vezes
Mens.Curtidas: 20 vezes

Ajuda com a criação de uma Grid

Mensagempor JoséQuintas » 24 Dez 2019 10:27

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

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:
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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Ajuda com a criação de uma Grid

Mensagempor MSDN » 24 Dez 2019 11:22

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 !
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 786
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 164 vezes
Mens.Curtidas: 109 vezes

Ajuda com a criação de uma Grid

Mensagempor JoséQuintas » 24 Dez 2019 11:36

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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Ajuda com a criação de uma Grid

Mensagempor Fernando Almeida » 26 Dez 2019 22:27

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.
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: 12
Data de registro: 24 Set 2016 12:53
Cidade/Estado: Dourados - MS
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Ajuda com a criação de uma Grid

Mensagempor Fernando Almeida » 27 Dez 2019 15:49

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

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: 12
Data de registro: 24 Set 2016 12:53
Cidade/Estado: Dourados - MS
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Pedido de ajuda na emissão de email.

Mensagempor Fernando Almeida » 16 Set 2020 01:37

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
Fernando Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 12
Data de registro: 24 Set 2016 12:53
Cidade/Estado: Dourados - MS
Curtiu: 0 vez
Mens.Curtidas: 0 vez




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro