Olá amigos do forum, estou reescrevendo meu sistema em harbour/minigui, já fiz algumas telas, com browse, navego chamo formulário de digitação etc, agora quero resolver algo e não consigo, ja pesquisei e nao encontrei. é o seguinte: Quero criar um browse condicional, explicando melhor, na minha rotina de orçamentos em tenho uma tabela onde registro todos os orçamentos que estão sendo realizado na loja, eu quero que o meu browse mostre somente os itens de uma determinada venda, ou seja se eu estiver fazendo o orçamento numero 100, o itens no browse tem que ser do orçamento numero 100, não quero usar set filter pois acho muito lento, quando se instancia o set filter ele demora na filtragem da tabela, especialmente se esta estiver muito populada, queria dar um seek no numero da tabela e dair mostrar no no browse os itens deste orçamento e um campo totalizando o mesmo.
Não sei se fui claro, desde já agradeço
Grid/Browse Condicional
Moderador: Moderadores
- Cavalo Marinho
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 01 Ago 2009 10:01
- Localização: Aracaju/Se
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Grid/Browse Condicional
Amigo, se você estiver usando a MiniGui Extended, dê uma olhada neste exemplo da pasta samples:
\MiniGUI_2_3\SAMPLES\BASIC\Browse_4
Abraços,
\MiniGUI_2_3\SAMPLES\BASIC\Browse_4
Código: Selecionar todos
/*
* MINIGUI - Harbour Win32 GUI library Demo
*
* Copyright 2002 Roberto Lopez <harbourminigui@gmail.com>
* http://harbourminigui.googlepages.com/
*/
#include "minigui.ch"
Function Main
SET BROWSESYNC ON
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 800 HEIGHT 480 ;
TITLE 'MiniGUI Browse Demo' ;
MAIN NOMAXIMIZE ;
ON INIT OpenTables() ;
ON RELEASE CloseTables()
@ 10,10 LABEL Label_1 VALUE 'Pedidos'
@ 10,400 LABEL Label_2 VALUE 'Items'
@ 40,10 BROWSE Pedidos ;
WIDTH 380 ;
HEIGHT 370 ;
HEADERS { 'Pedido' , 'Cliente' , 'Endereco' , 'Cidade' } ;
WIDTHS { 100 , 250 , 250 , 150 } ;
WORKAREA Pedidos ;
FIELDS { 'Pedidos->Pedido' , 'Clientes->Nome' , 'Clientes->Endereco' , 'Clientes->Cidade' } ;
ON CHANGE UpdateItems() ;
EDIT INPLACE ;
READONLY { .T. , .F. , .F. , .F. } LOCK
@ 40,400 BROWSE Items ;
WIDTH 380 ;
HEIGHT 370 ;
HEADERS { 'Pedido' , 'Produto' , 'Quant' , 'Valor' , 'Sum' } ;
WIDTHS { 99 , 120 , 60 , 80 , 90 } ;
WORKAREA Items ;
FIELDS { 'Items->Pedido' , 'Items->Produto' , 'Items->Quant' , 'Items->Valor', 'Quant*Valor' } ;
JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT } ;
EDIT INPLACE ;
READONLY { .T. , .F. , .F. , .F. , .T. } LOCK
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return Nil
Procedure OpenTables()
Local aProduto := {}
Use Clientes Shared New
Index On Field->Codigo To Clientes
Use Produtos Shared New
Index On Field->Produto To Produtos
dbeval( { || aadd( aProduto, {Nome, Produto} ) } )
Use Items Shared New
Index On Field->Pedido To Items
Use Pedidos Shared New
Set Relation To Field->Cliente Into Clientes
Form_1.Pedidos.Value := RecNo()
UpdateItems()
Form_1.Items.InputItems := { Nil , aProduto , Nil , Nil , Nil }
Form_1.Items.DisplayItems := { Nil , aProduto , Nil , Nil , Nil }
Return
Procedure CloseTables()
Close DataBases
AEval( Directory( '*.ntx' ), { |file| Ferase( file[1] ) } )
Return
Procedure UpdateItems()
Local nArea := Select()
Select Items
OrdScope(0,Pedidos->Pedido)
OrdScope(1,Pedidos->Pedido)
Go Top
Form_1.Items.Value := RecNo()
Select(nArea)
Return 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
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
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
Grid/Browse Condicional
Aproveitando este tópico - não sei se é o mais apropriado; pois são 21 páginas que encontrei, e a mais apropriada é esta.
Gostaria da ajuda dos colegas a compreender melhor os exemplos da pasta MINIGUI\BASIC\browse, pois nenhum deles (sendo muito bonitos e atraentes), é da mesma funcionalidade do meu atual que está em MODO CONSOLE e estou já migrando meu sistema para modo GRÁFICO e CONSOLE JUNTOS (ao mesmo tempo) até eliminar totalmente o CONSOLE.
No meu sistema em MODO CONSOLE, dentro de um determinado GET (por exemplo se esteou fazendo uma venda para o determinado cliente) eu pressiono a tecla F4 que imediatamente aciona o browse com todos os clientes disponíveis. Então, entendam as seguintes situações:
1 - para mudar a ordem de pesquisa (por NOME, CPF, ENDEREÇO, FILIAÇÃO, etc) eu uso no teclado ALT+P (a cada pressionada a ordem vai mudando sequencialmente até o local desejado ou volta para início novamente da pesquiesa)e;
2 - para realizar a consulta eu uso ALT+C (isso é muito dinâmico, pois a cada letra digitada vai sendo filtrado o nome até chegar no que eu preciso - usando o inkey() ). Ao encontrar o dito cliente, é só pressionar ENTER sobre o resultado que o GET é preenchido automaticamente com o código do cliente e os demais SAYs/GETs referentes a esse cliente como DATA nascimento, endereço, cpf, também são preenchidos.
Então, no MODO CONSOLE é o SET KEY e na HMG/GUI é o ON KEY F4.
A princípio a troca de SET KEY para ON KEY Tá dando certo... só que não sei o que mudar no meu antigo BROWSE para ser adaptado para o MODO GRÁFICO.
Vejam o meu código do BROWSE atualmente e me digam o que fazer (se puderem; por favor):
=========== função de criação do browse parte 1=========== fim da primeira parte do browse
=========== função de criação do browse parte 2 - o código é muito grande e esse sim é todo o responsável pelo meu BROWSE. Vejam:
============ fim da função CRIABROWSE - parte 2.
Bom, se puderem, favor me darem uma ideia de como transferir isso tudo aí para modo gráfico. Lembrando que uso a HMG 3.0.xx.
vlw!
MICROVOLUTION / W de Paula - Microvolution. A Evolução da Informática - microvolution@hotmail.com - www.mvinfo.wmx.net.br
Gostaria da ajuda dos colegas a compreender melhor os exemplos da pasta MINIGUI\BASIC\browse, pois nenhum deles (sendo muito bonitos e atraentes), é da mesma funcionalidade do meu atual que está em MODO CONSOLE e estou já migrando meu sistema para modo GRÁFICO e CONSOLE JUNTOS (ao mesmo tempo) até eliminar totalmente o CONSOLE.
No meu sistema em MODO CONSOLE, dentro de um determinado GET (por exemplo se esteou fazendo uma venda para o determinado cliente) eu pressiono a tecla F4 que imediatamente aciona o browse com todos os clientes disponíveis. Então, entendam as seguintes situações:
1 - para mudar a ordem de pesquisa (por NOME, CPF, ENDEREÇO, FILIAÇÃO, etc) eu uso no teclado ALT+P (a cada pressionada a ordem vai mudando sequencialmente até o local desejado ou volta para início novamente da pesquiesa)e;
2 - para realizar a consulta eu uso ALT+C (isso é muito dinâmico, pois a cada letra digitada vai sendo filtrado o nome até chegar no que eu preciso - usando o inkey() ). Ao encontrar o dito cliente, é só pressionar ENTER sobre o resultado que o GET é preenchido automaticamente com o código do cliente e os demais SAYs/GETs referentes a esse cliente como DATA nascimento, endereço, cpf, também são preenchidos.
Então, no MODO CONSOLE é o SET KEY e na HMG/GUI é o ON KEY F4.
A princípio a troca de SET KEY para ON KEY Tá dando certo... só que não sei o que mudar no meu antigo BROWSE para ser adaptado para o MODO GRÁFICO.
Vejam o meu código do BROWSE atualmente e me digam o que fazer (se puderem; por favor):
=========== função de criação do browse parte 1
Código: Selecionar todos
static function CONSULTA_ARQUIVO (PROGRAMA,LINHA,VARIAVEL)
local CABEC_CAMPOS := {},;
MASCARAS := {},;
TAM_MEMO := {},;
TECLAS := {},;
ARQUIVO := select (),;
POSICAO := recno (),;
SALVA_COR := setcolor (),;
OPCOES := {},;
DESCRICAO := {},;
NOME_ARQUIVO := ''
setcursor (SC_NONE)
setcolor (COR_BROWSE)
set key TECLA_HELP to TECLAS_BROWSE
set key TECLA_CONT_ANT to
set key TECLA_CONSULTA to
set key ALT_TECLA_CONSULTA to
aadd (TECLAS,{'Esc','Retorna'})
aadd (TECLAS,{'F1','Help'})
aadd (TECLAS,{'F2','Util'})
aadd (TECLAS,{'Alt F2','Consulta'})
aadd (TECLAS,{'Alt F3','Gr fico'})
do case
case VARIAVEL == 'MCDCLIENTE' .and. lastkey () <> K_ALT_F4
set key TECLA_PROG_CHAMA to CADASTRA_ARQUIVO
aadd (TECLAS,{'F5','Cadastra'})
select ('DCI10000')
NOME_ARQUIVO := 'Clientes'
aadd (CABEC_CAMPOS,'COD.CLI.')
aadd (MASCARAS,pCDCLIENTE)
aadd (TAM_MEMO,nil)
aadd (CABEC_CAMPOS,'NOME')
aadd (MASCARAS,pNMCLIENTE)
aadd (TAM_MEMO,nil)
aadd (CABEC_CAMPOS,'CPF/CIC')
aadd (MASCARAS,pNUCPF)
aadd (TAM_MEMO,nil)
// aqui abaixo vai o restante do CASE com isso tudo para cada GET (muitas linhas) que achei muito grande para colocar aqui e //cansar o vosso raciocínio.
// abaixo o encerramento do DO CASE:
otherwise
NOME_ARQUIVO := 'Ordem Servi‡o Veicular'
//aadd (CABEC_CAMPOS,'No.VENDA')
aadd (CABEC_CAMPOS,'No.OSV')
aadd (MASCARAS,pNU_VENDA)
aadd (TAM_MEMO,nil)
aadd (CABEC_CAMPOS,'COD.CLI.')
aadd (MASCARAS,pCDCLIENTE)
aadd (TAM_MEMO,nil)
// aqui abaixo vai o restante do CASE OTHERWISE com isso tudo para cada GET (muitas linhas) que achei muito grande para colocar aqui e //cansar o vosso raciocínio.
// abaixo o encerramento do DO CASE:
endcase
TECLAS_FUNCAO (TECLAS)
ATUALIZA_BROWSE := .t.
do while ATUALIZA_BROWSE
ATUALIZA_BROWSE := .f.
CRIABROWSE (VARIAVEL,'PCI10048',NOME_ARQUIVO,CABEC_CAMPOS,TAM_MEMO,MASCARAS)
enddo
select (ARQUIVO)
OPCOES_CAMPOS ()
setcolor (SALVA_COR)
setcursor (SC_NORMAL)
set key TECLA_HELP to HELP_CAMPO
set key TECLA_CONT_ANT to CONTEUDO_ANTERIOR
set key TECLA_CONSULTA to CONSULTA_ARQUIVO
set key ALT_TECLA_CONSULTA to CONSULTA_ARQUIVO
set key TECLA_PROG_CHAMA to
set filter to
go POSICAO
if CAN_TECLA_F3
set key TECLA_CONT_ANT to
endif
return
=========== função de criação do browse parte 2 - o código é muito grande e esse sim é todo o responsável pelo meu BROWSE. Vejam:
Código: Selecionar todos
function CRIABROWSE (VARIAVEL,NOME_PROGRAMA,NOME_ARQUIVO,CAB_CAMPOS,TAM_CAMPOS,MASC_CAMPOS)
memvar COD_ACESSO,;
TEM_SENHA,;
LIN_MENSAGEM
local I := 0,;
N_REGISTROS := 16,;
TECLA := nil,;
VALOR := nil,;
SALVA_FILT := dbfilter (),;
SALVA_IND := len (&(alias ()) [1]) - 1,;
SALVA_ORD := indexord (),;
TEL_AUX := '',;
ARQ_AUX := '',;
oTBCOLUMN := nil,;
TENTATIVAS := 5,;
COMPARTILHADO := .t.,;
EXISTE_ARQ := .t.,;
TENTAT,;
TELA_AUX,;
NOME_CAMPO,;
BLOCO
private iCAMPO := {},;
fCAMPO := {},;
cCAMPO := {},;
COLUNA := {},;
ESTRUTURA := {},;
CABEC_CAMPOS:= CAB_CAMPOS,; // Cabecalho da colunas do browse
POS_REAL := {},; // indica a posicao real do coluna do browse no arquivo de dados
; // mapeamento: Posicao Coluna --> Posicao Estrutura Fisca
ORDEM_ELIM := {{},{}},; // indica a ordem das colunas eliminadas
FILT_AUX := dbfilter (),;
FIM_LOOP := .f.,;
FIM_BROW := .f.,;
POS_COL := 1,; // posicao da coluna corrente no browse ativo
POS_LIN := 1,; // posicao da linha corrente no browse ativo
N_CONGEL := 0,;
C_VARIAVEL := 0,; // posicao da varivel a ser retornada
CONT := len (&(alias ()) [1]) - 1,;
AREA_ARQ := alias(),;
TAM := 0,;
CONTROLE := .F.,;
TITULO_BROW := alltrim(substr(NOME_ARQUIVO,1,30)),; // titulo do browse corrente,;
SALVA_TELA := nil,;
LINHA1 := 2,; // linha superior do browse
COLUNA1 := 1,; // coluna mais a esquerada do browse
LINHA2 := 21,; // linha inferior do browse
COLUNA2 := 76,; // coluna mais a direita do browse
oTBROWSE,;
; // variaveis utilizadas pelo modulo de grafico:
VET_LIN := {},; // Vetor com posicao das linhas.
COL_VAL := {},; // Vetor com colunas de valor.
COL_LEG := 0,; // Coluna da legenda.
TITULO := space (65),;
SUB_TITULO := space (65),;
TITULO_Y := space (50)
Private ARQ_BROW := {{{'BROWSE',;
'Arquivo de Browse do Sistema',;
'BROWSE.DBF'},;
{'BROWSE',;
'BROWARQ+BROWTITULO',;
'BROW001.NTX'},;
{'BROWSE',;
'BROWARQ+BROWTIPO+STR(BROWCODACE,6)',; // era ',5' mudei p/ ',6' para poder equiparar com a variável COD_ACESSO q tb era 5 e foi mudada p/ 6. 01-11-11w.
'BROW002.NTX'}},;
{'BROWARQ', 'C', 8,0},;
{'BROWTITULO', 'C', 30,0},;
{'BROWFILCOL', 'C', 60,0},;
{'BROWFILINI', 'C', 256,0},;
{'BROWFILFIN', 'C', 256,0},;
{'BROWFILCON', 'C', 256,0},;
{'BROWSETORD', 'N', 2,0},;
{'BROWCOLATV', 'C', 200,0},;
{'BROWCOLELM', 'C', 200,0},;
{'BROWCOLCOR', 'N', 2,0},;
{'BROWFIXA', 'N', 2,0},;
{'BROWTIPO', 'C', 1,0},;
{'BROWL1', 'N', 2,0},;
{'BROWC1', 'N', 2,0},;
{'BROWL2', 'N', 2,0},;
{'BROWC2', 'N', 2,0},;
{'BROWREGCOR', 'N', 9,0},;
{'BROWCODACE', 'N', 6,0}} // era ',5' mudei p/ ',6' para poder equiparar com a variável COD_ACESSO q tb era 5 e foi mudada p/ 6. 01-11-11w.
ESTRUTURA := dbstruct ()
// POS_REAL := array(fcount()) // substituída pelas 4 linhas abaixo pelo Sr. Eolo q conheci pelo fórum pctoledo e me ajudou a resolver o erro base/1068 das matrizes MASC_CAMPOS e POS_REAL. 22/9/11w
pos_real:={}
for x=1 to fcount()
aadd(pos_real,x)
next
//criando arquivo BROWSE.DBF
if !file(ARQ_BROW[1,1,3])
EXISTE_ARQ:=.f.
ARQ_AUX:=aclone(ARQ_BROW)
ARQ_AUX := adel (ARQ_AUX,1)
ARQ_AUX := asize (ARQ_AUX,len (ARQ_AUX) - 1)
dbcreate (ARQ_BROW[1,1,3],ARQ_AUX)
endif
//criando indices do arquivo BROWSE.DBF
for I:=2 to len(ARQ_BROW[1])
if !file(ARQ_BROW[1,I,3]) .or. !EXISTE_ARQ
use (ARQ_BROW[1,1,3]) alias (ARQ_BROW[1,1,1]) new
if neterr ()
TELA_AUX := savescreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79)
MENSAGEM('Sobrecarga na rede. N„o foi poss¡vel acessar a consulta.')
inkey(0)
restscreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79,TELA_AUX)
return nil
endif
index on &(ARQ_BROW[1,I,2]) to (ARQ_BROW[1,I,3])
close
endif
next
ABRE_ARQUIVO (ARQ_BROW,'TODOS',COMPARTILHADO,TENTATIVAS)
//>> Restaurando configuracao do browse
select(ARQ_BROW[1,1,1])
set order to 1
if TEM_SENHA
set filter to BROWSE->BROWTIPO == "F" .AND. BROWSE->BROWCODACE == COD_ACESSO
else
set filter to BROWSE->BROWTIPO == "F"
endif
seek(MASC(AREA_ARQ,8)+NOME_PROGRAMA+VARIAVEL)
if !(alltrim(BROWSE->BROWTITULO) == alltrim(NOME_PROGRAMA+VARIAVEL))
if INCLUI (TENTATIVAS) .AND. TRAVADO (TENTATIVAS)
select(AREA_ARQ)
BROWSE->BROWARQ := AREA_ARQ
BROWSE->BROWTIPO := "F"
BROWSE->BROWTITULO := NOME_PROGRAMA+VARIAVEL
BROWSE->BROWSETORD := indexord()
BROWSE->BROWCOLCOR := 1
BROWSE->BROWFIXA := 0
BROWSE->BROWREGCOR := 1
for I := 1 to fcount ()
TAM := TAM + max (len (CABEC_CAMPOS [I]),ESTRUTURA [I,3])
BROWSE->BROWCOLATV := alltrim(BROWSE->BROWCOLATV)+;
alltrim(str(I)) +";"
next I
//>> Faz o calculo de onde sera posicionado o browse
if TAM < (COLUNA2 - COLUNA1 + 1)
if TAM < len (TITULO_BROW) + 3
TAM := len (TITULO_BROW) + 3
endif
COLUNA1 := COLUNA2 - TAM
endif
go top
N_REGISTROS := AVANCA_REGISTROS (16)
if N_REGISTROS < (LINHA2 - LINHA1 - 4)
LINHA1 := LINHA2 - N_REGISTROS - 5
endif
BROWSE->BROWL1 := LINHA1
BROWSE->BROWC1 := COLUNA1
BROWSE->BROWL2 := LINHA2
BROWSE->BROWC2 := COLUNA2
if TEM_SENHA
// ?"sim, TEM_SENHA",TEM_SENHA // linhas colocadas provisórias, foi resolvido, tendo em vista q no arquivo BROWSE o campo BROWCODACE estava com 5 e mudei p/ 6 o tamanho. 01-11-11w
// ? valtype(BROWSE->BROWCODACE),valtype(COD_ACESSO) // linhas colocadas provisórias, foi resolvido, tendo em vista q no arquivo BROWSE o campo BROWCODACE estava com 5 e mudei p/ 6 o tamanho. 01-11-11w
// ? BROWSE->BROWCODACE,COD_ACESSO // linhas colocadas provisórias, foi resolvido, tendo em vista q no arquivo BROWSE o campo BROWCODACE estava com 5 e mudei p/ 6 o tamanho. 01-11-11w
// inkey(0) // linhas colocadas provisórias, foi resolvido, tendo em vista q no arquivo BROWSE o campo BROWCODACE estava com 5 e mudei p/ 6 o tamanho. 01-11-11w
BROWSE->BROWCODACE := COD_ACESSO
else
BROWSE->BROWCODACE := 0
// ?"não TEM_SENHA",TEM_SENHA // linhas colocadas provisórias, foi resolvido, tendo em vista q no arquivo BROWSE o campo BROWCODACE estava com 5 e mudei p/ 6 o tamanho. 01-11-11w
// inkey(0) // linhas colocadas provisórias, foi resolvido, tendo em vista q no arquivo BROWSE o campo BROWCODACE estava com 5 e mudei p/ 6 o tamanho. 01-11-11w
endif
select(ARQ_BROW[1,1,1])
unlock
select(AREA_ARQ)
go top
else
TELA_AUX := savescreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79)
MENSAGEM('Sobrecarga na rede. N„o foi poss¡vel acessar a consulta.')
inkey(0)
restscreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79,TELA_AUX)
return nil
endif
endif
//<<
TITULO_BROW := alltrim(substr(NOME_ARQUIVO,1,30))
CARREGA_BROWSE()
//>>calculando altura da janela do browse
SELECT(AREA_ARQ)
go top
N_REGISTROS := AVANCA_REGISTROS (16)
if N_REGISTROS < (LINHA2 - LINHA1 - 4)
LINHA1 := LINHA2 - N_REGISTROS - 5
endif
//<<
select(ARQ_BROW[1,1,1])
COLUNA1 := BROWSE->BROWC1
COLUNA2 := BROWSE->BROWC2
select(AREA_ARQ)
go top
for I := 1 to fcount ()
if ESTRUTURA[I,1] == substr(VARIAVEL,2)
C_VARIAVEL := I
endif
next
do while .not. (FIM_LOOP)
SALVA_TELA := savescreen (LINHA1 - 1,COLUNA1 - 1,LINHA2 + 1,COLUNA2 + 2)
MOLDURA (LINHA1,COLUNA1,LINHA2,COLUNA2,.f.,TITULO_BROW)
// Monta o objeto TBrowse
oTBROWSE := tbrowsedb (LINHA1 + 1,COLUNA1 + 1,LINHA2 - 1,COLUNA2 - 1)
oTBROWSE:colorspec += ',' + COR_FUNDO (N_COR (2)) + '+/' + COR_FUNDO (N_COR (1)) +;
',' + COR_FUNDO (N_COR (2)) + '+/' + COR_FUNDO (N_COR (2))
oTBROWSE:headsep := chr (196) + chr (194) + chr (196)
oTBROWSE:colsep := chr (32) + chr (179) + chr (32)
oTBROWSE:footsep := chr (196) + chr (193) + chr (196)
FIM_BROW := .f.
if empty(MASC_CAMPOS[POS_REAL[I]])
oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [POS_REAL[I]],fieldblock (fieldname (POS_REAL[I]) )))
else
NOME_CAMPO := fieldname (POS_REAL[I])
BLOCO := "{|XX|transform(if(XX==NIL,"+NOME_CAMPO+","+NOME_CAMPO+":= XX),'"+MASC_CAMPOS[POS_REAL[I]]+"')}"
oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [POS_REAL[I]],&(BLOCO) ))
endif
else
oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [POS_REAL[I]],{|| '<MEMO>'}))
endif
oTBCOLUMN := oTBROWSE:getcolumn (oTBROWSE:colcount)
oTBCOLUMN:cargo := array (3)
oTBCOLUMN:Cargo[COL_TAMREL] := TAM_CAMPOS[POS_REAL[I]]
oTBCOLUMN:Cargo[COL_MASC ] := MASC_CAMPOS[POS_REAL[I]]
oTBCOLUMN:Cargo[COL_EXP ] := fieldname (POS_REAL[I])
next I
for I := 1 to len(ORDEM_ELIM[1])
if ESTRUTURA [ORDEM_ELIM[1,I],2] <> 'M'
if empty(MASC_CAMPOS[ORDEM_ELIM[1,I]])
oTBCOLUMN := tbcolumnnew (CABEC_CAMPOS [ORDEM_ELIM[1,I]],fieldblock (fieldname (ORDEM_ELIM[1,I]) ))
else
NOME_CAMPO := fieldname (ORDEM_ELIM[1,I])
BLOCO := "{|XX|transform(if(XX==NIL,"+NOME_CAMPO+","+NOME_CAMPO+":= XX),'"+MASC_CAMPOS[ORDEM_ELIM[1,I]]+"')}"
oTBCOLUMN := tbcolumnnew (CABEC_CAMPOS [ORDEM_ELIM[1,I]],&(BLOCO) )
endif
else
oTBCOLUMN := tbcolumnnew (CABEC_CAMPOS [ORDEM_ELIM[1,I]],{|| '<MEMO>'})
endif
aadd(ORDEM_ELIM[2],oTBCOLUMN)
oTBCOLUMN:cargo := array (3)
oTBCOLUMN:footsep := chr (196) + chr (193) + chr (196)
oTBCOLUMN:Cargo[COL_TAMREL] := TAM_CAMPOS[ORDEM_ELIM[1,I]]
oTBCOLUMN:Cargo[COL_MASC ] := MASC_CAMPOS[ORDEM_ELIM[1,I]]
oTBCOLUMN:Cargo[COL_EXP ] := fieldname (ORDEM_ELIM[1,I])
next I
oTBROWSE:freeze := N_CONGEL
oTBROWSE:colpos := POS_COL
oTBROWSE:rowpos := POS_LIN
STATUS_RODAPE()
//>> Exibicao e ativacao do browse
do while .not. (FIM_BROW)
do while .not. oTBROWSE:stabilize () // O Objeto deve ser Estabilizado
enddo
TECLA := inkey (0)
POS_COL := oTBROWSE:colpos
POS_LIN := oTBROWSE:rowpos
do case
case TECLA = K_ESC
FIM_BROW := .t.
FIM_LOOP := .t.
case TECLA = K_ENTER
if ESTRUTURA [POS_REAL [oTBROWSE:colpos],2] <> 'M'
if C_VARIAVEL = 0
C_VARIAVEL = POS_REAL [oTBROWSE:colpos]
endif
VALOR := eval (fieldblock (fieldname (C_VARIAVEL)))
FIM_BROW := .t.
FIM_LOOP := .t.
do case
case valtype (VALOR) = 'D'
VALOR := dtos (VALOR)
if len (dtoc(date())) = 10
VALOR := substr (VALOR,7) + substr (VALOR,5,2) + substr (VALOR,1,4)
else
VALOR := substr (VALOR,7) + substr (VALOR,5,2) + substr (VALOR,3,2)
endif
if set (_SET_CONFIRM)
keyboard VALOR + chr (K_ENTER)
else
keyboard VALOR
endif
case valtype (VALOR) = 'N'
if set (_SET_CONFIRM)
keyboard strtran (str (VALOR),' ','0') + chr (K_ENTER)
else
keyboard strtran (str (VALOR),' ','0')
endif
case valtype (VALOR) = 'C'
if set (_SET_CONFIRM)
if alias()='DCI10024' // Linhas acrescentadas por
mEDTIPO :=DCI10024->EDTIPO // Walcledson em 09/07/2001
mEDLOGRADO:=DCI10024->EDLOGRADO // para que o BROWSE pudes-
mEDBAIRRO :=DCI10024->EDBAIRRO // atualizar o Endere‡o do
mNUCEP :=DCI10024->NUCEP // Cliente, se a rua/ave de
mEDCIDADE :=DCI10024->EDCIDADE // sua residˆncia tiver +
mEDUF :=DCI10024->EDUF // de um CEP/BAIRRO/etc.,
endif // sem essas linhas nÆo funciona corretamente o cadastro de endere‡os.
keyboard VALOR + chr (K_ENTER)
else
if alias()='DCI10024' // Linhas acrescentadas por
mEDTIPO :=DCI10024->EDTIPO // Walcledson em 09/07/2001
mEDLOGRADO:=DCI10024->EDLOGRADO // para que o BROWSE pudes-
mEDBAIRRO :=DCI10024->EDBAIRRO // atualizar o Endere‡o do
mNUCEP :=DCI10024->NUCEP // Cliente, se a rua/ave de
mEDCIDADE :=DCI10024->EDCIDADE // sua residˆncia tiver +
mEDUF :=DCI10024->EDUF // de um CEP/BAIRRO/etc.,
endif // sem essas linhas nÆo funciona corretamente o cadastro de endere‡os.
keyboard padr (VALOR,ESTRUTURA [fieldpos (fieldname (C_VARIAVEL)),3])
endif
endcase
else
VALOR := eval (fieldblock (fieldname (POS_REAL [oTBROWSE:colpos])))
TEL_AUX := savescreen (02,01,23,79)
MOLDURA (02,01,22,77,.f.,'')
VALOR := memoedit (VALOR,03,02,21,76,.f.)
restscreen (02,01,23,79,TEL_AUX)
endif
otherwise
TESTATECLA (TECLA)
endcase
enddo
enddo
//>>Salvar Browse
select(ARQ_BROW[1,1,1])
set order to 1
if TEM_SENHA
set filter to BROWSE->BROWTIPO == "F" .AND. BROWSE->BROWCODACE == COD_ACESSO
else
set filter to BROWSE->BROWTIPO == "F"
endif
if TRAVADO(TENTATIVAS)
SALVA_BROWSE()
unlock
else
TELA_AUX := savescreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79)
MENSAGEM('Sobrecarga na rede. N„o foi poss¡vel salvar a consulta.')
inkey(0)
restscreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79,TELA_AUX)
endif
select(ARQ_BROW[1,1,1])
CLOSE
//<<
select(AREA_ARQ)
set filter to &(SALVA_FILT)
close index
for I := SALVA_IND + 1 to CONT
ARQ_AUX := '$$$$$0' + alltrim (str (I,2,0)) + '.NTX'
delete file (ARQ_AUX)
next I
asize (&(alias ()) [1],SALVA_IND + 1)
ATIVA_INDICE (SALVA_IND)
set order to SALVA_ORD
restscreen (LINHA1 - 1,COLUNA1 - 1,LINHA2 + 1,COLUNA2 + 2,SALVA_TELA)
return nilBom, se puderem, favor me darem uma ideia de como transferir isso tudo aí para modo gráfico. Lembrando que uso a HMG 3.0.xx.
vlw!
MICROVOLUTION / W de Paula - Microvolution. A Evolução da Informática - microvolution@hotmail.com - www.mvinfo.wmx.net.br
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!