Mais um Help por favor

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

Mais um Help por favor

Mensagem por managercorp »

Olhei esta funcao no NG e ela poderia me ser muito utel
so que no lugar do "primeiro","segundo","terceiro","quarto"
como tem no exemplo abaixo, eu preciso que estes dados venham de
um dbf, ex: como se eu tivesse um dbf chamado tabelas quem tem um campo descricao, onde tem 4 registros ou mais e neles tem as opcoes de
primeiro
terceiro
mane
maria
etc....
entao onde a variavel alist abaixo seria os dados deste dbf


#include "Inkey.ch"
//
LOCAL cVar1 := SPACE(10), nVar := 2500, cVar2 := SPACE(10)
CLS
@ 09, 10 GET cVar1
@ 10, 10 GET cVar2 WHEN PickList()
@ 11, 10 GET nVar
READ
RETURN
//

FUNCTION PickList
STATIC aList := { "Primeiro", "Segundo", "Terceiro", "Quarto" }
LOCAL cScreen, nChoice, nKey := LASTKEY()
cScreen := SAVESCREEN(10, 10, 14, 22)
@ 10, 10 TO 14, 22 DOUBLE
IF (nChoice := ACHOICE(11, 11, 13, 21, aList)) != 0
KEYBOARD CHR(K_CTL_Y) + aList[nChoice] + CHR(nKey)
ENDIF
RESTSCREEN(10, 10, 14, 22, cScreen)
RETURN .T.
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Visitante

Mensagem por Visitante »

Simples manager...

Basta primeiro você declarar aList vazio, ou seja:
aList:={}

Depois percorre seu banco de dados preenchendo aList:
Do while !eof()
AADD(aList, nomedocampo)
skip
enddo

Pronto. aList terá tantos itens quantos registros tiver no BD e o conteúdo desses itens será o campo "nomedocampo".

Um Clip Abraço
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

Mlizander, mais uma duvida

Mensagem por managercorp »

Ok, Agradeco sua ajuda foi muito valida
so tenho mais uma duvida sobre o achoice
abri o arquivo como voce falou
e a funcao abriu as opcoes ok
ex:
EM - Empresas
OP - Operadoras
AG - Agencias
PA - Particular
entao a pessoa navega pelas setas e escolhe a opcao desejada
entao o keyboard vai e joga no get, ate aqui tudo ok
so que estou em uma alteracao de cadastro e no cadastro que estou alterando esta opcao ja era AG - Agencias, e como estou alterando. as
opcoes do achoice abre todos os itens acima do exemplo.
Gostaria que o cursor ja comece no item AG que era o que estava antes no cadastro e vamos supor que nao gostaria de alterar este campo, entao o cursor ja deve aparecer em cima do AG e nao no primeiro EM - Empresas.
o usuario vai teclar so enter e pronto continua como antes, do jeito que esta se o usuario teclar enter, a funcao troca o AG pelo EM que e o primeiro da lista.
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Visitante

Mensagem por Visitante »

Amigo...

A função achoice tem a seguinte sintaxe:
ACHOICE(nTop, nLeft,nBottom,nRight, acMenuItens, <alSelectableItens | lSelectableItens>, cuserfunction, nInitialItem,nWindowRow) -> nPosition

Ou seja:

nTop,nLeft,nBottom,nRight -> coordenadas que definem a janela achoice
acMenuItens -> Array com os itens do Menu Achoice
alSelectableItens ou lSelectableItens - Array (ou variável) que define os itens clicáveis e os não disponíveis para clicar no achoice
cUserFunction - Função a ser executada quando se pressiona uma tecla não "reconhecida" no uso do achoice
nInitialItem =>AQUI ESTÁ O QUE VOCÊ QUER!!!!! ITEM INICIAL DO ACHOICE (OU SEJA O QUE ESTARÁ PRÉ-SELECIONADO)

O que você precisará é apenas descobrir (através do ASCAN) qual o índice do Array usado no Achoice que corresponda a opção que já estava anteriormente e mencionar o número desse píndice em nInitialItem.

Um Clip Abraço
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

Desculpe..

Mensagem por managercorp »

Desculpe a minha ignorancia e a minha pentelhacao.

LOCAL cScreen, nChoice, nKey := LASTKEY()
save scree to telascr
set color to w/r
PL=ROW()-1
PC=COL()
@ PL,PC TO PL+5,PC+18 DOUBLE
IF (nChoice := ACHOICE(PL+1,PC+1,PL+4,PC+17, aList)) != 0
KEYBOARD aList[nChoice] + CHR(nKey)

Vamos supor que o item de onde o cursor deva comecar seja no 3
onde entra a sua emplicacao sobre nInitialItem.
voce pode me dar um exemplo em cima desse meu exemplo acima.
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Visitante

Mensagem por Visitante »

LOCAL cScreen, nChoice, nKey := LASTKEY()
save scree to telascr
set color to w/r
PL=ROW()-1
PC=COL()
@ PL,PC TO PL+5,PC+18 DOUBLE
IF (nChoice := ACHOICE(PL+1,PC+1,PL+4,PC+17, aList,,,3)) != 0
KEYBOARD aList[nChoice] + CHR(nKey)

Repare Abaixo que nInitialItem é o 8º argumento do Achoice:
ACHOICE(nTop, nLeft,nBottom,nRight, acMenuItens, <alSelectableItens | lSelectableItens>, cuserfunction, nInitialItem,nWindowRow)

Com relação ao ASCAN, creio que você entendeu, certo?

Um Clip Abraço
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

BLZ

Mensagem por managercorp »

OK cara, valeu
menos uma pendencia.
Trabalho com 31 hoteis, vindo a pernambuco, me procure que deserolo hotel de cortesia e todo o apoio necessario.

O B R I G A D O .....
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Responder