posicao do dbedit??

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ReinaldoFreitas
Usuário Nível 2
Usuário Nível 2
Mensagens: 97
Registrado em: 02 Jul 2005 15:39

posicao do dbedit??

Mensagem 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...
Iniciante em Xharbour / Hwgui
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

posicao do dbedit??

Mensagem 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
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: posicao do dbedit??

Mensagem 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).
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: posicao do dbedit??

Mensagem 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...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: posicao do dbedit??

Mensagem 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)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: posicao do dbedit??

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder