Página 1 de 1

posicao do dbedit??

Enviado: 26 Mai 2010 15:40
por ReinaldoFreitas
Ola, como faco para saber onde esta o cursor no dbedit linha colinha campo??

ex.

tenho uma consulta com os totais de duplicatas a vencer, vencidas, etc..

quando o usuario teclar enter em um valor devera aparecer todas as duplicatas que geraram esse valor, para isso tenho um dbf temporario que guarda essas duplis, mas tenho que saber em que posicao foi dado enter para mostrar o mes certo...

Obrigado...

posicao do dbedit??

Enviado: 26 Mai 2010 16:48
por Pablo César
Utilize com o 7º parâmetro (nome da função) você poderá fazer a suas implementações alí:

Código: Selecionar todos

Texto:=MEMOEDIT(Texto,nLin1,nCol1,nLin2,nCol2,.T.,"USERFUN",46)

FUNCTION USERFUN(MODO,LINHA,COLUNA)
PUBLIC INS_MUDA,MODET
IF MODO=ME_INIT
   INS_MUDA=.F.
   MODET=.F.
   KSETINS(.F.)
   SETCURSOR(1)
ENDIF
IF MODO=0
   @ 21,40 SAY " Linha: "+STRZERO(LINHA,3,0)+" " COLOR CONTECOR[12]
   @ 21,53 SAY " Coluna: "+STRZERO(COLUNA,3,0)+" " COLOR CONTECOR[12]
   QTECLA:=LASTKEY()
   IF !(QTECLA=27)
      IF QTECLA=7 .OR. QTECLA=8 .OR. QTECLA=9 .OR. QTECLA=13 .OR. QTECLA=127 .OR. (QTECLA>32 .AND. QTECLA<255)
         MODET=.T.
      ENDIF
   ENDIF
ENDIF
../..
RETURN 0
Tem um bom exemplode manipulação de substring dentro do MEMOEDIT, aqui: https://pctoledo.org/forum/viewtopic.php?t=5521

Re: posicao do dbedit??

Enviado: 27 Mai 2010 00:48
por alxsts
Olá!
ReinaldoFreitas escreveu:mas tenho que saber em que posicao foi dado enter para mostrar o mes certo...
A DBEdit() se comporta diferentemente, dependendo se o programador implementa ou não uma função para controle das teclagens. Se a função de controle não for passada, a DBEdit() se encerra quando o usuário tecla Enter ou Esc. Caso a função seja passada, a tecla Enter deverá ser tratada dentro da função.

No teu caso, creio que a informação do mes que você precisa está na linha ativa da DBEdit(). Assim sendo, não precisaria saber em que coluna o usuário está posicionado.

Em ambos os casos, no momento em que Enter é pressionado, a informação que você precisa estará no registro atual do DBF que está por trás da DBEdit().

Se realmente precisar saber em que coluna o usuário está posicionado, você terá obrigatóriamente que especificar uma função de usuário para a DBEdit() pois sempre que a DBEdit() executa a função, passa automaticamente dois parâmetros: o modo atual da função e a coluna onde o cursor está posicionado (ambos numéricos).

Re: posicao do dbedit??

Enviado: 27 Mai 2010 14:33
por Pablo César
ihhh viajei.... confundí dbedit com memoedit... (desculpem, ontem eu tava com a cabeça sei lá onde..)

Com Tbrowse é mais fácil de implemenatr outrs funções do que dbedit...

Re: posicao do dbedit??

Enviado: 28 Mai 2010 18:47
por gilsonpaulo
Olha, não se é bem isto, mas uso o dbedit() assim:

Atente para o "SAI31" no dbedit()

Código: Selecionar todos

PRIVATE vet1[8],vet2[8],vet3[8],tmat:=SPACE(8),tdesc:=0.00,tip:=SPACE(1),ent:=SPACE(1)
PRIVATE vetf1[10],vetf2[10],vetf3[10]
PRIVATE vetx1[10],vetx3[10]
PRIVATE cliaux:=0,tcli:=SPACE(4),tpago:=0.00,treceb:=0.00,impret:=SPACE(1),impime:=SPACE(1)
PRIVATE tnom:=SPACE(38),tend:=SPACE(39),tc1:=SPACE(38),tc2:=SPACE(38),tc3:=SPACE(38)
PRIVATE tc4:=SPACE(38),trota:=SPACE(30),tref:=SPACE(30),ttel:=SPACE(34)

SELECT TEMP
SET RELATION TO MATVEN INTO MER
GO TOP


DO WHILE .T.

	SET KEY -1 TO GUARDAR()
	SET KEY -2 TO VOLTAR()

	trota = SPACE(30)

	doc = SPACE(5)

	CALL TVEN

	SET COLOR TO W/N,W/N
	@ 01,63 SAY funcionario


	SELECT TEMP
	vet1[1] = "MATVEN"
	vet1[2] = "MATNOM"
	vet1[3] = "QTDVEN"
	vet1[4] = "UNIVEN"
	vet1[5] = "TOTVEN"
	vet1[6] = "ENTVEN"
	vet1[7] = "MATNOM1"

	vet2[1] = "@R AA-99-9999"
	vet2[2] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
	vet2[3] = "99999.99"
	vet2[4] = "99999.99"
	vet2[5] = "999999.99"
	vet2[6] = "X"
	vet2[7] = "Compl"

	vet3[1] = "Codigo"
	vet3[2] = "Descricao"
	vet3[3] = "Quantidade"
	vet3[4] = "Unitario"
	vet3[5] = "Total"
	vet3[6] = "Entrega"
	vet3[7] = "Complemento"

	SETCOLOR("W/B,B/W")
	DBEDIT(04,02,18,77,vet1,"SAI31","",vet3)

	EXIT

ENDDO

SET KEY -1 TO
SET KEY -2 TO

SELECT 1
USE
SELECT 2
USE
SELECT 3
USE
SELECT 4
USE
SELECT 5
USE
SELECT 6
USE
SELECT 7
USE
SELECT 8
USE
SELECT 9
USE
SELECT 10
USE
SELECT 11
USE
SELECT 12
USE
SELECT 13
USE
CLOSE ALL
RETURN
//==================================================

FUNCTION SAI31()

Mensagem( "  ")


IF LASTKEY() = 105 .OR. LASTKEY() = 73
	Inc31()
	RETURN(2)
ELSEIF LASTKEY() = 69 .OR. LASTKEY() = 101
	IF .NOT. EMPTY(MATVEN)
	   IF Confirma( "S03D" )
			SELECT TEMP
			DELETE
			PACK
		ENDIF
		RETURN(2)
	ENDIF
ELSEIF LASTKEY()= 65 .OR. LASTKEY() = 97
	IF .NOT. EMPTY(MATVEN)
		Alt31()
		RETURN(2)
	ENDIF
ELSEIF LASTKEY()= 67 .OR. LASTKEY() = 99
	COM31()
	RETURN(2)
ELSEIF LASTKEY()= -3
	ORC31()
	RETURN(2)
ELSEIF LASTKEY()= -4
	Orcaixa()
//	Atupre()
	RETURN(2)
ELSEIF LASTKEY()= -5
	Voltic()
	RETURN(2)
ELSEIF LASTKEY()= -6
	Anula()
	RETURN(2)
ELSEIF LASTKEY()= 75 .OR. LASTKEY() = 107
	CASA31()
	RETURN(2)
ELSEIF LASTKEY()= 90 .OR. LASTKEY() = 122
	IF Confirma("Posso zerar a venda??? S/N")
		SELECT TEMP
		ZAP
	ENDIF
	RETURN(2)
ELSEIF LASTKEY()= 70 .OR. LASTKEY() = 102
	IF .NOT. EMPTY(MATVEN)
		FE31()
                SELECT TEMP
                ZAP
                PACK
	ENDIF
	SELECT TEMP
	RETURN(2)
ELSEIF LASTKEY()= 84 .OR. LASTKEY() = 116
	IF .NOT. EMPTY(MATVEN)
		Altent()
	ENDIF
	SELECT TEMP
	RETURN(2)
ELSEIF LASTKEY()= 80 .OR. LASTKEY() = 112
	Par31()
	RETURN(2)
ELSEIF LASTKEY()= 27
	IF Confirma("Deseja Sair do Programa??S/N")
		SELECT TEMP
		ZAP
		RETURN(0)
	ENDIF
ENDIF

IF pcusto = "S"
        @ 23,60 SAY MER->PRECST PICTURE "99999.99" COLOR "W/R"
ENDIF

SET KEY -1 TO GUARDAR()
SET KEY -2 TO VOLTAR()

SELECT TEMP
return(1)

Re: posicao do dbedit??

Enviado: 29 Mai 2010 10:15
por ANDRIL
Tente desta forma:

Sua linha que chama a função DBEDIT

Código: Selecionar todos

priv ar1[1],ar2[1]
ar1[1]:="nome";ar2[1]:="Cliente"
dbedit(06,02,14,77,ar1,"udf_2","",ar2)
Aqui a função que identifica o que voce precisa.

Código: Selecionar todos

function udf_2
parameters modo, campo
   *--aqui recebe na var T o nome do campo e em T1 o valor do campo
   t:= ar1[campo]
   t1:= &t
   *--aqui recebe a linha e coluna da celula destacada no dbedit
   l1_=row()
   c1_=col()

if  lastkey()=13
   @24,00 clea to 24,79
   @24,00 say  padc("Este é o nome selecionado: "+t1,79)
   inkey(2.0)
   @24,00 clea to 24,79
   return 1
elseif lastkey()=27
   return 0
else
   return 1
endif
Bom, não testei, mais acho que se precisa descobrir o campo, linha e coluna acho que isso deve resolver seu problema.

Ate+