Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20.6
Guia Digitação
|
List box tipo array | List box tipo seleção | List box tipo Coleção/seleção entidade | |
List box | Array booleano | Número (não se utiliza) | Coleção ou seleção de entidade |
Coluna de list box | Array texto | Digitação dinâmica | Digitação dinâmica |
Cabeçalho | Númerico | Númerico | Númerico |
Pie | Digitação dinâmica | Digitação dinâmica | Digitação dinâmica |
Array de controle de linhas | Array booleano (Array Inteiro longo aceito) | - | - |
Estilos | Array inteiro longo | Inteiro longo | Inteiro longo |
Cores de fonte | Array inteiro longo | Inteiro longo | Inteiro longo |
Cores de fundo | Array inteiro longo | Inteiro longo | Inteiro longo |
Quando você usa ponteiros em seu banco de dados, você aproveitar uma ferramenta 4D poderosa e versátil. O compilador preserva todas as vantagens de ponteiros.
Um ponteiro pode apontar para variáveis de tipos diferentes de dados. Não crie um conflito através da atribuição de diferentes tipos de dados a uma variável. Tenha cuidado para não alterar o tipo de dados de uma variável a que um ponteiro se refere.
Aqui está um exemplo do problema:
Variável:=5.3
Ponteiro:=->Variável
Ponteiro->:=6.4
Ponteiro->:=False
Neste caso, o ponteiro dereferenced é uma variável real. Ao atribuir-lhe um valor booleano, você pode criar um conflito de tipo de dados.
Se você precisar usar ponteiros para fins diferentes no mesmo método, certifique-se que os ponteiros são definidos:
Um ponteiro é sempre definido em relação ao objeto a que se refere. É por isso que o compilador não pode detectar conflitos de tipo de dados criado por ponteiros. Em caso de conflito, você não receberá nenhuma mensagem de erro quando você estiver na fase de digitação ou em fase de compilação.
Isso não significa que o compilador não tenha como detectar conflitos envolvendo ponteiros. O compilador pode verificar o uso de ponteiros desde que a opção Range Checking não esteja desmarcada.
Durante a compilação, o compilador analisa as definições dos comandos de plug-in usados no banco de dados, ou seja, o número e tipo de parâmetros desses comandos. Não há perigo de confusão ao nível de digitação se as chamadas são consistentes com a declaração do método.
Verifique se o plug-ins estão instalados na pasta de plugins, em um dos locais autorizados pela 4D: ao lado da estrutura de arquivo de banco de dados ou ao lado do aplicativo executável (Windows) / no pacote de software (Mac OS). Para obter mais informações, consulte Instalar plugins ou componentes..
O compilador não duplica esses arquivos, mas analisa-os para determinar a declaração correta de suas rotinas.
Se o plug-ins estão localizados em outros lugares, o compilador irá pedir para localizá-los durante a digitação, através de uma caixa de diálogo Abrir arquivo.
Alguns plug-ins, por exemplo, 4D Write, executam comandos que implicitamente chamam comandos 4D.
Tomemos o exemplo de 4D Write. A sintaxe para do comando é:
WR ON EVENT(area;evento;eventoMetodo)
O último parâmetro é o nome do método que você criou em 4D. Este método é chamado pelo 4D Write cada vez que o evento é recebido. Ele automaticamente recebe os seguintes parâmetros:
Parâmetros | Tipo | Descrição |
$0 | Inteiro longo | Retorno de função |
$1 | Inteiro longo | Área 4D Write |
$2 | Inteiro longo | Tecla Shift. |
$3 | Inteiro longo | Tecla Alt (Windows); Tecla Opção (Mac OS) |
$4 | Inteiro longo | Tecla Ctrl (Windows), Tecla Comando (Mac OS) |
$5 | Inteiro longo | Tipo de evento |
$6 | Inteiro longo | Valor que depende do parâmetro evento |
Para o compilador levar em consideração esses parâmetros, você deve se certificar de que eles tenham sido digitados, ou por uma diretiva de compilador, ou por seu uso no método. Se eles têm sido utilizados para fins processuais, o uso tem de ser explícito o bastante para ser capaz de deduzir o tipo com clareza.
4D pode ser usado para criar e trabalhar com componentes. Um componente 4D é um conjunto de objetos 4D que representa uma ou mais funcionalidades e agrupados em um arquivo de estrutura (o chamado banco de dados do array), que pode ser instalado em bancos de dados diferentes (chamados de bases de dados do host).
Um banco de dados host executando no modo interpretado pode usar componentes interpretados ou compilados indiferentemente. É possível instalar os dois componentes interpretados e compilados no banco de dados de um mesmo host. Por outro lado, um banco de dados do host em execução no modo compilado não pode usar componentes interpretados. Neste caso, apenas componentes compilados podem ser usados.
Um banco de dados host interpretado contendo componentes interpretados podem ser compilados se não chamar quaisquer métodos do componente interpretado. Se este não for o caso, uma caixa de diálogo de aviso aparece quando você tenta compilar a aplicação e a compilação não é possível.
Um conflito de nomes pode ocorrer quando um método de projeto compartilhado do componente tem o mesmo nome que um método de projeto do banco de dados do host. Neste caso, quando o código é executado no contexto do banco de dados do host, o método do banco de dados do host é chamado. Isso significa que é possível "mascarar" o método do componente com um método personalizado (por exemplo, para obter uma funcionalidade diferente). Quando o código é executado no contexto do componente, o método do componente é chamado. Esta máscara será indicada por um aviso no caso da elaboração do banco de dados do host.
Se dois componentes compartilham métodos com o mesmo nome, um erro é gerado quando o banco de dados do host é compilado.
Para obter mais informações sobre componentes, consulte o manual de referência de desenho.
A manipulação de variáveis locais segue todas as regras que já foram indicadas. Tal como acontece com todas as outras variáveis, seus tipos de dados não pode ser alterado quando o método é executado. Nesta seção, vamos examinar dois casos que podem levar a conflitos de tipo de dados:
Uma variável não pode ser digitada novamente. No entanto, é possível usar um ponteiro para se referir a variáveis de diferentes tipos de dados.
Como exemplo, considere uma função que retorna o tamanho da memória de uma matriz unidimensional. Ao todo, mas dois casos, o resultado é um Real; para arrays de Texto e arrays de Imagem, o tamanho da memória depende dos valores que não podem ser expressos em termos numéricos (veja a seção Arrays e Memória).
Para Texto e array de Imagens, o resultado é retornado como uma seqüência de caracteres. Esta função requer um parâmetro: um ponteiro para o array cujo tamanho de memória que queremos saber.
Existem dois métodos para realizar esta operação:
$Tamaño:=Size of array($1->)
$Tipo:=Type($1->)
Case of
:($Tipo=Real array)
$0:=8+($Size*10) ` $0 é um Real
:($Tipo=Integer array)
$0:=8+($Tamanho*2)
:($Tipo=LongInt array)
$0:=8+($Tamanho*4)
:($Tipo=Date array)
$0:=8+($Tamanho*6)
:($Tipo=Text array)
$0:=String(8+($Tamanho*4))+("+Soma dos comprimentos dos textos") ` $0 é um Texto
:($Tipo=Picture array)
$0:=String(8+($Tamanho*4))+("+Soma dos tamanhos das imagens") ` $0 é um Texto
:($Tipo=Pointer array)
$0:=8+($Tamanho*16)
:($Tipo=Boolean array)
$0:=8+($Tamanho/8)
End case
No método anterior, o tipo de dados $0 muda de acordo com o valor de $1 e, portanto, não é compatível com o compilador.
$Tamaño:=Size of array($1->)
$Tipo:=Type($1->)
VarNum:=0
Case of
:($Tipo=Real array)
VarNum:=8+($Tamanho*10) ` VarNum é um Real
:($Tipo=Integer array)
VarNum:=8+($Tamanho*2)
:($Tipo=LongInt array)
VarNum:=8+($Tamanho*4)
:($Tipo=Date array)
VarNum:=8+($Tamanho*6)
:($Tipo=Text array)
VarText:=String(8+($Tamanho*4))+("+Soma dos comprimentos dos text
os"
:($Tipo=Picture array)
VarText:=String(8+($Tamanho*4))+("+Suma de tamanhos de imagens")
:($Tipo=Pointer array)
VarNum:=8+($Tamanho*16)
:($Tipo=Boolean array)
VarNum:=8+($Tamanho/8)
End case
If(VarNum#0)
$0:=->VarNum
Else
$0:=->VarText
End if
Aqui estão as principais diferenças entre as duas funções:
• No primeiro caso, o resultado da função é a variável esperada,
• No segundo caso, o resultado da função é um ponteiro para essa variável. Você simplesmente volta a referenciar o resultado.
O compilador gera o poder ea versatilidade de indireção parâmetro. No modo interpretado, 4D oferece-lhe uma mão com os números e tipos de dados dos parâmetros. Você mantém essa liberdade no modo compilado, desde que você não introduza conflitos de tipo de dados e que você não use mais parâmetros que você passou no método de chamada.
Para evitar possíveis conflitos, os parâmetros abordados por engano devem ser todos do mesmo tipo de dados.
Este engano é melhor gerido, se você respeitar a seguinte convenção: se apenas alguns dos parâmetros são abordados por engano, eles devem ser passados após o outro.
Dentro do método, um endereço de indireção é formatado : ${$i}, onde $ i é uma variável numérica. ${$i} é chamado de parâmetro genérico.
Como exemplo, considere uma função que agrega valores e retorna a soma formatada de acordo com um formato que é passado como um parâmetro. Cada vez que este método é chamado, o número de valores a serem adicionados pode variar. Temos de passar os valores como parâmetros para o método e o formato em forma de uma cadeia de caracteres. O número de valores pode variar de chamada para chamada.
Essa função é chamada da seguinte forma:
Resultado:=MinhaSoma("##0.00";125,2;33,5;24)
Neste caso, o método de chamada receberá a string "182,70", que é a soma dos números, formatada como especificado. Os parâmetros da função devem ser passados na ordem correta: primeiro o formato e depois os valores.
Aqui está a função, chamada MySum:
$Sum:=0
For($i;2;Count parameters)
$Sum:=$Sum+${$i}
End for
$0:=String($Sum;$1)
Esta função pode agora ser chamada de várias maneiras:
Resultado:=MySum("##0.00";125,2;33,5;24)
Resultado:=MySum("000";1;18;4;23;17)
Tal como acontece com outras variáveis locais, não é necessário declarar parâmetros genéricos por diretiva do compilador. Quando necessário (nos casos de ambiguidade ou de otimização), é feita usando a seguinte sintaxe:
C_INTEGER(${4})
Este comando significa que todos os parâmetros a partir do quarto (incluído) serão abordados com indireção e serão do tipo de dados Integer. $1, $2 e $3 podem ser de qualquer tipo de dados. No entanto, se você usar $2 por indireção, o tipo de dados utilizado será do tipo genérico. Assim, serão do tipo de dados Integer, mesmo que para você fosse, por exemplo, do tipo de dados real.
Nota: O compilador usa este comando na fase de digitação. O número da declaração deve ser uma constante e não uma variável.
Algumas variáveis 4D e constantes são atribuídas a um tipo de dados e a uma identidade com o compilador. Portanto, você não pode criar uma nova variável, método, função ou plug-in de comando usando qualquer uma dessas variáveis ou nomes de constantes. Você pode testar seus valores e utilizá-los como você faz em modo interpretado.
Aqui está uma lista completa de Variáveis sistema 4D com os seus tipos de dados.
Variável | Tipo |
OK | Inteiro longo |
Document | Texto |
FldDelimit | Inteiro longo |
RecDelimit | Inteiro longo |
Error | Inteiro longo |
Error method | Texto |
Error line | Inteiro longo |
MouseDown | Inteiro longo |
KeyCode | Inteiro longo |
Modifiers | Inteiro longo |
MouseX | Inteiro longo |
MouseY | Inteiro longo |
MouseProc | Inteiro longo |
Quando você cria uma coluna calculada em um relatório, 4D cria automaticamente uma variável C1 para a primeira, C2 primeiro para a segunda, C3 e assim por diante. Isso é feito de forma transparente.
Se você usar essas variáveis em métodos, tenha em mente que, assim como outras variáveis, C1, C2, ... Cn não pode ser digitada novamente.
Uma lista completa das constantes pré-definidas em 4D pode ser encontrada usando a Lista de temas constantes. Constantes 4D também são exibidas no Explorer em modo Desenho.
Detalhes de sintaxe
Dicas de otimização
Mensagens de Erro
Usar Diretivas de Compilador
Variáveis sistema
Produto: 4D
Tema: Compilador
Modificado: 4D v15 R4
Manual de linguagem 4D ( 4D v20)
Manual de linguagem 4D ( 4D v20.1)
Manual de linguagem 4D ( 4D v20.2)
Manual de linguagem 4D ( 4D v20.3)
Manual de linguagem 4D ( 4D v20.4)
Manual de linguagem 4D ( 4D v20.5)
Manual de linguagem 4D ( 4D v20.6)