4D v16.3

RESOLVE POINTER

Página Inicial

 
4D v16.3
RESOLVE POINTER

RESOLVE POINTER 


 

RESOLVE POINTER ( umPonteiro ; nomeVar ; numTabela ; numCampo ) 
Parâmetro Tipo   Descrição
umPonteiro  Ponteiro in Ponteiro do qual recuperar o objeto referenciado
nomeVar  String in Nome da variável referenciada ou da string vazia
numTabela  Inteiro longo in Número de tabela referenciada ou elemento array ou 0 ou -1
numCampo  Inteiro longo in Número de campo referenciado ou 0

O comando RESOLVE POINTER recupera a informação do objeto referenciado pela expressão de ponteiro ponteiro e a devolve nos parâmetros nomVar, numTabela, e numCamp.

Dependendo da natureza do objeto referenciado, RESOLVE POINTER devolve os seguintes valores:

Objeto referenciadoParâmetros
nomVarnumTabelanumCamp
Nada (NIL pointer)"" (string vazia)00
VariávelNome da variável-10
ArrayNome do array-10
Elemento de array 2DNome do arraynúmero do elemento coluna0
Tabela"" (string vazia)número da tabela0
Campo"" (string vazia)número da tabelanúmero do campo

Notas:

  • Se o valor que passa em ponteiro não for uma expressão de tipo ponteiro, será gerado um erro de sintaxe.
  • O comando RESOLVE POINTER não funciona com ponteiros a variáveis locais. Na verdade, por definição muitas variáveis locais com o mesmo nome poderiam existir em diferentes lugares, de maneira que não é possível para o comando encontrar a variável correta.

Em um formulário, você cria um grupo de 100 variáveis editáveis chamadas v1, v2... v100. Para fazer isto, você realiza os seguintes passos:

a. Cria uma variável editável que chama v.

b. Define as propriedades do objeto.

c. Associa o seguinte método ao objeto:

 FazerAlgo(Self` FazerAlgo é um método de projeto de seu banco


d. Neste ponto, pode duplicar a variável tantas vezes como seja necessária, ou utilizar a funcionalidade Duplicar sobre matriz no editor de formulários.

e. No método FazerAlgo, é necessário conhecer o índice da variável para a qual se chama o método, escreve:

 RESOLVE POINTER($1;$vsNomVar;$vlNumTabela;$vlNumCampo)
 $vlNomVar:=Num(Substring($vsNomVar;2))

Note que construindo seu formulário desta maneira, você escreve os métodos para as 100 variáveis apenas uma vez; não necessita escrever FazerAlgo (1), FazerAlgo (2)...,FazerAlgo (100).

Por propósitos de depuração, necessita verificar que o segundo parâmetro ($2) de um método é um ponteiro a uma tabela. Ao começo deste método, escreve:

  ` ...
 If(◊DebugOn)
    RESOLVE POINTER($2;$vsNomVar;$vlNumTabela;$vlNumCampo)
    If(Not(($vlNumTabela>0)&($vlNumCampo=0)&($vsNomVar="")))
  ` ATENÇAO: O ponteiro nao é uma referência a uma tabela
       TRACE
       End
    End if
  ` ...

Ver o exemplo do comando DRAG AND DROP PROPERTIES.

Este é um exemplo de ponteiro a um array 2D:

 ARRAY TEXT(atCities;100;50)
 C_POINTER($city)
 atCities{1}{2}:="Rome"
 atCities{1}{5}:="Paris"
 atCities{2}{6}:="New York"
  // ...outros valores
 $city:=->atCities{1}{5}
 RESOLVE POINTER($city;$var;$rowNum;$colNum)
  //$var="atCities"
  //$rowNum="1"
  //$colNum="5"



Ver também 

DRAG AND DROP PROPERTIES
Field
Get pointer
Is a variable
Nil
Table

 
PROPRIEDADES 

Produto: 4D
Tema: Linguagem
Número 394

This command can be run in preemptive processes

 
HISTÓRIA 

Criado por: 4D v6
Modificado: 4D v15

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)