Manual de Desenho 4D Introdução Gestão de arquivos 4D Preferências Propriedades do Banco Explorador Explorador de Execução Procurar e substituir no ambiente Desenho Arrastar e Soltar Objetos Criar uma estrutura de banco de dados Gerenciar Formulários Criar formulários Trabalhar com objetos ativos Propriedades de objetos ativos List boxes Subformulários e widgets Formulários de saída e relatórios Formulários de usuário Editar Métodos Usuários e grupos Menus e barras de menus Biblioteca de imagens Dicas de ajuda Listas Folhas de estilo Filtros e formatos Explorador de Recursos Gerenciar registros Procurar registros Ordenar registros Editor de fórmulas Relatórios rápidos Editor etiquetas Exportar e importar dados Publicar ou utilizar serviços Web Backup e restauração do banco de dados Centro de segurança e manutenção Compilação Finalizar e distribuir aplicativos Desenvolver e instalar componentes 4D Apêndices -1- Introdução Bem-vindo Ambientes de trabalho Servidores integrados Novas características de 4D v12 Principais novidades de 4D v13 Principais novas funcionalidades de 4D v14 -2- Bem-vindo 4D é uma poderosa aplicação de banco de dados relacional, um motor SQL, uma ferramenta completa de desenvolvimento RAD multi-plataforma e um servidor web dinâmico. Você pode utilizar 4D para administrar seus próprios dados ou para desenvolver aplicações personalizadas para diferentes tipos de tarefas de administração de banco de dados. É possível, por exemplo: Criar uma estrutura de banco de dados de tabelas e campos, Construir formulários para introduzir, modificar e visualizar registros, Buscar e ordenar registros, Criar relatórios e etiquetas com informações do seu banco de dados, Importar e exportar dados entre banco de dados 4D e outras aplicações, Publicar seu banco de dados na World Wide Web. Com 4D, você pode melhorar as tarefas mais comuns de administração de dados graças às seguintes características: Um poderoso assistente de formulários que permite criar formulários e relatórios sofisticados em poucos passos, Um sistema de senhas para proteger dados privados que permite diferenciar os níveis de acesso, A possibilidade de criar aplicações personalizadas com seus próprios menus, caixas de diálogo, barra de ferramentas e botões; estas aplicações podem ser compiladas e distribuídas a outros usuários, A possibilidade de utilizar em seu banco de dados inumeráveis Serviços Web publicados na Web, Uma linguagem de programação altamente funcional, que permite incorporar comandos ou funções escritas em outras linguagens. Um motor SQL dentro dos melhores padrões permite criar tabelas, campos, manipular e buscar os dados do banco. Uma janela centralizada de administração e controle da aplicação.Os usuários principiantes podem criar rapidamente banco de dados e começar a administrar seus dados. Os usuários iniciantes podem criar rapidamente bancos de dados e começar a administrar os seus dados. Os usuários com um pouco mais de experiência podem personalizar seus bancos de dados com as ferramentas de desenvolvimento da 4D. Os usuários experientes podem utilizar a poderosa linguagem de programação da 4D ou SQL, para adicionar funcionalidades sofisticadas ao seu banco de dados, tal como a transferência de arquivos ou a publicação na Web. -3- Ambientes de trabalho 4D pode ser utilizado em dois ambientes diferentes: o ambiente Desenho e o ambiente Aplicação. O ambiente Desenho O ambiente Desenho é utilizado para planejar, desenvolver e testar os seus bancos de dados. Todos os aspectos do design de seu banco de dados estão no ambiente Desenho. O ambiente Desenho é utilizado para criar tabelas e campos; definir relações entre as tabelas, criar formulários para a entrada de dados, visualização e impressão de dados, implementar um sistema de acesso por senhas, criar menus personalizados ou associar métodos aos objetos do banco de dados. Por exemplo, se você quer fazer um acompanhamento da informação de cada um dos empregados de sua empresa. No ambiente Desenho, você pode criar uma tabela [Empregados] e adicionar os campos necessários para armazenar dados dos empregados tais como nome, cargo, data de ingresso e salário. Você também pode adicionar uma tabela [Departamentos] que contenha a informação de cada um dos departamentos em sua empresa. Logo, poderia criar uma relação entre estas duas tabelas que lhe permita determinar em que departamento trabalha um empregado e quais empregados trabalham em cada departamento. O ambiente Desenho lhe dá acesso a várias janelas e editores permitindo que se realizem operações padronizadas nos dados de seu banco. Você pode introduzir dados, procurar um registro em particular, importar e exportar dados, imprimir relatórios ou gerar etiquetas para um envio de correio. Você pode testar o funcionamento do seu banco de dados, por exemplo, introduzindo ou importando registros ou executando seus métodos. Os editores são os mesmo que estão disponíveis para os usuários no ambiente Aplicação. O ambiente Desenho lhe permite realizar as seguintes operações: Criar as tabelas e campos que armazenarão os dados, Definir relações entre os campos, Criar formulários para a entrada, visualização, impressão ou publicação de dados, Criar listas de seleção para facilitar e controlar a entrada de dados, Escrever e executar métodos para automatizar operações em seu banco de dados, Criar menus personalizados e associá-los com métodos ou ações automáticas, Criar e administrar múltiplos processos, permitindo-lhe realizar várias operações simultaneamente no banco de dados, Definir um sistema de senhas para controlar o acesso à informação, Lançar um servidor web ou um servidor SQL com o propósito de usar os dados através de aplicaçoes externas, Chamar serviços web e publicar métodos como serviços web, Compilar o banco de dados para acelerar sua execução, Combinar o banco de dados com o motor de 4D para gerar aplicações autônomas. Introduzir e modificar dados, Visualizar e imprimir dados, Buscar e ordenar registros, Criar relatórios, etiquetas e gráficos, Importar e exportar dados, Trabalhar com todos os plug-ins 4D instalados na base. O ambiente Aplicação O ambiente Aplicação é o ambiente que você utiliza para executar uma aplicação personalizada – uma aplicação que utiliza 4D mas que tem seu próprio sistema de menus e sua própria interface. Este é o ambiente no qual geralmente são distribuídas as aplicações criadas no ambiente Desenho. Para acessar desde o ambiente Desenho, só deve selecionar o comando Testar a Aplicação no menu Executar. Nota O ambiente Aplicação só pode ser utilizado se foi criado pelo menos um menu utilizando o editor de barra de menus. Por padrão, 4D cria uma barra de menu padrão. É possível fechar automaticamente todas as janelas do ambiente Desenho ao passar ao ambiente Aplicação (ver Sair do ambiente Desenho ao passar ao ambiente Aplicação). -4- No ambiente Aplicação, você controla todo o funcionamento da aplicação, dos menus e formulários que você utiliza, até os métodos usados para validar, processar e visualizar os dados. Você é responsável por definir os comandos de menus e associar os métodos ou ações automáticas que administram tarefas básicas tais como a entrada e a edição de dados, as consultas, a ordenação e os relatórios. Você pode utilizar alguns ou todos os editores padrões oferecidos por 4D (ordenar por, etiquetas, etc.) ou criar suas próprias telas e editores. O ambiente Aplicação pode ser completamente diferente para cada aplicação que você crie. Desde o ponto de vista do usuário, o ambiente Aplicação é uma aplicação completa que lida com um tipo específico de gestão de informaçoes. A barra de menus gerada por 4D inclui um menu Ambiente permitindo-lhe “Voltar ao modo Desenho.” Quando os dois modos estão abertos ao mesmo tempo, você pode alterar o ambiente clicando em suas respectivas janelas. Ao clicar em uma janela, 4D coloca esta janela no primeiro plano e seleciona esse como o ambiente ativo. -5- Servidores integrados 4D tem três servidores integrados: um servidor de dados e de aplicação (4D Server), um servidor web y um servidor SQL. Em geral a administração desses servidores é muito simples e só necessita um mínimo de parâmetros. Existem comandos de administração que permitem controlar sua execução. Note que para ativar esses servidores, é necessário possuir as licenças apropriadas. A implementação e administração desses servidores é tratada nos seguintes manuais: * Servidor de dados e de aplicação: manual 4D Server, seção SET ENTERABLE * Servidor web 4D: manual Linguagem, seção Configuração web server e gestão de conexão * Servidor SQL 4D: manual 4D - Referencia SQL, seção Configuração do servidor SQL de 4D -6- Novas características de 4D v12 Totalmente orientado às tecnologias mais abertas e utilizadas, cheio de novas características destinadas a aumentar a produtividade e a criatividade dos desenvolvedores, 4D v12 é um novo grande passo na evolução da linha de produtos 4D. Foram integradas numerosas funções muito pedidas pelos desenvolvedores da comunidade 4D, tanto ao nível de arquitetura, do workshop de desenvolvimento, assim como também a respeito da linguagem; novo editor de código, otimização das funções de buscar e substituir, possibilidade de se executar scripts PHP, gestão de números UUID, gestão de metadados nas imagens, melhora dos comandos de gestão das propriedades dos objetos e suporte estendido de XML e SVG. A nova possibilidade de instalar componentes na aplicação 4D permite ter todos eles à sua disposição de forma automática em todos os seus bancos de dados. Além disso, o mecanismo dos bancos de dados externos SQL permite aos componentes criar e utilizar as tabelas e campos. As funções de impressão foram enriquecidas com o novo comando PRINT OBJECT, assim como também com a possibilidade de imprimir list boxes e o suporte estendido das impressões PDF. Os novos objetos de formulários e widgets aceleram a criação de interfaces modernas e sofisticadas: steppers, textos com estilos, selecionadores de data (datepicker) ou de hora, área de busca textual, e além disso list boxes hierárquicos também formam parte das novas características. Os subformulários receberam várias melhoras, particularmente para que ficassem mais fáceis de se usar como componentes. A nova biblioteca de objetos préconfigurados oferece acesso rápido a essas funcionalidades. Finalmente, a linguagem SQL de 4D oferece novas funções, como a replicação e sincronização de dados e a capacidade de abrir e fechar diferentes bases 4D durante a mesma sessão. -7- Principais novidades de 4D v13 4D v13 está totalmente focado na abertura, enquanto mantém uma compatibilidade máxima com as bases existentes: Abertura a outras bases de dados e a Internet graças a um servidor HTTP totalmente reescrito, um cliente HTT completamente novoP, assim como também um driver ODBC de 64 bits, Abertura a outras ferramentas de desenvolvimento com o novo source toolkit, um conjunto de comandos completo (tema ) que oferece um acesso em leitura e escritura a todos os métodos da base, permitindo por exemplo exportar e gerenciar todo seu código em forma de arquivos texto estandarte. Abertura para as interfaces de nova geração com o uso do novo motor gráfico Direct2D e do visualizador de impressão XPS (em Windows), uma seleção de motores de renderização para as áreas web, numerosas novas opções de list box e a possibilidade de indexar os dados dos campos imagem, Por último, 4D v13 também oferece várias novas funcionalidades destinadas a otimizar e melhorar o desenvolvimento de suas aplicações 4D: armazenamento externo de dados volumosos, assim como um novo conjunto de comandos complementários do tema Objetos (Formulários) que pode utilizar para acessar aos objetos de formulário por programação. -8- Principais novas funcionalidades de 4D v14 Enquanto mantém a máxima compatibilidade com as aplicações 4D existentes, 4D v14 se caracteriza por importantes adiantamentos em sua arquitetura, assim como numerosas adições que permiten enriquecer as interfaces de suas aplicações. Modernização do núcleo 4D: internamente, a reescrita do código utilizando as antigas livrarias carbon permite a 4D v14 superar as limitações de rendimento impostas por estas livrarias, e por outra parte, as tecnologias de gerações anteriores, como QuickTime, 4D Chart ou o formato de imagem Pict já não são compatíveis. Os formulários em 4D v14 tem muitas características novas, em particular nos objetos em lista (list box, listas hierárquicas, combo box, etc.), as áreas web (novas passarelas JavaScript, depurador), assim como nas áreas de texto (rotação de textos estáticos, extensão da função de texto com estilo). O seminário de desenvolvimento também melhorou mediante a simplificação do procedimento para a atualização de versões, de novas caixas de diálogo de consulta, ajuda estendida na depuração e o novo On Host Database Event database method. Se implementaram funções específicas no núcleo de 4D para permitir as aplicações Wakanda utilizar diretamente os dados em bases 4D. E finalmente, A linguagem de programação de 4D foi enriquecido com numerosos novos comandos, em particular para permitir um maior controle sobre as propriedades dos objetos, também da as boas vindas a um novo tipo de dados: objetos (ver o comando C_OBJECT) assim como também dados de tipo "JSON" (tema novo). -9- Gestão de arquivos 4D Iniciando o 4D Arquitetura Local/Remota Criar uma nova Aplicação Abrir um Banco de Dados local Conectar a uma aplicação remota Instalar plugins ou componentes Alterar o arquivo de dados Descrição dos Arquivos 4D Conversão de bancos de versões anteriores - 10 - Iniciando o 4D Após ter instalado e registrado sua versão de 4D como se descreve no Guia de instalação, você pode iniciar a aplicação. Para fazer isto, você pode selecionar o ícone da aplicação e escolher o comando Abrir no menu Arquivo do sistema operacional, ou fazer um clique duplo diretamente neste ícone. Aparece o assistente de boas vindas: Esse assistente está destinado principalmente a guiar os novos usuários de 4D assim que o programa inicia. Dá acesso a todas as ações possíveis relativas ao uso e/ou ativação da aplicação. Por padrão, o assistente é exibido cada vez que se inicia 4D. Você pode ocultá-lo selecionando a opção Não exibir essa janela ao iniciar. Você pode fazer com que essa mensagem apareça novamente a qualquer momento selecionando o comando Assistente de boas-vindas no menu Ajuda: Neste caso, ao iniciar 4D, será exibida a caixa de diálogo de abertura de arquivos diretamente, ou a opção selecionada nas Preferências (ver o parágrafo Página Geral). Clique na ação a ser efetuada ou no botão associado afim de obter mais informação. É fechada a janela do assistente, a - 11 - aplicação 4D permanece aberta mas o banco de dados não é aberto. Neste caso, você pode abrir um banco através do Centro de Segurança e Manutenção (ver Visualização em modo manutenção) ou criar/abrir um banco utilizando os comando do menu Arquivo ou a barra de ferramentas. Para maiores informações sobre a criação e abertura de um banco de dados, consulte Criar uma nova Aplicação e Abrir um Banco de Dados local. - 12 - Arquitetura Local/Remota A aplicação 4D permite abrir indiferentemente bancos de dados locais ou remotos, executados por um 4D Server. No primeiro caso, a aplicação trabalha em modo local (single user). No segundo caso, trabalha em modo remoto (cliente/servidor). A seleção do modo de uso se efetua ao se abrir o banco de dados, de acordo com o tipo de banco de dados a abrir: Abrir > Banco de dados: mostra a caixa de diálogo padrão de abertura de documentos, permitindo selecionar um arquivo de base 4D (ver o seguinte parágrafo Abrir um Banco de Dados local). Abrir > Banco de dados remoto: mostra a caixa de diálogo de conexão ao 4D Server, permitindo selecionar um banco de dados publicado. Para maior informação sobre essa caixa de diálogo e a abertura de bancos de dados remotos, consulte o parágrafo Conexão ao banco de dados 4D Server no manual de 4D Server. - 13 - Criar uma nova Aplicação Pode criar uma base de dados vazia ou pode criar uma base de dados a partir da definição de estrutura previamente exportada. A criação de um banco de dados se realiza de maneira idêntica seja a partir da aplicação 4D ou a partir da aplicação 4D Server Criar um Banco de Dados em Branco Você pode criar um banco em branco, ou seja, que não contenha tabelas, campos ou formulários. Esse é o equivalente a uma folha em branco para um banco de dados. Para criar um banco em branco 1. Selecione Novo > Banco de dados... no menu Arquivo ou no menu associado com o botão “Novo” na barra de ferramentas de 4D.Você também pode clicar diretamente no botão “Novo” da barra de ferramentas. Aparece uma caixa de diálogo padrão de salvar arquivos de maneira que é possível escolher o nome e a localização do banco 4D: 2. Introduza o nome do seu banco e clique em Salvar. Você pode escolher todo nome de arquivo que seja aceito pelo seu Sistema Operacional. Atenção: se sua base está destinada para trabalhar em outros sistemas, deve ter em conta as restrições específicas para cada uma delas. Por exemplo, os caracteres "backslash" (\) são aceitos sob OS X mas não são permitidos sob Windows. Ao validar a caixa de diálogo, 4D fecha o banco atual (se existir), cria uma pasta na localização definida (o nome da pasta é o nome do banco) e coloca todos os arquivos necessários para o funcionamento do banco. Para maiores informações sobre a arquitetura dos bancos de dados, consulte o parágrafo Arquitetura do Banco de Dados É exibida a janela da aplicação 4D e o explorador aparece no primeiro plano. Logo é possível, por exemplo, criar formulários de projeto ou exibir o editor de estruturas ou adicionar tabelas, campos, etc. Criar um banco a partir de uma definição de estrutura As definições de estruturas exportadas ao formato XML podem ser utilizadas para criar novos bancos de dados idênticos. Neste caso, a definição da estrutura pode ser considerada como um modelo de estrutura, que é possível duplicar com toda tranqüilidade.Para maiores informações sobre a exportação e importação de definições de estruturas, consulte o parágrafo Exportar e importar definições de estrutura. Uma definição de estrutura XML pode ser utilizada como tal ou pode ser modificada previamente por meio de um editor XML. Este princípio permite contemplar todo tipo de mecanismo utilizado para gerar estruturas por programação. Além do mais, como o formato interno dos arquivos XML de descrição das estruturas 4D é público (ver o parágrafo Formato de uma definição de estrutura 4D, é possível criar este tipo de arquivo a partir de outros ambientes de banco de dados ou toda aplicação de - 14 - desenho para gerar automaticamente bancos de dados 4D. Para criar um banco de dados a partir de uma definição de estrutura: 1. Selecione Novo > Banco de dados a partir de definição de estrutura... no menu Arquivo de 4D ou no menu associado ao botão “Novo” na barra de ferramentas de 4D. Aparece uma caixa de diálogo padrão de abertura de documentos de maneira que é possível especificar o arquivo de descrição a abrir. Você deve selecionar um arquivo de formato XML que respeite a “gramática” das descrições de estrutura 4D (o programa valida o arquivo via a DTD). 2. Selecione um arquivo XML de descrição de estrutura e logo clique em Aceitar. 4D exibe uma caixa de diálogo que pode ser utilizada para escolher o nome e a localização do banco de dados a criar. 3. Escolha o nome e a localização do banco de dados a ser criado e clique no botão Salvar. Se o arquivo XML é válido, 4D fecha o banco atual (se existir) e cria uma nova estrutura baseada na definição de estrutura. É criada uma pasta na localização indicada (o nome da pasta é o nome do banco) que contém todos os campos necessários para o funcionamento do novo banco. Logo é exibida a janela do Explorador. - 15 - Abrir um Banco de Dados local Caixa de diálogo Abrir A caixa de diálogo padrão de abertura permite que você selecione qualquer banco de dados 4D e oferece diversas opções de abertura de arquivos: Para abrir um banco de dados usando a caixa de dialógo Abrir: 1. Selecione Abrir > Banco de dados local... no menu Arquivo de 4D ou Banco de dados local... no menú associado com o botão "Abrir" na barra de ferramentas de 4D. A caixa de diálogo Abrir aparece: 2. Selecione o Banco de Dados que vai abrir. Em Windows, você deve selecionar o arquivo de estrutura do banco (extensão .4DB ou .4DC). você pode selecionar o arquivo de estrutura do banco (extensão .4DB), ou o arquivo de estrutura do banco (extensão .4DB ou .4DC). Para maiores informações sobre a arquitetura dos pacotes, consulte o parágrafo Extensão .4dbase . Também é possível selecionar um arquivo de acesso de tipo .4DLink. Os arquivos deste tipo salvam os parâmetros necessários para a abertura dos bancos (endereço, identificadores...). Os arquivos 4DLink funcionam com os bancos locais e os bancos distantes. Para maiores informações sobre a criação e uso dos arquivos 4DLink, consulte a seção Conexão a um banco de dados 4D Server no manual de referência de 4D Server. 3. Escolha uma opção de abertura (veja o próximo parágrafo) ou clique em Abrir para que o banco de dados seja aberto. Note: É possível utilizar as funções arrastar e soltar ou fazer um clique duplo com um pacote .4dbase ou um arquivo de estrutura .4DB ou .4DC como a finalidade de iniciar uma aplicação 4D sem passar pela caixa de diálogo de abertura. . Opções da Caixa de diálogo de Abertura Além das opções padrão do sistema, a caixa de diálogo de abertura de 4D oferece dois menus de opções específicas, acessíveis através do botão Abrir e o menu Arquivo de dados. Abrir: o menu associado a este botão permite definir o modo de abertura do banco. Inclui as opções Banco interpretado e/ou Banco compilado, assim como o Centro de Segurança e Manutenção: Banco Interpretado e Banco Compilado: estas duas opções são oferecidas quando o banco selecionado contém código compilado e código interpretado. Se um destes modos não estiver disponível (banco não - 16 - compilado ou não recompilado, arquivo compilado unicamente, etc.), não aparecerá a opção correspondente.. Centro de Segurança e Manutenção: abertura em modo seguro permitindo acessar a um banco de dados danificado para realizar os consertos correspondentes. Para maiores informações, consulte o parágrafo Visualização em modo manutenção. Quando se clica diretamente no botão Abrir, o banco se abre no último modo de abertura utilizado. Arquivo de dados: este menu permite definir o arquivo de dados a ser utilizado com o banco. Por padrão, a opção Arquivo de dados atual está selecionada. O banco é aberto com este arquivo se você clicar em Abrir. É possível ver a localização deste arquivo no disco em uma janela sistema clicando no botão Este menu inclui duas opções adicionais já que 4D lhe permite utilizar um mesmo arquivo de estrutura com diferentes arquivos de dados. Selecionar outro arquivo de dados: esta opção permite abrir o banco com um arquivo de dados existente diferente ao arquivo atual. Ao selecionar esta opção e logo clicar em Abrir, aparece a caixa de diálogo padrão de abertura de arquivos de maneira que é possível selecionar um arquivo de dados. Criar um arquivo de dados novo: esta opção permite criar um arquivo de dados em branco para o banco. Ao selecionar esta opção e logo clicar em Abrir, aparece a caixa de diálogo padrão de salvar arquivos, permitindolhe nomear e selecionar a localização do arquivo de dados a criar. Uma vez que tenha alterado o arquivo de dados atual, 4D o abrirá por padrão depois, a menos que encontre um arquivo com o mesmo nome do arquivo de estrutura seguido por “.4DD” localizado no mesmo diretório que o arquivo de estrutura. Se você move ou renomeia o arquivo de dados, será necessário localizá-lo mais uma vez. É possível mudar o arquivo de dados utilizando um atalho de teclado durante a inicialização do banco. Para maiores informações, consulte o parágrafo Alterar o arquivo de dados. Você pode ver o arquivo atual do banco de dados a qualquer momento em Página Informação do Centro de Manutenção e Segurança. Atalhos de abertura de Banco de Dados 4D oferece várias funções que podem ser utilizadas para abrir bancos diretamente, sem passar pela caixa de diálogo Abrir: arrastar e soltar, o menu “Abrir bancos recentes” e a abertura automática do último banco utilizado. Para abrir um banco utilizando arrastar e soltar: 1. Selecione o arquivo do banco a abrir e solte-o no ícone da aplicação 4D. Sob Windows, você deve selecionar o arquivo de estrutura do banco (extensão .4DB ou .4DC), Sob Mac OS é possível selecionar o pacote do banco (extensão .4dbase), ou o arquivo de estrutura do banco (extensão .4DB ou .4DC). Para maiores informações sobre a arquitetura dos pacotes, por favor, consulte o parágrafo Extensão .4dbase . Em ambas as plataformas, é possível selecionar um arquivo de acesso .4DLink.. Para abrir um banco recente:: 1. Selecione o comando Abrir bancos recentes > Nome do banco no menu Arquivo de 4D ou no menu associado ao botão “Abrir” da barra de ferramentas de 4D. A primeira vez que se inicia a aplicação, este menu está vazio. Será preenchido gradualmente a medida que se utilizem diferentes bancos de dados; 4D memoriza automaticamente os nomes de todos os bancos que são abertos. Selecione o comando Apagar lista de recentes (acessível somente através do menu Arquivo) para apagar os nomes das bases do menu. Para abrir automaticamente o último banco utilizado: Exiba a página “Aplicação/Opções” das Preferências da aplicação. 1. Para maiores informações sobre a visualização das Preferências, consulte o parágrafo Acesso 2. Na área “Opções”, escolha a opção Abrir o último banco utilizado no menu “Ao iniciar”. 4D abrirá então automaticamente o último banco utilizado cada vez que a aplicação seja iniciada. Nota: Para forçar a visualização da caixa de diálogo de abertura quando esta opção está selecionada, mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS) durante a abertura da aplicação. - 17 - Conectar a uma aplicação remota Conectando com uma aplicação remota Há três maneiras de se conectar a um banco de dados 4D Server via um 4D remoto: Usar a caixa de diálogo da conexão Usar o menu Abrir Banco Recente Usar um atalho 4DLink contendo os parâmetros de acesso ao Banco de Dados. Usar a caixa de diálogo de conexão Para mostrar a caixa de diálogo de conexão 4D Server, primeiro inicie uma aplicação 4D. Você pode usar o comando Abrir no menu Arquivo (ou o botão correspondente na barra de ferramentas 4D) para selecionar o modo de abertura do banco de dados 4D: Selecione o comando Abrir>Banco Remoto... A caixa de diálogo de conexão 4D Server aparece. Essa caixa de diálogo tem três páginas e poder ser acessada através das seguintes abas: Recente, TCP/IP e Personalizado: - 18 - Se você selecionar a opção Exibir essa janela na próxima vez , essa caixa de diálogo aparecerá automaticamente na próxima vez que uma aplicação 4D iniciar. Nota: Você também pode iniciar essa caixa de diálogo ao selecionar o link Conectar ao 4D Server no Assistente de Boas Vindas.. Aba “Recente” A aba Recente memoriza a listagem de todos os 4D servers usados recentemente. A lista está ordenada alfabeticamente. Para conectar-se a um servidor dessa lista, dê um duplo-clique no nome ou selecione o servidor e clique no botão OK.. Aba “Disponível” - 19 - O 4D Server inclui um sistema de publicação TCP/IP integrado que publica automaticamente o nome do banco de dados 4D Server disponíveis na rede. Esses nomes estão listados na aba TCP/IP da caixa de diálogo de conexão. A lista está organizada por ordem de surgimento e é atualizada automaticamente. Para conectar-se a um servidor dessa lista, dê um duplo-clique no nome ou o selecione e clique no botão OK. Notas: Um acento circunflexo (^) aparece antes do nome dos bancos de dados publicados com a opção de encriptografado. Para maiores informações, consulte a seção Criptografar conexões cliente-servidor. É possível evitar a publicação dinâmica do banco de dados na rede (veja a seção Preferências de publicação). Nesse caso, a conexão só pode ser realizada manualmente na aba "Personalizado". Aba “Personalizado” A aba Personalizado permite designar um servidor publicado na rede usando seu endereço IP e criando um nome personalizado. Você pode personalizar o sistema de publicação TCP/IP do 4D Server de maneira que os nomes dos servidores de banco de dados não sejam publicados automaticamente na rede (veja a seção Preferências de publicação). Nesse caso, o - 20 - nome não aparecerá na página "TCP/IP". Entretanto, se você sabe o endereço IP do servidor de uma base de dados cujo nome não está publicado, você pode entrar o endereço IP manualmente. Nome do banco de dados: permite definir o nome do banco de dados 4D Server. Esse nome será usado na aba Recente quando se referir a esse banco de dados. Endereço de Rede: permite entrar o endereço IP da máquina onde se encontra o 4D Server. Se dois servidores estão sendo executados simultaneamente na mesma máquina, o endereço IP deve ser acompanhado de uma vírgula e um número de porta, por exemplo: 192.168.92.104:19814. A porta de publicação padrão do 4D Server is 19813. Esse número pode ser modificado na aplicação Preferências (veja a seção Preferências de configuração). Nota: Se um banco de dados foi selecionado nas abas Recente ou TCP/IP no momento em que você clicou na aba Personalizado, os dois campos mostrarão a informação correspondente. Logo que essa aba atribuir um servidor, clique no botão OK, e você se conectará ao servidor. O servidor estará listado na aba Recente. Nota: Se o banco de dados for publicado usando a opção de criptografia, você deve adicionar um acento circunflexo (^) antes do nome; do contrário a conexão será recusada. Para maiores informações, veja a seção Criptografar conexões cliente-servidor.Criptografar conexões cliente-servidor Forçar a atualização dos recursos locais Essa opção causa a atualização periódica dos recursos locais na máquina cliente quando ela conecta. Os recursos locais são a informação estrutural relacionada ao banco de dados que está armazenada em cada máquina cliente. De maneira geral, a atualização dos recursos locais na máquina remota acontece automaticamente quando ela se conecta, se a estrutura do banco de dados foi modificada entre duas conexões. Na maior parte do tempo, essa opção é desnecessária. Mesmo assim, em certos casos pode ser necessário forçar a atualização. Usar o menu Abrir banco de dados recente O menu de comando Abrir Bancos Recentes pode ser usado para se conectar automaticamente a um banco de dados 4D Server ao qual você já se conectou previamente. Esse comando se encontra no menu Arquivo do 4D. Se você usar a aplicação 4D para abrir banco de dados locais e conectar-se a banco de dados remotos, esse menu listará os dois tipos de bancos de dados. Os bancos de dados remotos estão disponíveis na parte de baixo do menu: O endereço IP do servidor está indicado ao lado do nome do banco de dados. O comando Excluir Menu pode ser usado para limpar o menu. Usar um arquivo 4DLink Você pode gerar arquivos de acesso a bancos de dados contendo os parâmetros com o objetivo de automatizar e simplificar a abertura ou conexão com os bancos de dados 4D. Geralmente, um arquivo de acesso pode salvar o endereço de um servidor remoto 4D Server assim como os identificadores de conexão, assim eliminando diversas operações para o usuário. Arquivos de acesso também podem ser usados para abrir bancos de dados locais. Criação de Arquivos - 21 - Criação de Arquivos Os arquivos de acesso dos bancos de dados 4D são arquivos XML que tem a extensão ".4DLink". 4D gera e usa esse tipo de arquivo para construir o submenu "banco de dados recentes": um arquivo .4DLink é automaticamente gerado por 4D quando um banco de dados local é aberto pela primeira vez ou na primeira vez em que se conecta a um servidor. Os arquivos .4DLink que são criados automaticamente por 4D estão disponíveis na pasta de preferências locais do usuário. Nessa pasta, dois diretórios são criados: Local e Remoto. A pasta Local contem os arquivos ".4DLink" que podem ser usados para conectar-se a bancos de dados locais, e a pasta Remoto contém os arquivos "4DLink" que podem ser usados para conectar-se a bancos de dados remotos. As pastas de preferências locais se encontram em: Windows 7 e posteriores: C:\Users\NomeUsuario\AppData\Roaming\4D\Favorites vXX\ OS X: Users/NomeUsuario/Library/Application Support/4D/Favorites vXX/ ... onde XX representa o número de versão da aplicação (por exemplo, "Favorites v14" para 4D v14). Os arquivos encontrados nesses diretórios são mostrados no submenu Abrir bancos recentes> do menu Arquivo do 4D: Os arquivos ".4DLink" também podem ser criados com um editor XML e contém informação personalizada como identificadores de conexão (nome de usuário e senha) ou o modo de abertura do banco de dados. 4D oferece uma DTD que descreve as chaves XML que podem ser usadas para construir um arquivo ".4DLink". Esse DTD se chama database_link.dtd e se encontra na subpasta \Resources\DTD\ da aplicação 4D. Usar Arquivos Um arquivo de acesso .4DLink pode ser usado para iniciar uma aplicação 4D e abrir o banco de dados desejado. Há duas maneiras diferentes de fazer isso: Com um duplo-clique ou arrastar e soltar na aplicação 4D, Com o submenu Abrir bancos recentes (arquivo localizado na pasta de preferências locais). Um arquivo .4DLink do tipo "banco de dados remoto" pode ser copiado e usado em várias máquinas diferentes. Nota: Também é possível selecionar um arquivo 4DLink no 4D e na caixa de diálogo de abertura do 4D Server (apenas para a abertura de bancos de dados locais). - 22 - Instalar plugins ou componentes Plug-ins e componentes trazem funcionalidades adicionais às suas aplicações. Plug-ins são programas externos, geralmente desenvolvidos em C, que dão acesso a várias funcionalidades. Por exemplo, o plug-in 4D Write oferece as funções de um software de processamento de texto. Alguns plug-ins como o 4D Internet Commands são oferecidos gratuitamente, outros necessitam da compra de uma licença específica. Plugins podem ser desenvolvidos pela 4D SAS our por terceiros. Componentes são programas independentes desenvolvidos com 4D que oferecem funcionalidades adicionais de alto nível. Por exemplo, o componente 4D SVG amplia as capacidades normais do 4D relacionadas ao trabalho com SVG. Plug-ins e componentes se integram no seu ambiente 4D e 4D Server. Para poder usá-los em seus bancos de dados, você deve instalá-los em locais adequados. Locais diferentes são possíveis, dependendo de como eles serão usados e do seu sistema operacional. Nota: Para maiores informações sobre desenvolvimento e distribuição de componentes, veja o capítulo Desenvolver e instalar componentes 4D. Procedimento de Instalação A instalação dos plug-ins no ambiente 4D é efetuada ao copiar os arquivos dos plug-ins nas pastas apropriadas: plug-ins vão a uma pasta chamada Plug-ins e componentes na pasta chamada Componentes. Essas pastas podem ser localizadas em dois locais diferentes dependendo de suas necessidades (ver próxima seção). Aqui estão os elementos a serem localizados nas pastas: As pastas “PluginName.bundle” (chamadas pacotes em Mac OS) contém as versões Windows e Mac OS dos plug-ins 4D. Sua arquitetura interna específica permite a 4D Server carregar a versão apropriada de acordo com a plataforma de execução de 4D Client.. Para instalar um plug-in no seu ambiente, você só deve colocar a pasta “PluginName.bundle” ou o pacote correspondente na pasta Plugins desejada. Componentes são banco de dados matriz cujos arquivos têm as extensões .4db (banco de dados matriz interpretado), .4dc (banco de dados matriz compilado) ou .4dbase (banco de dados matriz do tipo pacote , veja o parágrafo Extensão .4dbase ). Você pode usar alias (Mac OS) or atalhos (Windows) para esses banco de dados matrizes. A pasta de componentes pode conter qualquer arquivo ou pasta personalizados necessário para a operação de componentes (xliff, imagens, e assim por diante). Por outro lado, ela não pode conter plug-ins ou subpastas de componentes, ou arquivos de dados ou arquivos de estrutura de usuários (.4DA). Se esses itens estiverem presentes, eles serão ignorados por 4D. Para maiores detalhes sobre arquitetura de componentes, consulte Introdução . Os plug-ins e os componentes são carregados por 4D quando a aplicação inicia. Portanto, é necessário sair de sua aplicação 4D antes de copiar arquivos ou pastas. Logo, abra seu banco de dados com 4D. Se o uso do plug-in necessita uma licença específica, o plug-in se carregará mas não se ativará. Localização das pastas de PlugIns e Componentes Você pode colocar as pastas PlugIns e Componentes em dois lugares diferentes: No mesmo nível da aplicação 4D executável: Com Windows: junto ao arquivo .exe Com Mac OS: no primeiro nível da pasta Conteúdos, no interior do pacote de aplicação. Nesse caso, os plug-ins e componentes estão disponíveis em qualquer banco de dados aberto com a aplicação. No mesmo nível que o arquivo de estrutura de banco de dados. Nesse caso, os plug-ins e componentes estão disponíveis apenas para esse banco de dados particular. A escolha da localização depende de como você deseja usar o seu plug-in ou componente. Se o mesmo plug-in ou componente está localizado nos dois locais, 4D irá carregar apenas aquele localizado junto à estrutura. Numa aplicação que for compilada e fusionada usando 4D Volume Desktop, se houver várias cópias do mesmo plug-in ou componente presentes, a aplicação não iniciará. Suporte de plug-ins 64-bits em Windows - 23 - A partir da v14, os plug-ins 4D estão disponíveis em versões Windows de 64 bits. Desta forma você pode tomar vantagem da arquitetura de 64 bits em uma configuração utilizando a versão de 64 bits Windows de 4D Server. As versões 64 bits se incluem nos pacotes plug-in. Não se requer nenhuma instalação específica. Os seguintes plug-ins estão disponíveis em uma versão Windows de 64 bits: 4D Write 4D View 4D Internet Commands 4D Pack 4D ODBC Pro 4D for OCI (Deve instalar o OCI de 64 bits antes do plug-in 4D For OCI de 64 bits. Pode obter esta versão de OCI de Oracle, Inc.) O funcionamento dos plug-ins de 32 bits e 64 bits é idêntico. No entanto, tenha em conta que o comando Open external window não pode ser utilizado em um 4D Server de 64 bits. - 24 - Alterar o arquivo de dados Você pode alterar arquivo de dados se quiser (pode utilizar uma mesma estrutura com diferentes arquivos de dados). Os arquivos de dados e de estrutura devem corresponder. Com a finalidade de preservar a integridade dos dados, 4D não autoriza a abertura de um arquivo de dados que não tenha sido criado pelo arquivo de estrutura atual. O programa atribui automaticamente os números de ligações internos (UUID) aos arquivos de dados e de estrutura no momento da criação ou da conversão dos bancos. Estes números são verificados ao abrir o arquivo de dados. Para alterar o arquivo de dados, você pode: Ao abrir o banco, escolha a opção Escolher outro arquivo de dados ou Criar um novo arquivo de dados da caixa de diálogo de abertura do banco. Você pode especificar um arquivo existente ou criar um novo (consulte a seção Abrir um Banco de Dados local ). Durante a inicialização do banco, mantenha pressionada a tecla Alt (em Windows) ou a tecla Opção (em Mac OS). Aparece a seguinte caixa de diálogo: Selecione Selecione outro arquivo de dados ou Criar um novo arquivo de dados e clique em OK. Depois de abrir o banco, escolha Novo > Arquivo de dados... ou Abrir > Arquivo de dados... no menu Arquivo de 4D ou no menu associado com o botão “Novo” ou “Abrir” da barra de ferramentas de 4D. Em todos os casos, uma caixa de diálogo permite selecionar um arquivo de dados existente ou criar um novo. Se você escolhe criar um novo arquivo, 4D abrirá o banco de dados com a estrutura original mas sem registros. Quando você utiliza um arquivo de dados diferente ou quando cria um novo, este se converte no arquivo de dados atual e será utilizado automaticamente a próxima vez que abrir o banco. Se você move ou renomeia o arquivo de dados, terá que localizá-lo manualmente. - 25 - Descrição dos Arquivos 4D 4D cria por padrão vários arquivos e pastas para cada banco de dados. Os arquivos adicionais também são utilizados quando o banco tenha sido convertido de uma versão anterior. Arquitetura do Banco de Dados Quando você cria um banco de dados, os seguintes arquivos e pastas são gerados, por padrão, no disco: Um arquivo de estrutura (extensão “.4DB”). O arquivo de estrutura contém todas as especificações associadas a estrutura do banco (tabelas, campos, propriedades de tabelas e campos), formulários, métodos, barras de menus, usuários e grupos de usuários, senhas de acesso, imagens e listas de seleção. O arquivo de estrutura é nomeado com o nome que você introduz na caixa de diálogo, seguido por “.4db. Um arquivo de dados (extensão “.4DD”) O arquivo de dados contém os dados introduzidos nos registros e todos os dados que dependem dos registros. O arquivo de dados recebe o nome que foi introduzido na caixa de diálogo de criação do banco, seguido por “.4dd”). Quando se abre um arquivo de estrutura de 4D, a aplicação abre, por padrão, o arquivo de dados atual. Se você muda o nome ou a localização deste arquivo, aparecerá a caixa de diálogo de abertura de arquivos de maneira que é possível selecionar o arquivo de dados ou criar um novo (consulte Alterar o arquivo de dados). Um arquivo de dados é automaticamente associado com o arquivo de estrutura que o criou de maneira a evitar manipulação incorreta. Um arquivo de índice de estrutura (extensão “.4DIndy”) e um arquivo de índice de dados (extensão “.4DIndx”). Os índices criados em um banco 4D são armazenados como arquivos separados. Estes arquivos são localizados automaticamente junto ao arquivo de estrutura. Não devem ser movidos ou renomeados; do contrário, 4D terá que criá-los novamente. NomeBanco.4DIndx contém os índices de dados e NomeBanco.4DIndy contém os índices da estrutura (utilizado particularmente quando são realizadas pesquisas na estrutura).Uma das principais vantagens é que em caso de corrompimento do índice, é possível excluir fisicamente o arquivo antes de iniciar 4D de maneira que se crie automaticamente um novo. Um arquivo de histórico de dados (extensão “.journal”) — arquivo criado unicamente se o banco utiliza um arquivo de histórico. O arquivo de histórico permite assegurar a segurança dos dados do banco entre os backups. Todas as operações efetuadas nos dados de um banco são guardadas sequencialmente neste arquivo. De maneira que cada operação nos dados cause duas ações simultâneas: a primeira nos dados do banco (a instrução é executada normalmente) e a segunda no arquivo de histórico (é registrada a descrição da operação). O arquivo de histórico é construído de maneira independente, sem afetar, ou retardar o trabalho do usuário. Um banco só pode trabalhar com um arquivo de histórico por cada vez. O registro de histórico registra operações tais como inserções, modificações, ou eliminações de registros, transações, etc. O arquivo de histórico é gerado, por padrão, quando um banco é criado. Para maiores informações, consulte o parágrafo Gestão do arquivo de histórico. Uma pasta Resources, contém os recursos externos. A pasta Resources, deve estar localizada junto ao arquivo de estrutura do banco (.4db ou .4dc), está destinada a agrupar todos os arquivos do banco externos necessários para a interface do banco. Nesta pasta, é possível localizar todos os arquivos necessários para a tradução, ou personalização da interface da aplicação (arquivos de imagem, texto, XLIFF, etc.) 4D utiliza mecanismos automáticos para utilizar os conteúdos desta pasta, em particular para a manipulação de arquivos XLIFF (ver Apêndice C: arquitetura XLIFF) e imagens (ver Usar imagens estáticas). No contexto de uso em modo remoto, a pasta Resources permite compartilhar arquivos entre o computador servidor e todos os computadores clientes. Para maiores informações, consulte a seção Gerenciamento da pasta Resources no manual de referência de 4D Server. Uma pasta Preferences, contém os arquivos de configuração específicos do banco – pasta criada unicamente quando é necessário. A pasta Preferences armazena os arquivos de configuração do banco, geralmente em formato XML. É criada automaticamente, mais especificamente quando é utilizada a função backup (arquivo Backup.xml) ou do gerador de aplicações (arquivo BuildApp.xml) Uma pasta Logs contém os arquivos de histórico do banco atual. Esta pasta se encontra no mesmo nível que o - 26 - arquivo de estrutura.Reúne os seguintes arquivos de histórico: : conversão do banco, pedidos do servidor web, verificação e reparação de dados, verificação e reparação da estrutura, diário de atividades de backup/restauração, depuração dos comandos, pedidos 4D Server (gerados nos computadores cliente e no servidor). Estes arquivos e pastas são localizados inicialmente na mesma pasta quando o banco é criado, é recomendado não movê-los com a finalidade de não alterar os mecanismos automáticos de 4D. Arquivos Adicionais (bancos convertidos) Quando você usar um banco criado com uma versão de 4D anterior ao v11, arquivos adicionais estão presentes: Um arquivo de recursos de estrutura (extensão “.RSR”) Este arquivo contém os “antigos” recursos de tipo Macintosh associados a estrutura do banco. Os arquivos .4DB e .RSR sempre devem estar localizados no mesmo diretório e ter o mesmo nome, caso contrário não será possível abrir o banco de dados. Um arquivo de recursos de dados (extensão “.4DR”). Contém os “antigos” recursos associados aos dados do banco. Para maiores informações sobre a conversão de bancos, consulte o parágrafo Conversão de bancos de versões anteriores. Extensão .4dbase Por padrão, os bancos de dados 4D são criados automaticamente em uma pasta com o sufixo .4dbase. Por exemplo, um banco chamado “Faturas” será criado na pasta [Faturas.4dbase]. Esta pasta armazena todos os elementos necessários para o funcionamento correto do banco. Graças a este princípio, sob Mac OS as pastas dos bancos aparecem como pacotes. É possível fazer clique duplo no pacote para iniciar diretamente 4D, o banco e o arquivo de dados atual. Também é possível arrastar e soltar o pacote no ícone da aplicação 4D. Isto também significa que o banco pode ser localizado em uma ferramenta de controle de versões. Sob Windows, este funcionamento não tem um impacto particular. Você pode desativar este funcionamento padrão desmarcando a opção Criar um pacote para os novos bancos em Preferências, ver Página Geral - 27 - Conversão de bancos de versões anteriores Bancos de dados criados com versões anteriores de 4D são compatíveis com 4D v13 (arquivos de estrutura e dados). arquivos de banco de dados Versão 11 ou 12 são convertidos diretamente para a versão 13. Uma vez convertidos, esses arquivos de estrutura não podem mais ser abertos na versão 12; entretanto, os arquivos de dados podem ainda ser abertos na versão 12 sobre as condições descritas abaixo. Arquivos de banco de dados nas versões 6.x, 2003.x ou 2004.x são convertidos com o uso de um assistente e não podem mais ser abertos com a versão original. Nota: pode converter todo arquivo de estrutura interpretado. O arquivo pode conter o código compilado; neste caso, será necessário recompilar a base logo de sua conversão. Se você vai converter uma base de dados anterior a versão 14 que não tem chaves primárias, aparecerá uma caixa de diálogo de alerta. Este ponto se detalha no parágrafo "Janela de erro de chaves primárias" a continuação. Bases em versão 13 A conversão de uma base em versão 13 se realiza diretamente ao abrir ele com 4D v14. Aparecerá uma caixa de diálogo de alerta que indica que o arquivo de estrutura vai ser convertido, e que já não pode ser aberto com uma versão anterior. Os arquivos de dados, No entanto, são abertos sem necessidade de conversão pelo ainda podem ser abertos novamente na versão 13. Bases em versões 11 ou 12 A conversão de uma base v11 ou v12 se realiza diretamente ao abrir o arquivo de estrutura com 4D v14. Dois caixas de diálogo de alerta sucessivas lhe indicam que os arquivos estão em conversão e que já não podem abrir com uma versão anterior. Note que ao converter o arquivo de dados, seus índices se reconstroem. Nota: para obter informação sobre de como converter bases de uma versão anterior, consulte a seção Conversão de bases em versões anteriores na documentação 4D v13. Janela de erro de chaves primária A partir de 4D v14, o uso de um arquivo de histórico requer que todas as tabelas tenham uma chave primária válida (ver Gestão do arquivo de histórico). É mostrada uma caixa de diálogo de erro quando pelo menos uma tabela na base não tem uma chave primária válida. - 28 - Este diálogo pode aparecer: depois da conversão a V14 de uma base, depois da ativação da opção Utilizar arquivo de histórico em uma base v14. Nota: se o histórico não está ativado na base, a caixa de diálogo de erro lhe oferece a opção de abrir a base apesar do erro de chave primária. Se tiver acesso a estrutura da base, a caixa de diálogo oferece várias opções e mostra, quando se expande a área inferior, a lista de tabelas que não tem uma chave primária: A continuação, tem as seguintes opções: Copiar: copia a informação da janela na prancheta para sua análise. Fechar a base: fecha a base de dados sem que ela seja modificada . Continuar: abre a base sem processar os erros. Neste caso, o histórico está desativado para a base (se a opção Utilizar arquivo de histórico estava selecionada, está desmarcada) e a base funciona a perfeição em v14. Pode utilizar esta opção se não deseja utilizar o arquivo de histórico com sua base. Utilizar o assistente: mostra a janela do Gestor de chaves primária, que se utiliza para atualizar todas as tabelas da base. Lhe recomendamos que escolha esta opção com o propósito de desenvolver a base. Este assistente se descreve na seção Criar uma estrutura de banco de dados. Caso não tenha acesso a estrutura da base, não é possível ativar o histórico e 4D mostrará uma mensagem que recomenda contatar ao administrador da base. Componentes em versão 11, 12 ou 13 - 29 - 4D v14 pode abrir diretamente os componentes v13, v12 ou v11 (compilados ou interpretados) sem conversão nem caixa de diálogo de confirmação. Lembre que os componentes sempre estão abertos em modo só leitura. Não é necessário recompilar os componentes mas a conversão de v14 só é possível para os arquivos .4DB e não para os .4DC. - 30 - Preferências Visão Geral Página Geral Página Estrutura Página Formulários Página Métodos Página Atalhos - 31 - Visão Geral Preferências de Usuário especificam opções padronizadas que afetam o seu ambiente de trabalho, por exemplo, as cores usadas no editor de métodos, opções automáticas para a criação de formulários, a visualização automática de formulários, etc. As preferências de usuário se aplicam a todos os bancos de dados abertos com suas aplicações 4D ou 4D Server. 4D Server: os objetos se bloqueiam quando dois ou mais usuários tentam modificar os parâmetros da caixa de diálogo Preferências ao mesmo tempo. Apenas um usuário por vez pode usar a caixa de diálogo Preferências . Note: 4D oferece um conjunto diferente de parâmetros especificamente para a abertura de bancos de dados: Propriedades do Banco. Para maiores informações, consulte o capítulo MissingRef. Acesso Você pode acessar a caixa de diálogo Preferências no menu Edição > Preferências... (Windows) ou no menu Aplicação (Mac OS): Essa opção de menu está disponível mesmo quando não hã nenhum banco aberto. Também é possível abrir a caixa de diálogo Preferências no modo Aplicação usando a ação padrão "Preferências" (associada a um elemento de menu ou a um botão) ou usando o comando OPEN SETTINGS WINDOW. Armazenamento Os ajustes realizados na caixa de diálogo Preferências são guardadas em um arquivo de Preferências em formato XML. Este arquivo se chama 4D vXX Preferences.4DPreferences e é armazenado na pasta de preferências do usuário atual: Windows XP: {disk}\Documents and Settings{NomeUsuario}\Application Data\4D Windows Vista/Windows 7: {disk}\Users{NomeUsuario}\AppData\Roaming\4D Mac OS: {disk}:Users:{NomeUsuario }:Library:Preferences:4D Nota: XX indica o número de versão principal de 4D. Em versão 12 por exemplo, o arquivo se chama 4D v12 Preferences.4DPreferences. Personalização dos Parâmetros e "Factory Settings" Nas caixas de diálogo Preferências e Propriedades, os parâmetros cujos valores foram modificados aparecem em negrito: A modificação pode ter sido feita na caixa de diálogo ou no caso de um banco convertido, pode vir de uma preferência modificada previamente. - 32 - Um parâmetro continua aparecendo em negrito, mesmo quando seu valor é substituído de forma manual por seus valores padrão. Assim, sempre é possível identificar visualmente os parâmetros que foram personalizados. Para reiniciar os parâmetros a seus valores padrão e eliminar o estilo negrito que indica que foram personalizados, clique no botão Factory Settings (configuração original): Este botão reinicia todos os parâmetros da página atual. Ele é ativado quando pelo menos um parâmetro na página atual foi modificado. - 33 - Página Geral Esta página contêm várias opções que permitem configurar o funcionamento geral de sua aplicação 4D. Opções As opções desta área permitem configurar várias funções usadas durante a iniciação quando se muda para o modo de aplicação. Ao iniciar Esta opção permite configurar a visualização padrão oferecida por 4D ao iniciar quando o usuário lança unicamente a aplicação. Não fazer nada: só aparece a janela da aplicação, vazia. Diálogo de abertura de banco de dados local: 4D mostra uma caixa de diálogo padrão de abertura de documentos, que permite designar um banco de dados local. Abrir o último banco utilizado: 4D abre diretamente o último banco utilizado; não aparece nenhuma caixa de diálogo de abertura. Nota: Para forçar o uso da caixa de diálogo aberta quando você selecionar essa opção, mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS), enquanto o banco se inicia Diálogo de abertura de banco de dados remoto: 4D mostra a caixa de diálogo padrão de conexão com 4D Server, que pode ser utilizada para designar um banco de dados publicada na internet. Diálogo assistente de boas vindas (regra de uso): 4D mostra a caixa de diálogo do assistente de boas vindas. Criação automática de formulários Este menu permite definir o funcionamento de 4D quando se cria uma tabela no editor de estrutura e logo abre, por exemplo, a janela de visualização de registros. Por padrão, 4D lhe indica que nenhum formulário foi criado para a nova tabela e lhe dá a opção de criar um formulário de entrada ou um formulário de saída automaticamente: Existem 3 opções disponíveis: Nunca: a caixa de diálogo de alerta não aparece, não é criado nenhum formulário padrão. Perguntar: a caixa de diálogo de alerta aparece quando não tenha sido criado um formulário para a tabela (opção padrão). Sempre sim para tudo: a caixa de diálogo não aparece, mas os formulários padrões são criados automaticamente para todas as tabelas. Sair do ambiente Desenho ao passar ao ambiente Aplicação Se esta opção está ativa, quando o usuário passa ao ambiente Aplicação utilizando o comando de menú Provar a aplicação, todas as janelas do ambiente de Desenho se fecham. Se esta opção não está ativa (configuração padrão), as janelas do ambiente Desenho permanecem visíveis no fundo do ambiente Aplicação. Durante a criação de um novo banco Esse grupo de opções permite definir os parâmetros a serem aplicados durante a criação de uma nova aplicação. Ativar a estratégia de backup automático para cada novo banco de dados Ativar a estratégia de backup automático para cada novo banco de dados: implementa um conjunto de parâmetros de backup em cada novo banco (backup automático, arquivo de histórico, etc.) oferecendo segurança básica. Para maiores informações sobre esta opção, consulte o parágrafo Estratégia de Backup automático. - 34 - Criar um pacote para os novos bancos Criar um pacote para novos bancos: ao selecionar esta aplicação, os bancos de dados 4D são criados automaticamente em uma pasta com o sufixo .4dbase Graças a esse princípio, sob Mac OS as pastas de bancos aparecem como pacotes com propriedades específicas. Sob Windows, este funcionamento não tem um impacto particular. Para maiores informações, consulte o parágrafo Descrição dos Arquivos 4D. Idioma de comparação Este grupo de parâmetros permite configurar o idioma utilizado para o processamento e comparação de cadeias de caracteres. É possível escolher uma linguagem de comparação para o banco de dados aberto (necessidade pontual) e a linguagem padrão para os novos bancos (necessidade permanente). A escolha do idioma tem uma influência direta na ordenação e pesquisa de textos assim como na passagem a maiúsculas/minúsculas, mas não tem efeito na tradução de etiquetas ou nos formatos de datas, de hora ou monetários, os quais permanecem no idioma do sistema. Por padrão, 4D utiliza o idioma do sistema. Um banco 4D agora pode funcionar em um idioma diferente do idioma do sistema. Quando se abre um banco, o motor 4D detecta o idioma utilizado pelo arquivo de dados e lhe oferece o idioma (modo interpretado ou compilado). As comparações de texto, efetuadas pelo motor de banco de dados ou pelo idioma são efetuadas no mesmo idioma. Depois de selecionar um idioma para o banco atual e de validar a caixa de diálogo de preferências, o código do idioma é armazenado na estrutura e os dados além dos índices são reconstruídos Note: É possível mudar esse parâmetro para a abertura do banco de dados usando as Propriedades de Banco de dados (consulte Comparação de texto). Localização da documentação Esta área configura o acesso a documentação HTML de 4D mostrada no navegador atual: Quando o usuário faz duplo clique em um comando na página de comandos do Explorador; Quando o usuário faz um clique numa janela do editor de métodos e pressiona a tecla F1 (ver o parágrafo ) Pode escolher acessar o site da documentação diretamente (4D Doc Center) ou ir a uma versão estática armazenada localmente. Pasta Local Indica a localização da versão estática da documentação HTML. Por padrão, esta localização corresponde a subpasta \Help\Command\language. Pode ver a localização fazendo clique no menu associado à área. Se esta subpasta não estiver presente, a localização se mostra em vermelho. Pode modificar esta localização como prefira, por exemplo, se desejar mostrar a documentação em uma linguagem diferente daquela da aplicação. A documentação HTML estática pode ser localizada em outro volume, em um CD-Rom, etc. Para determinar uma localização diferente, faça um clique no botão [...] localizado junto à área de entrada e escolha uma pasta raiz de documentação (pasta correspondente à linguagem: fr, en, es, de ou ja). Nota: para maior informação sobre o download de versões estáticas de documentação HTML, consulte a página de inicio do 4D Doc Center. Site Web Essa é URL de acesso à documentação em linha da versão em 4D Doc Center. 4D cria as chamadas às páginas da documentação baseado nesta URL. É possível modificar a URL, por exemplo, se deseja mostrar a documentação em um idioma diferente do idioma da aplicação. O botão de prova localizado a direita da área, inicia por padrão o navegador para ir à URL especificada. Buscar primeiro na pasta local Esta opção (selecionada por padrão), permite configurar a sequência de busca de uma página de documentação chamada através do explorador ou da tecla F1. Quando está ativada, 4D procura primeiro pela página na pasta local. Se a página se encontra na localização definida, 4D mostra a página no navegador atual. Em caso contrário, 4D automaticamente a procurará no web site da documentação online. Dessa maneira é possível acessar a documentação, mesmo quando não esteja conectado, através de uma versão local. Quando não estiver selecionada, 4D procura diretamente a página no web site da documentação online e a exibe no navegador atual. Se não for encontrada, 4D mostra uma mensagem de erro no navegador. Esta opção acelera o acesso, mas só é possível utilizar-la quando 4D estiver em modo conectado. - 35 - Página Estrutura Chave primária Estas opções das preferências permitem modificar o nome e o tipo por padrão dos campos chave primária que se agregam automaticamente por 4D quando se criam novas tabelas ou via o Criar uma estrutura de banco de dados). As seguintes opções estão disponíveis: Nome ("ID" por padrão): define o nome por padrão dos campos chave primária. Pode utilizar o nome que deseje, sempre e quando se respeitem as regras de denominação para as tabelas padrão de 4D (ver [Regras para nomear tabelas e campos). Tipo (Inteiro longo por padrão): define o tipo dos campos chaves primária por padrão. Pode escolher o tipo UUID. Neste caso, os campos chaves primária criados por padrão são do tipo Alfa e tem as propriedades formato UUID e Auto UUID selecionadas. Editor de Estrutura Este grupo de opções configura a visualização do editor de estrutura de 4D. Qualidade gráfica da estrutura Esta opção permite variar o nível de detalhe gráfico do editor de estrutura. Por padrão, a qualidade é Alta. Pode selecionar a qualidade Padrão para dar prioridade à rapidez de visualização. O efeito desse parâmetro é principalmente perceptível durante o uso da função zoom (ver o parágrafo “Zoom” na seção Editor de estrutura. Quando uma pasta está oculta, seus conteúdos são: Esta opção permite configurar a aparência gráfica das tabelas ocultas no editor de estrutura, quando se realiza as seleções por pasta (ver o parágrafo Ressaltar/Atenuar tabelas por pasta). As opções disponíveis são Atenuado (uma sombra substitui a imagem da tabela) e Invisível (a tabela desaparece completamente). - 36 - Página Formulários Esta página permite configurar o funcionamento padrão do editor de formulários de 4D. Mover Este grupo de opções permite definir os parâmetros para mover objetos utilizando o teclado ou o mouse no editor de formulários. Tamanho do passo utilizando o teclado Esta opção permite definir o valor (em pontos) do passo utilizado para mover ou redimensionar um objeto utilizando o teclado e a tecla Maiúscula (Shift). Ao se mover fora dos limites da janela Esta opção permite definir o comportamento do editor de formulários quando se mova um objeto com o mouse além dos limites da janela do formulário. Rolagem automática: quando esta opção está selecionada, esta ação provoca a movimentação do formulário na janela, como quando se clica nas barras de rolagem. Este comportamento é útil para mover objetos em formulários de tamanho grande. Iniciar arrastar e soltar: quando esta opção está selecionada, esta ação é interpretada como um arrastar e soltar. A janela do formulário não é alterada e o objeto pode ser levado para outra janela (se o seu conteúdo é compatível), por exemplo, em outro formulário. Este comportamento é útil para reciclar objetos entre vários formulários ou utilizando bibliotecas de objetos (ver o parágrafo Criar e usar objetos de biblioteca personalizados). Você pode configurar esta opção dependendo dos seus hábitos de trabalho e necessidades de desenvolvimento. Ativar alinhamento automático padrão Essa opção permite ativar por padrão o alinhamento automático em cada nova janela do editor de formulários. É possível modificar esta opção individualmente para cada janela (consulte o parágrafo Usar a quadrícula magnética). Visualização padrão Estas opções permitem definir os elementos que devem ser mostrados ou ocultados por padrão em cada nova janela do editor de formulários. É possível definir a visualização de cada janela individualmente utilizando o menu hierárquico Exibir do editor de formulários. Marcas a mostrar por padrão: Essa opção determina que marcas mostrar por padrão em cada janela do editor de formulários. Para mais informações sobre marcas, consulte o parágrafo Usar as Marcas. Cor das linhas de marcadores: Essa opção modifica a cor das linhas de marcadores usadas no editor de formulários para definir as diversas áreas (cabeçalho, quebras, detalhes, notas de rodapé, etc.). Para mais informações sobre marcadores, consulte o parágrafo Usar linhas de controle de saída. - 37 - Página Métodos Esta página permite definir a interface, a visualização padrão e as opções de funcionamento do editor de métodos. É dividida em duas partes, acessíveis pela abas Estilos e Opções. Estilos Fonte Esses menus permitem definir o tipo de fonte e o tamanho dos caracteres a utilizar na área de entrada do editor de métodos: Fonte: nome da fonte utilizada. Tamanho: tamanho dos caracteres. É possível definir o estilo de fonte para cada tipo de objeto. Estilos de sintaxes As opções dessa área permitem atribuir uma cor e um estilo específico a cada tipo de elemento da linguagem 4D (campos, tabelas, variáveis, parâmetros, SQL, etc.) e também para cada elemento da linguagem SQL (palavras chaves, funções, etc.). A combinação de cores e de estilos diferentes para os elementos dos métodos é bastante útil para a manutenção do código. Linguagem: este menu permite escolher a linguagem para a qual deseja definir os estilos no editor de métodos. Pode escolher a linguagem 4D ou a linguagem SQL. A lista de tipos de elementos se atualiza em função da linguagem selecionada no menu. Listas de tipos de elementos: selecione as opções de estilo correspondentes na tabela. Pode combinar várias opções para um mesmo elemento. A etiqueta do elemento reflete as modificações efetuadas. Para definir uma cor, faça clique no ícone de cor e aparecerá uma paleta de cores onde poderá escolher uma nova cor. Notas: Na linguagem 4D, o tipo de elemento "Texto padrão" designa todos os textos que não pertencem a nenhum dos outros tipos definidos (por exemplo, os símbolos, pontuação, as constantes literais, etc.). Na linguagem 4D, o tipo de elemento "Palavras chaves" designa as estruturas de programação (If/End if, Case of/End case, etc.) acessíveis por Macros. Em SQL, designa todos os comandos e suas palavras chaves associadas. Opções Opções Esta área permite configurar as opções de visualização do editor de métodos: Indentação: muda o valor de indentação do código 4D no editor de métodos. A largura deve ser definida em pontos (10 por padrão). O código 4D está indentado automaticamente com o objetivo de mostrar sua estrutura: - 38 - . Modificar este valor padrão pode ser muito útil se seus métodos contém algoritmos complexos com muitos níveis de aninhamento. Uma indentação menor permite limitar os deslocamentos horizontais. Mostrar números de linhas: permite mostrar os números das linhas em cada janela do editor de métodos. É possível mostrar ou ocultar os números das linhas para a janela atual diretamente desde o editor de métodos. Mostrar as listas: permite mostrar ou ocultar por padrão as listas de objetos (Comandos, Tabelas e campos, etc.) quando a janela do editor de métodos estiver aberta. Pode mostrar ou ocultar cada lista diretamente desde o editor de métodos. Parênteses correspondentes: modifica a sinalização gráfica dos parênteses correspondentes no código. Esta sinalização aparece quando um parêntese está selecionado. As seguintes opções estão disponíveis: Nenhum: sem sinalização Retângulo: parênteses rodeados por uma linha negra Cor de Fundo: parênteses ressaltados (a cor é definida na área "Cores", ver o parágrafo “Cores” mais adiante) Negrito: parênteses mostrados em negrito. Por padrão, a opção retângulo vêm selecionada: Ressaltar a linha atual: ressalta a linha em execução em _o_During, além da flecha amarela. . Se desmarca essa opção, só se mostra a flecha amarela. Ressaltar a linha em execução: ressalta a linha que está sendo executado no momento no depurador (ver Depurador), além do indicador de flecha amarela regular. Se deselecionar esta opção, só é mostrada a flecha amarela. Utilizar a configuração do sistema regional: permite desativar/ativar os parâmetros de código "internacionais" para o aplicativo 4D local: Quando esta opçãon estiver desativada (valor predeterminado em 4D v15 e superior), os parâmetros "Inglés-US" e a linguagem inglês de programação se utilizam nos métodos 4D. Se esta opção for ativada, a configuração regional se utiliza nos métodos 4D, como nas versões anteriores de 4D. Se modificar esta opção, é necessário reiniciar o aplicativo 4D para que a mudança seja levada em consideração. Para uma descrição detalhada dos efeitos desta opção, consulte Introdução a linguagem 4D. Sugestões Esta área permite configurar os mecanismos de entrada preditiva no editor de métodos para que os adapte a seus próprios hábitos de trabalho. Abertura automática da janela para: ativa a visualização automática da janela de sugestões para as constantes, as variáveis interprocesso e locais e as tabelas. - 39 - Por exemplo, quando a opção "As variáveis interprocesso e locais" está selecionada, a janela aparece quando digita o caractere $: Pode desativar este funcionamento para certos elementos da linguagem desmarcando a opção correspondente. Validação de uma sugestão em: define o contexto de entrada que permite ao editor de métodos validar automaticamente a sugestão mostrada na janela de ajuda. Tabulação e delimitadores: quando esta opção está selecionada, pode validar a seleção atual com a tecla Tab ou qualquer delimitador pertinente no contexto. Por exemplo, se introduzir "ALE" e logo depois "(", 4D escreve automaticamente "ALERT(" no editor. Esta é a lista de delimitadores que se devem ter em mente: ( ; : = < [ { Somente tabulação: quando esta opção estiver selecionada, só a tecla Tab permite inserir a sugestão atual. Este funcionamento pode ser utilizado particularmente para facilitar a entrada de caracteres delimitadores nos nomes dos elementos, por exemplo ${1}. Nota: também pode fazer um duplo clique na janela ou pressionar a tecla Retorno de carro para validar uma sugestão. Cores Este grupo de opções configura as diferentes cores utilizadas na interface do editor de métodos. Linha onde está o cursor (janela ativa) / Linha onde está o cursor (janela inativa): cor de fundo da linha que contém o cursor. Ressaltado das palavras encontradas: cor de ressaltado das palavras encontradas numa busca. Ressaltado do parênteses: cor do ressaltado dos parênteses correspondentes (utilizado quando os pares de parênteses são assinalados pelo ressaltado, consultar o parágrafo “Opções” acima). Fundo da área de edição: cor de fundo da janela do editor de métodos. Texto sugerido: cor do texto de autocompletar sugerido pelo editor de métodos. - 40 - Página Atalhos Esta página mostra a lista de todos os atalhos utilizados no ambiente Desenho de 4D (exceto os atalhos "sistema", tais como Ctrl+C/Comando+C para o comando Copiar). Para modificar um atalho, pode selecionar/deselecionar o elemento a ser modificado (Maiúscula, Alt ou letra) na lista. Também pode fazer um duplo clique num atalho para que o configure utilizando uma caixa de diálogo específica: Note que cada atalho inclui implicitamente a tecla Ctrl (Windows) ou Comando (Mac OS). A lista de atalhos está baseada no arquivo 4DShortcutsvXX.xml localizado na sub-pasta 4D Extensions (4D v12) ou Resources (4D v13). Se essa lista é personalizada na caixa de diálogo, este arquivo se duplica na pasta Preferências e é utilizado no lugar do arquivo padrão. Portanto, cada vez que 4D se atualiza você conserva suas preferências de atalhos de teclado. - 41 - Propriedades do Banco Visão Geral Using user settings Página Geral Página Interface Página Compilador Página Banco de dados/Armazenamento de dados Página Banco de dados/Memória Página Movimentação Página Backup/Periodicidade Página Backup/Configuração Página Backup/Backup & Restauração Página Cliente-servidor/opções de rede Página Cliente-servidor/configuração IP Página Web/configuração Página Web/Opções (I) Página Web/Opções (II) Página Histórico (formato) Página Web/Histórico (periodicidade) Página Web/Web Services Página Web/REST Página SQL Página PHP Página Segurança Página Compatibilidade - 42 - Visão Geral As propriedades do banco configuram o funcionamento do banco de dados atual. Estes parâmetros se diferir em cada base. Se incluem as portas de escuta (listening ports), os direitos de aceso ao ambiente de Desenho, as configurações SQL, etc. 4D oferece dois modos de funcionamento para estas propriedades: Modo estandarte, na qual todos os parâmetros se guardam no arquivo de estrutura da base e são aplicados em todos os casos (modo por padrão). Modo "Propriedades usuário", na qual parte dos parâmetros personalizados se guardam em um arquivo externo que se utiliza em lugar das propriedades da estrutura. Você ativa este modo utilizando uma opção localizada na Página Segurança das propriedades da base. Este capítulo descreve cada página das propriedades como se mostra em modo estandarte. O modo "propriedades usuário" se detalha na seção Using user settings. A maioria dos parâmetros se aplicam imediatamente. Entretanto, alguns deles (tais como o ajuste do ambiente de inicio) só tem efeito quando se reinicia o banco. Neste caso aparece uma caixa de diálogo para lhe informar que a mudança tomará efeito a próxima vez que reinicie. 4D Server: os objetos são bloqueados quando dois ou mais usuários tentam modificar as propriedades ao mesmo tempo. Só um usuário por vez pode utilizar a caixa de diálogo das Propriedades do banco. Nota: oferece outro conjunto de parâmetros que se aplicam à aplicação 4D: as preferências do usuário. Para obter mais informação, consulte o capítulo Preferências. Acesso A caixa de diálogo Propriedades do banco pode ser acessada das seguintes maneiras: utilizando o comando Propriedades do banco.... do menu Desenho, utilizando o botão correspondente da barra de ferramentas de , com 4D Server, usando o comando Propriedades do banco... do menu Editar. Nota: no modo "propriedades usuário", dois comandos de menu estão disponíveis em cada localização: - Propriedades estrutura... equivale ao comando Propriedades da base... em modo estandarte - Propriedades usuário... permite acessar às propriedades que podem ser armazenadas externamente em um arquivo usuário e que se utilizam em lugar das propriedades estrutura se são modificadas. Para maior informação, consulte a seção Using user settings. Personalização dos Parâmetros e "Factory Settings" Nas caixas de diálogo Preferências e Propriedades, os parâmetros cujos valores foram modificados aparecem em negrito: A modificação pode ter sido feita na caixa de diálogo ou no caso de um banco convertido, pode vir de uma preferência modificada previamente. Um parâmetro continua aparecendo em negrito, mesmo quando seu valor é substituído de forma manual por seus valores padrão. Assim, sempre é possível identificar visualmente os parâmetros que foram personalizados. Para reiniciar os parâmetros a seus valores padrão e eliminar o estilo negrito que indica que foram personalizados, clique no botão Factory Settings (configuração original): - 43 - Este botão reinicia todos os parâmetros da página atual. Ele é ativado quando pelo menos um parâmetro na página atual foi modificado. - 44 - Using user settings Starting with 4D v13, you can generate an external file containing custom settings. When this functionality is enabled, the settings contained in the external file (called "User settings") are used instead of settings stored in the database structure file (called "Structure settings"). This means that you can keep custom settings between updates of your 4D applications, or that you can manage different settings for the same 4D application deployed on several different sites. It also makes it possible to use programming to manage setting files using XML. Enabling User Settings mode To be able to externalize user settings, you need to check the Enable User Settings in External File option, found on the Security page of the Database settings. When you check this option, database settings are separated into two dialog boxes: Structure Settings and User Settings. You can access these dialog boxes using the Design/Database Settings> menu or the Settings button in the toolbar: User Settings dialog box When the external mode is enabled, database settings are available in two dialog boxes: "Structure Settings" and "User Settings". The "Structure Settings" dialog box is identical to the standard Database Settings one and provides access to all its properties. The "User Settings" dialog box contains a selection of relevant properties that can be externalized: - 45 - In accordance with the principle of user settings priority, when an option is modified in this dialog box, its value is taken into account instead of the one stored in the structure settings. The following table lists the pages of settings found in the "User Settings" dialog box and describes their main differences with respect to standard settings: - 46 - Page of Database Settings General page Interface page Compiler page Database/Data storage page Database/Memory page Moving page Backup/Scheduler page Backup/Configuration page Backup/Backup & Restore page Client-server/Network options page Client-server/IP configuration page Web/Configuration page Web/Options (I) page Web/Options (II) page Web/Log (type) page Web/Log (backup) page Web/Web Services page SQL page PHP page Security page Compatibility page Page of User Settings Not available Identical to standard settings Not available Not available Identical to standard settings Not available Not available Not available Not available Identical to standard settings Identical to standard settings Identical to standard settings Identical to standard settings Identical to standard settings Identical to standard settings Identical to standard settings Method prefixing option not available Identical to standard settings Identical to standard settings Not available Not available User settings file When you check the Enable User Settings in External File option in the Database Settings, the user settings file is automatically created and placed here: [DatabaseFolder]/Preferences/settings.4DSettings ... where [DatabaseFolder] is the name of the folder containing the database structure file. The user settings file, in XML format, can be read and modified using integrated 4D XML commands or using an XML editor. This means that you can manage settings by programming, particularly in the context of applications compiled and merged with 4D Volume Desktop. Note that when you modify this file by programming, the changes are only taken into account the next time the database is opened. - 47 - Página Geral Esta página contém várias opções que permitem configurar os parâmetros genéricos do banco de dados 4D. Desenho Esta área contém a opção Mostrar a barra de ferramentas. Quando estiver selecionada, a barra de ferramentas de 4D se mostra no ambiente Desenho. Geral Esta área permite personalizar diferentes opções relativas ao início e ao funcionamento do banco. Modo de início Selecione o ambiente no qual deseja que o banco se abra por padrão: Desenho ou Aplicação. A não ser que especifique otra cosa, por padrão 4D abre o banco no ambiente Desenho se não houver senhas para controlar o acesso. Nota: a escolha de abertura de um banco em modo compilado ou interpretado é feita na caixa de diálogo de abertura (consulte o parágrafo Abrir um Banco de Dados local). Ativar Comentários Automáticos Esta opção permite ativar e definir o sistema de comentários automáticos em seu banco de dados. Estes parâmetros são descritos em Usar os comentários. Nota de compatibilidade: a partir da versão 12 de 4D, os comentários inseridos no cabeçalho de um método utilizando os caracteres // são mostrados como mensagens de ajuda quando o método se referencia a outro método (ver "Utilizar as mensagens de ajuda" em WA SET EXTERNAL LINKS FILTERS). Esta função, muito útil para documentar métodos usuário, não é compatível com os comentários localizados no Explorador. Se deseja utilizar os cabeçalhos dos métodos para áreas de documentação, não ative os comentários automáticos. Prioridade CPU A página Prioridade CPU permite otimizar o desempenho da aplicação 4D ao modificar a frequência com a qual as aplicações 4D deven “retornar” a outras aplicações. Na verdade, 4D convive com o sistema operativo da máquina que o aloja como também possivelmente aloja a outras aplicações. Como a arquitetura dos sistemas nos quais se executa 4D não são multi-tarefas, o sistema passa a uma aplicação que logo passa ao sistema e assim sucessivamente. Quando uma aplicação passa ao sistema, indica o tempo limite que quer deixar a outras aplicações. Em função de seu ambiente de trabalho e suas necessidades específicas, pode colocar o termômetro de prioridade atribuído à aplicação 4D com respeito às outras aplicações que funcionam na mesma máquina. Para um banco similar, é possível definir a prioridade para 4D (modo local), 4D Server e 4D Client separadamente. Estes parâmetros são armazenados no arquivo de estrutura. Por padrão, os valores correspondem aos parâmetros “médios” (cursor localizado no centro do termômetro). Os valores por padrão dão como resultado um consumo de tempo de máquina de aproximadamente 20%. Em alguns casos esta porcentagem poderia não ser suficiente; se por exemplo, destina uma máquina exclusivamente a seu 4D Server, seria un desperdício utilizar somente 20% do tempo de CPU e dedicar 80% do tempo restante a ficar ociosa. Nesse caso, o melhor seria aumentar a prioridade de “4D Server” para melhorar seu rendimento. Enquanto que em outros casos, poderia ser melhor diminuir a prioridade de “4D Server” para deixar mais tempo a outras aplicações. Notas É possível conhecer e definir cada parâmetro por programação utilizando os comandos Get database parameter e SET DATABASE PARAMETER. Atenção: modificar o valor desses cursores de maneira inapropriada pode conduzir a uma deterioração no desempenho da aplicação. - 48 - Página Interface Utilize a página Interface para definir as diferentes opções relacionadas com a interface do banco de dados. General Esta área permite personalizar várias opções de visualização na base. Fonte a utilizar com o comando MESSAGE O botão Selecionar... permite definir a fonte e o tamanho dos caracteres utilizados pelo comando MESSAGE. A fonte e o tamanho por padrão dependem da plataforma de execução de 4D. Nota: esta propriedade também afeta as seguintes partes de 4D: Certas áreas de pré-visualização do Explorador, A regra de Editor de formulários, As outras opções permitem configurar a visualização de várias janelas do modo Aplicação. Progressão da impressão: permite ativar ou desativar a visualização da caixa de diálogo de progressão de impressão durante una impressão. Tela de boas-vindas: quando esta opção não está selecionada, não aparece a janela de boas-vindas do menu atual em modo Aplicação (ver a seção [#title id="1055"/]). Quando oculta esta janela, você se encarrega da gestão de visualização de todas suas janelas por programação, por exemplo no Método banco de dados On Startup. Escritura da cachê: quando esta opção está selecionada, a aplicação 4D mostra uma janela na parte inferior esquerda da tela durante a escritura em disco da cachê de dados "flush". Esta operação bloqueia momentaneamente as ações dos usuários, esta janela lhes informa que a operação está em curso: Nota: Pode definir a frequência de escritura da cachê na Página Banco de dados/Memória das Propriedades da base. Atalhos A área Atalhos permite ver e modificar os atalhos por padrão para três operações básicas de 4D: aceitar formulários de entrada, cancelar formulários de entrada e adicionar a um subformulário. Estes atalhos são iguais para ambas as plataformas. Os ícones em forma de teclas indicam as teclas correspondentes em Windows e Mac OS. Os atalhos por padrão são os seguintes: Aceitar em formulário de entrada: Intro Cancelar em formulário de entrada: Esc Adicionar ao subformulário: Ctrl+Maiúscula+/ (Windows) o Comando+Maiúscula+/ (Mac OS) Para modificar o atalho de uma operação, faça clique no botão Editar. Aparece a seguinte caixa de diálogo: - 49 - Para modificar o atalho, introduza a nova combinação de teclas em seu teclado e faça clique em Ok. Se prefere não ter um atalho para uma operação, clique no botão Limpar. Idiomas de direita à esquerda A etiqueta “Idiomas de direita à esquerda” faz referência aos idiomas que se lêem da direita para a esquerda, como os idiomas árabes. 4D inclui um suporte estendido dos idiomas de direita à esquerda no Windows. Ao ativar o modo “direita à esquerda”, a interface do banco de dados 4D (formulários e menus) é invertida automaticamente em modo Aplicação. Este princípio só é válido sob Windows. Não existe uma função equivalente sob Mac OS X. Esta inversão faz referência não só a direção de leitura ao interior dos objetos de texto, mas também aos objetos gráficos, a posição dos objetos nos formulários, os títulos e botões das janelas, a localização dos menus, etc. Nota: Nas versões atuais de 4D, o modo inverso não está disponível para a impressão de formulários. A opção Inversão dos objetos em modo Aplicação é utilizada para ativar e configurar o modo “direita à esquerda” a nível geral do banco. Existem 3 opções que podem ser utilizadas para configurar a ativação deste modo em função do contexto de execução do banco: Nunca: quando esta opção está selecionada, o banco não passa automaticamente a modo “direita à esquerda”, inclusive se o sistema operacional estiver configurado neste modo. Esta opção está selecionada por padrão. Automático: quando esta opção está selecionada, o banco passa automaticamente a modo “direita a esquerda” quando o sistema operacional está configurado neste modo (este é o caso, por exemplo, da versão árabe de Windows). Siempre: quando esta opção está selecionada, o banco passa imediatamente ao modo “direita à esquerda”, mesmo se o sistema operativo estiver configurado no modo normal (esquerda à direita). Quando modifica esta opção, se aplica imediatamente ao banco (depois de validar as Propriedades). Notas: Esta preferência global também pode ser feita através de programação usando o comando SET DATABASE PARAMETER. Quando o modo direita à esquerda estiver ativo, é possíve desativar localmente cada formulário (ver o parágrafo “Não inverter objetos (Windows)” em Propriedades de formulário). Por padrão, o modo direita à esquerda não inverte os conteúdos das imágens nos formulários. Uma opção adicional permite inverter as imágens se necessário (ver o parágrafo “Efeito espelho para imagens (Windows)” em Usar imagens estáticas). - 50 - Página Compilador Esta página permite definir os parâmetros a utilizar para a compilação do banco. Para maiores informações, consulte o capítulo Compilação. Opções de Compilação Esta área agrupa as opções genéricas utilizadas durante o processo de compilação. . Controle de execução: permite ativar/desativar o controle de execução. O controle de execução é uma análise adicional que permite controlar o código in situ e de acordo ao estado dos objetos do banco em um dado momento. Para maior informação sobre o controle de execução, consulte Controle de execução. Gerar o arquivo de símbolos: esta opção permite gerar um arquivo tipo ASCII que contém a lista de variáveis, seu tipo e o método do qual foi deduzido o tipo. O arquivo de símbolos contém igualmente a lista de seus métodos e funções junto com o tipo de parâmetros e o tipo de um eventual resultado. O arquivo é colocado na pasta que contém a estrutura do banco de dados e se chama automaticamente NomeBanco_symbols.txt. Para maior informação sobre o arquivo de símbolos, consulte O arquivo de símbolos. Compilar também para os processadores 64 bits: esta opção permite compilar o banco para os processadores 64 bits (além da compilação 32 bits). Note que: 4D Server também está disponível na versão 64 bits em Windows a partir da versão 12.1 e em OS X desde versão 15. Não é possível compilar em 64 bits uma base 4D não convertida a Unicode. Gerar arquivo de erro: esta opção permite gerar o arquivo de erros durante a verificação da sintaxe. Este arquivo lista os erros gerais, os erros relacionados com uma linha específica e as advertências. Os erros detectados pelo compilador são acessíveis automaticamente no menu Método de 4D. Sem dúvida, pode ser útil ter um arquivo de erros que pode ser transferido de uma máquina a outra, especialmente quando existem vários desenvolvedores trabalhando em um sistema cliente-servidor. O arquivo de erros é gerado em formato XML para facilitar a análise automática de seu conteúdo. Também permite a criação de interfaces personalizadas de apresentação de erros. O arquivo de erros se chama automaticamente NomeBanco.xml e é criado do lado do arquivo de estrutura do banco. Para maior informação sobre o arquivo de erros, consulte Arquivo de erros . Inicializar as variáveis locais: esta opção permite definir o modo de inicialização das variáveis locais ao princípio dos métodos: a ‘zero’: as variáveis se reiniciam em zero por padrão (string vazia para as strings de caracteres, 0 para números...). a um valor aleatório: o compilador atribui um valor aleatório, sempre o mesmo, (1919382119 para inteiros grandes, “rgrg” para as string de caracteres, True para as booleanas...). Esta opção permite localizar variáveis locais que tenha esquecido de inicializar. não: o compilador não inicializa as variáveis. Desta forma, você ganha tempo durante a execução do banco de dados, sempre e quando sua inicialização seja correta. Endereço de compilação: esta opção permite definir o número de passos efetuados pelo compilador e portanto a duração da compilação. Declarar variáveis: passar por todas as etapas que fazen possível a compilação. São declaradas as variáveis processo e interprocesso: não se realiza o passo de digitação para as variáveis processo e interprocesso. Esta opção pode ser utilizada quando tenha atribuído as variáveis de processo e interprocesso seja manualmente seja utilizando a função de geração automática dos métodos compilador. São declaradas todas as variáveis: não se realiza a etapa de digitação das variáveis locais, processo e interprocesso. Utilize esta opção quando todas as variáveis processo, interprocesso e locais tenham sido digitadas claramente. Digitação padrão Esta área permite definir o o padrão de tipo de variável dos objetos ambíguos do banco. Numérico: esta opção permite forçar a digitação de números de uma maneira inequívoca, ou como variável real ou como Inteiro longo. Não tem prioridade sobre as diretrizes que possam ter sido definidas em seu banco. Pode - 51 - otimizar a execução de seus bancos se escolhe o tipo Inteiro longo. Botão: esta opção permite forçar a digitação dos botões de uma maneira inequívoca, seja como real ou inteiro longo. Não tem prioridade sobre as outras diretrizes que possam ter sido definidas em seu banco. Se refere aos botões padrão assim como aos seguintes objetos: caixas de seleção, caixas de seleção 3D, botões inversos, botões 3D, botões imagem, grade de botões, botões de opção, botões de opção 3D, botões imagem de opção, menus imagem suspenso, menus hierárquicos suspensos e listas hierárquicas. Métodos compilador para... Esta área lhe permite renomear os métodos Compilador gerados automaticamente pelo compilador. Estes métodos reúnem todas as declarações de tipo de variáveis, arrays de processo e inter-processo, assim como os métodos de declaração de variáveis locais. Estes métodos são gerados a partir da janela do compilador. Para maiores informações, consulte o parágrafo Janela de Compilação. Podem ser gerados até 5 métodos compilador; um método compilador é gerado automaticamente se o banco contém os elementos correspondentes: Variáveis : agrupa as declarações de variáveis de processo; Variáveis inter-processo: agrupa as declarações de variáveis inter-processo; Arrays: agrupa as declarações dos arrays de processo; Arrays inter-processo: agrupa as declarações dos arrays inter-processo; Métodos: agrupa as declarações de variáveis locais atribuindo os parâmetros dos métodos (por exemplo, C_LONGINT(meumetodo;$1)). Você pode renomear cada um destes métodos nas áreas correspondentes. Entretanto, sempre estarão precedidos pela etiqueta “Compiler_”(não-modificável). O nome de cada método (incluindo o prefixo) deve ser único e não maior que 31 caracteres. Os caracteres estendidos (caracteres acentuados, símbolos tipográficos, etc.) e os espaços não estão permitidos. - 52 - Página Banco de dados/Armazenamento de dados Utilize esta página para configurar o armazenamento dos dados do banco 4D no disco. Parâmetros Gerais Não mostrar o alerta se o arquivo de estrutura estiver em modo somente leitura: Quando abre uma base de dados cujo arquivo de estrutura está em modo de somente leitura, 4D mostra uma caixa de diálogo de alerta indicando o bloqueio. Se abre o banco, toda modificação realizada ao arquivo de estrutura não será guardada. Em alguns casos, você poderia querer que nenhuma caixa de diálogo apareça, por exemplo, no caso dos bancos de consulta armazenados em CD-ROM. Neste caso, simplesmente selecione esta opção. Permitir somente leitura para o arquivo de dados: esta opção permite configurar o funcionamento da aplicação em caso de abrir um arquivo de dados bloqueado ao nível do sistema operativo. 4D inclui um mecanismo que evita automaticamente a abertura de uma base de dados quando seu arquivo de dados, ou um de seus segmentos, está bloqueado. Neste caso, quando a opção de detecção estiver ativada, 4D lança uma mensagem de alerta e não abre o banco de dados: A menos que esta opção esteja selecionada, não é possível abrir um banco quando seu arquivo de dados estiver bloqueado (funcionamento padrão para os bancos 4D). Sobre os arquivos bloqueados: os arquivos bloqueados podem ser lidos, mas o seu conteúdo não é modificável. Por exemplo, os arquivos estão bloqueados quando estão armazenados em um meio não reescrevível (como um CD- Rom) ou quando forem copiados desde um deste tipo. 4D pode trabalhar de maneira transparente com os arquivos de dados bloqueados, o que permite o uso de bancos de dados armazenados em CD-Rom. Entretanto, este funcionamento corre o risco do uso involuntário de um arquivo de dados no qual não se guardarão as modificações. Esta é a razão pela qual, como padrão, 4D não permite abrir bancos de dados com arquivos de dados bloqueados. Localização da Pasta Temporária Esta área lhe permite modificar a localização das pastas temporárias criadas durante a execução de 4D. A pasta de arquivos temporários é utilizada pela aplicação, quando é necessário, para salvar dados no disco de modo temporário. A localização atual desta pasta é mostrada na área “Atual:”. Você pode clicar nesta área para mostrar o endereço de acesso como uma lista suspensa: São oferecidas 3 opções de localização: Sistema: quando esta opção está selecionada, os arquivos temporários 4D são criados em uma pasta localizada na localização especificada por Windows e/ou Mac OS. É possível procurar a localização atual definida por seu sistema utilizando o comando Temporary folder. Os arquivos são localizados em uma pasta cujo nome é formado pelo nome - 53 - do banco e um identificador único. Pasta de arquivo de dados (opção padrão): quando esta opção está selecionada, os arquivos temporários 4D são criados em uma pasta chamada “temporary files” localizada no mesmo nível que o arquivo de dados do banco. Definido pelo usuário: permite definir uma localização personalizada. Em caso de modificação desta opção, será necessário reiniciar o banco para que se leve em consideração a nova opção. 4D verifica que a pasta selecionada seja acessível para escrita. Se não é o caso, a aplicação tratará outras opções até que encontre uma pasta válida. Nota: esta opção está armazenada nas “propriedades adicionais” da estrutura, acessíveis durante a exportação XML da definição de estrutura (ver Exportar e importar definições de estrutura). Comparação de texto Se você modificar esta opção, deve sair e abrir novamente o banco para que a modificação seja levada em consideração. Ao abrir o banco de dados novamente, todos os índices do banco são reindexados automaticamente. Considere @ como coringa somente ao início e ao final das cadeias de caracteres: esta opção permite definir como interpretar o caractere “@” (arroba) quando utilizado em uma pesquisa ou em uma comparação de cadeias de caracteres, quando se encontra em uma palavra. Quando esta opção não está selecionada (valor padrão), o caractere arroba é considerado um curinga, ou seja, substitui qualquer caractere (ver o parágrafo Caractere Coringa (@)). Quando a opção está selecionada, o caractere arroba é considerado como um caractere simples se for encontrado dentro de uma palavra. Esta possibilidade é particularmente útil para buscar endereços de correio eletrônico, onde o caractere @ é utilizado internamente. Esta opção tem influência em pesquisas, ordenações, comparações de cadeias de caracteres, como também nos dados armazenados na tabela ou em memória, como arrays. Campos e variáveis de tipo alfa (indexados ou não) e texto são afetados por como se interprete o caractere @ em pesquisas e ordenações. Notas: Quanto às pesquisas, é importante notar que se o critério de pesquisa começa ou termina com @, o caractere “@” será considerado como um curinga. Somente quando o caractere “@” aparece no meio de uma palavra (por exemplo: [email protected]) 4D o trata de maneira diferente. Esta opção influencia igualmente no comportamento dos comandos do tema Objetos (Formulários) que permitem o uso do caractere (“@”) no parâmetro Objeto. Por razões de segurança, somente o Administrador ou o Desenhador da banco podem modificar este parâmetro. Linguagem do arquivo de dados atual: esta opção permite configurar a linguagem utilizada para o processamento e comparação das cadeias de caracteres para o banco de dados aberto. A escolha de uma linguagem de comparação influi na ordenação e na pesquisa dos textos assim como também se os caracteres estão em maiúsculas ou minúsculas, mas não tem efeito na tradução de textos ou nos formatos das datas, de hora ou moeda, os quais permanecem na linguagem do sistema. Por padrão, 4D utiliza a linguagem do sistema. Um banco 4D pode funcionar numa linguagem diferente da linguagem do sistema. Quando um banco se abre, o motor 4D detecta a linguagem utilizada pelo arquivo de dados e o entrega à linguagem (modo interpretado ou compilado). As comparações de texto, são efetuadas pelo motor de base de dados ou pela linguagem, na mesma linguagem. Nota: pode modificar este parâmetro nas Preferências da aplicação (ver Página Geral). Neste caso, esta opção se aplica a todos os novos bancos criados por 4D. Considere somente caracteres não alfanuméricos para as palavras chaves: modifica o algoritmo utilizado por 4D para identificar os separadores de palavras chaves e criar seus índices. Por padrão, quando esta opção não está selecionada, 4D utiliza um algoritmo sofisticado que considera as características lingüísticas. Este algoritmo é similar ao utilizado pelos softwares de processamento de palavras para determinar os limites de uma seleção no caso de duplo clique numa palavra. Para maior informação sobre este algoritmo, consulte a seguinte direção: http://userguide.icu-project.org/boundaryanalysis. Quando esta opção estiver selecionada, 4D utiliza um algoritmo simplificado. Nesta configuração, todo caracter não alfanumérico (ou seja, que não é nem uma letra nem um número) é considerado como um separador de palavras chaves. Este parâmetro responde às necessidades específicas associadas a certos idiomas tais como o japonês. Suporte de Mecab (versão japonesa) Em sistemas japoneses, 4D suporta a livraria Mecab, com um algoritmo de indexação de palavras chave especialmente adequado para o idioma japonês. Este novo algoritmo é utilizado por padrão nas versões japonesas a partir de 4D v14. Os arquivos necessários para a livraria Mecab se instalam na pasta mecab da pasta Resources para aplicações 4D (versões em japonês unicamente). Se você desejar, pode desativar o uso do algoritmo Mecab e utilizar a livraria ICU convencional. Para desativar Mecab, simplesmente selecione a opção Considere só caracteres não alfanuméricos para palavras chave: - 54 - Nota: Também pode desativar o uso de Mecab apagando ou renomeando a pasta Resources/Mecab de sua aplicação 4D japonesa. - 55 - Página Banco de dados/Memória Esta aba permite configurar a memória cache para os dados do banco. Parâmetros da cache para o banco Cálculo da cache adaptativa: quando esta opção estiver selecionada, a gestão da memória cach é realizada dinamicamente pelo sistema, respeitando os limites definidos. Isto permite a configuração de uma memória cache de alto rendimento que se adapta à maioria das configurações. O tamanho de memória cache se calcula dinamicamente de acordo aos parâmetros definidos. Os valores oferecidos por padrão correspondem a uma utilização padrão de 4D. Memória física a reservar para o sistema e outros aplicativos: parte da memória RAM a reservar para o sistema e outros aplicativos. Este valor pode ser aumentado com o propósito de otimizar quando outros aplicativos estiverem sendo executados na mesma máquina que o 4D. Porcentagem de memória disponível para a cache: porcentagem de memória disponível destinada por configuração à memória cache. Para obter o tamanho reservado como padrão ao cache, simplesmente realize o seguinte cálculo: (memória física – memória física a reservar) x Porcentagem de memória usada para a cache. No modo adaptativo, o tamanho da memória cache varia dinamicamente em função das necessidades da aplicação e do sistema. Pode definir limites utilizando as opções seguintes: Tamanho máximo: quantidade máxima de memória que pode ser utilizada pela cache. Com uma versão 32 bits de 4D e 4D Server, este valor não pode ser superior a 2 000 MB (2 GB). Com 4D Server 64 bits, este valor é virtualmente ilimitado. Tamanho mínimo: quantidade mínima de memória que se deve reservar para a cache. Este valor não pode ser menor que 4 MB. A definição de limites é muito útil em bancos que são distribuídos entre máquinas cuja configuração de memória não é conhecida de antemão. Nestes casos os limites permitem garantir um desempenho mínimo em todos os casos. A seguinte imagem ilustra este funcionamento: Exemplo de cálculo de memória cache: Memória física a reservar = 256 MB Porcentagem da memória disponível usada para a cache = 50% Tamanho máximo = 1 GB Tamanho mínimo = 128 MB Exemplos de configurações em modo adaptativo Os seguintes exemplos mostram as vantagens de ter uma memória cache adaptativa em várias configurações de programas e memória. Computador com 768 MB de RAM executando um 4D Server unicamente. Neste caso, vale a pena dar-lhe o máximo de memória cache: Memória física a reservar = 256 MB. Porcentagem de memória disponível usada para a cache = 100% já que somente se roda o 4D Server. Tamanho mínimo = 10 MB e Tamanho máximo = 1GB (nesta configuração, estes valores são inúteis). - 56 - --> Tamanho como padrão da cache: (768 - 256) x 100% = 512 MB A mesma configuração anterior mas executando três aplicações 4D Server no computador. Talvez se deseje usar uma quantidade de memória cache igual para cada aplicativo. Somente deve usar 33% da “Porcentagem de memória disponível usada para cache” a cada servidor. --> Tamanho por padrão da cache para cada aplicativo: (768 - 256) x 33% = 170 MB Criação de um aplicativo executável de distribuição massiva em múltiplas configurações. Depois de realizar provas, foi encontrado que a aplicação funciona melhor com memória cache entre 20 e 100 MB. Memória física a reservar = 256 MB. Porcentagem de memória disponível usada para a cache = 50% com o propósito de deixar memória disponível para outros aplicativos. Tamanho mínimo = 20 MB e Tamanho máximo = 100 MB. --> Em uma máquina com 256 MB de RAM, 4D utiliza o mínimo de cache = 20 MB --> Em uma máquina com 1 GB de RAM, 4D utiliza o máximo de cache = 100 MB --> Em uma máquina com 384 MB de RAM, 4D utiliza (384 - 256) x 50% = 64 MB Cálculo da cache adaptativa não selecionado: neste modo, você define o tamanho da memória cache para o banco. 4D mostra uma área de entrada que permite definir a memória cache a utilizar como também a informação relacionada com a memória física (RAM disponível na máquina), a cache atual e a cache depois de reiniciar (levando em conta as suas mudanças). O tamanho da memória cache que introduz se reservará para o banco 4D, sem considerar o estado dos recursos da máquina. Este parâmetro pode ser utilizado em certas configurações específicas ou quando o banco estiver desenhado para ser utilizado em diferentes sistemas em termos de memória. Na maioria dos casos, a memória cache adaptativa oferece melhor rendimento. Conservar a cache em memória física para 4D Server e 4D Volume Desktop Esta opção avançada permite “forçar” a cache a permanecer na memória física (RAM) da máquina quando o banco é executado por 4D Volume Desktop ou 4D Server. Como padrão a cache pode ser esvaziada em parte ou em totalidade na memória virtual da máquina em caso de que seja necessário (a memória virtual é uma área reservada no disco rígido). Como este mecanismo pode, em alguns casos, alterar sensivelmente o rendimento das aplicações lançadas com 4D Server ou 4D Volume Desktop, é possível selecionar esta opção para que a cache se mantenha permanentemente em memória física. É claro que a configuração da máquina (tamanho de RAM, número de aplicativos executados simultaneamente, etc.) deve ser compatível com este princípio. Nota: esta opção não afeta o funcionamento das aplicações executadas com a aplicação 4D. Escrever cache a cada … minutos: especifica a frequência em que se salva automaticamente a cache de dados, ou seja sua escrita em disco. 4D guarda os dados localizados naa cache a intervalos regulares. Pode definir um intervalo de tempo entre 1 e 500 minutos. Como padrão, 4D guarda seus dados cada 15 minutos. A aplicação também guarda todos os seus dados no disco quando muda de ambiente ou sai da aplicação. Quando esperar a entrada de grandes quantidades de dados, considere definir um intervalo corto. Em caso de una falha de energia, somente perderá os dados introduzidos depois da última gravação (se o banco funciona sem arquivo de histórico). Se cada vez que há um esvaziamento da cache, o banco de dados fica lento, é necessário ajustar a frequência. Essa lentidão significa que uma grande quantidade de dados está sendo guardada. Um intervalo mais curto seria mais eficiente já que cada vez haveria menos registros para guardar e portanto o processo seria mais rápido. Como padrão, 4D mostra uma pequena janela durante a escrita e esvaziamento da cache. Se não deseja este aviso visual, pode desmarcar a opção Escrita da cache em Página Interface. - 57 - Página Movimentação A página Movimentação que faz parte das MissingRef permite pré-configurar os deslocamentos de objetos no banco em modo Desenho. 4D aplica estes parâmetros ao arrastar/colar objetos no banco, quando se utiliza como banco de destino. Ações padrões durante a cópia de objetos dependentes Estas opções permitem configurar a movimentação de objetos dependentes, ou seja os objetos associados aos formulários que se movimentam (ver Visão Geral). Pode definir uma ação para cada tipo de objeto dependente. Estas ações, por padrão, são aplicadas automaticamente se o movimento de objetos não provocar conflitos e se a opção Somente em caso de conflito de nome estiver selecionada (ver a próxima seção). Do contrário, essas ações se selecionarão, por padrão, na caixa de diálogo de movimentação. As ações Ignorar, Criar (Renomear se for necessário), Criar (Substituir se for necessário) como também Utilizar outro objeto são oferecidas para cada tipo de objeto. Note que outras ações contextuais mais específicas são propostas na caixa de Caixa de diàlogo Movendo quando é mostrada. Esta é a descrição destas opções: Ignorar: um objeto dependente deste tipo nunca se copia no banco de destino. Na caixa de diálogo de movimentação, a ação Não criar é oferecida como padrão. Criar (Renomear se for necessário): um objeto dependente deste tipo sempre é copiado no banco de destino. Na caixa de diálogo de movimentação, a ação Criar é oferecida como padrão se o objeto não existir no banco de destino. Em caso de conflito de nome com um objeto do banco de destino, o objeto copiado é renomeado adicionando-se o sufixo “_X,” de acordo com o princípio aplicado aos objetos principais. Neste caso, a ação Renomear é oferecida como padrão na caixa de diálogo de movimentação. Criar (Substituir se for necessário): um objeto dependente deste tipo sempre se copia no banco de destino. Na caixa de diálogo de movimentação, a ação Criar é oferecida como padrão se o objeto não existir no banco de dados de destino. Em caso de conflito de nome com um objeto no banco de destino, o objeto copiado substitui o objeto existente. Neste caso, a ação Substituir, é oferecida como padrão na caixa de diálogo de movimentação. Utilizar outro objeto: esta opção provoca a visualização sistemática do diálogo de movimentação, mesmo se a opção “Mostrar somente em caso de conflito de nome” estiver marcada. Durante o movimento de objetos, deve designar um objeto do banco de destino a ser utilizado ao invés do objeto dependente copiado. Nota: estas opções só servem para os objetos dependentes. Para os objetos movimentados, a ação padrão é do tipo Criar (Substituir se for necessário). Mostrar a caixa de diálogo de movimentação: este menu configura a visualização da caixa de diálogo de movimentação. Quando se seleciona a opção Sempre, a caixa de diálogo aparece toda vez que se movimentar objetos, o que permite controlar com mais precisão a operação. Se a opção Somente em caso de conflito de nome estiver selecionada, a caixa de diálogo só aparecerá quando um objeto movimentado (principal ou objeto dependente) tiver um conflito de nome com um objeto do banco de destino. - 58 - Página Backup/Periodicidade As opções que se encontram nesta aba lhe permitem definir e configurar os backups periódicos automáticos do banco de dados. Pode escolher um parâmetro padrão rápido ou personalizar completamente a periodicidade. Aparecem diferentes opções em função do valor definido no menu Backup automático: Nunca: a função de backup programado está inativa. A cada hora: programa um backup automático a cada hora, a partir da próxima hora. A cada dia: programa um backup automático a cada dia. Pode-se indicar a hora quando o backup deve começar. A cada semana: programa um backup automático a cada semana. Duas áreas de entrada adicionais lhe permitem indicar o dia e a hora quando deve começar o backup. Cada mês: programa um backup automático cada mês. Duas áreas de entrada adicionais lhe permitem indicar o dia do mês e a hora quando deve começar o backup. Personalizado: permite configurar backups automáticos "à medida". Quando selecionar esta opção, aparecem várias áreas de entrada adicionais: Todas as X hora(s): permite programar os backups sobre uma base horária. Pode introduzir um valor entre 1 e 24. Todos os X dia(s) às x: permite programar backups com una base diária. Introduza 1 se deseja realizar um backup diário. Quando selecionar esta opção, deve indicar a hora a que deve iniciar o backup. Todas as X semana(s) dia às x: esta opção permite programar os backups com base semanal. Introduza 1 se deseja realizar um backup por semana. Quando selecionar esta opção, deve indicar o dia(s) da semana e a hora a que deve começar o backup. Pode selecionar vários dias da semana. Por exemplo, pode utilizar esta opção para definir dois backups semanais: um na quarta-feira e o outro na sexta. Todos os X mês(es), X dia às x: esta opção permite programar backups com base mensal. Introduza 1 se deseja realizar um backup mensal. Quando selecionar esta opção, deve indicar o dia do mês e a hora a que deve começar o backup. Notas sobre os backups 4D Para uma descrição detalhada dos mecanismos de backup de 4D, consulte o capítulo Backup e restauração do banco de dados. No modo cliente-servidor, os parâmetros de backup só podem ser definidos desde a máquina 4D Server. Gestão das propriedades através do arquivo Backup.XML Todas as preferências de backup e de restauração de 4D estão disponíveis em forma de arquivo XML independente. 4D utiliza os dados neste arquivo para mostrar as opções na caixa de diálogo de Preferências e no momento em que cada backup começa. É possível ler e modificar os parâmetros de backup utilizando os comandos XML de 4D ou através do editor XML. Este permite aos desenvolvedores manejar por programação os parâmetros de backup, especialmente com aplicações compiladas e fusionadas com 4D Unlimited Desktop. O arquivo XML das preferências de backup e de restituição se chama Backup.XML. É criada automaticamente na seguinte localização: PastaBanco/Preferences/Backup/Backup.XML ... onde PastaBanco é a pasta que contêm o arquivo da estrutura do banco. As sub-pastas Preferences/Backup/ são criadas automaticamente se necessário. A descrição das chaves XML associadas às preferências de backup estão no manual Chaves XML Backup. - 59 - Página Backup/Configuração Página Configuração As páginas agrupadas nesta aba permitem designar os arquivos backup e sua localização, assim como a do arquivo de histórico. Conteúdo Esta área lhe permite definir quais arquivos e/ou pastas copiar durante a próxima cópia de segurança. Arquivo de dados: arquivo de dados do banco. Quando esta opção está selecionada, o arquivo de histórico atual do banco, se existir, é incluído na cópia de segurança ao mesmo tempo que os dados. Arquivo de estrutura: arquivo de estrutura do banco. Em casos de bancos compilados e fusionados com 4D Desktop, esta opção permite salvar o arquivo .exe sob Windows e o pacote sob Mac OS. Arquivo de estrutura de usuário (opcional): arquivo de estrutura de usuário do banco, contém os formulários de usuário personalizados (onde aplicar). Para maiores informações, consulte o capítulo Formulários de usuário. Arquivos anexos: esta área permite especificar um conjunto de arquivos e/ou pastas, a serem incluídas na cópia de segurança ao mesmo tempo em que o banco de dados. Estes arquivos podem ser de qualquer tipo (documentos ou modelos plug-in, etiquetas, relatórios, imagens, etc.). Você pode definir arquivos individuais ou pastas cujo conteúdo fará parte da cópia de segurança. Cada elemento anexo aparece com seu endereço de acesso completo na área de “Arquivos anexos”. Remover: este botão permite remover o arquivo selecionar da lista de arquivos anexos. Criar pasta: quando você clicar neste botão, 4D mostra uma caixa de diálogo que lhe permite selecionar uma pasta para incluí-la na cópia de segurança. Em caso de uma restauração, a pasta será recuperada com sua estrutura interna. Você pode selecionar qualquer pasta ou unidade conectada a máquina, exceto a pasta que contém os arquivos do banco de dados. Adicionar Pasta: quando você clicar neste botão, 4D mostra uma caixa de diálogo que lhe permite selecionar um arquivo, para anexa-lo a cópia de segurança. Para mais informação sobre os arquivos de bancos 4D, consulte Descrição dos Arquivos 4D. Localização dos arquivos de backup Esta área permite ver e modificar a localização na qual se armazenarão os arquivos de backup assim como os arquivos de backup do arquivo de histórico (se aplicar). Para ver a localização dos arquivos, clique na área para mostrar sua rota de acesso como menu pop-up. Para modificar a localização onde se guardam estes arquivos, clique no botão [...]. Aparece uma caixa de diálogo de seleção de pastas, a qual permite selecionar uma pasta ou disco onde se localizarão os backups. As áreas “Espaço utilizado” e “Espaço disponível” se atualizam automaticamente e indicam o espaço de disco disponível no disco da pasta selecionada. Gestão do arquivo de histórico A opção Utilizar o arquivo de histórico, quando está selecionada, indica que o banco utiliza um arquivo de histórico. Sua rota de acesso se encontra abaixo dessa opção. Quando esta opção está selecionada, não é possível abrir o banco de dados sem o arquivo de histórico. Como padrão, todo banco criado com 4D utiliza um arquivo de histórico: a criação deste arquivo é parte da estratégia de backup automático (consulte Estratégia de Backup automático). O arquivo de histórico se chama NomeArquivoDados.journal e está localizado na pasta que contenha a estrutura do banco. A ativação de um novo arquivo de histórico requer que os dados do banco sejan guardados antes numa cópia de segurança. Quando selecione e valide esta opção, aparecerá uma caixa de diálogo de alerta para informar que é necessário realizar um backup: - 60 - Se fizer um clique em Aceitar, o backup começa imediatamente depois que o arquivo de histórico for ativado. Se fizer clique em Cancelar, o comando se guarda mas a criação do arquivo de registro fica em espera e será criada apenas depois do próximo backup do banco de dados. Notas sobre os backups 4D Para uma descrição detalhada dos mecanismos de backup de 4D, consulte o capítulo Backup e restauração do banco de dados. No modo cliente-servidor, os parâmetros de backup só podem ser definidos desde a máquina 4D Server. Gestão das propriedades através do arquivo Backup.XML Todas as preferências de backup e de restauração de 4D estão disponíveis em forma de arquivo XML independente. 4D utiliza os dados neste arquivo para mostrar as opções na caixa de diálogo de Preferências e no momento em que cada backup começa. É possível ler e modificar os parâmetros de backup utilizando os comandos XML de 4D ou através do editor XML. Este permite aos desenvolvedores manejar por programação os parâmetros de backup, especialmente com aplicações compiladas e fusionadas com 4D Unlimited Desktop. O arquivo XML das preferências de backup e de restituição se chama Backup.XML. É criada automaticamente na seguinte localização: PastaBanco/Preferences/Backup/Backup.XML ... onde PastaBanco é a pasta que contêm o arquivo da estrutura do banco. As sub-pastas Preferences/Backup/ são criadas automaticamente se necessário. A descrição das chaves XML associadas às preferências de backup estão no manual Chaves XML Backup. - 61 - Página Backup/Backup & Restauração Utilize as opções desta aba para configurar os parâmetros gerais dos backups do banco e das restaurações automáticas. Parâmetros gerais Esta área estabelece diferentes mecanismos a tomar em conta durante os backups. Conservar somente os últimas X arquivos de backup: este parâmetro permite ativar e configurar o mecanismo utilizado para apagar os arquivos de backup mais antigos, o que evita o risco de saturação do HD. Esta característica funciona assim: logo que termine o backup atual, 4D borra o arquivo mais antigo se ele se encontra na mesma localização do arquivo do qual se faz backup, e tem o mesmo nome (pode pedir que o arquivo mais antigo se apague antes do backup para economizar espaço). Se, por exemplo, o número de conjuntos se fixa em 3, os primeiros três backups crian os arquivos MeuBanco-0001, MeuBanco-0002, e MeuBanco-0003 respectivamente. Durante o quarto backup, é criado o arquivo MeuBanco-0004 e se apaga MeuBanco-0001. Como padrão, o mecanismo para apagar jogos está ativado e 4D conserva 3 conjuntos de backups. Para desativar o mecanismo, simplesmente desmarque a opção. Nota: este parâmetro se refere aos conjuntos de backup do banco e aos do arquivo de histórico. Backup somente se o arquivo de dados foi modificado: quando esta opção estiver marcada, 4D inicia os backups programados somente se dados no banco foram adicionados, modificados ou eliminados desde o último backup. Do contrário, o backup programado é cancelado e postergado até o próximo backup programado. Não se gera erro; mesmo assim o diário backup registra que o backup foi postergado. Esta opção também permite economizar tempo de máquina no backup dos bancos principais utilizados em consultas. Note que a ativação desta opção não considera as possíveis modificações realizadas ao arquivo de estrutura ou aos arquivos anexos. Nota: este parâmetro se refere aos backups do banco e do histórico. Excluir o backup mais antigo antes/depois do backup: esta opção somente se utiliza se a opção “Conservar unicamente os X últimos arquivos de backup” estiver selecionada. Isso permite especificar se 4D deve começar por apagar o arquivo mais antigo antes de realizar o backup (opção antes) ou se a eliminação deve ocorrer uma vez que se tenha realizado o backup (opção depois do backup). Para que este mecanismo funcione, o arquivo mais antigo não deve ter sido renomeado ou movido. Se o backup falhar: esta opção permite definir o mecanismo utilizado para manejar backups que falharam (backup impossível). Quando não é possível realizar um backup, 4D permite fazer uma nova tentativa. Nota: 4D considera um backup como com erro se o banco não é lançado no momento em que o backup automático foi programado. Tentar novamente na próxima data e hora programada: esta opção somente tem sentido quando se trabalha com backups automáticos programados. Cancela o backup que falhou e um erro é gerado. Tentar novamente em X segundos, minutos ou horas: quando essa opção estiver selecionada, se faz uma nova tentativa de backup depois de um período de espera. Esse mecanismo permite antecipar certas circunstâncias que bloqueiam o backup. Pode definir um período de espera em horas, minutos ou segundos, utilizando o menu correspondente. Se a nova tentativa também falha, um erro é gerado e a falha é anotada na área estado do último backup e no arquivo de diário de backups. Cancelar a operação depois de X tentativas: este parâmetro permite definir o número máximo de tentativas de backup que falham. Se o backup não se realizou com êxito depois de alcançar o número máximo de tentativas definido, o backup é cancelado e o erro 1401 é gerado (“o número máximo de tentativas de backup foi alcançado; o backup automático está temporariamente desativado”). Neste caso, não se tentará realizar um novo backup automático enquanto a aplicação não for reiniciada, ou complete com sucesso um backup manual. Este parâmetro é útil para evitar um caso de um problema prolongado (que necessita de intervenção humana) que evita que se realize o backup e faça com que a aplicação tente repetidamente o backup em prejuízo de seu rendimento geral. Como padrão, este parâmetro não está selecionado. Arquivo Esta área permite definir as opções de geração dos arquivos. Estas opções aplicam aos arquivos de backup principais e aos arquivos de backup do histórico. Tamanho do segmento (Mb) 4D permite segmentar arquivos, ou seja cortar um arquivo em tamanhos menores. Isso permite, por exemplo, - 62 - armazenar um backup em diferentes discos (CDs, ZIPs, etc.). Durante um processo de restauração, 4D fusionará automaticamente os segmentos. Cada segmento se chama MeuBanco[xxxx-yyyy].4BK, onde xxxx é o número de backup e yyyy é o número de segmento. Por exemplo, os três segmentos do sexto backup do banco MeuBanco se chamarão MeuBanco[0006-0001].4BK, MeuBanco[0006-0002].4BK e MeuBanco[0006-0003].4BK. O menu Tamanho do segmento é uma combo box que permite definir o tamanho em MB de cada segmento do backup. Pode escolher um dos tamanhos pré-definidos ou introduzir um tamanho específico entre 0 e 2048. Se colocar 0, não há segmentação (este é o equivalente de colocar Nenhum). Taxa de compressão Como padrão, 4D comprime os backups para economizar espaço em disco. Entretanto, a fase de compressão de arquivos pode fazer com que os backups se tornem muito lentos, quando grandes volumes de dados estão sendo manejados. A opção Taxa de compressão permite ajustar a compressão: Nenhum: não se aplica nenhuma taxa de compressão. O backup é mais rápido mas os arquivos são consideravelmente maiores. Rápido (padrão): esta opção é um compromisso entre velocidade do backup e tamanho do arquivo. Compacto: a taxa de compressão máxima se aplica aos arquivos. Os arquivos utilizam o menor espaço possível no disco, mas o backup é muito mais lento. Taxa de entrelaçamento e Taxa de redundância 4D gera arquivos utilizando algoritmos específicos baseados em mecanismos de otimização (entrelaçamento) e segurança (redundância). Pode estabelecer estes mecanismos conforme suas necessidades. Os menus para estas opções também possuem os fatores Alto, Médio, Baixo, e Nenhum (como padrão). Taxa de entrelaçamento: o entrelaçamento consiste em guardar dados em setores não contíguos para limitar os riscos em caso de dano dos setores. Quanto maior a taxa, maior o consumo de memória do processamento dos dados. Taxa de redundância: a redundância permite assegurar os dados presentes em um arquivo ao repetir a mesma informação várias vezes. Quanto maior a taxa de redundância, melhor a segurança do arquivo; entretanto, o armazenamento é mais lento e o tamanho do arquivo é maior. Restituição automática Estas opções são utilizadas para configurar os mecanismos automáticos a considerar durante a abertura de um banco de dados danificado. Restaurar o último backup se o banco de dados estiver danificado: quando esta opção estiver marcada, o programa inicia automaticamente a restauração do arquivo de dados do último backup válido do banco, se detecta alguma anomalia (por exemplo um arquivo corrompido) durante o lançamento do banco. Não é necessária nenhuma intervenção por parte do usuário; a operação se registra no diário do backup. Nota: no caso de uma restauração automática, somente se restitui o arquivo de dados. Se quiser recuperar os arquivos anexos ou o arquivo de estrutura, deve realizar uma restauração manual. Integrar o último histórico se o banco estiver incompleto: quando esta opção está selecionada, o programa integra automaticamente histórico durante a abertura ou restauração de um banco. Quando abre um banco, o histórico atual se integra automaticamente se 4D detecta que as operações guardadas no histórico não estão presentes nos dados. Esta situação se apresenta, por exemplo, quando ocorre uma perda de energia, então as operações no cache de dados não são escritas no disco. Quando se restaura um banco, se o arquivo de histórico atual ou o arquivo de backup de histórico têm o mesmo número que o arquivo de backup guardado na mesma pasta, 4D examina seu conteúdo. Se contêm operações não presentes no arquivo de dados, ele o integra automaticamente. Não se mostra nenhuma caixa de diálogo ao usuário; a operação é completamente automática. A meta é fazer com que o uso seja o mais fácil possível. A operação se registra no diário de backup. Notas sobre os backups 4D Para uma descrição detalhada dos mecanismos de backup de 4D, consulte o capítulo Backup e restauração do banco de dados. No modo cliente-servidor, os parâmetros de backup só podem ser definidos desde a máquina 4D Server. Gestão das propriedades através do arquivo Backup.XML Todas as preferências de backup e de restauração de 4D estão disponíveis em forma de arquivo XML independente. 4D utiliza os dados neste arquivo para mostrar as opções na caixa de diálogo de Preferências e no momento em que cada backup começa. É possível ler e modificar os parâmetros de backup utilizando os comandos XML de 4D ou através do editor XML. Este permite aos desenvolvedores manejar por programação os parâmetros de backup, especialmente com aplicações compiladas e fusionadas com 4D Unlimited Desktop. - 63 - O arquivo XML das preferências de backup e de restituição se chama Backup.XML. É criada automaticamente na seguinte localização: PastaBanco/Preferences/Backup/Backup.XML ... onde PastaBanco é a pasta que contêm o arquivo da estrutura do banco. As sub-pastas Preferences/Backup/ são criadas automaticamente se necessário. A descrição das chaves XML associadas às preferências de backup estão no manual Chaves XML Backup. - 64 - Página Cliente-servidor/opções de rede Esta página agrupa os parâmetros relacionados com o uso do banco em modo cliente-servidor. Estas propriedades só são consideradas quando o banco se utiliza em modo remoto. Os parâmetros são agrupados em duas abas: Opções de rede e Configuração IP (Tabela de configuração AutorizarNegar). Rede Publicar o banco ao iniciar Esta opção permite indicar se o banco 4D Server deve aparecer ou não na lista de bancos publicados na caixa de diálogo de conexão. Quando a opção estiver selecionada (opção selecionada como padrão), o banco se torna público e aparece na lista de bancos publicados (página TCP/IP). Quando a opção não estiver selecionada, o banco não se torna público e não aparece na lista de bancos publicados. Para conectar, os usuários devem introduzir manualmente a direção do banco na página Personalizado da caixa de diálogo de conexão. Nota: se modificar este parâmetro, deve reiniciar o banco servidor para que seja considerada. Nome de publicação Esta opção permite modificar o nome de publicação de um banco publicado pelo 4D Server, ou seja, o nome que é mostrado na página de publicação dinâmica TCP/IP da caixa de diálogo de conexão (ver a seção Conexão a um banco de dados 4D Server). Como padrão, 4D Server utiliza o nome do arquivo de estrutura do banco. Pode escrever qualquer nome personalizado que deseje. Nota: este parâmetro não é considerado nas aplicações cliente-servidor personalizadas. Em teoria, a aplicação cliente se conecta diretamente à aplicação servidor, sem passar pela caixa de diálogo de conexão. Entretanto, em caso de erro, esta caixa de diálogo aparecerá, neste caso, o nome da publicação da aplicação servidor é o nome do banco compilado. Número de porta Esta opção permite modificar o número da porta TCP na qual o 4D Server publica o banco de dados. Esta informação se armazena na estrutura do banco e em cada máquina cliente. Como padrão, o número de porta TCP utilizado pelo 4D Server e 4D em modo remoto é 19813. Personalizar este valor é necessário quando se deseja utilizar várias aplicações 4D no mesmo aparelho com o protocolo TCP, neste caso, deve especificar um número de porta diferente para cada aplicação. Ao modificar este valor desde 4D Server ou 4D, se transmite automaticamente a todas as máquinas 4D conectadas ao banco. Para atualizar as outras máquinas clientes não conectadas, apenas deve entrar o novo número de porta (precedido por dois pontos) depois da direção IP da máquina servidor na página Personalizado da caixa de diálogo de conexão. Por exemplo, se o novo número de porta é 19888: - 65 - Nota: somente os bancos publicados na mesma porta que o definido no cliente 4D são visíveis na página de publicação dinâmica TCP/IP. 4D Server e números de porta 4D Server utiliza três portas TCP para as comunicações entre os servidores internos e os clientes: Servidor SQL: 19812 como padrão (modificável através da página "SQL/Configuração" das Preferências). Servidor da aplicação: 19813 como padrão (modificável através da página "Cliente-Servidor/Configuração" das Preferências, ver acima). Servidor DB4D (servidor de banco de dados): 19814 como padrão. Este número de porta não pode ser modificado diretamente, mas é sempre o número da porta do servidor da aplicação + 1. Quando um cliente 4D se conecta ao 4D Server, se utiliza a porta TCP do servidor da aplicação (19813 ou a porta indicada depois dos dois pontos ':' na direção IP que se mostra na caixa de diálogo de conexão). A conexão a outros servidores através de suas respectivas portas é então automática, já que não é necessário especificar-la. Tenha em mente que no caso de acesso através de um router ou um firewall, as três portas TCP devem estar abertas de forma explícita. Tempo limite de conexão Cliente-servidor Este termômetro permite definir o tempo limite (timeout - período de inatividade depois do qual a conexão se fecha) entre 4D Server e as máquinas clientes conectadas a ele. A opção ilimitado elimina o tempo limite. Quando esta opção estiver selecionada, o controle de inatividade do cliente se desativa. Quando se seleciona um tempo limite, o servidor fechará a conexão de um cliente se não recebe nenhuma petição do cliente durante o tempo limite especificado. Comunicação cliente-servidor Inscrever os clientes ao início para executar no cliente Quando esta opção está selecionada, todos as máquinas 4D remotas que se conectam ao banco podem executar os métodos remotamente. Este mecanismo é detalhado na seção Procedimentos armazenados nas máquinas clientes. Encriptar as conexões cliente-servidor Esta opção permite ativar o modo SSL (modo de segurança) para a comunicação entre a máquina servidora e as possíveis máquinas 4D remotas. Esta opção é detalhada na seção Criptografar conexões cliente-servidor. Atualizar a pasta "Resources" durante uma sessão Esta configuração permite definir globalmente o modo de atualização da instância local da pasta nas máquinas 4D conectadas quando a pasta do banco foi modificada durante a sessão (a pasta se sincroniza automaticamente no equipamento remoto cada vez que uma sessão se abre). Três opções estao disponíveis: - 66 - Nunca: a pasta local não se atualiza durante a sessão. A notificação enviada pelo servidor é ignorada. A pasta local pode ser atualizada de forma manual utilizando o comando Update Local Resources. Sempre: a sincronização da pasta local é realizada automaticamente durante a sessão cada vez que se envia a notificação pelo servidor. Perguntar: quando é enviada a notificação pelo servidor, é mostrada uma caixa de diálogo nas máquinas cliente, indicando a modificação. O usuário pode aceitar ou recusar a sincronização da pasta local. A pasta centraliza os arquivos personalizados necessários para a interface do banco (arquivos de tradução, imagens, etc.) Os mecanismos automáticos ou manuais permitem notificar a cada cliente quando o conteúdo desta pasta foi modificado. Para mais informação, consulte a seção Gerenciamento da pasta Resources. Abrir a estrutura em modo Esta opção permite definir o modo de abertura da estrutura do banco para as máquinas clientes. Como padrão, está definido o modo Leitura/Escrita mas também é possível configurar a abertura no modo Somente leitura para evitar modificações na estrutura. - 67 - Página Cliente-servidor/configuração IP Tabela de configuração Autorizar-Negar Esta tabela permite estabelecer as regras de controle de acesso ao banco em função da direção IP dos equipamentos 4D remotos. Esta opção permite reforçar a segurança, por exemplo, para aplicações estratégicas. Nota: esta tabela de configuração não controla as conexões web. O funcionamento da tabela de configuração é o seguinte: A coluna "Autorizar-Negar" permite selecionar o tipo de regra a aplicar (Autorizar ou Negar) utilizando um menu popup. Para agregar uma regra, clique no botão Adicionar (+). Uma nova linha aparece na tabela. O botão Eliminar (-) permite eliminar a linha atual. A coluna "Direção IP" permite designar a direção ou direções IP, incluídas na regra. Para especificar uma direção, clique na coluna e escreva a direção da seguinte forma: 123.45.67.89. Pode utilizar um caractere * (asterisco) para especificar as direções do tipo "começa com". Por exemplo, 192.168 .* indica todas as direções que começam com 192.168. A aplicação das regras é efetuada na ordem de visualização da tabela. Se duas regras são contraditórias, se dá prioridade à regra localizada mais acima na tabela. Pode re-organizar as linhas modificando a ordem atual (clique no cabeçalho da coluna para alternar o sentido de ordenação). Também pode mover linhas através de arrastar e soltar. Por razões de segurança, somente as direções correspondentes a uma regra de autorização explícita poderão ser conectadas. Em outras palavras, se a tabela só conter uma ou mais regras Negar, todas as direções serão negadas porque nenhuma cumpria ao menos uma regra. Se deseja negar somente determinadas direções (e permitir outras), adicione uma regra Autorizar * ao final da tabela. Por exemplo: - Negar 192.168.* (negar todas as direções que comecem por 192.168) - Autorizar * (e autorizar todas as demais direções) Como padrão, não se aplicam restrições de conexão por 4D Server: a primeira linha da tabela contêm a etiqueta Autorizar e o caractere * (todas as direções). - 68 - Página Web/configuração As abas da página Web permitem configurar múltiplos aspectos do servidor web integrado de 4D (segurança, início, conexões, serviços web, etc.). Para mais informação sobre o funcionamento do servidor web de 4D, consulte o capítulo Web Server do manual Linguagem de 4D. Para mais informação sobre os serviços web de 4D, consulte o capítulo Publicar ou utilizar serviços Web. Informação de publicação Publicar o banco ao iniciar Indica se o servidor web deve iniciar ao se lançar a aplicação 4D. Esta opção está descrita na seção Configuração web server e gestão de conexão. Número de porta TCP Automaticamente, 4D publica um banco web na porta Web TCP padrão, que é a porta 80. Se essa porta já estiver sendo utilizada por outro serviço Web, deve modificar o porto TCP utilizado por 4D para este banco. A modificação da porta TCP que permite iniciar o servidor Web 4D baixo Mac OS X sem ser o usuário raiz da máquina (ver a seção Configuração web server e gestão de conexão). Para fazer isso, vá à área de entrada Porta TCP e indique o número da porta TCP a ser utilizada (um número de porta TCP que não esteja sendo utilizada por outro serviço TCP/IP na máquina). Nota: Se digitar 0, 4D utilizará o número de porta TCP como padrão, ou seja 80. Ao nível do navegador web, deve incluir esse número de porta TCP personalizado na descrição da direção utilizada para se conectar ao banco Web. A direção deve ter um sufixo que consiste em dois pontos seguidos pelo número de porta. Por exemplo, se utiliza a porta TCP 8080, deve especificar no navegador “123.4.567.89:8080”. Advertência: Se utiliza números de porta TCP diferentes dos números do padrão (80 para o modo padrão e 443 para o modo SLL), tenha cuidado de não utilizar números de porta que sejam números padrão para outros serviços que possam utilizá-la simultaneamente. Por exemplo, se planeja utilizar também o protocolo FTP em sua máquina servidor Web, não utilize as portas TCP 20 e 21, as quais são as portas padronizadas para esse protocolo. Para conhecer as atribuições padrão de números de porta TCP, consulte a seção Apêndice B, Números de portas TCP na documentação de Comandos Internet 4D. Os números de porta inferiores a 256 estão reservados para os serviços padrão, e os números 256 a 1 024 estão reservados para os serviços específicos originados nas plataformas UNIX. Para máxima segurança, especifique um número de porta superior a estes intervalos, por exemplo entre 2 000 ou 3 000. Definir o Endereço IP para os pedidos HTTP Esta opção permite definir o endereço IP no qual o servidor Web receberá os pedidos HTTP. Por padrão, o servidor Web responde em todos os endereços IP (opção Todos). O menu pop-up mostra automaticamente todos os endereços IP disponíveis na máquina. Se você deseja que o servidor só responda os pedidos enviados a um endereço TCP/IP específico, simplesmente selecione este endereço através de um menu. Esta funcionalidade é para os servidores Web 4D localizados em máquinas com vários endereços TCP/IP, o que é caso freqüente para a maioria dos provedores de hospedagem na Internet (multiHoming.) A implementação de um sistema MultiHoming requer configurações específicas na máquina servidor web: Configuração MultiHoming em Mac OS Para configurar um sistema MultiHoming em Mac OS: 1. Abra o painel de controle TCP/IP. 2. Selecione a opção Manual do menu Configuração. 3. Crie um arquivo de texto chamado "Direção IP secundária" e guarde-o na subpasta Preferências de sua pasta Sistema. Cada linha do arquivo "Direção IP secundária" deve conter uma direção IP secundária e se é necessário, uma máscara de sub-rede e uma direção de router para a direção IP secundária. Para mais informação consulte a documentação Apple. Configuração MultiHoming em Windows Para configurar um sistema MultiHoming em Windows: 1. Selecione as seguintes sequências de comandos (ou seus equivalentes em função de sua versão de Windows): - 69 - Menu Início > Painel de controle > Conexões de rede e Internet> Conexão de área local (Propriedades) > Protocolo de Internet (TCP/IP) > botão Propriedades > botão Opções avançadas... Se mostra a caixa de diálogo de configuração "Parâmetros avançados TCP/IP). 2. Clique no botão Agregar.... na área "Direções IP" e inclua as direções IP adicionais. Pode definir até 5 direções IP diferentes. Para esta operação, pode necessitar da ajuda de um administrador de redes. Ativar SSL Indique se o servidor web deve aceitar ou não as conexões seguras. Esta opção se descreve na seção . Número de porta HTTPS Permite define a porta TCP/IP utilizada pelo servidor Web para as conexões seguras HTTP via SSL (protocolo HTTPS). O número de porta HTTPS vem estabelecido como 443 (valor padrão). Você pode considerar a alteração do número de porta por duas razões principais: Por razões de segurança: os ataques de hackers contra os servidores Web se concentram geralmente nas portas padrões TCP (80 e 443). Em Mac OS X, para permitir aos usuários “padrões” iniciar o servidor Web em modo seguro. Sob Mac OS X, o uso de portas TCP/IP reservado para publicações Web (0 a 1023) requerem privilégios de acesso específicos: só o usuário root pode iniciar uma aplicação utilizando estas portas. Para que usuários padrões possam iniciar o servidor Web, uma solução é modificar o número de porta TCP/IP (ver a seção Configuração web server e gestão de conexão). É possível passar qualquer valor válido (para evitar restrições de aceso em Mac OS X, deve passar um valor superior a 1023). Para conhecer os números de porta padrões TCP, por favor, consulte o parágrafo "Número da Porta TCP" Allow database access through 4DSYNC URLs Esta opção da página "Web/Configuração" das Propriedades da base permite controlar o suporte de petições que contém os URLs /4DSYNC. Estes URLs se utilizam para a sincronização de dados através de HTTP (para obter mais informação sobre este mecanismo, consulte o parágrafo URL 4DSYNC/). Esta opção habilita ou desabilita o processamento específico das petições que contem /4DSYNC: Quando não está selecionada, as petições /4DSYNC são consideradas como petições padrão e não permitem o processamento específico (o uso de uma petição de sincronização provoca o envio da resposta tipo "404 - recurso não disponível"). Quando se ativa, o mecanismo de sincronização está ativado; as petições /4DSYNC se consideram como petições especiais e são processadas pelo servidor HTTP de 4D. Por padrão: esta opção não está selecionada no banco de dados criadas com 4D a partir da versão 13. esta opção não está selecionada no banco de dados convertidas de uma versão anterior a 4D v13, razões de compatibilidade. Lhe recomendamos que a desative se sua aplicação não utiliza a função de replicação HTTP. O alcance desta opção é local à aplicação e o servidor web deve ser reiniciado para ter ela em conta. Rotas Raiz HTML padrão Permite definir a localização padrão dos arquivos do website e indica o nível hierárquico no disco sobre o qual não se poderá acessar os arquivos. Esta opção está descrita na seção Conexões de Segurança. Página de início padrão Esta opção permite definir a página de início padrão para todos os navegadores que se conectem ao banco. Esta página pode ser estática ou semi-dinâmica. Automaticamente, quando o servidor web é lançado pela primeira vez, 4D cria uma página de início chamada “index.html” e a coloca na pasta raiz HTML. Se não modifica esta configuração, todo navegador que se conecte ao servidor web obterá a seguinte página: - 70 - Para modificar a página web padrão, pode substituí-la simplesmente pela sua própria página “index.html” na pasta raiz do banco ou introduzir a rota de acesso relativa da página que deseja definir a área “Página de início padrão”. A rota de acesso deve ser estabelecida com relação à pasta raiz HTML como padrão. Para assegurar a compatibilidade multi-plataforma de seus bancos, o servidor web 4D utiliza, para descrever as rotas de acesso, convenções de escritura particulares. As regras de sintaxe são as seguintes: As pastas se separam por uma barra oblíqua (“/”) A rota de acesso não deve terminar com uma barra oblíqua (“/”) Para “subir” um nível na hierarquia da pasta, introduza “..” (Dois pontos) antes do nome da pasta A rota de acesso não deve começar com uma barra oblíqua (“/”) Por exemplo, se deseja que a página de início por padrão seja a página “MinhaCasa.htm”, localizada na pasta “Web” (localizada na pasta raiz HTML do banco), introduza “Web/MinhaCasa.htm”. Nota: também pode definir uma página de início padrão para cada processo web utilizando a rotina WEB SET HOME PAGE. Se não especifica uma página de início padrão, se chama ao Método de banco de dados On Web Connection. Pode decidir se quer processar a requisição por programação. - 71 - Página Web/Opções (I) Cachê de Páginas estáticas O servidor web 4D dispõe de uma cachê que permite carregar na memória as páginas estáticas, as imagens GIF, as imagens JPEG (<100 kb) e as folhas de estilos (arquivos .css), a medida em que são solicitadas. A utilização de um cachê permite aumentar de maneira significativa o rendimento do servidor web ao enviar páginas estáticas. O cachê é comum para todos os processos web. Pode definir o tamanho do cachê nas Preferências. Por padrão (a partir de 4D v14 R5), o cachê das páginas estáticas não está ativo para as novas bases de dados. Para desativar, simplesmente selecione a opção Usar o cachê Web de 4D. Pode modificar o tamanho do cachê na área Tamanho cachê de páginas. O valor a definir depende do número e tamanho das páginas estáticas de seu website, como também dos recursos de que dispõe a máquina local. Nota: durante a utilização de seu banco web, pode controlar o desempenho do cachê utilizando a rotina WEB CACHE STATISTICS. Se, por exemplo, notar que a taxa de utilização do cachê é próxima a 100%, pode considerar aumentar o tamanho que tenha estabelecido. As URLs /4DSTATS e /4DHTMLSTATS também permitem obter informação sobre o estado do cachê. Consulte a seção Informação sobre o Website. Uma vez ativado o cachê, o servidor web 4D procura a página solicitada por o navegador primeiro no cachê. Se encontrar a página, a envia imediatamente. Caso contrário, 4D carrega a página do disco e a localiza no cachê. Quando o cachê está cheio e é necessário espaço adicional, 4D “esvazia” as páginas menos utilizadas, por ordem de mais velhas para mais recentes. Esvaziar a cachê Em qualquer momento, pode esvaziar a cachê das páginas e das imagens que contém (por exemplo, se modifica uma página estática e deseja carregá-la na cachê). Para fazer isso, deve clicar no botão Esvaziar cachê. A cachê se esvazia imediatamente. Nota: também pode utilizar o URL especial /4DCACHECLEAR. Processo Web Conservação de processos inativos Permite definir o tempo limite (timeout) antes de fechar os processos web inativos no servidor. Número máximo de processos web concorrentes Esta opção indica o limite estritamente superior do número de processos web de todo tipo (processos web padrão ou pertencentes ao "grupo de processos") que podem ser abertos simultaneamente no servidor. Este parâmetro permite a prevenção da saturação do servidor 4D como resultado de um número massivo de requisições. Como padrão, este valor é estabelecido como 32 000 (ou, em outras palavras, pode criar simultaneamente até 31 999 processos web). Pode definir o número entre 10 e 32 000. Quando se alcança o número máximo de processos web concorrentes (menos um), 4D não cria mais novos processos e envia a seguinte mensagem “Servidor não disponível” (estado HTTP 503 – Serviço não disponível) a cada nova requisição. Nota: o número máximo de processos web pode também se definir com ajuda do comando WEB SET OPTION. Como determinar o valor correto? Em teoria, o número máximo de processos web é o resultado da divisão Memória disponível/Tamanho da pilha de um processo web. Outra solução é visualizar a informação dos processos web mostrada no Explorador de execução: se indica o número atual de processos web e o número máximo alcançado desde o início do servidor web. Automatic Session Management Ativa ou desativa o mecanismo interno para o controle automático de sessões de usuário por o servidor HTTP de 4D. Este mecanismo se descreve na sessão Web Sessions Management. Por padrão, este mecanismo se ativa nas bases de dados criadas a partir de 4D v13. No entanto, por razões de compatibilidade, está desabilitado em bases de dados convertidas a partir de versões anteriores de 4D. Você deve o habilitar explicitamente para ser beneficiado desta funcionalidade. Quando esta opção está selecionada, a opção "Reutilização dos contextos temporais" se seleciona automaticamente (e - 72 - bloqueada). Reutilização de contextos temporários (4D em modo remoto) Permite otimizar o funcionamento do servidor web de 4D em modo remoto reutilizando processos web criados para o processamento de requisições web anteriores. Na realidade, o servidor web de um 4D Client necessita um processo web específico para a administração de cada requisição web; quando é necessário, este processo se conecta à máquina 4D Server para acessar aos dados e ao motor do banco de dados. Logo gera um contexto temporal utilizando suas próprias variáveis, seleções, etc. Uma vez processada a requisição, o processo se aborta. Quando a opção Reutilização dos contextos temporais está selecionada, 4D mantém os processos web específicos criados em 4D Client e os reutiliza para as requisições posteriores. Ao eliminar a etapa de criação do processo, melhora o rendimento do servidor web. Por outro lado, deve assegurar-se neste caso de inicializar sistematicamente as variáveis utilizadas em métodos 4D para evitar obter resultados incorretos. Igualmente, é necessário apagar as seleções ou registros atuais definidos durante a requisição anterior. Senhas Web Modo BASIC e modo DIGEST Pode definir nas preferências do banco, o sistema de controle de acesso que deseja aplicar a seu servidor web. São oferecidos dois modos de autenticação: Modo BASIC e modo DIGEST. O modo autenticação se refere à maneira como se coleta e processa a informação relativa ao nome de usuário e senha. Em modo BASIC, o nome e a senha introduzidas pelo usuário são enviadas sem encriptar nas requisições HTTP. Este princípio não assegura uma segurança total ao sistema já que a informação pode ser interceptada e utilizada por terceiros. O modo DIGEST oferece um nível maior de segurança já que a informação de autenticação é processada por um processo unidirecional chamado dispersão (hashing) que faz com que seu conteúdo seja impossível de decifrar. Para o usuário, o uso de um modo de autenticação ou outro é transparente. Notas: Por razões de compatibilidade, o modo de autenticação BASIC é utilizado como o padrão automático das bases 4D convertidas a versão 11 (se a opção “Utilizar senhas” foi selecionada na versão anterior). Deve ativar explicitamente o modo Digest. A autenticação Digest é uma função de HTTP1.1 e não é suportada por todos os navegadores. Por exemplo, somente as versões 5.0 e superiores de Microsoft Internet Explorer aceitam este modo. Se um navegador que não suporta esta funcionalidade envia uma requisição a um servidor web, quando se ativa a autenticação Digest, o servidor negará a requisição e devolverá uma mensagem de erro ao navegador. A escolha do modo de autenticação se realiza na página Web/Opções (I) da caixa de diálogo de Propriedades do banco: - 73 - Na área "Senhas web", há três opções disponíveis: Sem senhas: nenhuma autenticação é necessária para a conexão ao servidor web. Neste caso: - Se existe On Web Authentication database method se executa e além de $1 e $2, somente as direções IP do navegador e do servidor ($3 e $4) são informadas, o nome de usuário e a senha ($5 y $6) estão vazios. Neste caso, pode filtrar as conexões em função da direção IP do navegador e/ou da direção IP pedida do servidor. - Se o On Web Authentication database method não existe, as conexões são aceitas automaticamente. Senhas com protocolo BASIC: autenticação padrão em modo BASIC. Quando um usuário se conecta ao servidor, aparece uma caixa de diálogo em seu navegador permitindo que introduza seu nome e sua senha. Estes dois valores são enviados ao On Web Authentication database method junto com os outros parâmetros da conexão (direção e porta IP, URL...) de maneira que você os possa processar. Este modo oferece acesso à opção Incluir senhas 4D que permite utilizar o sistema 4D de senhas do banco (definido em 4D), seja em substituição ou de forma conjunta com seu próprio sistema de senhas, Senhas com protocolo DIGEST: autenticação no modo DIGEST. Como no modo BASIC, os usuários devem introduzir seu nome e senha quando se conectam. Estes dois valores são enviados criptografados ao On Web Authentication database method com os outros parâmetros da conexão. Deve autenticar um usuário utilizando o comando Validate Digest Web Password . Notas: Deve reiniciar o servidor web para que as modificações efetuadas a estes parâmetros sejan levadas em conta Com o servidor web de 4D Client, recorde que todos os websites publicados pelas máquinas clientes 4D compartirão a mesma tabela de usuários. A validação dos usuários/senhas é levada a cabo pela aplicação 4D Server. BASIC Mode: Combinação de senhas e On Web Authentication Database Method Quando se utiliza o modo BASIC, o sistema de filtro das conexões ao servidor web de 4D depende da combinação de dois parâmetros: As opções de senhas web na caixa de diálogo de Propriedades do banco, A existência do On Web Authentication Database Method. - 74 - Estas são as diferentes possibilidades de controle das conexões: A opção “Senhas com protocolo BASIC” está selecionada e a opção “Incluir senhas 4D” não está selecionada. Se existir o On Web Authentication Database Method, ele é executado e todos os seus parâmetros são dados. Pode filtrar mais precisamente as conexões de acordo ao nome de usuário, senha, e/ou às direções IP do navegador e do servidor web. Se o On Web Authentication Database Method não existe, a conexão é negada automaticamente e é enviada uma mensagem ao navegador indicando que o método de autenticação não existe. Nota: se o nome de usuário enviado é uma string vazía e se o On Web Authentication Database Method não existe, é enviada ao navegador uma caixa de diálogo de pedido de senha. As opções “Senhas com protocolo BASIC” e “Incluir senhas 4D” estão selecionadas. Se o nome de usuário enviado pelo navegador existe na tabela de usuários 4D e a senha é correta, a conexão é aceita. Se a senha é incorreta, a conexão é negada. Se o nome de usuário enviado pelo navegador não existe em 4D, dois resultados são possíveis: - Se existir o On Web Authentication Database Method, se retornam os parâmetros $1, $2, $3, $4, $5, e $6. Portanto pode filtrar as conexões de acordo com o nome de usuário, senha, e/ou as direções IP do navegador e do servidor web. - Se o On Web Authentication Database Method não existe, a conexão é negada. Modo DIGEST Diferentemente do modo BASIC, o modo DIGEST não é compatível com as senhas 4D padrão: não é possível utilizar as senhas 4D como identificadores Web. A opção “Incluir senhas 4D” está desativada quando se seleciona este modo. Os identificadores dos usuários Web devem ser administrados de maneira personalizada (por exemplo, através de uma tabela). Quando o modo DIGEST está ativo, o parâmetro $6 (senha) sempre é devolvido vazio no . Na realidade, quando se utiliza este modo, esta informação não passa pela rede como texto não criptografado. Portanto é imperativo neste caso avaliar a requisição de conexão com a ajuda do comando Validate Digest Web Password. O funcionamento do sistema de acesso ao servidor Web 4D é resumido no seguinte diagrama: - 75 - Usuário Web genérico Pode designar um usuário, previamente definido na tabela de senhas de 4D, como “Usuário Web Genérico.” Neste caso, cada navegador que se conecta ao banco pode utilizar as autorizações de acesso e as restrições associadas com este usuário. Desta maneira pode controlar facilmente o acesso dos navegadores às diferentes partes do banco. Nota: não se deve confundir esta opção, que permite restringir os acessos dos navegadores às diferentes partes da aplicação (métodos, formulários, etc.), com o sistema de controle de conexões ao servidor web, administrado pelo sistema de senhas e On Web Authentication Database Method Para definir um Usuário web genérico: 1. No modo Desenho, criar ao menos um usuário com o editor de usuários da caixa de ferramentas. Se deseja pode associar uma senha com o usuário. 2. Nos diferentes editores de 4D, autorizar ou restringir o acesso a este usuário. - 76 - 3. Na caixa de diálogo de Propriedades, escolher o tema Web, página Opções (I). Na área “Senhas Web” contém a lista pop-up Usuário web genérico. Como padrão, o Usuário web genérico é o Designer e os navegadores têm acesso completo a todas as partes do banco. 4. Escolher o usuário na lista pop-up e validar a caixa de diálogo. Todos os navegadores web autorizados a conectar-se ao banco se beneficiarão das autorizações de acesso associadas ao Usuário web genérico (exceto quando o modo BASIC e a opção “Incluir senhas 4D” estão selecionadas e o usuário que se conecta não existe na tabela de senhas 4D, ver a continuação). Interação com o protocolo BASIC A opção "Senhas com protocolo BASIC" não influi em como funciona o Usuário Web genérico. Sem importar o estado desta opção, os privilégios e as restrições de acesso associadas ao “Usuário Web genérico” se aplicarão a todos os navegadores Web que estejam autorizados a se conectar ao banco. Entretanto, quando a opção "Incluir senhas 4D" estiver selecionada podem apresentar-se dois possíveis resultados: o nome e a senha do usuário não existem na tabela de senhas de 4D. Neste caso, se a conexão foi aceita pelo On Web Authentication Database Method, os direitos de acesso do usuário Web genérico serão aplicados ao navegador. Se o nome de usuário e senha existem na tabela de senhas de 4D, o parâmetro “Usuário Web genérico” se ignora. O usuário se conecta com seus próprios direitos de acesso. - 77 - Página Web/Opções (II) Conversão de texto Enviar diretamente os caracteres estendidos Por configuração padrão, o servidor web 4D converte os caracteres estendidos presentes nas páginas web (dinâmicas e estáticas) aos padrões HTML antes de enviá-las. São interpretados pelos navegadores. Pode configurar o servidor web de maneira que os caracteres estendidos sejam enviados “do jeito que estão”, sem os converter a entidades HTML. Esta opção permite ganhar uma velocidade importante nos sistemas operativos estrangeiros (especialmente no sistema japonês). Para fazer isto, selecione a opção Enviar diretamente os caracteres estendidos. Conjunto padrão A lista pop-up Conjunto padrão permite definir o conjunto de caracteres padrão utilizado pelo servidor web 4D. Como padrão, o conjunto de caracteres é UTF-8. Conexões Persistentes O servidor web de 4D pode utilizar conexões persistentes. A opção de conexões persistentes mantém aberta só uma conexão TCP para o conjunto de modificações entre um navegador web e o servidor para economizar os recursos e otimizar as transferências. A opção Usar conexões persistentes ativa ou desativa as conexões TCP persistentes para o servidor web. Esta opção está selecionada como padrão. Na maioria dos casos, é recomendável conservar esta opção selecionada já que acelera aos intercâmbios. Se o navegador web não suporta conexões persistentes, o servidor web 4D automaticamente passa a HTTP/1.0. A função conexões persistentes do servidor web de 4D se refere a todas as conexões TCP/IP (HTTP, HTTPS). Note entretanto que as conexões persistentes nem sempre se utilizam para todos os processos web 4D. Em certos casos, podem ser invocadas outras funções de otimização do servidor web. As conexões persistentes são úteis principalmente durante o envio de páginas estáticas. Duas opções permitem definir o mecanismo de conexões persistentes: • Número de requisições por conexão: permite definir o número máximo de requisições e respostas que podem viajar numa mesma conexão persistente. Limitar o número de requisições por conexão permite evitar os riscos de saturação do servidor através do envio massivo de requisições (técnica utilizada pelos piratas). O valor padrão (100) pode ser aumentado ou diminuído dependendo dos recursos da máquina que hospeda o servidor web 4D. • Tempo limite (segundos): este valor define o tempo limite de espera (em segundos) durante o qual o servidor web mantém aberta uma conexão TCP sem receber requisições por parte do navegador web. Uma vez terminado este período, o servidor termina a conexão. Se o navegador web enviar uma requisição depois de terminada a conexão, uma nova conexão TCP é criada automaticamente. Este funcionamento é transparente para o usuário. - 78 - Página Histórico (formato) Arquivo de histórico de conexões 4D permite obter um histórico de requisições. Este arquivo se chama “logweb.txt” e se localiza automaticamente: com 4D em modo local e 4D Server, na pasta Logs localizada ao lado do archivo de estrutura do banco. com 4D em modo remoto, na subpasta Logs da pasta do banco do cliente 4D (pasta cache). Ativação e Formato A ativação e a configuração do conteúdo do arquivo de histórico se realizam nas Propriedades do banco, página Web/Histórico (formato): Nota: a ativação e desativação do arquivo de histórico das requisições pode igualmente ser realizado por programação utilizando o comando SET DATABASE PARAMETER (4D v12) ou WEB SET OPTION (4D v13 e posteriores). O menu de formato do histórico oferece as seguintes opções: Sem histórico: quando esta opção estiver selecionada, 4D não gerará um arquivo de histórico das requisições. CLF (Common Log Format): quando se seleciona esta opção, o histórico de requisições é gerado no formato CLF. Com o formato CLF, cada linha do arquivo representa uma requisição, por exemplo: host rfc931 user [DD/MMM/YYYY:HH:MM:SS] "request" state length Cada campo está separado por um espaço e cada linha termina na sequência CR/LF (caractere 13, caractere 10). host: direção IP do cliente (exemplo. 192.100.100.10) - 79 - rfc931: informação não gerada por 4D, é sempre um - (um sinal de menos) usuário: nome do usuário tal qual é autenticado, ou do contrário - (sinal de menos). Se o nome de usuário contém espaços, serão substituídos por _ (um traço inferior ou grifo) DD: dia, MMM: abreviação de 3 letras do nome do mês (Jan, Fev,...), YYYY: ano, HH: hora, MM: minutos, SS: segundos A data e a hora são locais ao servidor. request: requisição enviada pelo cliente (ex. GET /index.htm HTTP/1.0) state: resposta dada pelo servidor. length: tamanho dos dados devolvidos (exceto o cabeçalho HTTP) ou 0. Nota: por razões de rendimento, as operações são guardadas no buffer de memória em pacotes de 1Kb antes de serem escritas no disco. As operações também estão escritas no disco se nenhuma requisição foi enviada por 5 segundos. Os possíveis valores de estado são os seguintes: 200: OK 204: Sem conteúdo 302: Redireção 304: Não modificado 400: Autenticação incorreta 401: Autenticação necessária 404: Não encontrado 500: Erro interno O formato CLF não pode ser personalizado. DLF (Combined Log Format): quando se seleciona esta opção, o histórico de requisições é gerado no formato DLF. O formato DLF é similar ao formato CLF e utiliza exatamente a mesma estrutura. Simplesmente contém dois campos HTTP adicionais ao final de cada requisição: Referer e User-agent. - Referer: contém a URL da página que aponta ao documento solicitado. - User-agent: contém o nome e a versão do navegador ou do pacote cliente na origem da petição. O formato DLF não pode ser personalizado. ELF (Extended Log Format): quando esta opção estiver selecionada, o histórico de requisições é gerado no formato ELF. O formato ELF está amplamente expandido no mundo dos navegadores HTTP. Pode ser utilizado para criar históricos sofisticados, que respondam a necessidades específicas. Por esta razão, o formato ELF é personalizável: é possível escolher os campos a gravar assim como a ordem de inserção no arquivo. WLF (WebStar Log Format): quando se seleciona esta opção, o histórico de requisições é gerado no formato WLF. O formato WLF foi desenvolvido especificamente para o servidor 4D WebSTAR. É similar ao formato ELF, com apenas uns poucos campos adicionais. Do mesmo jeito que o formato ELF, é personalizável. Configurar os campos Quando escolher o formato ELF (Extended Log Format) ou WLF (WebStar Log Format), a área “Formato personalizado do histórico Web” mostra os campos disponíveis para o formato. Deve selecionar cada campo a ser incluído no histórico. Para isso, utilize os botões de flecha ou simplesmente arraste e solte os campos que queira na área “Campos selecionados”. Nota: não é possível selecionar o mesmo campo duas vezes. A seguinte tabela lista os campos disponíveis para cada formato (em ordem alfabética) e descreve seus conteúdos: - 80 - Campo BYTES_RECEIVED BYTES_SENT C_DNS C_IP CONNECTION_ID CS(COOKIE) CS(HOST) CS(REFERER) CS(USER_AGENT) CS_SIP CS_URI CS_URI_QUERY CS_URI_STEM DATE METHOD PATH_ARGS STATUS TIME TRANSFER_TIME USER URL ELF WLF Valor X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Nota: datas e horas estão em GMT. Número de bytes recebidos pelo servidor Número de bytes enviados pelo servidor ao cliente Direção IP do DNS (ELF: campo idêntico ao campo C_IP) Direção IP do cliente (por exemplo 192.100.100.10) Número único da conexão Informação sobre os cookies contidos na requisição HTTP Campo Host da requisição HTTP URL da página que dirige ao documento solicitado Informação sobre o software e o sistema operativo do cliente Direção IP do servidor URI na qual a requisição se realiza Parâmetros de pesquisa de requisições Parte da requisição sem os parâmetros de pesquisa DD: día, MMM: abreviação de 3 letras para o mês (Jan, Fev, etc.), YYYY: ano Método HTTP utilizado para a requisição enviada ao servidor Parâmetros da CGI: string localizada depois do carctere “$” Resposta oferecida pelo servidor HH: hora, MM: minutos, SS: segundos Tempo solicitado pelo servidor para gerar a resposta Nome do usuário se é autenticado; do contrário - (sinal de menos). Se o nome de usuário contém espaços, são substituídos por _ (traço inferior ou grifo) URL solicitada pelo cliente - 81 - Página Web/Histórico (periodicidade) Parâmetros de Backup Os parâmetros de backup automático do histórico de requisições se definem na página Web/Histórico (periodicidade) das Propriedades do banco: Primeiro deve escolher a frequência (dias, semanas, etc.) ou com critério de tamanho limite do arquivo clicando no botão correspondente. Logo deve especificar o momento preciso para realizar o backup se for necessário. Sem backup: a função de backup programado está desativada. Todos os X hora(s): esta opção se utiliza para programar backups a determinadas horas. Pode introduzir um valor entre 1 e 24 . - a partir de: utilizado para definir a hora em que começará o primeiro backup. Todos os X dia(s) às X: esta opção se utiliza para programar backups diários. Introduza 1 se deseja realizar um backup diariamente. Quando esta opção está selecionada, deve indicar a hora em que deve começar o backup. Todos as X semana(s), dia às X: esta opção permite programar backups baseados em semanas. Introduza 1 se deseja realizar um backup semanalmente. Quando esta opção está selecionada, deve indicar o (os) dia(s) da semana e a hora em que o backup deve começar. Pode selecionar vários dias da semana se deseja. Por exemplo, pode utilizar esta opção para definir dois backups por semana: um na quarta e o outro na sexta. Todos os X mês(es), X dia às X: esta opção se utiliza para programar backups baseados em meses. Introduza 1 se deseja realizar um backup mensal. Quando esta opção estiver selecionada, deve indicar o dia do mês e a hora em que o backup deve começar. - 82 - Todos os X MB: esta opção se utiliza para programar backups baseados no tamanho do arquivo de histórico de requisições atual. Um backup se dispara automaticamente quando o arquivo alcança o tamanho definido. Pode definir um tamanho limite de 1, 10, 100 ou 1000 MB. Nota: No caso dos backups programados, se o servidor web não foi lançado no momento do backup programado, no seguinte início 4D considera o backup como tendo falhado e aplica os parâmetros apropriados, definidos nas Propriedades. - 83 - Página Web/Web Services As opções desta página permitem ativar e configurar os serviços web do banco 4D, para sua publicação (servidor) e inscrição (cliente). Para mais informação sobre o suporte dos serviços web em 4D, consulte o capítulo Publicar ou utilizar serviços Web. Servidor Esta área mostra as opções relacionadas com o uso de 4D como um “servidor” de serviços web, publicando métodos projeto em forma de serviços web. Permitir requisições de serviços web: esta opção permite “inicializar” a publicação de serviços web. Se esta opção não estiver selecionada, 4D recusa as petições SOAP e não gera um WSDL, mesmo que os métodos tenham o atributo Oferecido como Serviço web. Quando esta opção estiver selecionada, 4D cria o arquivo WSDL. Nome do serviço web: esta área permite modificar o “nome genérico” do serviço web. Este nome diferencia aos serviços a nível do servidor SOAP (quando o servidor publica vários serviços web diferentes) assim como nos diretórios de serviços web. Como padrão, 4D utiliza o nome A_WebService. Espaço de nomes dos serviços web: esta área permite modificar o espaço de nomes dos serviços web publicados por 4D. Cada serviço web publicado na Internet deve ser único. A unicidade dos nomes dos serviços web se assegura com o uso de espaços de nomes XML. Um espaço de nomes é uma string de caracteres arbitrária utilizada para identificar de forma única um conjunto de etiquetas XML. Geralmente, o espaço de nomes começa pela URL da empresa (http://minhaEmpresa.com/meuEspacoDeNomes). Neste caso, não é indispensável ter algo em particular na URL definida; o que realmente importa é que a string de caracteres utilizada seja única.Como padrão, 4D utiliza o espaço de nomes: http://www.4d.com/namespace/default. Nota: segundo a norma XML padrão para nomes de etiquetas, a string de caracteres utilizada não deve conter espaços nem começar por um número. Além disso, para evitar todo risco de incompatibilidade se recomenda não utilizar caracteres estendidos (por exemplo os caracteres acentuados). Cliente Esta área contém várias opções relacionadas com o uso de 4D como “cliente” de serviços web, inscrevendo-se a serviços web publicados na rede. Prefixo dos métodos criados pelo assistente: esta área permite modificar o prefixo adicionado automaticamente por 4D ao nome dos métodos proxy gerados pelo assistente de serviços web. Os métodos de projeto proxy constituem um link entre a aplicação 4D e o servidor de serviços web. Como padrão, 4D utiliza o prefixo “proxy_”. - 84 - Página Web/REST Esta página contém as opções que se utilizam para ativar e controlar os acessos 4D Mobile (via REST) para a base 4D. Os acessos 4D Mobile permitem as aplicações Wakanda acessar diretamente aos dados de sua base. Para obter mais informação consulte o manual 4D Mobile. Ativar os serviços 4D Mobile Por razões de segurança, por padrão, 4D não responde as petições 4D Mobile (via REST). Se deseja utilizar esta funcionalidade, se deve selecionar a opção Ativar os serviços 4D Mobile para que as solicitações sejam processadas e o conector 4D / Wakanda possa ser implementado. Nota: os serviços 4D Mobile utilizam o servidor HTTP de 4D, pelo que necessita garantir de que o servidor Web de 4D ou 4D Server tenha sido iniciado. A mensagem de advertência "Precaução, verifique os direitos de acesso" é mostrado quando se marca esta opção para chamar sua atenção sobre o fato de que quando os serviços 4D Mobile se ativam, por padrão o acesso aos objetos da base é livre, enquanto que os acessos 4D Mobile não tenham sido configurados. Acesso Leitura/Escritura Esta opção especifica o grupo de usuários 4D que está facultado para estabelecer a conexão ao servidor 4D desde a aplicação Wakanda. Por padrão, o menu mostra <Qualquer>, o que significa que os acessos 4D Mobile estão abertos a todos os usuários. Uma vez que tenha especificado um grupo, só uma conta de usuário 4D que pertence a este grupo se pode utilizar para acessar a 4D por meio de uma solicitação 4D Mobile, em particular, para abrir uma sessão no servidor 4D utilizando o método mergeOutsideCatalog(). Se utilizar uma conta que não pertence a este grupo, 4D devolve um erro de autenticação ao remetente da solicitação. Tenha em conta que para que esta configuração tenha efeito: o sistema de senhas de 4D deve ser ativada (uma senha que foi atribuída ao Designer, ver Ativar o sistema de senhas), o comando On 4D Mobile Authentication database method não deve ser definido. Se existe, 4D não leva em conta a configuração de acesso definidos nas Propriedades da base. - 85 - Página SQL Esta página permite configurar os parâmetros de publicação por padrão e os acessos do servidor SQL integrado de 4D, como também as opções relacionadas com o funcionamento do motor SQL de 4D. Para mais informação sobre SQL em 4D, consulte Utilizar SQL em 4D no manual Reference SQL. Preferências de publicação do servidor SQL É possível configurar os parâmetros de publicação do servidor SQL integrado de 4D. Estes parâmetros se encontram na página SQL das Propriedades do banco: A opção Iniciar o servidor SQL ao iniciar permite iniciar o servidor SQL ao início da aplicação. Porta TCP: como padrão, o servidor SQL de 4D responde às requisições na porta TCP 19812. Se esta porta já está sendo utilizada por outro serviço, ou se seus parâmetros de conexão requerem outra configuração, pode modificar a porta TCP utilizada pelo servidor SQL de 4D. Nota: se digitar 0, 4D utilizará o número de porta TCP como padrão, ou seja, 19812. Endereço IP: permite definir o endereço IP da máquina na qual o servidor SQL deve processar as consultas SQL. Como padrão, o servidor responderá a todos os endereços IP (opção Todos). A lista pop-up "Endereço IP" contém automaticamente todos os endereços IP presentes na máquina. Quando é selecionada uma direção em particular, o servidor somente responderá às consultas enviadas a este endereço. Esta funcionalidade está dirigida às aplicações 4D hospedadas em máquinas com várias direções TCP/IP. Nota: do lado do cliente, a direção IP e a porta TCP do servidor SQL para que a aplicação se conecte deven estar corretamente configurados na definição da fonte de dados ODBC. Ativar SSL: esta opção indica se o servidor SQL deve ativar o protocolo SSL para o processamento das conexões SQL. Note que quando esse protocolo está ativado, você deve adicionar a palavra chave ":ssl" ao final do endereço IP do servidor SQL quando você abre a conexão usando o comando SQL LOGIN Por padrão, o servidor SQL usa arquivos internos para a chave SSL e certificado. Você pode, entretanto, usar elementos personalizados: para fazer isso, apenas copie seus arquivos key.pem e cert.pem de 4D na seguinte localização: MeuBanco/Preferencias/SQL (onde "MeuBanco" representa a pasta/pacote do banco). Autorizar as requisições Flash Player: esta opção permite ativar o mecanismo de suporte às requisições Flash Player pelo servidor SQL de 4D. Este mecanismo é baseado na presença de um arquivo, chamado "socketpolicy.xml," na pasta preferências do banco (Preferencias/SQL/Flash/). Este arquivo é pedido pelo Flash Player para permitir conexões entre domínios ou conexões por aplicações sockets Flex (Web 2.0). Na versão anterior de 4D, este arquivo tinha que se agregar manualmente. A partir de agora, a ativação se realiza utilizando a opção Autorizar as requisições Flash Player: ao ativar esta opção, as requisições Flash Player são aceitas e um arquivo "socketpolicy.xml" genérico é criado para o banco se é necessário. Nota: é possível definir a codificação utilizada pelo servidor SQL para o processamento de requisições externas utilizando o comando 4D SQL SET OPTION. Controle do acesso SQL para o esquema por padrão Por razões de segurança, é possível controlar as ações que as consultas externas enviadas ao servidor SQL podem realizar no banco de dados 4D. Este controle se realiza em dois níveis: Ao nível do tipo de ação autorizada; Ao nível do usuário que faz a consulta. Estes ajustes podem ser feitos na página SQL das Propriedades do banco: Nota: Pode utilizar o Método de base On SQL Authentication para controlar de forma personalizada as petições externas ao motor SQL de 4D. Os parâmetros definidos nesta caixa de diálogo são aplicados ao esquema (Schema) como padrão. O controle dos acessos externos ao banco se baseiam no conceito de esquemas SQL (ver a seção Princípios para Integração 4D e motor SQL de 4D). Se não criar esquemas personalizados, o esquema padrão inclui todas as tabelas do banco. Se criar outros esquemas com os direitos de acesso específicos e os associa com as tabelas, o esquema por padrão somente incluirá as tabelas que não estão incluídas nos esquemas personalizados. Pode configurar três tipos distintos de acesso ao esquema por padrão através do servidor SQL: "Somente leitura (dados)": acesso ilimitado na leitura a todos os dados das tabelas do banco mas não está - 86 - permitido adicionar, modificar ou eliminar registros, nem modificar a estrutura do banco. “Leitura/escrita (dados)": acesso em leitura e escrita (adicionar, modificar e apagar) a todos os dados das tabelas de banco, mas não é possível modificar a estrutura do banco. "Completo (dados e estrutura)": acesso em leitura e escrita (adicionar, modificar e apagar) a todos os dados das tabelas do banco, assim como à modificação da estrutura do banco (tabelas, campos, relações, etc.). Pode designar um conjunto de usuários para cada tipo de acesso. Há três opções disponíveis para este propósito: <Ninguém>: se selecionar esta opção, o tipo de acesso será negado para todas as consultas, independentemente de sua origem. Este parâmetro pode ser utilizado mesmo quando o sistema de gestão de acesso por senhas de 4D não estiver ativo. <Todos>: se selecionar esta opção, o tipo de acesso se aceitará para todas as consultas (sem limites). Grupo de usuários: esta opção permite criar um grupo de usuários autorizados a realizar o tipo de acesso atribuído. Esta opção requer que a gestão de senhas de 4D esteja ativada. O usuário que realiza as consultas dá seu nome e senha durante a conexão ao servidor SQL. ADVERTÊNCIA: cada tipo de acesso está definido de forma independente dos outros. Mais especificamente, se só atribui o tipo de acesso Só leitura a um grupo este não terá nenhum efeito já que este grupo, assim como também todos os outros vão continuar se beneficiando do acesso Leitura/escritura (atribuído a <Todo o mundo> de forma pré determinada). Com o propósito de definir um acesso Só leitura, também é necessário o acesso Leitura/escritura. ADVERTÊNCIA: este mecanismo se baseia nas senhas de 4D. Para que o controle de acesso ao servidor SQL tenha efeito, o sistema de senhas de 4D deve estar ativo (uma senha deve ser atribuída ao Designer). Nota: uma opção de segurança adicional pode ser estabelecida ao nível de cada método de projeto 4D. Para obter mais informação, consulte o parágrafo "Opção Disponível através SQL" da seção . Opções do motor SQL Transações Auto-commit: esta opção permite ativar o mecanismo de auto-commit no motor SQL. O propósito do modo auto-commit é preservar a integridade referencial dos dados. Quando esta opção estiver selecionada, toda pesquisa SELECT, INSERT, UPDATE e DELETE (SIUD) não realizada dentro de uma transação se inclui automaticamente em uma operação ad hoc. Isso garante que as consultas se executarão em sua totalidade ou em caso de erro, se cancelarão totalmente. As consultas incluídas em uma transação (gestão personalizada da integridade referencial) não se verão afetadas por esta opção. Quando esta opção não estiver selecionada, não se geram transações automáticas (exceto para as consultas SELECT... FOR UPDATE, consulte o comando SELECT). Como padrão, esta opção não está selecionada. Também pode administrar esta opção por programação utilizando o comando SET DATABASE PARAMETER. Nota: somente os bancos locais consultados pelo motor SQL de 4D se vêm afetados por este parâmetro. No caso das conexões externas a outros bancos de dados SQL, o mecanismo de auto-commit é manejado pelos motores SQL remotos. Levar em consideração as maiúsculas e minúsculas nas comparações de cadeias de caracteres: esta opção permite modificar a sensibilidade às maiúsculas e minúsculas dos caracteres nas consultas SQL. Está selecionada como padrão, o que significa que o motor SQL diferencia entre maiúsculas e minúsculas quando se comparam strings (ordenações e pesquisas). Por exemplo, "ABC" = "ABC", mas "ABC" # Abc "." Em alguns casos, por exemplo para alinhar o funcionamento do motor SQL com o do motor 4D, é possível que deseje que as comparações de cadeias de caracteres não sejam sensíveis às maiúsculas ("ABC" = "Abc"). Para isso, apenas deve desmarcar esta opção. Também pode administrar esta opção por programação utilizando o comando SET DATABASE PARAMETER. - 87 - Página PHP 4D permite executar diretamente scripts PHP configurando a página PHP das Propriedades do banco (ver Executar scripts PHP em 4D no manual Linguagem 4D). Intérprete Direção IP e Número de porta Como padrão, 4D oferece um intérprete PHP compilado em FastCGI. Por razões relacionadas com a arquitetura interna, as petições de execução são enviadas ao intérprete PHP a uma direção HTTP específica. Como padrão, 4D utiliza o endereço 127.0.0.1 e a porta 8002. Pode modificar este endereço e/ou porta se já estão sendo utilizados por outro serviço ou se têm vários intérpretes na mesma máquina. Para fazer isto, modifique os parâmetros Endereço IP e Número de porta. Note que o endereço HTTP deve estar na mesma máquina que 4D. Intérprete externo Se utiliza um intérprete PHP externo, deve ser compilado em FastCGI e estar na mesma máquina que 4D (ver “Uso de outro intérprete PHP ou de outro arquivo php.ini file” em Executar scripts PHP em 4D). Selecione esta opção com o fim de que 4D não tente uma conexão com o intérprete interno quando se execute uma requisição PHP. Note que esta configuração necessita a execução e controle do intérprete externo. 4D Server: Estesparâmetros são compartilhados entre 4D Server e as equipes remotos 4D, portanto não é possível utilizar um intérprete externo na equipe servidor e simultaneamente utilizar o intérprete interno nas equipes clientes (e vice-versa). Igualmente, se o servidor utilizar um intérprete externo no porto 9002, as equipes clientes devem também utilizar um intérprete neste porto. Opções Estas opções estão relacionadas com a gestão automática do intérprete PHP de 4D e são desativadas quando a opção Interpretador externo estiver selecionada. Número de processos: o intérprete PHP de 4D dirige um conjunto de processos de execução de sistema chamados "processos filhos". Por razões de otimização, como padrão pode lançar e manter até cinco processos filhos simultaneamente. Pode modificar o número de processos filho de acordo a suas necessidades. Por exemplo, pode aumentar este valor se chama intensivamente ao intérprete PHP. Para mais informação, consulte a seção “Arquitetura” em Executar scripts PHP em 4D. Nota: em Mac OS, todos os processos filhos compartem a mesma porta. Em Windows, cada processo filho utiliza um número de porta específico. O primeiro número é definido pelo intérprete PHP; os outros processos filhos incrementam este número. Por exemplo, se a porta como padrão é 8002 e lança 5 processos filhos, utilizarão as portas 8002 a 8006. Reiniciar o interpretador depois de X requisições: permite definir o número máximo de requisições aceitas pelo intérprete PHP de 4D. Quando este número é alcançado, se reinicia o intérprete. Para mais informação sobre este parâmetro, consulte a documentação de FastCGI-PHP. Nota: nesta caixa de diálogo, os parâmetros se definem por padrão para todas as máquinas conectadas e para todas as sessões. Também pode modificar e ler esses parâmetros separadamente para cada máquina e cada sessão através dos comandos SET DATABASE PARAMETER e Get database parameter. Os parâmetros modificados pelo comando SET DATABASE PARAMETER têm prioridade para a sessão atual. - 88 - Página Segurança Esta página contém as opções relacionadas com o acesso e proteção dos dados para seu banco. Gestão de Acessos Acesso Desenho: permite ao grupo de usuários especificado acessar o modo Desenho do banco. Note que: A definição de um grupo de acesso no ambiente Desenho também permite igualmente desativar a opção Criar uma tabela da caixa de diálogo de importação de dados. Para mais informação sobre esta caixa de diálogo, consulte Importar dados de arquivos. O Designer e o Administrador sempre têm acesso ao ambiente Desenho, mesmo se não formam parte explícita do grupo de acesso especificado. Para mais informação sobre os controles de acesso em 4D, consulte o capítulo Usuários e grupos. Filtragem de comandos e métodos de projeto no editor de fórmulas: Por razões de segurança, 4D restringe por padrão o acesso aos comandos, funções e métodos do projeto no em modo Aplicação: somente podem ser utilizadas algumas funções 4D e métodos de projeto que tenham sido declaradas explicitamente utilizando o comando SET ALLOWED METHODS. Pode cancelar total ou parcialmente este filtro utilizando as seguintes opções. Autorizar para todos: O acesso aos comandos, funções e métodos de projeto está restringido para todos os usuários em modo Aplicação, incluindo o Desenhador e o Administrador. Desativado para o Designer e Administrador: esta opção restabelece ao Designer e ao Administrador unicamente o acesso completo aos comandos 4D e aos métodos no editor de fórmulas. Permite estabelecer um modo de acesso ilimitado a comandos e métodos ao mesmo tempo em que conserva o controle das operações efetuadas. Durante a fase de desenvolvimento, este modo permite provar livremente todas as fórmulas, informes, etc. Durante a operação, se pode utilizar para estabelecer soluções seguras que permitam o acesso a comandos e métodos de maneira temporária. O princípio consiste em mudar o usuário (com o comando CHANGE CURRENT USER) antes de chamar uma caixa de diálogo ou iniciar uma impressão que requeira acesso total aos comandos, quando a operação específica tenha terminado se regressa ao usuário original. Nota: se o acesso total foi ativado utilizando a opção anterior, esta opção não terá efeito. Usuário padrão: quando um usuário padrão é definido, cada usuário que abra ou se conecte ao banco, terá os mesmos privilégios e restrições de acesso que o usuário padrão. Um usuário padrão não necessita escrever seu nome de usuário. Além disso, se não tiver uma senha associada ao usuário padrão, não aparece a caixa de diálogo de senhas e o banco abre diretamente. Esta opção simplifica o acesso ao banco ao mesmo tempo que mantém um sistema completo de controle de dados. Se o usuário padrão tem uma senha de acesso padrão, quando o banco se abre, aparecerá uma caixa de diálogo e os usuários deverão introduzir uma senha: Se o usuário padrão não tem uma senha de acesso, a caixa de diálogo não aparecerá. Nota: pode “forçar” a visualização da caixa de diálogo padrão de ingresso de senhas quando o modo “Usuário padrão" estiver ativo, por exemplo para se conectar como Administrador ou Designer. Para isso, pressione a tecla Maiúscula enquanto abre o banco ou se conecta a ele. - 89 - Mostrar a lista de usuários na janela de senhas: se está opção estiver selecionada, os usuários devem selecionar seu nome numa lista de usuários e introduzir sua senha na caixa de diálogo de identificação do usuário. Se esta opção não estiver selecionada, os usuários devem introduzir seu nome e senha. Para mais informação sobre as duas versões da caixa de diálogo de identificação do usuário, consulte a seção “Visão geral do sistema de acesso” em Visão geral do sistema de acesso. Ordenar a lista de usuários em ordem alfabética (opção disponível unicamente se a opção anterior estiver marcada): quando esta opção estiver selecionada, a lista de usuários na caixa de diálogo de Identificação de usuário aparece em ordem alfabética. Os usuários podem mudar sua senha: quando esta opção estiver selecionada, é mostrado um botão Mudar na caixa de diálogo de identificação do usuário. Este botão permite ao usuário acessar a caixa de diálogo onde pode modificar sua senha (para mais informação sobre esta caixa de diálogo, consulte o parágrafo “Modificação de senha pelo usuário” em A manutenção do sistema). Se deseja, pode ocultar o botão Mudarde forma que os usuários não possam modificar suas senhas. Para isso, simplesmente desmarque esta opção. Opções Autorizar as propriedades usuário em um arquivo externo: deve selecionar esta opção se deseja utilizar a funcionalidade de externalização das propriedades usuário. Quando esta opção está selecionada, duas caixas de diálogo estão disponíveis para definir as propriedades: Propriedades estrutura e Propriedades usuário. Para maior informação, consulte a seção Using user settings. Executar o método "On Host Database Event" dos componentes: o On Host Database Event database method facilita as fases de inicialização e de cópia de segurança dos componentes 4D. Por razões de segurança, deve autorizar expressamente a execução deste método em cada base local. Para isso, deve selecionar esta opção. Por padrão, não está selecionada. Quando se seleciona esta opção: os componentes 4D se carregam, cada On Host Database Event database method do componente (se existe) é chamado pela base local, o código do método se executa. Quando esta opção não está selecionada: os componentes 4D se carregam, mas devem gerenciar eles mesmos suas fases de inicialização e de cópia de segurança. o desenvolvedor do componente deve publicar os métodos dos componentes que devem ser chamados pela base local durante estas fases (início e desfecho). o desenvolvedor da base local deve chamar aos métodos apropriados do componente no momento adequado (deve ser coberto na documentação do componente). - 90 - Página Compatibilidade A página Compatibilidade agrupa todos os parâmetros relacionados com a manutenção da compatibilidade com versões anteriores de 4D. Lembre que o número de opções mostradas dependerá da versão de 4D com a qual se criou o banco de dados originalmente: (2004.x, v11, v12), assim como das configurações modificadas do banco de dados. Os campos não são editáveis nos diálogos: em versões anteriores de 4D, não era possível introduzir valores utilizando campos em caixas de diálogo (mostradas, por exemplo, utilizando o comando DIALOG ). Esta limitação se eliminou desde 4D 2004. Pode conservar o comportamento anterior, especialmente se seu banco de dados utiliza campos em diálogos para mostrar dados. Por padrão, esta opção está selecionada para as versões antigas convertidas a versão 2004 e não está selecionada para o bancos de dados criadas a partir da versão 2004. Botões radio agrupados pelo nome: nas versões anteriores de 4D, o funcionamento coordenado de um grupo de botões de opção (radio) era obtido dando uma primeira letra idêntica às variáveis associadas com os botões (por exemplo, m_botao1, m_botao2, m_botao3, etc.). A partir de 4D 2004 se modificou da seguinte forma: para funcionar de maneira coordenada, um conjunto de botões de radio simplesmente devem estar agrupados no editor de formulários. Para mais informação, consulte Botões de opção e botões imagem de opção. Este novo modo é válido para botões radio, botões radio 3D e botões radio imagem. Por razões de compatibilidade, o modo anterior se conserva por padrão em bancos de dados convertidos. Entretanto, pode forçar o uso do novo modo desmarcando esta opção. Esta opção somente aparece em bancos convertidos de versões anteriores. Está selecionada como padrão. Os bancos de dados criados a partir da versão 2004 utilizam o novo modo. Recarregar o formulário para cada registro durante PRINT SELECTION: em versões anteriores de 4D, o formulário utilizado durante uma impressão utilizando o comando PRINT SELECTION se recarregava para cada registro. Isto permitia reiniciar automaticamente todos os parâmetros dos objetos que o desenvolvedor pudesse ter modificado com a linguagem no evento de formulário On printing detail. Para melhorar o rendimento, este mecanismo foi eliminado a partir de 4D 2004. O desenvolvedor 4D agora deve reiniciar ele mesmo os parâmetros que deseja no método de formulário, este funcionamento é idêntico ao dos formulários listados com o evento On display detail. Mesmo assim, pode conservar o mecanismo anterior utilizando esta opção. Os bancos de dados criados em versão 2004 utilizam o novo modo. Usar comentários 4DVAR ao invés de colchetes: esta opção define a notação a ser utilizada para inserir expressões 4D em páginas estáticas. Quando a opção está selecionada (valor padrão), a sintaxe a ser usada é a notação HTML padrão (<!--4DVAR MYVAR-->). Quando a opção não está selecionada, a sintaxe a usar é a notação com colchetes ([MYVAR]), solução proprietária utilizada nas versões anteriores do servidor web de 4D. Não utilizar o novo modo de referenciar os contextos: quando esta opção não estiver selecionada (padrão), o servidor web 4D põe o número do contexto na URL do banco dos documentos HTML enviados. Com o sistema anterior (opção selecionada), o servidor web 4D envia ao navegador o número do contexto por cada elemento de uma página, fazendo com que os processos fossem menos rápidos. Mesmo assim esta opção pode ser selecionada por razões de compatibilidade. Lembre que deve reiniciar o banco de dados depois de modificar esta opção para que o novo funcionamento se aplique. Apagar o “/” nas URLs desconhecidas: nas versões anteriores de 4D, as URLs desconhecidas (URLs que não correspondem a páginas existentes nem a URLs especiais de 4D) eram devolvidas aos métodos base On Web Authentication e On Web Connection ($1) e não começavam com o caractere “/”. Esta particularidade foi eliminada em 4D 2004. Entretanto, se você implementou algoritmos baseados nessa operação e deseja mantê-los, desmarque essa opção. Proibir arrastar e soltar dados não provenientes de 4D: a partir da v11, 4D permite arrastar e soltar seleções de objetos e/ou arquivos externos a 4D, como por exemplo os arquivos imagem, no modo Aplicação. Esta possibilidade deve estar suportada pelo código do banco. Nos bancos de dados convertidos de versões anteriores de 4D, esta possibilidade pode trazer problemas de funcionamento se o código existente não estiver adaptado devidamente. Esta opção permite antecipar-se a estes possíveis problemas de funcionamento. Quando esta opção estiver selecionada, se nega a soltar objetos externos em formulários 4D. Note que inserir objetos externos ainda é possível nos objetos que têm a opção Soltar automático, nesse caso a aplicação pode interpretar automaticamente os dados soltados (texto ou imagem). Para mais informação, consulte Arrastar e soltar. Executar QUERY BY FORMULA no servidor e Executar ORDER BY FORMULA no servidor: a partir de 4D v11, por razões de otimização, os comandos de pesquisas e de ordenação “por fórmula” se executam no servidor; somente se devolve o resultado a máquina cliente. Isto aplica aos seguintes comandos: [#cmd id="48"/], QUERY SELECTION BY FORMULA e ORDER BY FORMULA. Em caso de chamada direta de variáveis na fórmula, a pesquisa é calculada com o valor da variável na máquina cliente. Por exemplo, QUERY BY FORMULA([tabela];[tabela]campo=variável) se executará no servidor mas com o conteúdo da variável do cliente. Por outro lado, este princípio não se aplica às - 91 - fórmulas que utilizam métodos que, por si mesmo, chamam variáveis: neste caso o valor das variáveis são avaliados no servidor. Nos bancos de dados convertidos, este funcionamento pode afetar os algoritmos existentes. Portanto, como padrão neste contexto, estes comandos continuam sendo executados na máquina cliente. Se deseja aproveitar o novo algoritmo v11 em um banco convertido, pode simplesmente selecionar estas opções. Nota: esta opção pode ser definida utilizando o comando SET DATABASE PARAMETER. QUERY BY FORMULA usa uniões SQL: a partir de 4D v11, os comandos QUERY BY FORMULA e QUERY SELECTION BY FORMULA realizam uniões baseadas no modelo de SQL. Isto significa que não é necessário que exista uma relação estrutural entre a tabela A e a tabela B para utilizar uma fórmula que contenha [Tabela_A ]campo_X=[Tabela_B]campo_Y. Como este mecanismo pode gerar disfunções nas aplicações existentes, está desativado como padrão nos bancos de dados convertidos. Se recomenda que seja ativado (depois de revisar o código do banco) selecionando esta opção com o propósito de se beneficiar da otimização dos comandos de pesquisa por fórmula. Notas: Quando o modo "Uniões SQL" estiver ativo, os comandos QUERY BY FORMULA e QUERY SELECTION BY FORMULA utilizam entretanto as relações automáticas definidas no editor de estrutura nos seguintes casos: - Se a fórmula não pode ser dividida em elementos no formato {campo;comparador ;valor} - Se são comparados dois campos da mesma tabela. Esta opção também pode ser definida pelo processo utilizando o comando SET DATABASE PARAMETER. Autorizar as transações aninhadas: ativa o suporte das transações multi-nível. A partir de v11, 4D aceita as transações aninhadas em um número de níveis ilimitado. Como esta nova operação pode gerar problemas nos bancos desenvolvidos com versões anteriores de 4D, está desativado por padrão nos bancos convertidos (as transações permanecem limitadas a um só nível). Se deseja usar transações em vários níveis num banco de dados convertido, deve selecionar essa opção. Por padrão, esta opção não está selecionada. Se especifica para cada banco de dados. Nota: esta opção não tem efeito nas transações realizadas no motor SQL de 4D. As transações SQL sempre são multi-nível. Modo Unicode: permite ativar ou desativar o modo Unicode para o banco atual. No modo Unicode, o motor do banco de dados, a linguagem e os menus manejam nativamente as cadeias de caracteres (cadeias) em Unicode. Em modo não Unicode (modo compatibilidade ASCII), se utiliza o conjunto de caracteres ASCII. Esta opção permite preservar a compatibilidade dos bancos convertidos. Está selecionada como padrão para os bancos criados com 4D v11 e superiores e não está selecionada nos bancos convertidos. Notas: Esta opção é específica para cada banco. Portanto é possível coabitar um banco Unicode com os componentes não Unicode (ou vice-versa) em modo interpretado. Também é possível configurar o modo Unicode utilizando os comandos SET DATABASE PARAMETER. As características específicas do suporte Unicode en 4D são detalhadas no manual Linguagem. Para mais informação consulte Códigos ASCII. Utilize os parâmetros do sistema em formatos numéricos: a partir de v11, 4D utiliza os parâmetros sistema regionais para os formatos de visualização numéricos (ver “Formatos de campos numéricos” em Formatos de saída). 4D substitui automaticamente os caracteres “,” e “.” nos formatos de visualização numérica pelo separador de milhares e o separador decimal definido no sistema operativo, respectivamente. O sinal de ponto e a vírgula são então considerados como os caracteres de marcação de posição, seguindo o exemplo de 0 ou #. Nas versões anteriores de 4D, os formatos de visualização numéricos não consideram os parâmetros regionais do sistema. Por exemplo, o formato “###,##0.00” é um formato válido para um sistema americano. Entretanto, quando se aplica a um valor numérico mostrado em um sistema francês o suíço, o resultado é incorreto. Nos bancos de dados convertidos, por compatibilidade, este novo mecanismo não está ativado. Para se beneficiar de seu uso, deve selecionar esta opção. Atribuição automática de variáveis: em versões anteriores de 4D, um mecanismo padrão do servidor web permite tornar a copiar automaticamente nas variáveis processo 4D o valor das variáveis enviadas por meio de um formulário HTTP ou um URL de tipo GET. Em modo interpretado, o valor de toda variável recebida se copia diretamente em uma variável processo 4D com o mesmo nome, em modo compilado, as variáveis devem ter sido previamente declaradas em um método projeto COMPILER_WEB. A partir de 4D v13.4, este mecanismo é obsoleto e já não está disponível nas novas bases de dados. Por razões de compatibilidade, se mantém nas bases convertidas, mas pode desativar ela desmarcando esta opção de compatibilidade. Agora se recomenda utilizar os comandos dedicados WEB GET VARIABLES ou WEB GET BODY PART. Utilizar a capa de rede antiga (ignorada em OS X de 64 bits): a partir do lançamento de v14 R5, as aplicações 4D contém uma nova capa de rede, chamada ServerNet, para gerenciar as comunicações entre 4D Server e as máquinas 4D remotas (clientes). A capa de rede antiga ficou obsoleta, mas se conserva para garantir a compatibilidade com as bases de dados existentes. Mediante esta opção, pode ativar ou desativar a capa de rede antiga em qualquer momento nas aplicações 4D Server convertidas em função de suas necessidades, por exemplo, ao migrar as aplicações cliente (ver a seção Preferências de configuração). ServerNet se utiliza automaticamente para as novas bases e se desativa por padrão nas bases convertidas (opção selecionada). Tenha em conta que em caso de uma modificação, é necessário reiniciar a aplicação para que a mudança seja levada em conta. Todas as aplicações cliente que se conectaram também devem se reiniciar para poder conectar com a - 92 - nova capa de rede (a versão de cliente mínima para usar a capa ServerNet é 4D v14 R4, consulte a seção Preferências de configuração). Notas: Esta opção também pode ser administrada por programação utilizando o comando SET DATABASE PARAMETER. Tal como se especifica em seu título, esta opção é ignorada na versão de 64 bits de 4D Server para OS X; só ServerNet pode ser utilizada nesta plataforma. - 93 - Explorador Visão Geral e Funcionamento Página Início Página Tabelas Página Formulários Página Métodos Página Comandos Página Constantes Página Plug-ins Página Lixeira Usar os comentários - 94 - Visão Geral e Funcionamento O Explorador é uma janela do ambiente Desenho que centraliza os acesos às tabelas, formulários, métodos, comandos, constantes e plug-ins e oferece informação sobre estes elementos. Pode mostrar o Explorador a qualquer momento escolhendo uma das páginas no submenu Desenho > Explorador ou clicando no botão Explorador da barra de ferramentas. Os botões à esquerda do Explorador permitem aceder às diferentes páginas de objetos do ambiente Desenho. O Explorador tem páginas independentes para as tabelas, formulários, métodos, comandos, constantes e plug-ins. As páginas Início e Lixeira oferecem funções específicas adicionais. Quando mostra uma página específica, os objetos correspondentes são listados no Explorador. Em cada página, os objetos são mostrados em listas hierárquicas. Uma área de controle na parte inferior da lista tem botões para adicionar e apagar, assim como também um menu de opções. Renomear um objeto Se deseja renomear uma pasta, uma tabela, um campo, um formulário ou um método, mantenha pressionada a tecla Alt ( em Windows) ou a tecla Opção (em Mac OS) e clique no nome do objeto. Também pode clicar duas vezes no nome (espere um momento entre os dois cliques, do contrario será um duplo clique). O texto fica editável. Faça as mudanças e logo clique fora da ãrea de texto para guardá-las. Nota: mudar o nome de um formulário invalida os métodos e os formulários que utilizam o nome anterior. Cada um desses objetos devem ser atualizados para que funcionem corretamente. O Explorador mostra os objetos em ordem alfabético. Se novo nome não corresponde a esta ordem, 4D realiza uma nova ordenação e modifica a ordem quando você clicar fora da área de entrada. 4D Server: o nome do objeto é modificado no servidor ao se clicar fora da área de entrada do nome. Se vários usuários modificam al tempo o nome de um objeto, o nome final será o dado por o último usuário que o modificou. Pode definir um proprietário para um objeto de maneira que somente alguns usuários possam mudar seu nome. Para mais informação sobre a definição de privilégios de acesso, consulte o capítulo Usuários e grupos. Mostrar ou ocultar a vista prévia - 95 - Mostrar ou ocultar a vista prévia Pode mostrar ou ocultar a área de vista prévia do Explorador clicando no ícone de expandir ou contrair a área de vista previa . A janela de vista prévia permite visualizar as tabelas e campos, os formulários, os métodos, a documentação dos comandos, os valores de constantes, assim como também a informação sobre os componentes e plug-ins instalados no banco. Também pode utilizar a área de vista prévia para adicionar e ver comentários sobre certos objetos do banco. Para ocultar a área de vista prévia, clique novamente no botão Expandir/Contrair. Exibir comentários 4D permite associar comentários às pastas, tabelas, campos, formulários e métodos (banco, projeto, triggers e formulário) de seu banco de dados. A visualização e modificação dos comentários é realizada utilizando o Explorador (a área de vista prévia deve estar expandida). Para mostrar e modificar os comentários associados a um objeto, selecione o objeto na lista do Explorador e clique no botão Comentários localizado debaixo da área de vista prévia. A área de vista prévia é substituída pela área de comentários: A criação e uso dos comentários é descrita em detalhe na seção Usar os comentários. Usar Arrastar e Soltar Em muitos casos, pode utilizar arrastar e soltar para adicionar um objeto do banco de dados na janela de um editor. Por exemplo, pode adicionar um campo em um formulário arrastando o nome do campo desde a página Tabelas do Explorador ao editor de formulários. Quando trabalhe no editor de métodos, pode adicionar nomes de tabelas, campos, formulários, métodos de projeto, constantes e comandos (incluindo sua sintaxe) em seu código. As seções deste capítulo que descrevem as páginas do Explorador tem informação específica sobre as opções arrastar e soltar de cada página. Cada página do Explorador é descrita nas seguintes seções. Usar os menus contextuais e os menus de opções Pode utilizar os menus contextuais e os menus de opções nas páginas Início, Formulários, Métodos e Lixeira do Explorador. Estes menus dão acesso a funções adicionais, descritas nas seguintes seções deste capítulo. - 96 - - 97 - Página Início A página Início permite definir e utilizar as “pastas” de objetos do Explorador de 4D. Do mesmo jeito que as pastas utilizadas em Windows e Mac OS, as pastas de 4D agrupam diferentes objetos em função de critérios personalizados (particularmente por funcionalidade) e não apenas por tipo. Por exemplo, pode agrupar em uma pasta chamada “E-mail” os objetos relativos ao envio de mensagens de correio eletrônico em seu banco. Os objetos de tipo Tabela, Formulário e Método projeto podem se localizar em pastas. Também é possível criar sub-pastas em diferentes níveis. Todos os objetos personalizados do banco (tabelas, formulários, métodos de projeto) sempre são mostrados na página Início. Observe que os objetos continuam aparecendo nas outras páginas do Explorador. Nesta página, pode adicionar pastas e sub-pastas, renomear, mover e reorganizar pastas e objetos. Também pode criar diretamente tabelas, formulários e métodos de projeto. Como nas outras páginas do Explorador, pode abrir uma tabela, um formulário ou um método de projeto em uma janela do editor correspondente com um duplo clique em seu nome, ou inserir o nome utilizando arrastar e soltar. Por último, pode renomear ou apagar pastas e objetos. Também é possível atribuir uma pasta a um objeto no momento de sua criação. 4D Server: todos as máquinas cliente conectadas a um mesmo banco compartem a mesma configuração de pastas. Qualquer modificação realizada por um usuário desde uma máquina cliente (movimento, adição, etc.), automaticamente e instantaneamente repercute em todos as máquinas clientes conectadas. Desde esta página, também pode arrastar diferentes tipos de objetos (métodos, formulários, etc.) aos editores da base ou a outras bases em modo Desenho. As opções de arrastar e soltar que estão disponíveis para cada tipo de objeto se descrevem nas seções correspondentes deste tema. O arrastar e soltar entre bases se descrevem em [#title id="562"/]. Criar pastas e subpastas As pastas são úteis para organizar seus bancos por funcionalidades ou por critérios personalizados (datas, linguagens, etc.). Dessa maneira se facilita o acesso aos diferentes objetos a partir do Explorador. As pastas também são acessíveis em forma de listas hierárquicas no editor de métodos de 4D. Isto facilita as chamadas aos objetos quando se escrevem os métodos: - 98 - Também é possível utilizar as pastas para filtrar a visualização das tabelas no editor de estrutura (ver o parágrafo Ressaltar/Atenuar tabelas por pasta). Como padrão todos os objetos se localizam no primeiro nível. Pode adicionar pastas ou subpastas em qualquer momento na página Início do Explorador. Para fazer isso, simplesmente utilize o comando Novo>Pasta do menu de opções da página ou do menu contextual de área: Também pode utilizar o menu que aparece quando clicar no ícone adicionar (+) localizado na parte inferior da área. A pasta ou subpasta é criada imediatamente e seu nome por padrão é "Pasta_ + número da pasta". Pode modificar este nome, entretanto, o nome da pasta deve ser único e não conter mais de 31 caracteres. Para criar uma pasta, tenha certeza de que não existam elementos selecionados no momento da criação. Para criar uma subpasta, selecione a pasta na qual criar a subpasta antes de completar a criação. Após isso, pode facilmente transformar uma pasta em subpasta, e vice-versa, utilizando os comandos de movimento ou a função arrastar e soltar com o mouse. O comando Novo> da página Início permite criar não apenas as pastas, mas também tabelas, formulários e métodos de projeto. Quando escolher um subcomando deste tipo, vá diretamente à caixa de diálogo de criação do objeto. O menu contextual e o menu de opções da página Início oferecem funções adicionais em função do tipo de objeto selecionado. As opções disponíveis por tipo de objeto são descritas nas seções correspondentes deste tema. Apagar um objeto O comando Borrar elimina a seleção. Se a seleção contém uma pasta ou subpasta, todos os elementos que contém são eliminados. Este comando pode ser utilizado com todos os tipos de elementos (pastas, sub-pastas, tabelas, formulários e métodos projeto) e com seleções múltiplas. Os objetos eliminados desaparecem das listas e dos editores da aplicação. Os elementos eliminados passam a Lixeira do Explorador. Para mais informação sobre o funcionamento da lixeira do Explorador, consulte Página Lixeira. Para apagar um ou mais objetos desde a página Início do Explorador, podem ser selecionados e depois escolher Enviar a > Lixeira no menu contextual ou utilizando o menu de opções da página. Enviar a O comando Enviar a do menu contextual da página Início permite modificar o conteúdo de uma pasta sem ter que antes expandir a pasta destino. Para fazer isso, dê um clique direito no objeto, pasta ou seleção. Aparece o menu contextual. A opção Enviar a oferece como destinos possíveis todas as pastas e subpastas existentes: - 99 - Simplesmente selecione a pasta onde deseja localizar sua seleção. Se selecionar Nível superior, a seleção se localizará no primeiro nível da lista, fora de qualquer pasta (esta linha aparece inativa quando tentar mover um objeto que já esteja no primeiro nível). Se escolher Lixeira, se elimina a seleção (ver a seção anterior). Adicionar um objeto a pasta durante criação Pode colocar um novo objeto diretamente numa nova pasta durante sua criação. O menu "Pasta", localizado nas caixas de diálogo de criação de tabelas, formulários e métodos projeto, permite selecionar a pasta na qual criar o objeto. Como padrão, os objetos são criados no primeiro nível (Nível superior) ou na última pasta selecionada no Explorador (se aplicável). O menu de seleção está, por exemplo, presente na caixa de diálogo de criação de tabelas como se mostra na seguinte imagem: Depois de criar os objetos na página de Início do Explorador, você sempre pode mover os objetos para outra pasta. Informação da Pasta Quando selecionar uma pasta no Explorador, a área de vista prévia da janela mostra informação sobre a pasta: Pasta: Nome da pasta: número de objetos presentes dentro da pasta Tabela(s): número de tabelas na pasta Formulário(s): número de formulários na pasta Método(s) de projeto: número de métodos projeto na pasta Pasta(s): número de pastas (subpastas) na pasta Se um tipo de objeto não está na pasta, não aparece na área de vista prévia. Se a pasta está vazia, a área de vista prévia mostra unicamente Pasta: Nome da pasta. Quando existem várias pastas e/ou objetos selecionados, a informação mostrada é sobre o elemento atual, ou seja, o último elemento onde foi feito um clique. - 100 - Página Tabelas A página Tabelas contém todas as tabelas e campos do banco. Pode ser utilizada para acessar as propriedades das tabelas e campos. Ao expandir uma tabela aparece a lista de seus campos. O tipo de campo é indicado por um ícone do lado esquerdo de seu nome. Duplo-clique no nome de um campo para mostrar suas propriedades na janela Inspetor. Para mais informação consulte a seção Get database parameter. Usar Arrastar e Soltar Pode adicionar um campo a um formulário arrastando seu nome desde a página Tabelas do Explorador até o formulário. Pode adicionar um nome de tabela ou campo a um método, arrastando o nome do método na janela do editor de métodos. Desta forma se assegura de utilizar a sintaxe correta. Por exemplo, se arrasta o campo “Nome” da tabela [Clientes] até um método, aparecerá no método como “[Clientes]Nome”. Área de pré-visualização Também pode pré-visualizar a descrição das tabelas em forma tabular na área de pré-visualização do Explorador. Para fazer isto, selecione uma tabela e faça clique no ícone de pré-visualização . A imagem seguinte mostra a vista prévia de uma tabela: Esta área é unicamente informativa, não é possível modificar seus valores. Além dos números, nomes e tipos de campos da tabela selecionada, também são listados os índices associados a tabela (sem importar seu tipo) como também as relações que se originam na tabela. Para cada campo na origem de uma relação (campo Muitos), o campo de destino (Campo Um) se indica na coluna Relação. Igualmente pode visualizar o tipo de um campo quando seleciona seu nome na lista: - 101 - Ver a imagem da tabela na janela estrutura Pode ver a imagem de uma tabela com um duplo-clique no nome da tabela. 4D centra a visão da janela de estrutura na imagem da tabela e mostra suas propriedades na janela Inspetor. Esta funcionalidade é bastante útil se a estrutura de seu banco tem muitas tabelas diferentes, já que evita ter que movimentar-se na janela do editor de estrutura para ver uma tabela em particular. Adicionar uma tabela ou campo Pode adicionar uma tabela ou campo utilizando o botão adicionar . Para criar uma tabela, selecione um nome de tabela (ou se assegure de que nenhum objeto esteja selecionado) e clique no botão de adição. Aparece a caixa de diálogo padrão Nova tabela (consulte a seção Criar e modificar Tabelas). Para criar um campo, selecione um campo existente e clique no botão de adição. Aparece a janela do Inspetor, pronta para criar um campo em uma tabela selecionada (consulte o parágrafo ). Apagar uma tabela Pode eliminar uma tabela utilizando o botão apagar . Quando selecionar uma tabela e clicar neste botão, a tabela se apaga do editor 4D e não pode mais ser utilizada. Os formulários e métodos associados a ela também são apagados Nota: não se pode eliminar campos com o botão apagar. Na verdade, a tabela não é eliminada definitivamente, ela vai para a Lixeira, e se oculta em 4D (consulte Página Lixeira). Sua eliminação apenas acontece quando se esvazia a Lixeira. É possível apagar uma tabela desde o editor de estrutura (consulte o parágrafo Eliminar uma Tabela) ou através da linguagem SQL. - 102 - Página Formulários A página Formulários contém duas listas de formulários: Formulários de projeto e Formulários de tabela. A lista dos formulários de tabela mostra as tabelas do banco e seus formulários associados. Os formulários de projeto são formulários independentes que náo estáo associados a tabelas. Estes formulários são particularmente úteis quando desenvolve interfaces e componentes. Os formulários tabela são formulários associados a tabelas. Se beneficiam de automatizações e de funções adicionais para o processamento de dados. Para mais informação sobre as diferenças entre estes dois tipos de formulários, consulte o parágrafo Formulários de tabela e de projeto. Criar um novo formulário A página Formulários permite criar um formulário (formulário de projeto ou formulário tabela) de duas formas: Utilizando o assistente de criação de formulários: selecione o título “Formulários de projeto” (para criar um formulário projeto) ou a tabela ou um formulário da tabela na qual queira adicionar o formulário (para criar um formulário tabela) e logo escolha Novo formulário com Assistente... no menu de opções da página: Aparece o assistente de criação de formulários, pronto para criar um novo formulário. Para mais informação sobre este assistente, consulte a seção Criar um formulário com o assistente de formulário. Criar um formulário vazio: selecione o título “Formulários de projeto” (para criar um formulário de projeto) ou a tabela ou um formulário da tabela na qual queira adicionar um formulário (para criar um formulário de tabela) e logo clique no botão adicionar . Aparece uma caixa de diálogo onde pode definir o nome e a pasta do formulário. Quando valida esta caixa de diálogo, se cria o formulário vazio e se mostra em uma janela do editor de formulários. Para mais informação, consulte a seção Criar um formulário em branco. Editar um formulário Desde o Explorador, pode abrir diretamente um formulário existente no editor de formulários para edição. Para fazer isso, pode: Fazer um duplo clique em seu nome, Selecionar o formulário e logo Modificar o formulário... no menu contextual ou no menu opções da página. Para mais informação sobre a edição de formulários, consulte o capítulo Criar formulários. Eliminar um formulário Para eliminar um formulário, selecione seu nome na lsita e clique no botão apagar ou utilize o comando Eliminar formulário do menu contextual. Também pode arrastar e soltar o formulário na Lixeira. Não pode apagar um formulário de tabela que esteja sendo utilizado como formulário padrão de entrada ou saída de uma tabela. Pré-visualizar um formulário Para mostrar a área de visualização prévia, clique no ícone de pré-visualização visualizado. - 103 - . Selecione um formulário para ser Especificar o formulário atual de entrada ou saída Pode atribuir os formulários de entrada e de saída atuais para cada tabela desde o Explorador (formulários de tabela unicamente). Para fazer isso, clique no nome do formulário de tabela e utilize os comandos Formulário de entrada ou Formulário de saida do menu contextual: Para mais informação sobre os formulários de entrada e de saída padrão, consulte a seção Definir formulários de entrada e saída. Modificar o método de um formulário Pode abrir o método de um formulário diretamente desde a página Formulários do Explorador, selecionando o comando Modificar método de formulário... no menu contextual ou no menu de opções. O método do formulário se abrirá em uma janela do editor de métodos. Definir propriedades do Formulário através do Explorador Pode acessar as principais propriedades de um formulário desde o Explorador. Clique no nome do formulário, depois clique no comando Propriedades do formulário... no menu contextual ou no menu de opções da página. Para mais informação, consulte o parágrafo Propriedades de formulário (Explorador). Executar um formulário Pode executar um formulário em seu contexto (lista de registros para um formulário de tabela listado e registro atual em página para um formulário tabela detalhado) na janela de visualização de registros. Para fazer isso, escolha Executar formulário no menu contextual ou no menu opções da página. Para mais informação sobre como provar formulários, consulte o parágrafo Barra de ferramentas. Usar Arrastar e Soltar - 104 - Pode inserir um nome de formulário num método arrastándo-lo. Ao fazer isto, o nome do formulário aparece utilizando a sintaxe correta. Por exemplo, se arrasta o formulário Entrada da tabela [Empresas], aparecerá como [Empresas]"Entrada". Pode inserir um subformulário num formulário arrastando o nome desde a página Formulários do Explorador ao formulário aberto no editor de formulários. Para associar um subformulário detalhado ao subformulário listado na tela, mantendo pressionada a tecla Maiúscula e arraste o nome de um formulário de entrada desde a página Formulários do Explorador à área do subformulário no formulário. Para mais informação, consulte a seção Subformulários e widgets. Copiar, colar ou duplicar um formulário 4D permite copiar/colar ou duplicar um formulário existente, através dos comandos correspondentes do menu contextual ou no menu de opções da página. Isso permite desenvolver rapidamente vários formulários com características comuns. 4D adiciona e incrementa automaticamente um número ao nome do formulário se já existe um formulário com o mesmo nome na mesma localização de destino. - 105 - Página Métodos A página Métodos mostra as listas de métodos de projeto, métodos de banco de dados, métodos formulário tabela, métodos formulários projeto e triggers do banco de dados. Os tipos de métodos se agrupam por categorias. Nota: se foram instaladas no banco os componentes com métodos compartidos, a página mostra uma categoria adicional: Métodos componente. Este elemento lista os componentes instalados e seus métodos compartidos. Este ponto se detalha no parágrafo Visualização dos componentes. Criar um novo método Este parágrafo descreve como criar cada tipo de método desde o Explorador. Métodos de projeto: para criar um novo método de projeto, selecione o elemento Métodos projeto na lista hierárquica ou o nome de um método projeto existente e clique no botão adicionar . Também é possível criar um método projeto por duplicação ou copiar/colar (ver a seguir). Métodos recipiente: é mostrada esta categoria quando os recipientes com métodos compartilhados se instalam na base. Nele se enumeram os recipientes instalados junto com seus métodos compartilhados. Este ponto se descreve em Visualização dos componentes. Métodos de banco: não pode criar novos métodos banco. Simplesmente pode adicionar código a um dos métodos existentes (vazios por padrão). Para fazer isto, expanda o elemento Métodos de banco e logo dê um duplo-clique no método banco a modificar ou escolha o comando Modificar método... do menu contextual ou do menu de opções da página. Triggers: para criar um novo trigger, expanda a lista Triggers, selecione a tabela que deseja e clique no botão adicionar ou dê um clique duplo no nome da tabela. Também pode escolher Modificar método... no menu contextual ou no menu de opções da página. Métodos formulários projeto: para criar um novo método para um formulário projeto, expanda a lista Métodos formulários projeto, selecione o formulário que deseja e clique no botão adicionar ou dê um duplo clique no nome do formulário ou selecione Modificar métodos... no menu contextual ou no menu de opções da página. Métodos formulários tabela: para criar um novo método para um formulário tabela, expanda a lista Métodos formulários tabela, seleciona a lista de tabelas e formulários que deseja e clique no botão lista ou dê um duplo clique no nome do formulário ou selecione Modificar métodos... no menu contextual ou no menu de opções da página. Métodos4D Mobile: esta categoria enumera as tabelas que se expõem em 4D Mobile e todos os métodos projeto expostos unidos a elas. Para obter mais informação, consulte a seção [#title id="3391"/] no manual 4D Mobile. Nota: também pode criar um método de formulário selecionando Modificar método de formulário... no menu contextual ou no menu de opções da página Formulários. Criar um método com o Assistente de serviços Web Pode mostrar o assistente de serviços web desde a página Métodos. Selecione Assistente de serviços web... no menu de opções da página. Aparece o assistente de serviços web, pronto para ser utilizado para descobrir um serviço web e gerar os métodos proxy correspondentes. Para mais informação sobre o uso deste assistente, consulte o parágrafo Subscrever a um Serviço Web em 4D”. Deletar Métodos Pode eliminar qualquer método selecionando e clicando no botão Apagar contextual. ou selecionando Apagar método... no menu A eliminação depende do tipo de método: * Métodos base, triggers e métodos formulário: o conteúdo do método se apaga de modo que o método volta a seu estado “vazio” de forma padrão. Uma caixa de diálogo indica que a eliminação é definitiva. * Métodos projeto: o método é apagado da lista de métodos e vai para a Lixeira. É possível recuperar o método da Lixeira ou apaga-lo - 106 - definitivamente (para mais informação, consulte a seção Página Lixeira). Visualizar um método Clique no ícone para mostrar a área de pré-visualização e selecione um método. O conteúdo do método aparece como no editor de métodos. Pode selecionar, copiar ou arrastar e soltar tudo ou parte do conteúdo da área de pré-visualização. Propriedades de Método de Projeto Pode mostrar e modificar as propriedades dos métodos projeto desde o Explorador selecionando um método e usando o comando Propriedades do método... no menu contextual ou no menu de opções da página. Aparece a janela “Propriedades do método”, permitindo modificar o nome assim como as outras propriedades do método. Para mais informação sobre as outras opções de esta caixa de diálogo, consulte Definir as propriedades dos métodos de projeto. Alteração global de atributos O comando Alteração global de atributos... do menu contextual ou do menu opções (apenas se aplica a métodos projeto) permite modificar em una mesma operação um atributo (Invisível, Disponível através de 4DACTION, 4DMETHOD e 4DSCRIPT, etc.) para todos ou alguns dos métodos projeto do banco. Para mais informação, consulte o parágrafo “Alteração global de atributos de métodos”, na seção Alteração global de atributos de métodos. Executar um método É possível lançar a execução de um método banco e de um método projeto desde o Explorador. Selecione o método e logo escolha o comando Executar o método... no menu contextual ou no menu de opções da página. O método se executa em modo padrão. Para mais informação, consulte a seção Executar métodos. - 107 - Copiar, colar ou duplicar métodos de projeto É possível copiar, colar e duplicar métodos projeto desde a lista de métodos do Explorador. Estas funções permitem duplicar um método no mesmo banco de dados ou copiar novamente um método de um banco para outro. Para duplicar um método, selecione o método e escolha o comando Duplicar no menu contextual ou no menu opções da página. Para copiar um método, selecione o método e escolha o comando Copiar no menu contextual. Para colar o método, escolha Colar no menu contextual. Em caso de duplicação, ou se já existe um método com o mesmo nome no lugar onde vai colar o método, se adiciona um número ao nome do método, por exemplo MeuMetodo1. Este número aumenta se necessário (MeuMetodo2, MeuMetodo3, etc). Pesquisar por chamadas Pode pesquisar no Explorador a lista de objetos que fazem referência a um método de projeto (outros métodos ou menus). Esta função está disponível através do comando Pesquisar chamadas ao método no menu contextual ou no menu opções da página: Nota: o comando Pesquisar chamadas ao método... também está disponível no menu Método de Janela do editor de métodos. Este comando mostra uma nova janela de resultados. Para mais informação sobre a janela de resultados, consulte a seção Janela de Resultados. Buscar as dependências Pode buscar automaticamente desde o Explorador as dependências dos métodos projeto, em outras palavras os outros métodos projeto e os formulários utilizados direto ou indiretamente por estes métodos. Para ele, se seleciona um método projeto no Explorador e se seleciona o comando Buscar as dependências do método no menu contextual ou no menu de opções da página. Todas as dependências do método selecionado são mostrados a continuação em uma Janela de Resultados padrão. Você pode abrir-los em seus respectivos editores ou selecionar-los e mover-los usando arrastar e soltar. Isto facilita transferir funcionalidades completas entre suas bases. Também pode selecionar vários métodos projeto de uma vez e selecionar Buscar as dependências do método. Neste caso, as dependências de todos os métodos se mostram na janela de resultados. Analises da dependência Para encontrar os métodos projeto dependentes, 4D analisa o código do método a detectar: as chamadas diretas no código, os nomes dos métodos passados como parâmetros a um dos seguintes comandos: Open window (parâmetro controleMenuBox) ON ERR CALL ON EVENT CALL New process EXECUTE ON CLIENT SET MENU ITEM METHOD EXECUTE METHOD Deve passar um nome de parâmetro que seja uma constante literal de tipo texto correspondente a um nome de método executável válido. Para buscar um formulário dependente no código, 4D busca um nome de formulário passado como um parâmetro a um dos - 108 - seguintes comandos: Print form DIALOG OUTPUT FORM INPUT FORM PRINT SETTINGS GET FORM PROPERTIES Open form window O parâmetro tabela do formulário é reconhecido mas deve ser especificado explicitamente. 4D poderia não detectar uma dependência nos seguintes casos: //Caso de não detecção //método por referencia v:="myhandler" ON ERR CALL(v) //ponteiro a uma tabela DIALOG(Table(1)->;$formname) // usuário de DEFAULT TABLE DEFAULT TABLE([myTable]) DIALOG("myForm") // "myForm" será avaliado como um formulário projeto // chamada de função utilizando FN no código SQL Begin SQL SELECT Film_Title, {FN How_Many_Actors(ID) AS NUMERIC} ... - 109 - Página Comandos A página Comandos mostra todas as rotinas integradas de 4D, agrupadas por temas. Esta lista é a mesma que se mostra no editor de métodos. Pode utilizar esta página para acessar a página de documentação online dos comandos. A área de visualização prévia também permite mostrar a informação sobre a sintaxe dos comandos. Acessar a documentação online Pode acessar a documentação online (HTML) de 4D diretamente a partir da página de comandos: somente necessita fazer um duplo clique no nome do comando. A página de documentação HTML correspondente é mostrada no seu navegador. As páginas de documentação HTML podem ser guardadas em um CD ou em um DVD, em seu disco rígido ou podem vir diretamente do website de 4D (4D Doc Center). A localização de onde a página é carregada está definida pela área "Localização da documentação" nas Preferências de Usuário (ver a seção Página Geral). Por configuração padrão, 4D se conectará ao website do 4D Doc Center. Mostrar a sintaxe de comando Quando a área de visualização prévia está aberta, mostra o número do comando selecionado assim como uma descrição da sintaxe do comando. Nota: o número do comando é utilizado pela função Command name. Se não deseja mostrar a sintaxe, pressione a tecla Alt (Windows) ou Opção (Mac OS)enquanto clica sobre o nome do comando. A área de lista do Explorador também mostra mensagens de ajuda que contém o número e a sintaxe dos comandos: Estes mensagens de ajuda são idênticos aos mostrados na área de edição do Janela do editor de métodos. Usar arrastar e soltar Pode inserir um comando no método utilizando arrastar e soltar no Explorador. Neste caso, o comando se insere com sua sintaxe. - 110 - Página Constantes A página Constantes contém todas as constantes que possam ser utilizadas nos métodos. Pode visualizar o valor da constante selecionada na área de vista prévia quando se despega, ou via mensagens de ajuda mostrados na área de lista . As constantes mostradas podem vir de 4D, plug-ins ou recursos personalizados. Para mais informação sobre constantes, consulte a seção ARRAY TO SELECTION no manual de Linguagem de 4D. Usar arrastar e soltar Como as constantes são utilizadas frequentemente nos métodos, é possível inserir uma constante num método apenas com arrastar e soltar. Selecione a constante no Explorador e a arraste até a janela do editor de métodos. Po padrão, as constantes aparecem sublinhadas no editor de métodos. - 111 - Página Plug-ins A página Plug-ins lista todos os plug-ins instalados no banco assim como todos os seus comandos, geralmente agrupados por temas. A área de visualização prévia mostra informação adicional sobre os plugins e também a localização dos arquivos ativos. Nota: Para mais informação sobre a instalação de plug-ins em sua aplicação, consulte a seção Instalar plugins ou componentes. - 112 - Página Lixeira A página Lixeira do Explorador reúne todos os objetos do tipo Pasta, Tabela, Formulário ou Método projeto apagados do banco. Igual que a Lixeira de Windows ou de Mac OS, a Lixeira de 4D é um elemento de segurança da interface, que reduz o risco de eliminação acidental de objetos. Os objetos na Lixeira não aparecem mais nos editores ou menus de 4D e não podem ser modificados, utilizados, movidos, etc. Outros objetos similares podem ser criados com o mesmo nome. Os objetos localizados na Lixeira podem ser recuperados desde que a Lixeira não seja esvaziada. Também é possível mostrar os objetos na área de visualização prévia da página Lixeira. Além disso, os possiveis comentários associados com os objetos eliminados permancem visíveis. 4D Server: o conteúdo da Lixeira é idêntico para todas as máquinas cliente. Deletar objetos Objetos podem ser eliminados a partir da página Início ou desde as páginas Tabelas, Formulários e Métodos. Para eliminar um objeto no Explorador, simplesmente selecione o objeto e escolha o comando Eliminar no menu contextual do Explorador (clique com o botão direito) ou simplesmente selecione o objeto e escolha o botão de eliminar . Na página Inìcio, também se pode selecionar a Lixeira como destino de um objeto. Também pode por uma tabela na Lixeira. A tabela desaparece dos editores do banco, incluindo o editor de Estrutura. Quando colocar uma tabela na Lixeira, os formulários da tabela também são eliminados automaticamente (vão para a Lixeira) e seus menus associados são apagados. Não é possível eliminar a partir do Explorador um formulário tabela com o atributo E (formulário de entrada atual) ou S (formulário de saída atual) ou A (formulário com os dois atributos) exceto quando se apaga a tabela desse formulário. Do mesmo modo, não é possível eliminar as pastas que contém elementos não elimináveis. Restaurar um objeto A qualquer momento é possível recuperar um ou vários objetos que estiverem na Lixeira (desde que ela ainda não tenha sido esvaziada). Simplesmente selecione os objetos e os arraste até o ícone da página apropriada do lado esquerdo da janela, ou selecioe o comando Enviar a > no menu contextual com o clique direito: O submenu Enviar a > mostra as pastas presentes no banco (para mais informação, consulte a seção ). Se o banco de dados não contém pastas, somente aparece disponível a opção Nível Superior. Quando escolhe uma opção deste submenu, os objetos selecionados são restaurados e movidos para a pasta escolhida como destino. Se escolhe Nível superior, a seleção se localiza no primeiro nível, não em nenhuma pasta. Se um ou mais objetos do banco têm o mesmo nome de um ou mais objetos que deseja recuperar, 4D mostra uma caixa de diálogo de alerta oferecendo: substituir o objeto no banco (formulários, métodos, etc). renomear o objeto a recuperar como nome_1 (tabelas) O botão Sim renomeia o objeto em recuperação ou substitui o objeto existente. O botão Sim para todos renomeia ou substitui todos os objetos da seleção. Se fizer clique no botão Não, ou Não para todos, a recuperação de objetos não se realiza. Apenas se recupera ao objeto selecionado. Especificamente, os formulários apagados com uma tabela não são - 113 - recuperados automaticamente com a tabela. Esvaziar a Lixeira Como padrão, os objetos eliminados permanecem na Lixeira até ela ser esvaziada. Pode esvaziar a Lixeira a qualquer momento, por exemplo, antes de compactar o banco de dados, com o propósito de reduzir o tamanho do arquivo de estrutura. Todos os objetos da Lixeira são eliminados definitivamente do banco de dados. Para esvaziar a Lixeira, escolha o comando Esvaziar a Lixeira no menu contextual (clique direito) ou no menu de opções da página: Uma caixa de diálogo de alerta indica o número de objetos presentes na Lixeira e permite confirmar ou cancelar a operação: Clique em Aceitar para apagar todos os objetos da Lixeira. - 114 - Usar os comentários O Explorador permite associar comentários aos objetos em seu banco de dados. O uso de comentários é especialmente apropriado para bancos desenvolvidos por vários programadores e geralmente é uma boa prática em programação. Seus comentários são visíveis na área de visualização prévia do Explorador. Os seguintes tipos de objetos aceitam o uso de comentários: pastas métodos (banco, componentes, projeto, triggers e formulário), formulários, tabelas, campos, plug-ins Um comentário 4D se apresenta como texto, (os caracteres podem ter diferentes estilos de fontes, cores, etc..) modificável e visível a qualquer momento no ambiente Explorador. POde conter uma descrição do objeto a que está associado, assim como também toda informação necessária para entender o funcionamento do banco. Os comentários são guardados na estrutura do banco. Adicionalmente, pode gerar comentários automáticos, ou seja, comentários cujo conteúdo é atualizado automaticamente por 4D quando um objeto é criado ou modificado. Nota de compatibilidade: desde a versão 12 de 4D, os comentários inseridos no cabeçalho de um método utilizando os caractere // são mostrados como mensagens de ajuda quando o método é referenciado em outro método (ver o parágrafo "Utilizar as mensagens de ajuda" na seção WA SET EXTERNAL LINKS FILTERS. Esta função, muito útil para documentar os métodos usuário, não é compatível com os comentários no Explorador. Se deseja utilizar os cabeçalhos dos métodos desta forma, não introduza comentários no Explorador. Associar um comentário com um objeto Pode criar, ver e modificar os comentários no Explorador. Para adicionar um comentário quando se mostra a área de visualização prévia, selecione o objeto na lista do Explorador, e logo clique no botão Comentários localizado na parte inferior da área de visualização prévia. Quando a opção Comentários estiver selecionada, a área de visualização prévia é substituída pela área Comentários e pode introduzir ou modificar o texto mostrado. - 115 - 4D Server: o ícone de bloqueio, localizado na esquina inferior esquerda da área, indica se o comentário está sendo editado por outro usuário. Se esse for o caso, o lápis aparece com uma barra diagonal e somente se pode ler o comentário. O texto é guardado logo que se faça um clique fora da área de entrada. Pode introduzir até 32.700 caracteres de comentários por objeto. Pode utilizar na área de comentários os comandos padrão de texto (Copiar, Colar, Selecionar tudo, etc) disponíveis no menu contextual ou utilizando os atalhos de teclado. Também pode utilizar as teclas de navegação para se movimentar pelo texto da área de comentários. Modificar o estilo dos comentários Pode melhorar o estilo dos comentários (colocando negrito ou itálico) e mudar a fonte dos caracteres ou sua cor: 1. Selecione o texto que deseja modificar na área Comentários. 2. Clique com o botão direito na área. 3. Aparece um menu hierárquico expandível 4. 5. Seleccione los atributos que quiere aplicar al texto. Inserir comentários automáticos É possível ativar um sistema de comentários automático, apenas para os métodos e formulários do banco de dados. Quando esse sistema estiver ativo, um comentário se associa automaticamente a cada método ou formulário criado ou modificado no banco de dados. Um comentário automático pode conter texto estático (como "Modificado por") e elementos variáveis (data, hora e usuário atual, como definido na tabela de senhas de 4D) Os comentários automáticos são definidos na caixa diálogo de Propriedades do banco, Página Geral (ver o parágrafo ). Do mesmo jeito que os comentários padrão, eles podem ser vistos no Explorador. Para ativar o sistema de comentários automáticos: 1. Abra a caixa de diálogo de Propriedades através do comando Propriedades do banco... do menu Desenho ou clicando no botão Propriedades da barra de ferramentas de 4D. 2. Na página Geral, selecione a opção Ativar os comentários automáticos. 3. Introduza o texto dos comentários. Pode inserir textos estáticos e elementos variáveis utilizando os botões Data, Hora e Usuário localizados na área. Também pode introduzir diretamente as seguintes variáveis: #D para a data #H para a hora #N para o usuário atual Por exemplo, se introduzir os seguintes valores: - 116 - O comentário automático se adicionará aos comentários para todos os novos métodos e formulários, como também para todos os métodos e formulários existentes que se modifiquem depois de que se ativem os comentários automáticos: - 117 - Nota: se o banco não possui um sistema de senhas, #N devolve a string “Designer.” 4D Server: os comentários automáticos podem ser modificados por qualquer máquina cliente com acesso às Propriedades do banco. Também pode modificar estes parâmetros nas Propriedades do banco na máquina servidor. Toda modificação realizada na página de comentários automáticos é considerada imediatamente em cada máquina cliente no instante em que o objeto comentado é modificado. - 118 - Explorador de Execução Acesso ao Explorador de Execução Página Seguimento Página Processo Página Ponto de Interrupção Página Captura - 119 - Acesso ao Explorador de Execução A janela do Explorador de Execução permite revisar o comportamento dos diferentes elementos estruturais de seu banco e verificar que os recursos disponíveis funcionem corretamente. O explorador de execução é particularmente útil durante as fases de desenvolvimento e análise de uma aplicação. A janela do Explorador de Execução pode ser mostrada nos ambientes Desenho e Aplicação, em modo interpretado ou compilado. Em um banco protegido por senhas, somente O Desenhista e o Administrador tem acesso à janela do Explorador de execução. O Explorador de execução pode ser mostrado em dois tipos de janela: em uma janela normal ou em uma janela flutuante. A paleta flutuante sempre é mostrada em primeiro plano. Para mostrar a janela do explorador de execução em uma janela normal, selecione o comando Explorador de execução no menu Executar. Para mostrar a janela do Explorador de ejecução como uma paleta flutuante: pressione Ctrl+Maiúscula+F9 (Windows) ou Comando+Maiúscula+F9 (Mac OS) Mantenha pressionada a tecla Maiúscula e selecione o comando Explorador de execução no menu Executar. A janela do Explorador de execução tem quatro páginas, acessíveis através dos botões localizados à esquerda: Seguimento, Processo, Ponto de interrupção e Captura. - 120 - Página Seguimento A página Seguimento é um depurador de bugs e mostra informação sobre a execução do código relacionada com a aplicação e o processo selecionado. As áreas localizadas na parte inferior da janela permitem configurar a informação mostrada: Processo selecionado: esta lista expansível contém todos os processos que estão em execução no banco, permitindo selecionar os processos que se deseja observar. Atualizar cada: nesta área pode definir um valor (em segundos) que indica a frequência de atualização da informação na página. A coluna “Expressão” mostra os nomes dos objetos e expressões. A coluna “Valor” mostra o valor atual dos objetos e expressões. Estas colunas podem ser redimensionadas, uma em relação com a outra. Clicando em um valor da coluna direita, pode modificar o valor do objeto, se for permitido. A lista hierárquica multi-níveis está organizada por tema. Os temas são os seguintes: Variáveis: permite ver a lista de variáveis interprocesso do banco e das variáveis de processo do processo selecionado. Constantes: permite ver a lista de constantes definidas no banco. Tabelas e campos, Semáforos, Conjuntos, Processos e Seleções temporais: a informação proporcionada nestes temas é idêntica à informação proporcionada pelo depurador de 4D. Para mais informação, consulte a seção Painel de expressão no manual Linguagem de 4D. Informação: este tema mostra informação geral relacionada com o funcionamento do banco, tal como a tabela padrão atual (se houver), a memória disponível, o destino da pesquisa, etc. Esta informação permite examinar o funcionamento do banco. Web: mostra informação relacionada com o servidor web da aplicação (apenas está disponível quando o servidor web está ativo). Arquivo web a enviar: nome do arquivo web esperando ser enviado (se houver um) Ocupação de cache web: número de páginas presentes no cache web e sua porcentagem de uso, Tempo de atividade do servidor web: tempo de funcionamento do servidor web em formato horas:minutos:segundos Número de requisições http: número total de requisições HTTP recebidas desde o lançamento do servidor web, como também o número instantâneo de requisições por segundo Número de processos web ativos: número de processos web ativos, todos os processos web. As expressões dentro desse tema não podem ser modificadas. A informação oferecida nestes temas é idêntica a proposta pelo depurador de 4D. Para maior informação, consulte a seção [#title id="29"/]no manual Linguagem de 4D. Para eliminar uma expressão ou tema, selecione a linha correspondente e pressione a tecla eliminar uma expresão ou tema, selecione a linha correspondente e pressione a tecla Deletar ou Retrocesso. Adicionalmente, o menu contextual (botão direito do mouse) permite realizar várias operações Também pode adicionar uma Nova expressão ou inserir um Comando 4D ou realizar operações globais como: Eliminar tudo, mostrar todas as Expressões padrão, Contrair tudo ou Expandir tudo. Nota: pode adicionar uma nova expressão com um duplo clique na coluna Expressão. Além disso, há várias opções de expansão disponíveis no menu contextual: Mostrar tipos: mostra ou oculta os tipos de campos junto a seus nomes na lista tabelas e campos. Mostrar números de tabelas e campos: mostra ou oculta os números de tabelas e campos junto a seus nomes na - 121 - lista tabelas e campos. Para cada campo se aplica o seguinte formato: [NúmeroTabela]NúmeroCampo. Mostrar ícones: mostra ou oculta os ícones dos objetos na lista hierárquica. Tabelas e campos ordenados: ordena alfabeticamente a lista de tabelas e campos (como padrão, estes objetos aparecem na ordem em que foram criados). Mostrar inteiros em hexadecimal: mostra as variáveis declaradas como de tipo Inteiro ou Inteiro longo em sua forma hexadecimal. Ativar seguimento de atividade: mostra informação adicional relacionada com o planificador e a rede de comunicações. Esta informação de baixo nível, agrupada nos elementos Planificador e Rede, permitem fazer um seguimento avançado da atividade interna da aplicação. Atenção, ao ativar esta opção os processos perdem velocidade. - 122 - Página Processo A página Processo permite visualizar o tempo de CPU consumido como também diferente informação sobre cada processo criado na base. Você também dispõe de várias ferramentas para os processos (excluindo processos sistema). Para mais informação sobre processos em 4D, consulte a seção Processos no manual Linguagem de 4D. Nota 4D Server: a página Processo do Explorador de execução em um cliente 4D controla os processos deste cliente 4D. A Página Processos da janela de administração de 4D Server controla todos os processos dos clientes conectados ao servidor. Informação sobre os processos Para cada processo, a página dá a seguinte informação: tipo do processo número do processo (número de identificação, idêntico ao número de processo. Este número de identificação é utilizado pelos comandos e funções para designar um processo particular). nome do processo, estado atual do processo, tempo de execução total do processo em segundos desde sua criação, a porcentagem de tempo CPU consumido pelo processo. Tipo de processo Cada processo está identificado por um ícone, cuja cor e forma indicam seu tipo: Servidor de aplicação Servidor SQL Servidor DB4D (motor de base de dados) Servidor Web Servidor SOAP Processo client 4D protegido (processo desenvolvido de um 4D conectado) Processo client 4D principal (processo principal de um 4D conectado; processo cooperativo, equivalente no servidor do processo criado na equipe cliente) Processo client 4D de base de dados (processo paralelo a um processo cliente 4D; processo preemptive responsável de controlar o processo client 4D principal correspondente) Processo Spare (anterior ou futuro "Processo client 4D de base de dados") Processo client 4D (processo executando no 4D conectado) Procedimento armazenado (processo lançado por um 4D conectado e executado no servidor) Método Web (lançado por um 4DACTION por exemplo) Método SOAP (lançado por um Web Service) Método SQL (lançado por uma petição SQL) Número de Processo Cada processo tem um número único que corresponde à ordem de criação do processo durante a sessão. Quando se inicia a aplicação, os primeiros números são atribuídos aos processos criados automaticamente por 4D (seu número varia de acordo com os servidores executados no início). Quando você criar seus próprio processo, ele aparece como o próximo processo na sequencia ou então pega o lugar de um processo que tenha sido abortado. Por exemplo, suponha que processos 7 e 8 estão sendo executados. Se processo 7 é abortado, o próximo processo a começar será chamado de processo 7. Nota: os processos são abortados automaticamente ao terminar as tarefas para as quais foram criados. Pode abortar um processo antes de que termine usando o Explorador de Execução. Para mais informação, consulte Abortar um processo. Nome de Processo É criado um novo processo utilizando New process ou Execute on server, pode definir seu nome como parâmetro para a função. O nome especificado no parâmetro aparece como o nome do processo na lista de processos. - 123 - Se não especifica um nome de processo utilizando um comando, 4D atribui automaticamente um nome por padrão ao processo. Os nomes automáticos estão baseados no método utilizado para criar o processo: Processos criados desde um comando de menu: é criado um processo desde um comando de menu, o processo recebe por padrão o nome “M_NúmeroProcesso.” Por exemplo, se o processo 7 é criado quando se seleciona um comando de menu, o processo recebe o nome “M_7.” Processos criados a partir da execução de um método: é criado um processo desde a caixa de diálogo Executar método ou diretamente do editor de métodos, o método recebe automaticamente o nome “P_ProcessNumber.” Por exemplo, se o processo 8 é criado por programação, o processo recebe o nome “P_8.” Processos criados utilizando um comando, mas não chamados explicitamente: é criado um processo utilizando um método mas não especifica o nome como um parâmetro para o comando New process, o nome do processo se deixa em branco. Nota para 4D Server: se o nome de um processo começa pelo caractere ($), é um processo local que não tem acesso às tabelas ou ao servidor 4D. (ver Processos globais e locais). Estado do processo O estado de um processo é o estado atual de sua execução. Os seguintes estados podem ser mostrados na lista dos processos: Executando: o processo está sendo executado. Suspenso: o processo está parado por um tempo específico. Durante o período que o processo está suspenso, o processo não ocupa nenhum tempo de processamento. Para mais informação sobre como suspender um processo, consulte o manual de Linguagem 4D. Esperando evento: o processo está esperando uma ação do usuário tal como clicar um botão, a seleção de um comando. Esperando entrada/saída: o processo está esperando que ocorra uma entrada ou saída. Por exemplo, um processo pode necessitar esperar enquanto um grupo de registros está sendo atualizado no disco. Esperando bandeira: o processo está esperando que os processos internos terminem de executar as tarefas do banco 4D. Parado: o processo está parado até que se indique que a execução seja retomada Durante o período em que o processo esteja suspenso, não consome tempo de processamento. Para mais informação, consulte Colocar um processo em pausa. Abortado: o processo termina. Quando um processo é abortado, 4D libera todos os registros bloqueados, cancela todas as transações abertas pelo processo mas não validadas ou canceladas e libera a seleção atual assim como o registro atual. Os processos são abortados automaticamente uma vez terminados. Igualmente pode abortar um processo antes de que tenha sido completado, usando o Explorador de execução. Para mais informação sobre como abortar um processo, consulte Abortar um processo. Diálogo Modal Oculto: um processo que mostrava uma caixa de diálogo modal se esconde de maneira que o usuário não possa ver mais a caixa de diálogo. O processo permanecerá neste estado até que a caixa de diálogo seja mostrada novamente Tempo e porcentagem CPU da execução Quando se administram os processos, 4D divide o tempo de processamento entre os diferentes processos em execução. Dessa maneira, a duração da execução é o tempo total de execução (em segundos) que um processo tomou desde sua criação. Note que o tempo de processamento não corresponde à quantidade total de tempo que passou desde que o processo começou a ser executado, já que na realidade, a execução vai alternando entre todos os processos abertos. O Explorador de execução mostra o tempo de processamento de cada processo. Se abrir o gráfico do processo, poderá ver a seguinte informação: Pode modificar a frequência com a qual atualizar a informação, que pode ser a cada um, dois ou três segundos. Escolha um valor no menu "Frequência de atualização" localizado na parte inferior da janela. Quanto maior o tempo de atualização, mais tempo de CPU é consumido pelo Explorador de Execução. O número de processos a serem representados graficamente na tela também influencia o tempo de CPU consumido pelo processo. Ações realizadas nos processos O explorador de execução permite controlar a execução de processos suspendendo, retomando ou abortando um processo. Pode igualmente escolher executar em modo depuração. Por último, a qualquer momento pode ocultar e voltar a mostrar suas janelas. Estas operações são detalhadas nas seções abaixo. Estas operações são levadas a cabo por meio de botões de controle que se encontram por debaixo da lista de processos. - 124 - Estes botões afetam a seleção de processos. Pode selecionar mais de um processo ao mesmo tempo (Maiús+clique para uma seleção adjacente ou Comando/Ctrl+ clique para uma seleção não adjacente). Nota: pode suspender um processo por um período de tempo específico. Para mais informação a respeito, consulte o manual de Linguagem 4D. Suspender e reativar a execução de um processo Pode suspender temporariamente a execução de um processo. Pausar um processo permite, por exemplo, dispor de mais tempo de processamento para a execução de outros processos ou para permitir que um evento, do qual depende o processo, ocorra. Por exemplo, suponha que inicia um processo que imprime uma seleção de registros. Logo percebe que deseja modificar a informação em um dos registros, e assim primeiro suspende o processo, realiza suas modificações e logo reativa o processo para continuar imprimindo os registros. Para deixar um processo em pausa, selecione-o e clique no botão Pausa . O estado do processo na janela do editor muda automaticamente a "em pausa". O processo permanece em pausa indefinidamente até que se indique que a execução seja reativada. Para reativar a execução de um processo, selecione-o e clique no botão Reativar . O estado do processo regressa ao estado que o processo tinha antes de ficar em pausa. Por exemplo, se o processo estava sendo executado antes de ser colocado em pausa, o processo começa novamente sua execução. Se o processo estava esperando por um evento antes de ser pausado, continua esperando por um evento. Abortar um processo Um processo se aborta automaticamente quando termina a tarefa que realiza. Entretanto, é possível abortar um processo antes que termine por motivos de depuração. Os processos não devem abortar-se por outras razões. Para parar sua execução, se aborta o processo no Explorador de execução. Quando se aborta um processo, 4D libera todos os registros bloqueados, cancela todas as transações abertas pelo processo, mas não validadas ou cancelas, e libera a seleção e o registro atual. Para abortar um processo, selecione-o e clique no botão Abortar . O estado do processo no Explorador de execução muda automaticamente para “abortado.” Depurar um processo Pode depurar um processo monitorando sua execução no depurador de 4D. Para depurar um processo, selecione-o e clique no botão Depurar . Se o processo está sendo executado, aparece a janela de depuração de 4D, que permite depurar o processo executando-o passo a passo e avaliando expressões tais como o valor dos campos e variáveis utilizadas no método. Se o processo for parado, 4D "guarda" a solicitação e mostra a janela de depuração logo que a execução do processo seja reativada. Para mais informação sobre a utilização da janela de depuração, consulte o manual Linguagem 4D. Não é possível depurar os processos internos criados e administrados por 4D. Esconder um processo É possível tornar um processo invisível quando estiver no modo Aplicação. Quando um processo estiver oculto, todas as janelas e todos os menus criados para o processo se tornam invisíveis para os usuários durante sua execução. Ocultar um processo é útil para as operações nas quais você abre uma janela que queira fechar mais tarde. Ao invés de abortar o processo para fechar a janela, pode tornar a janela invisível para o usuário ocultando o processo que a abre. Mesmo que a janela esteja oculta, o processo continua para executar e completar a operação que começou. Para ocultar um processo, selecione e escolha o comando Ocultar no menu de opções: Agora o processo está oculto no modo Aplicação. Note que o processo continua a execução mesmo que esteja oculto. Pode mostrar o processo oculto a qualquer momento. Para mostrar novamente um processo, faça clique no botão Mostrar . O processo se torna novamente visível no ambiente Aplicação. Passar um processo para o primeiro plano É possível passar uma janela para o primeiro plano, e assim também passar a primeiro plano o processo que a genera. Por exemplo, se passa ao primeiro plano o processo principal, o modo Aplicação passa ao primeiro plano da tela. Pode passar ao primeiro plano todos os processos usuário. Se criou uma janela para um processo, essa janela se converte na janela do primeiro plano da tela. Se uma barra de menus está associada à janela, 4D passa a barra de menus ao primeiro plano e os menus da barra são convertidos nos menus atuais. A barra de menus atual é substituída pela barra de menus do processo que passou ao primeiro plano. - 125 - Para passar um processo para frente, selecione-o e escolha o comando Trazer para frente . Todas as janelas associadas ao processo passam para o primeiro plano. Além disso, 4D mostra a barra de menus da janela atual do processo. - 126 - Página Ponto de Interrupção Permite visualizar e administrar os pontos de interrupção que tenha estabelecido no seu banco de dados. Está página está descrita na seção Listas de ponto de interrupção do manual Linguagem. - 127 - Página Captura A página Captura mostra os pontos de interrupção definidos no banco em relação aos comandos (ou expressões). Esta página está descrita na seção Capturas de comandos do manual Linguagem. - 128 - Procurar e substituir no ambiente Desenho Visão Geral Realizar uma Busca Janela de Resultados Substituir no conteúdo Renomear Procurar por elementos sem usar - 129 - Visão Geral 4D oferece várias funções de busca e substituição de objetos no ambiente Desenho. Pode procurar por uma cadeia de caracteres (string) ou um tipo de objeto (variável, comentário, expressão, etc.), numa parte ou em toda a estrutura do banco dados, usando critérios personalizados ("começa por", "contém", etc.). Por exemplo, pode procurar todas as variáveis que contém a string "MinhaVar", somente nos métodos cujo nome começa por "RH_". Os resultados são mostrados numa janela de resultados, onde é possível substituir o conteúdo. Pode detectar as variáveis e métodos que não são utilizados no código e logo apagá-las para liberar memória. Pode mudar o nome do método projeto ou uma variável em todo o ambiente Desenho em uma só operação. Nota: também há funções de pesquisa entre os métodos de sua base, os quais estão disponíveis no menu contextual da Página Métodos no Explorador: Buscar os chamamentos e Buscar as dependências. As duas funções mostram os elementos encontrados em uma Janela de Resultados. Elementos pesquisados Uma busca no ambiente Desenho, automaticamente busca nos seguintes objetos: Menus (nomes e elementos) e comandos associados aos elementos. Listas (nomes e elementos) Imagens da biblioteca (nomes) Mensagens de ajuda (nomes e conteúdo) Nomes de formatos /filtros (nomes e conteúdo) Nomes de tabelas e campos Nomes dos formulários Nomes dos métodos de projeto Comentários no Explorador Conteúdo de todos os métodos (triggers, métodos banco, métodos projeto, métodos objeto) Conteúdo dos formulários: 1. 2. 3. 4. 5. 6. 7. 8. nomes dos objetos nomes de mensagens de ajuda utilizadas pelos objetos nomes de imagens utilizadas pelos objetos nomes de variáveis utilizadas pelos objetos nomes de folhas de estilo utilizadas pelos objetos cadeias de formatos títulos de objetos referências a campos ou tabelas - 130 - Realizar uma Busca Iniciar a procura Especifique os seus critérios de busca na janela "Procurar em Desenho". Para fazer isso: 1. Clique no botão em formato de lupa na barra de ferramentas de 4D. 2. Ou escolha o comando Procurar no ambiente Desenho... do menu Edição. Aparece a janela de procura: 3. As áreas dessa janela variam dinamicamente em função das seleções realizadas nos menus. 4. Construa sua procura usando os diferentes menus e áreas de entrada de "Definição" e se for necessário introduza a cadeia de caracteres a procurar. Estes elementos são descritos nas seções seguintes. 5. Configure as opções de busca (se necessário). Estas opções são descritas na seção "Opções de procura" a continuação. 6. Clique em Aceitar ou pressione a tecla Enter. A procura começa. Quando terminar, aparece a janela de resultados listando os objetos que contém a string introduzida (ver a seção Janela de Resultados). Nota: é possível interromper uma procura a qualquer momento pressionando a tecla Esc. Após ter realizado sua procura, o valor introduzido na área de procura é guardado na memória. Este valor, assim como todos os demais valores ingressados durante a mesma sesão, podem ser selecionados desde o combo box: Usar a barra de ferramentas Pode realizar pesquisas usando a barra de ferramentas do ambiente Desenho de 4D. Se não realizou nenhuma procura durante a sessão, pode introduzir a cadeia de caracteres a procurar e pressionar Retorno de Carro ou a tecla Enter. Uma procura do tipo "o texto contém" é realizada automaticamente com as opções - 131 - automáticas Se deseja repetir uma procura realizada durante a sessão, pode selecioná-la na lista expandível. Se a procura foi realizada usando a janela Procurar, a procura é feita com as opções definidas nessa janela. A procura é iniciada imediatamente. Uma vez realizada a procura, aparece uma janela de resultados, com uma lista de todos os objetos que contém a cadeia introduzida. Definições de Procura As procuras no ambiente Desenho podem ser baseadas em um ou mais critérios. Procurar Pode especificar o tipo de elemento a ser procurado usando o menu Procurar. As seguintes opções estão disponíveis: Texto: nesse caso, 4D procura uma cadeia de caracteres em todo o ambiente Desenho. A procura é realizada em modo de texto sem formato, sem ter em conta o contexto. Por exemplo, pode procurar o texto "ALERTA ("Número de erro: "+" ou "botão27". Neste modo, não é possível utilizar o caractere coringa porque "@" é considerado como um caractere qualquer. Comentário: uma procura desse tipo equivale à anterior mas está restrita ao conteúdo dos comentários no código (linhas que começam por //) e na janela do Explorador (ver Usar os comentários). Por exemplo, pode procurar os comentários que contenham a frase "A verificar". Nota: o resultado final de ambos os tipos de procuras depende de como está configurado o modo de procura (ver o parágrafo Modo Procura). A Expressão...: permite procurar toda expressão 4D válida, realizada em modo "contém". A validez é importante porque 4D deve poder avaliar uma expressão para procurá-la. Por exemplo, uma procura da expressão "[clientes" (expressão inválida) não devolverá nenhum resultado, enquanto que "[Clientes]" é correta. Esta opção é especialmente adequada para as procuras de atributos de valor e comparações de valores. Por exemplo: Procura de "minhavar:=" (atribuição) Procura de "minhavar=" (comparação) Elemento de linguagem: permite procurar um elemento de linguagem específico pelo seu nome. 4D diferencia entre os seguintes elementos: Método projeto: nome do método de projeto, por exemplo "M_Add". Lembre que essa procura (associada ao modo "é exatamente") é equivalente ao comando contextual Procurar as referências no editor de métodos (consultar ). Formulário: nome do formulário, por exemplo, "Entrada". O comando procura nos formulários projeto nos formulários tabela. Campo ou Tabela: nome de tabela ou campo, por exemplo "Clientes". Variável: qualquer nome de variável, por exemplo "$mivar". Constante 4D: qualquer constante, como "é uma imagem". String entre aspas: constante texto literal, ou seja, qualquer valor dentro das aspas no editor de código é inserido nas áreas de texto do editor de formulários (texto estático ou uma área de grupo). Por exemplo, uma procura de "Martin" obterá resultados se seu código contém a linha: QUERY ([Clientes];[Clientes]Nome="Martin") Comando: comando 4D, por exemplo, "Alerta". Plug-in: comando de plug-in instalado na aplicação, por exemplo "WR Find". Todos os elementos: esta opção permite realizar uma procura entre todos os objetos no ambiente Desenho. Está disponível apenas no filtro de data de modificação. Utilize esta opção, por exemplo, para procurar "todos os objetos modificados hoje". - 132 - Modo Procura No menu do modo de procura (ou seja, cujo, que é ou cujo nome, em função do tipo de procura) especifique como deseja buscar o valor que escreve. O conteúdo deste menu varia segundo o tipo de elemento a procurar selecionado no menu anterior. Procura de texto ou comentário: contém: procura a string entre os textos no ambiente Desenho. A procura de "var" pode encontrar "minhavar", "variavel1" ou "aVariavel". Contém a palavra completa: procura a string como uma palavra completa em todo o texto do ambiente Desenho. Os resultados da procura de "var" apenas incluem coincidências exatas. Não incluirão "minhavariavel", mas incluirão, por exemplo, "var:=10" ou "ID+var", porque os símbolos ":" ou "+" são separadores de palavras. começa por / termina em: procura a string ao princípio ou ao final da palavra (procura de texto) ou ao princípio ou final da linha de comentário (procura de comentário). No modo "texto termina em", a procura de "var", encontrará "minhavar". Procura de elemento de linguagem: o menu oferece as opções padrão (é exatamente, contém, começa por, termina em) similares às oferecidas nas versões anteriores de 4D. Lembre que pode utilizar o caractere coringa de procura (@), com a opção "é exatamente" (devolve todos os objetos do tipo definido). Modification date of the parent Este menu restringe a procura relativa a data de criação/modificação do elemento pai (ou seja, por exemplo, o método que contém a string que se procura). Este menu contém os critérios de data comuns (é, é anterior a, é posterior a, é diferente de) assim como várias novas opções que permite especificar um período de procura padrão: é hoje: período que começa a meia-noite do dia atual (00:00 h). é desde ontem: período que inclui o dia atual e o anterior. é esta semana: período que começa na segunda-feira da semana atual. é este mês: período que começa no primeiro dia do mês atual. Pastas O menu "Na pasta" permite filtrar a procura por nível de pasta. Automaticamente (opção "Nível superior", a procura é realizada em todas as pastas. Nota: as pastas de objetos são definidas em Página Início do Explorador. Opções Pode selecionar diferentes opções de procura para ajudar a acelerar suas pesquisas: Buscar nos formulários: quando essa opção está desmarcada, a procura global é realizada em todo o banco, exceto nos formulários e nomes de formulários. Buscar nos métodos: quando essa opção está desmarcada, a procura global é realizada em todo o banco, exceto em métodos e nomes de métodos. Sensível a maíusculas e minúsculas: quando essa opção estiver selecionada, a procura considera como foram introduzidas os caracteres na caixa de diálogo Buscar. Portanto, se procura "MinhaVar", 4D não encontrará "minhaVar". Exemplos de buscas Uma procura eficaz resulta da combinação adequada das opções dos menus da janela de procura. Para ilustrar o funcionamento da procura em 4D v12, a continuação apresentamos alguns exemplos de procuras típicas e como as configurar. Procurar todos os lugares onde um valor foi atribuído diretamente à variável vTInit: - 133 - Procurar todas as referências ao formulário "Entrada" da tabela [Clientes]: Procurar as chamadas aos métodos cujo nome começa por "RH_": - 134 - Listar todas as variáveis no banco: Procurar a palavra chave "Designer" nos comentários escritos na semana: - 135 - - 136 - Janela de Resultados A Janela de Resultados lista os objetos encontrados que cumprem com os critérios de busca definidos via diferentes tipos de pesquisa: pesquisa estandarte (ver a seção Realizar uma Busca) pesquisa de elementos não utilizados (ver a seção Procurar por elementos sem usar). pesquisa de chamamentos (ver Pesquisar por chamadas) pesquisa de dependências (ver Buscar as dependências) (a partir de 4D v13 unicamente) renomear os métodos de projeto e de variáveis (ver Renomear) A janela de resultados mostra os resultados como uma lista hierárquica organizada por tipo de objeto encontrado. Pode expandir ou contrair todos os elementos utilizando os comandos correspondentes do menu de opções (encontrado na parte inferior esquerda da janela) ou do menu contextual. Pode dar um duplo clique em uma linha dessa janela para ver o objeto no editor. Se fizer várias procuras, cada busca abre sua própria janela de resultados, deixando abertas as janelas de resultados anteriores. Quando são encontradas mais de uma ocorrência de um objeto ou uma cadeia dentro de um método, a lista indica seu número ao lado do nome do objeto. Este botão permite repetir a procura com os mesmos critérios e opções. Também pode acessar a função Substituir no conteúdo na janela de resultados. Menu de opções O menu de opções lhe permite realizar diferentes ações: - 137 - Nota: também pode encontrar estas ações no menu contextual da janela. Remover da lista: apaga os elementos selecionados da janela de resultados. Más especificamente, lhe permite conservar só os elementos objetivo de um substituto no conteúdo ou utilizados para um arrastar soltar entre aplicações. Substituir no conteúdo: substitui uma cadeia de caracteres ao interior dos elementos selecionados. Esta função é descrita em Substituir no conteúdo Selecionar >: seleciona um tipo de elemento (métodos projeto, nomes de objetos, etc.) entre os elementos presentes na Janela de Resultados. O submenu hierárquico também oferece os comandos para selecionar (Tudo) ou não selecionar todos os elementos (Nenhum). Contrair tudo/Expandir tudo: expande ou contrai todos os elementos hierárquicos da lista. Utilizar arrastar e soltar Pode arrastar e soltar objetos entre dois aplicações em modo Desenho desde a Janela de Resultados. Os princípios de deslocamento de objetos (em particular "objetos inseparáveis") é descrito no capítulo Arrastar e Soltar Objetos. As tabelas referenciadas nos métodos se movem agora por padrão com os métodos. Pode desativar este funcionamento pressionando a tecla Maiúscula ao arrastar os métodos desde a janela. - 138 - Substituir no conteúdo A função de substituir no conteúdo permite substituir uma string de caracteres por outra dentro dos objetos listados na seção Janela de Resultados. O comando Substituir no conteúdo se encontra disponível no menu de opções da janela: Quando seleciona este comando, aparece uma caixa de diálogo onde se introduz a string de caracteres que substituirá todas as ocorrências encontradas na pesquisa inicial: As operações de substituição funcionam da seguinte maneira: A substituição é realizada em todos os elementos presentes na lista e não em uma seleção. Entretanto, é possível reduzir a operação de substituição, reduzindo o conteúdo da lista utilizando o comando Remover do menu contextual (usando o botão direito do mouse): Apenas as ocorrências mostradas na lista serão substituídas, e somente depois de comprovar os critérios de busca iniciais para os casos em que os objetos foram modificados entre a pesquisa inicial e a operação de substituição.. A substituição se realiza: no conteúdo dos métodos nas propriedades dos objetos de formulário no conteúdo das mensagens de ajuda no conteúdo dos filtros de entrada no conteúdo dos elementos de menus (textos e chamadas de métodos) no conteúdo das listas de opções - 139 - no conteúdo dos comentários sobre métodos, formulários, tabelas e campos no Explorador. Para cada objeto modificado, 4D comprova se ele já foi carregado por outra máquina ou janela. Em caso de conflito, aparece uma caixa de diálogo indicando que o objeto está bloqueado. Pode fechar o objeto e tentar novamente ou cancelar a substituição. A operação de substituição continuará com os demais objetos da lista. Se um método ou um formulário afetado por uma operação "substituir no conteúdo" está sendo editado pela aplicação 4D, ele será modificado diretamente no editor aberto (sem advertência). Os formulários e métodos modificados dessa maneira não são guardados de forma automática: terá que utilizar o comando Salvar ou Salvar todos para validar as mudanças. Quando uma substituição é realizada em um elemento da lista, o elemento é mostrado em itálico. Aparece na parte inferior da janela a contagem em tempo real das substituições realizadas. Os objetos nunca são renomeados pela função Substituir em conteúdo, exceto os objetos nos formulários. Portanto é possível que certas ocorrências da lista não sejam afetadas pela substituição. Isso poderia acontecer quando apenas o nome do elemento corresponde com os critérios de busca iniciais. Nesse caso, não todos os elementos da lista aparecem necessariamente em cursiva e a posterior contagem das substituições é inferior ao número de ocorrências encontradas na busca inicial. - 140 - Renomear 4D oferece uma função de mudança de nome de métodos projeto e de variáveis com propagação em todo o banco de dados. Esta função é acessível: através da opção Renomear... do menu contextual (botão direito do mouse) do editor de métodos (métodos projeto e variáveis), através da opção Renomear o método... do menu contextual do Explorador (métodos projeto). Quando selecionar esta opção, aparece uma caixa de diálogo que permite introduzir o novo nome do objeto: O novo nome deve cumprir com as regras de nomes, do contrário aparecerá uma advertência quando se valide a caixa de diálogo. Por exemplo, não é possível mudar o nome de um método por um nome de comando como "Alert". Dependendo do tipo de objeto que esteja sendo renomeado (método projeto ou variável), a caixa de diálogo de mudança de nome também pode conter uma opção de propagação: Método projeto: a opção Atualizar callers em todo o banco permite propagar o novo nome do método em todos os objetos do banco. Também pode desmarcar esta opção, por exemplo, para renomear um método unicamente no Explorador. Variáveis processo e interprocessos: a opção Renomear a variável em todo o banco de dados permite propagar a mudança de nome da variável em todos os objetos do banco. Se não desmarcar esta opção, a variável somente se renomea no método atual. Variável local: não há opção de propagação para este objeto, a variável se renomeia unicamente no método atual. Refazer busca Este botão lhe permite realizar novamente a pesquisa com os mesmos critérios e opções. Isso pode ser útil, por exemplo, para ter certeza de que todas as substituições desejadas foram realizadas. - 141 - Procurar por elementos sem usar Dois novos comandos de pesquisa permitem detectar as variáveis e os métodos que não se utilizam em seu código. Pode assim eliminá-los para liberar memória. Estes comandos são encontrados no menu Edição no modo Desenho: Encontrar métodos e variáveis globais não utilizadas O comando Procurar métodos e variáveis globais sem usar busca os métodos projeto, assim como as variáveis "globais" (variáveis processo e variáveis interprocesso) declaradas mas não utilizadas. Os resultados da procura aparecem em uma Janela de Resultados. Um método projeto é considerado como não sendo utilizado quando: não está na Lixeira não é chamado em nenhuma parte do código 4D, não é chamado por um comando de menu, não é chamado como uma constante string no código 4D (4D detecta um nome de método em uma string, mesmo quando está seguido por parâmetros entre parêntesis). Uma variável processo ou interprocesso é considerada como sendo não utilizada quando: é declara em código 4D por um comando de declaração do tipo C_XXX o ARRAY XXX, não é usada em nenhuma parte do código 4D, não é usada em nenhum objeto de formulário. Lembre-se que certos usos não podem ser detectados por essa função, ou seja, um elemento considerado como sendo não utilizado pode em realidade ser utilizado. Este é o caso do seguinte código: v:="metodo" EXECUTE FORMULA("meu"+v+String(42)) Este código cria um nome de método. O método projeto meumetodo42 é considerado como não utilizado, quando na verdade ele é sim chamado. Portanto, é conveniente certificar-se de que os elementos declarados como não utilizados são realmente desnecessários antes de os eliminar. Encontrar variáveis locais sem usar O comando Procurar variáveis locais sem usar busca as variáveis locais declaradas mas não utilizadas. Os resultados da busca aparecem em uma Janela de Resultados. Uma variável local é considerada como não utilizada quando: é declarada no código 4D por um comando do tipo C_XXX o ARRAY XXX, não é usada em nenhuma outra parte dentro do mesmo método. - 142 - Arrastar e Soltar Objetos Visão Geral Caixa de diàlogo Movendo Propriedades de Movimentacão - 143 - Visão Geral Usando 4D é possível mover objetos entre duas aplicações no ambiente Desenho. Pode copiar em um banco as tabelas, formulários, métodos, etc., que e copiá-los em outro banco de dados. Esta função facilita e acelera o desenvolvimento de seus bancos. O movimento de objeto não se limita a objetos individuais, também se aplica a todos os objetos referenciados por um objeto, ou seja, seus objetos dependentes. Também podem ser movidos funcionalidades completas. Por exemplo, se criou uma caixa de diálogo de pesquisa personalizada, pode mover o formulário utilizada para a caixa de diálogo assim como também os métodos imagens e outros objetos que queira utilizar. Pode copiar o formulário em outro banco de dados ou em uma biblioteca agrupando as funcionalidades utilizadas atualmente em seus bancos. Alguns objetos são inseparáveis: são movimentados obrigatoriamente com seus objetos "pai". A lista de objetos inseparáveis é detalhada a seguir. Objetos movéis Os objetos podem ser movidos com a caixa de ferramentas Explorador e o editor de formulários. Além disso, é possível usar a janela de resultados de uma procura global (consulte Janela de Resultados). Por razões de coerência estrutural, a cópia de certos objetos levará à cópia dos objetos com ele associados. Por exemplo, a cópia de um formulário levará à cópia do método formulário e dos métodos objeto eventualmente associados. Estes objetos inseparáveis não podem ser movidos diretamente um sem o outro. Esta é uma lista de objetos movíveis com seus objetos inseparáveis: Objetos inseparáveis Objetos Movéis ---- Caixa de ferramentas ---Listas Folhas de estilos Formatos/Filtros Imagens da biblioteca Mensagens de ajuda - ---- Explorador e Janela de Resultados ---Métodos de formulário Métodos de formulário Campos, triggers Formulários projeto Formulários tabela Métodos projeto Pastas / Subpastas Tabelas ---- Editor de formulários ---Todos os objetos de um formulário (botões, variáveis, etc.). Ao mover um formulário, todos os objetos que contém são movidos com ele. Métodos de objeto Como funciona a movimentação de objetos A movimentação de objetos pode ser feita indiferentemente através das funções de arrastar/soltar ou de copiar/colar. Para mover objetos entre bancos de dados usando arrastar e soltar, deve duplicar sua aplicação 4D. No caso de movimentação entre bancos, os objetos movimentados podem ser colados ou soltados no mesmo ambiente de onde provêm (caixa de ferramentas, Explorador, etc.) ou em outras áreas da aplicação. 4D efetuará a ação apropriada em função do contexto, sempre que seja possível. Por exemplo, é possível soltar um formulário em uma janela do editor de métodos, neste caso, o nome do formulário é inserido no método. Durante uma movimentação, se um objeto do mesmo tipo e com o mesmo nome já existe no banco de destino, automaticamente o objeto existente será substituído pelo objeto movimentado. O Caixa de diàlogo Movendo será mostrado nesse caso, indicando que os objetos serão substituídos e que poderá mudar essa ação. Os seguintes mecanismos devem ser considerados: - 144 - Visualizações e nível: os objetos de formulário movimentados conservam suas propriedades de localização no editor, particularmente sua posição nas visualizações ou nos diferentes níveis do formulário. Formulários herdados: os formulários herdados não se modificam com os formulários fonte, entretanto sua referência é conservada. Além disso, os formulários herdados são considerados como objetos dependentes e é possível utilizar como formulário herdado outro formulário (existente) no momento da movimentação (ver o próximo parágrafo). Direitos de acesso: os formulários e métodos projeto movimentados não conservam seus direitos de acesso originais. Automaticamente recebem o valor padrão ("Todos os grupos"). Pastas: quando movimenta um pasta desde a página início do Explorador, a operação inclui a pasta e todo o seu conteúdo (tabelas, formulários e métodos projeto), que possam representar um volume de dados importante. Durante este tipo de movimentação, aparece uma caixa de diálogo de alerta para indicar esse funcionamento. Nota: não é possível arrastar objetos desde a página Lixeira do Explorador. Objetos dependentes Um formulário (de tabela ou de projeto) pode referenciar diferentes objetos como listas, imagens, etc. Estes objetos são chamados de "objetos dependentes".Em alguns casos, seria possível mover todos os objetos dependentes, em outros casos poderia ser desejável mover apenas alguns deles ou até mesmo nenhum desses objetos.4D permite controlar o movimento dos objetos dependentes dos formulários através das Preferências de movimentação assim como através de Caixa de diàlogo Movendo.As preferências de movimentação definem os princípios a serem aplicados para a movimentação dos objetos dependentes. Pode escolher diferentes opções automáticas para cada tipo de objeto. Para mais informação, consulte a seção WEB SET HOME PAGE. A partir de 4D v13, as tabelas referenciadas nos métodos projeto se movem por padrão com os métodos. Pode desativar este funcionamento pressionando a tecla Maiúscula quando arraste métodos da janela de resultados ou do Explorador. - 145 - Caixa de diàlogo Movendo Quando mover uma seleção de objetos (por arrastar/soltar ou copiar/pegar) entre dois bancos de dados 4D, ou entre um banco de dados e uma biblioteca de objetos, você tem a possibilidade de mostrar uma caixa de diálogo que lista todos os objetos movimentados, assim como as ações que foram associadas a eles no banco de destino. Essa caixa de diálogo se chama "Diálogo de movimentação" e é mostrada quando ao menos um desses casos abaixo é verdadeiro: A opção “Mostrar sempre” está selecionada nas preferências de movimentação (ver a seção WEB SET HOME PAGE). Ao menos um objeto movimentado tem um conflito de nome com um objeto no banco de destino. A ação automática Utilizar outro objeto foi selecionada para pelo menos um tipo de objeto dependente movimentado. Além desses casos, se a movimentação dos objetos não causa nenhum conflito, a caixa de diálogo de movimentação não aparecerá e os objetos serão copiados diretamente. Esta caixa de diálogo permite visualizar e/ou modificar os parâmetros de movimentação em função do contexto. Inclui duas páginas: a página principal e a página detalhada. Pode passar de uma página a outra utilizando os botões Seguinte> e <Anterior. Página principal A página principal da caixa de diálogo de movimentação mostra a lista dos objetos movimentados: Os objetos que tenham conflitos de nome aparecem em negrito e os objetos dependentes aparecem em itálico. As diferentes colunas indicam o tipo e o nome de cada objeto assim como seu "novo" nome, em outras palavras, seu nome automático no banco de dados de destino. Pode modificar esse nome na página detalhes (ver o próximo parágrafo). A opção da coluna "Copiar" indica se o objeto será copiado ou não no banco de destino. Esta opção está ativa: pode desmarcá-la para resolver rapidamente os conflitos de cópia. Note que se um conflito envolver um objeto específico, sua referência (nome) é conservada no banco de destino. Pode selecionar/desmarcar todos os itens da lista usando Alt+clique (Windows) ou Opção+clique (Mac OS) em qualquer item. Também pode utilizar o botão direito do mouse na caixa de diálogo. Se os parâmetros de movimentação de configuração não são adequados às suas necessidades, pode clicar diretamente em Aceitar para mover os objetos. Nota: se ao menos um objeto for associado à ação Utilizar outro objeto, não é possível proceder com a cópia sem escolher um objeto alvo no banco de destino (ou então você deve desmarcar esse objeto). Se deseja modificar certas ações, clique no botão Próximo> para mostrar a página detalhada. Se deseja cancelar a - 146 - movimentação dos objetos, clique em Cancelar. Página de detalhes A página de detalhes lista os objetos a copiar (aqueles que foram selecionados na página principal) e permite modificar os parâmetros de movimentação Pode utilizar o menu pop up da coluna "Ação" para modificar as ações realizadas nos objetos. As ações propostas no menu dependem do tipo de objeto selecionado e são descritas à continuação. É possível modificar em uma só operação a ação atribuída para várias linhas. Simplesmente selecione as linhas a modificar, logo selecione uma nova ação na coluna "Ação" de cada uma das linhas selecionadas. A modificação é realizada em todas as linhas da seleção, onde for aplicável. Se a ação é incompatível com uma linha, a linha não é modificada e uma caixa de diálogo de alerta oferecerá informação sobre o problema. A coluna "Nome novo ou outro objeto" mostra o nome que será dado ao objeto quando seja copiado para o banco de dados de destino. Pode modificar esse nome (tenha cuidado para não utilizar um nome já existe no banco de destino, isso criaria um novo conflito de nomes). No caso de objetos dependentes, essa coluna permite igualmente atribuir outro objeto do banco de destino (quando a ação Utilizar outro objeto estiver selecionada). Por exemplo, no caso da movimentação de um formulário tabela, pode atribuir uma tabela do banco de dados destino como sendo a tabela a qual esse formulário pertencerá, ao invés de simplesmente criar uma tabela totalmente nova. Ações Possíveis As ações possíveis são as seguintes: Não criar: o objeto não é copiado. No caso de um objeto dependente, sua referência (nome) é conservada se um objeto do mesmo nome já existe no banco (nesse caso, é utilizado por um objeto principal). Se nenhum objeto com o mesmo nome está disponível, a referência é apagada. Substituir: esta opção é oferecida quando um objeto do mesmo nome e tipo já existe no banco. Nesse caso, o objeto do banco de dados de destino é substituído pelo objeto do banco de origem. Criar: o objeto dependente é copiado no banco de destino com suas propriedades (opção oferecida quando não houver conflitos de nome). Criar e renomear: esta opção é oferecida quando um objeto do mesmo nome e tipo já existir no banco. Automaticamente, o objeto é renomeado adicionando um número como sufixo. Nesse caso, pode renomear o objeto movimentado na coluna "Novo nome ou outro objeto". As referências do objeto são atualizadas no banco de destino. Utilizar outro objeto: esta opção apenas está disponível para os objetos dependentes. Permite utilizar outro objeto já presente no banco de destino como referência. Nesse caso, a coluna "Novo nome ou outro objeto" contém a lista de outros objetos que pode utilizar. Utilizar a tabela de mesmo nome: esta opção é oferecida quando uma tabela com o mesmo nome já existe no banco. Nesse caso, a coluna "Novo nome ou outro objeto" contém a lista de tabelas que podem ser utilizadas ao invés da tabela dependente. Se os objetos dependentes entre si referenciam a outros objetos, a lista é atualizada em função desses parâmetros. Se os parâmetros de movimentação são convenientes, clique em Aceitar para continuar com a migração dos objetos. Clique em <Anterior para voltar à página principal. Se deseja cancelar a movimentação clique em Cancelar. - 147 - Propriedades de Movimentacão A página Movimentação que faz parte das MissingRef permite pré-configurar os deslocamentos de objetos no banco em modo Desenho. 4D aplica estes parâmetros ao arrastar/colar objetos no banco, quando se utiliza como banco de destino. Ações padrões durante a cópia de objetos dependentes Estas opções permitem configurar a movimentação de objetos dependentes, ou seja os objetos associados aos formulários que se movimentam (ver Visão Geral). Pode definir uma ação para cada tipo de objeto dependente. Estas ações, por padrão, são aplicadas automaticamente se o movimento de objetos não provocar conflitos e se a opção Somente em caso de conflito de nome estiver selecionada (ver a próxima seção). Do contrário, essas ações se selecionarão, por padrão, na caixa de diálogo de movimentação. As ações Ignorar, Criar (Renomear se for necessário), Criar (Substituir se for necessário) como também Utilizar outro objeto são oferecidas para cada tipo de objeto. Note que outras ações contextuais mais específicas são propostas na caixa de Caixa de diàlogo Movendo quando é mostrada. Esta é a descrição destas opções: Ignorar: um objeto dependente deste tipo nunca se copia no banco de destino. Na caixa de diálogo de movimentação, a ação Não criar é oferecida como padrão. Criar (Renomear se for necessário): um objeto dependente deste tipo sempre é copiado no banco de destino. Na caixa de diálogo de movimentação, a ação Criar é oferecida como padrão se o objeto não existir no banco de destino. Em caso de conflito de nome com um objeto do banco de destino, o objeto copiado é renomeado adicionando-se o sufixo “_X,” de acordo com o princípio aplicado aos objetos principais. Neste caso, a ação Renomear é oferecida como padrão na caixa de diálogo de movimentação. Criar (Substituir se for necessário): um objeto dependente deste tipo sempre se copia no banco de destino. Na caixa de diálogo de movimentação, a ação Criar é oferecida como padrão se o objeto não existir no banco de dados de destino. Em caso de conflito de nome com um objeto no banco de destino, o objeto copiado substitui o objeto existente. Neste caso, a ação Substituir, é oferecida como padrão na caixa de diálogo de movimentação. Utilizar outro objeto: esta opção provoca a visualização sistemática do diálogo de movimentação, mesmo se a opção “Mostrar somente em caso de conflito de nome” estiver marcada. Durante o movimento de objetos, deve designar um objeto do banco de destino a ser utilizado ao invés do objeto dependente copiado. Nota: estas opções só servem para os objetos dependentes. Para os objetos movimentados, a ação padrão é do tipo Criar (Substituir se for necessário). Mostrar a caixa de diálogo de movimentação: este menu configura a visualização da caixa de diálogo de movimentação. Quando se seleciona a opção Sempre, a caixa de diálogo aparece toda vez que se movimentar objetos, o que permite controlar com mais precisão a operação. Se a opção Somente em caso de conflito de nome estiver selecionada, a caixa de diálogo só aparecerá quando um objeto movimentado (principal ou objeto dependente) tiver um conflito de nome com um objeto do banco de destino. - 148 - Criar uma estrutura de banco de dados Conceitos Básicos de Bancos de Dados Editor de estrutura Inspetor Criar e modificar Tabelas Propriedades de Tabela Gestão de chaves primárias Criar e modificar Campos Tipos de campos 4D Updated 15.0 Armazenado em registro, arquivo de dados ou fora do arquivo de dados Armazenamento externo dos dados Regras para nomear tabelas e campos Criar e modificar Índices Criar e modificar Relações Tipos de relações Propriedades de Relações Exportar e importar definições de estrutura - 149 - Conceitos Básicos de Bancos de Dados Um banco de dados é um conjunto de informação organizada de maneira que possa ser utilizada eficientemente. Um diretório telefônico é um bom exemplo de um banco de dados. Outros exemplos são um dicionário, um calendário ou um livro de receitas. A informação em um banco está organizada em forma de registros. Cada registro contém toda a informação sobre uma pessoa ou um elemento do banco. Por exemplo, cada registro no diretório telefônico contém um nome, endereço e número telefônico de uma pessoa. Cada registro contém campos. Um campo é utilizado para armazenar o endereço e outro campo para armazenar o número telefônico da pessoa. Cada registro contém cada um destes campos e cada registro pode ter informação nestes campos. O nome de um campo geralmente identifica a informação armazenada no campo. Por exemplo, os campos podem se chamar Nome, Endereço ou Número telefônico. Cada campo tem um tipo que identifica a classe de informação que pode ser armazenada: números, datas, caracteres alfanuméricos e outros. Como cada campo contém um tipo específico de dados, você pode realizar cálculos e outras operações com a informação guardada neles. Por exemplo, pode somar os números dos campos. Pode comparar a data de um campo com a de outro. Pode mostrar o nome de uma pessoa (armazenado em um campo) depois de seu sobrenome (armazenado em outro campo) para construir a primeira linha de uma etiqueta de correio. O conjunto de registros que utilizam os mesmos campos forma uma tabela. Cada banco de dados pode ter muitas tabelas. A imagem a seguir mostra como se relacionam estes conceitos. 4D pode reorganizar os registros e realizar cálculos com a informação para torná-la muito mais útil. Por exemplo, 4D pode calcular os valores totais em um campo e apresentar o total em um relatório. Pode calcular o total de vendas por pessoa e apresentar um gráfico que compare os resultados das vendas. Tabelas e campos 4D permite criar desde 1 até 32.767 tabelas por banco de dados. Isso quer dizer que pode criar uma estrutura que se adapte exatamente às suas necessidades. Estrutura com somente uma tabela Alguns bancos de dados utilizam somente uma tabela. É possível utilizar só uma tabela para uma categoria de informação somo funcionários, empresas ou inventário. É possível ter tantos campos quanto for necessário em uma tabela (até 32.767). - 150 - Na imagem anterior, o registro de cada uma das pessoas necessita o mesmo tipo de dados. O banco de dados cresce de acordo ao número de registros de artistas armazenados. Estruturas multi-tabelas Um banco de dados pode armazenar muito mais dados e acessar a informação de forma mais eficiente utilizando mais de uma tabela. Uma boa regra para levar em consideração é que os diferentes tipos de informação devem ser armazenados em diferentes tabelas. Um banco de dados que guarda informação sobre empregados e empresas é um bom exemplo. Os registros dos empregados e as empresas são armazenados em tabelas diferentes. Se o endereço de uma empresa muda, só é necessário modificar o registro desta empresa. Não é necessário escrever o novo endereço para todas as pessoas que trabalhem nesta empresa. Com somente uma tabela, você necessitaria introduzir o endereço em cada registro; com duas tabelas, só é necessário introduzir o endereço uma vez. Quando se introduz o nome de uma empresa em um registro de um funcionário, 4D pode buscar o registro que corresponda a esta empresa e mostrar automaticamente o endereço correto. A imagem a seguir mostra a estrutura de um banco de dados multi-tabelas no qual duas tabelas estão relacionadas. A seta entre o campo Empresa e o campo Nome representa esta relação. Os dados de cada empregado são armazenados na tabela [EMPREGADOS]. Os dados sobre as empresas são armazenados separadamente na tabela [EMPRESAS] - 151 - 4D é um banco de dados relacional porque pode utilizar múltiplas tabelas e relacioná-las de distintas maneiras. Por exemplo, é possível criar um relatório para a tabela [EMPREGADOS] que busque na tabela [EMPRESAS] e exiba e imprima automaticamente a informação da empresa de cada pessoa. As relações entre as tabelas permitem que a informação de ambas as tabelas esteja disponível em um relatório. Também é possível introduzir dados diretamente nas tabelas relacionadas. Por exemplo, um banco de faturamento pode escrever informação na tabela [Detalhe] a partir da janela Faturamento. Também é possível escrever dados em uma tabela relacionada utilizando a linguagem 4D. Às vezes é necessário uma estrutura de multi-tabelas na qual as tabelas não estão diretamente ligadas. Pode ser conveniente ter um banco de dados armazenando diferentes tipos de informações, tais como uma lista de contatos e uma tabela de despesas. 4D permite até 32.767 tabelas para cada banco de dados. A tabela pode ter até 32.767 campos. Usando tabelas múltiplas, virtualmente qualquer tipo de estrutura de banco de dados é possível. Tabelas relacionadas Em geral, você necessitará criar estruturas nas quais as tabelas compartam informação sobre seus empregados e suas empresas. A estrutura do banco, representada a seguir, contém um tabelas [EMPREGADOS] para armazenar as informações relativas aos empregados e uma tabela [EMPRESAS] para armazenar a informação relativa às empresas. Ainda que útil, a informação armazenada em cada tabela separadamente não responde completamente a suas necessidades. Quando se visualiza um registro a partir da tabela [EMPREGADOS], você deve poder acessar a informação sobre a empresa para qual o empregado trabalha e quando olha um registro da tabela [EMPRESAS], necessita poder ver a informação sobre os empregados que trabalham para esta empresa. Para permitir duas tabelas compartir informação desta maneira, as tabelas podem estar relacionadas entre elas, em outras palavras, uma relação pode ser estabelecida entre os dados de cada tabela. Em 4D, as relações permitem acessar aos dados armazenados em uma tabela a partir de outra tabela. As tabelas que compartem informação por meio de uma relação se chamam tabelas relacionadas. As tabelas relacionadas lhe permitem: armazenar dados eficientemente, atualizar os dados em um lugar e ver a alteração refletida em todas as partes onde se utilizam os dados, ver informação relacionada, realizar consultas e ordenações em uma tabela, com base nos dados armazenados em outra tabela, Criar, modificar ou eliminar registros de tabelas relacionadas. A imagem a seguir mostra uma relação criada entre a tabela [EMPREGADOS] e a tabela [EMPRESAS] no editor de estrutura. - 152 - A tabela [EMPREGADOS] contém um registro por pessoa. A tabela [EMPRESAS] contém um registro por empresa. A relação entre estas duas tabelas lhe permite acessar, introduzir, modificar ou eliminar informação das duas tabelas. Por exemplo: Quando o registro de um empregado está na tela, você pode ver ou modificar a informação da empresa correspondente, o endereço, cidade, estado, código postal e o número telefônico da empresa.\ Quando se adiciona a uma nova pessoa, é possível associar o registro da pessoa com o registro da empresa correspondente (se a empresa já existe no banco de dados) ou criar o registro de uma nova empresa ao mesmo tempo que cria o registro do empregado. Para mais informação, consulte a seção Propriedades de Relações. Para cada empresa, é possível modificar a informação de cada uma das pessoas que trabalham nela, nome, cargo, número telefônico e outros dados. Também pode adicionar um novo registro de pessoal desde o registro da empresa. Campos Relacionados Graças aos campos relacionados, os campos que conectam duas tabelas em uma relação, você pode exibir a informação das tabelas relacionadas. O objetivo principal das relações entre os campos é indicar a 4D quais são os registros atuais de uma tabela de acordo com o registro atual da outra tabela. As tabelas relacionadas usam dois campos relacionados para identificar os registros correspondentes. No exemplo anterior, o campo Empresa da tabela [EMPREGADOS] e o campo Nome da tabela [EMPRESAS] relacionam as duas tabelas.O campo Nome na tabela [EMPRESAS] é o campo chave primária da tabela [EMPRESAS]. Este campo identifica de maneira única cada registro de empresa. Um campo chave primária deve ter os atributos Indexado e Único. Se o campo chave primária não tem o atributo Indexado, 4D o atribui automaticamente. O campo Empresa da tabela [EMPREGADOS] é um campo chave externa. Cada valor do campo chave estrangeira corresponde a um valor exatamente igual ao campo chave primária na tabela relacionada. Neste exemplo, um valor de campo de chave estrangeira da tabela [EMPREGADOS] coincide exatamente com um valor do campo chave primária na tabela [EMPRESAS]. O campo chave estrangeira também é indexado, mas seus valores não são únicos (vários empregados poderiam trabalhar na mesma empresa). A partir de 4D v14, os campos chaves primária devem ser definidos explicitamente em cada tabela da base. Os valores do campo chave primária geralmente são afetados diretamente pela base utilizando um número seqüencial gerado por 4D ou por um método escrito pelo usuário. Tal procedimento garante a unicidade do campo chave. Por exemplo, se o campo chave primária da tabela [EMPRESAS] é um número seqüencial e não o nome da empresa, é possível que os usuários introduzam várias companhias com o mesmo nome, mas com endereços diferentes. Da mesma forma, se uma empresa muda de nome, o usuário pode fazer a alteração no banco de dados sem afetar a relação entre as duas tabelas. Se o usuário está autorizado a introduzir o valor do campo chave primária, você deve utilizar os atributos Único e Não modificável como (Armazenado em registro, arquivo de dados ou fora do arquivo de dados) para garantir a unicidade da entrada inicial e evitar que posteriormente os usuários criem um registro redundante. Se você decidir não utilizar o atributo Não modificável, terá que buscar outra forma de evitar que os usuários criem registros “órfãos” em qualquer das tabelas relacionadas ao modificar os valores do campo chave primária. Quando se estabelecem as relações, você pode ler e escrever valores em uma tabela enquanto trabalha na tabela relacionada. Por exemplo, quando você escreve o nome de uma empresa em um registro de pessoa, 4D busca esta empresa na tabela [EMPRESAS] e mostra o endereço e o número telefônico no registro da pessoa. Quando você visualiza o registro de uma empresa, 4D busca na tabela [EMPREGADOS] todos os empregados que trabalham nesta empresa e mostra seus registros no registro da empresa. Estas relações podem ser chamadas automaticamente (ou seja, sem programação de sua parte) ou você pode optar por usar relações manuais. Neste último caso, você utiliza os métodos para carregar e descarregar os registros relacionados e controlar a criação, modificação ou exclusão de registros relacionados. Às vezes as relações manuais são preferíveis em estruturas complicadas onde haja mais de duas tabelas relacionadas a outra e você necessite controlar a carga e descarga dos registros relacionados. Você pode escolher usar relações automáticas ao selecionar as propriedades adequadas no momento em que a relação entre as tabelas está sendo especificada (veja Propriedades de Relações). - 153 - Editor de estrutura Pode acessar o editor dee estrutura com o comando Estrutura no menu Desenho ou clicando no botão na barra de ferramentas de 4D. O editor de estrutura permite controlar a estrutura do banco de dados, as tabelas e suas relações, lhe dá controle sobre as tabelas, os campos, suas propriedades assim como também sobre as relações entre as tabelas. O editor de estrutura lhe oferece uma representação gráfica da estrutura de um banco de dados assim como também uma barra de ferramentas e os menus contextuais necessários para realizar as operações relacionadas com a criação do banco. Cada tabela está representada por uma imagem no editor de estrutura. As imagens das tabelas mostram os campos da tabelas e seus tipos, em forma de ícones. Uma barra de informação exibe as características das tabelas e dos campos ao passar o mouse sobre eles. Uma janela flutuante chamada Inspetor permite visualizar e modificar as propriedades dos objetos da estrutura e do editor de estrutura. Essa janela está descrita na seção Inspetor. Barra de informação e Barra de Ferramentas O editor de estrutura dispõe de uma barra de ferramentas que contém funções como a adição de objetos, como também opções de navegação e visualização: A parte inferior da janela do editor é uma barra de informação que mostra os dados em função da área sobre a qual se passa o cursor: tabela, campo ou relação. Selecionar um objeto - 154 - Para trabalhar com a imagem de um objeto no editor de estrutura, primeiro você deve selecioná-lo. Logo é possível especificar suas propriedades, movê-lo, redimensioná-lo, excluí-lo, etc. Também é possível selecionar vários objetos do mesmo tipo simultaneamente com a finalidade, por exemplo, de mostrar ou modificar suas propriedades comuns na palheta do Inspector. Inclusive é possível selecionar campos de diferentes tabelas. Para selecionar uma tabela: 1. Clique na imagem da tabela ou Pressione [Tab] ou Shift+[Tab] para selecionar sucessivamente cada tabela da janela de estrutura. A tabela selecionada está rodeada por uma linha azul. As ações posteriores afetam a tabela selecionada. Para selecionar um campo ou uma relação: Clique no campo ou relação. Quando uma tabela estiver selecionada, pressione as teclas [flecha para cima] ou [fecha para baixo] para selecionar cada campo da tabela. Quando uma tabela estiver selecionada, pressione a tecla [Home] ou [End] para selecionar o primeiro ou o último campo da tabela. Para selecionar vários objetos do mesmo tipo (tabelas, campos, relações): Utilize Shift + clique para selecionar vários objetos adjacentes. Utilize a combinação Ctrl + clique (Windows) ou Comando + clique (Mac OS) para selecionar vários objetos não adjacentes. Clique em uma área vazia e trace um retângulo ao redor dos objetos a serem selecionados (seleção de tabelas unicamente). Trabalhar com as imagens das tabelas Pode redimensionar ou mover as imagens das tabelas na janela de estrutura de acordo com suas necessidades. Movimentar-se pela lista de campos Quando adiciona campos a uma tabela ou quando diminui o tamanho da tabela, pode haver mais campos na tabela do que a imagem pode mostrar. Nesse caso, 4D mostra automaticamente um cursor que permite movimentar-se pela lista dos campos visíveis: Redimensionar a imagem de uma tabela Você pode redimensionar a imagem de uma tabela de maneira a, por exemplo, mostrar mais campos ou para reorganizar a sua tela. Há várias maneiras disponíveis: Redimensionamento Manual: Clique e arraste o fundo da imagem da tabela ou o canto direito inferior. Tamanho ótimo: Isso automaticamente redimensiona as tabelas selecionadas ao tamanho que corresponde ao - 155 - número exato de campos que contém (não se mostra linhas em branco). Para apicar o comando Tamanho Ótimo a uma ou mais tabelas: Selecione o comando Tamanho Ótimo no menu associado com o botão da barra de ferramentas do editor (esse comando não é ativado se não houver uma tabela selecionada). Selecione o comando Tamanho Ótimo no menu de edição contextual (clique numa tabela). Shift+duplo-clique na região do título da tabela que deseja redimensionar. Se repetir essa combinação, a seguinte sequência é usada: tamanho original -> tamanho ótimo - > contrair. Contrair: Essa função contrai as tabelas selecionadas de modo a que apenas seus nomes ficam visíveis. Isso é útil para estruturas muito grandes. Para aplicar o comando Contrair a uma ou várias tabelas: Selecione o comando Colapsar no menu de edição contextual (clique na região do título da tabela). Shift+duplo-clique na região do nome da tabela para redimensionar. Se repetir esse atalho, a seguinte sequência é utilizada: tamanho original -> tamanho ótimo - >contrair. Notes: Um duplo clique normal na região do nome da tabela abre o Inspetor. Alt (Windows) ou Opção (Mac OS) + duplo clique abre o método trigger da tabela no Editor de Métodos Ctrl (Windows) ou Comando (Mac OS) + duplo clique abre o Explorador na página de Formulários. 4D Server: Se você redimensionar a imagem da tabela usando o 4D Server, a tabela é redimensionada para todos os usuários do modo Desenho. Mover as imagens das Tabelas Você pode mover as imagens das tabelas de maneira a reagrupá-las por função ou reorganizar a janela de estrutura. Também pode alinhar as imagens para melhorar a legibilidade da estrutura. As possíveis relações são desenhadas novamente para que correspondam às novas localizações. Para mover manualmente a imagem de uma tabela: 1. Clique no nome de uma tabela e a arraste usando o cursor. Arraste unicamente o nome da tabela. Clicar em outras áreas da imagem de uma tabela pode provocar efeitos diferentes, como a criação involuntária de relações ou o redimensionamento da imagem de uma tabela. 4D Server: se mover a imagem de uma tabela, a tabela aparece em sua nova localização para todos os usuários do modo Desenho. Para alinhar duas ou mais tabelas: 1. Selecione as tabelas a alinhar e escolha uma opção de alinhamento no menu de ferramentas. Estes comandos apenas estão ativos quando pelo menos duas tabelas estiverem selecionadas. Funções de Movimento As funções de movimento específicas facilitam a navegação nas estruturas de grande tamanho: A roda do mouse permite movimentar-se verticalmente pelos conteúdos da janela do editor (esta ação provoca o movimento dos campos de uma tabela quando o cursor está sobre a tabela). A combinação Shift + Roda do mouse permite movimentar-se horizontalmente pelo conteúdo da janela. - 156 - Pressionar a tecla Shift ativa a ferramenta "mão" e permite arrastar o conteúdo da janela clicando nas áreas vazias. Zoom Pode modificar a escala de visualização da estrutura do banco com a ajuda da ferramenta Zoom da barra de ferramentas do editor de estrutura. 100% é o valor do zoom logo que se abre o banco. Se existir uma seleção na janela, o zoom é centrado nessa seleção. A configuração do zoom é específica para cada usuário. Ela é memorizada quando a janela é fechada. Nota: uma opção das Preferências permite configurar a renderização gráfica do editor de estrutura durante um zoom. Para mais informação, consulte a seção Página Estrutura. Exibir tipos de objetos O botão Exibir na barra de ferramentas do editor de Estrutura tem um menu associado e permite que você escolha os objetos a serem exibidos na estrutura de acordo com seu tipo: Normalmente, todos os objetos são exibidos. Essa propriedade permite que várias representações ou visualizações, da mais simples até a mais complexa, e oferece uma ferramenta de análise para a estrutura baseado no nível de informação necessário. As opções são válidas para todas as tabelas e campos. Elas são guardadas quando a janela é fechada, e se memoriza a opção do usuário. Esconder certos objetos não muda a posição das tabelas. Quando muitos tipos de campos estão marcados, um operador lógico OU é usado para determinar os objetos a serem exibidos. Por exemplo, se as opções Campos Invisíveis e Campos não indexados estiverem marcadas, todos os campos não indexados (visíveis ou não) e todos os campos invisíveis (indexados ou não) serão exibidos. Tabelas tem prioridade sobre campos: se uma tabela não for exibida, todos os seus campos ficam invisíveis. Se você adicionar um objeto cujo tipo não está exibido (tabela, campo ou relação), o objeto é exibido no editor, e se deseja escondê-lo deve novamente selecionar a opção correspondente no menu associado com o botão Exibir. Ressaltar/Atenuar tabelas por pasta Pode ocultar grupos de tabelas no editor de estrutura baseado nas pastas definidas em Página Início do Explorador.O botão Pastas na barra de ferramentas pode ser utilizado para configurar a visualização das tabelas. O menu associado ao botão mostra os comandos de gestão de visualização assim como a lista das pastas definidas no banco de dados. Aparece uma marca de seleção do lado de cada pasta mostrada. Pode modificar a visualização atual selecionando ou desmarcando uma pasta nesse menu. Os comandos Ressaltar todas as pastas/Atenuar todas as pastas permitem mostrar/ocultar todas as tabelas das pastas do banco de dados. Cada clique no botão permite inverter a visualização das tabelas: as tabelas mostradas se ocultam e vice-versa. Quando as tabelas são atenuadas, automaticamente aparecem somente seu contorno na janela de estrutura. Apenas as tabelas que não estão atenuadas permanecem completamente visíveis. - 157 - Nota: Uma opção, acessível em Página Estrutura das Preferências, permite definir a aparência das tabelas atenuadas (seleção por pasta) no editor de estrutura: atenuado ou invisível. É necessário fechar e voltar a abrir a janela do editor de estrutura para que essa preferência comece a funcionar. Personalizar a janela do Editor A janela do editor de estrutura dispõe de propriedades específicas que podem ser configuradas através do Inspetor. Para mostrar as propriedades da janela do editor de estrutura, pode: duplo-clique (ou apenas clicar, se a paleta estiver exibida) em uma área vazia da janela. clique direito em uma área vazia da janela e escolher o comando Propriedades da estrutura no menu contextual A janela do Inspetor mostra as propriedades da estrutura: As seguintes propriedades podem ser definidas: - 158 - Imagem de fundo: pode modificar a imagem utilizada no fundo da janela assim como seu formato de visualização. Para mudar a imagem, clique no botão Abrir, ou dê um clique direito na área de pré-visualização e escolha Abrir... no menu contextual; logo selecione o arquivo que contém a imagem a ser mostrada. Pode utilizar qualquer formato de imagem. A imagem seleciona é mostrada imediatamente na área de visualização prévia e na janela do editor. Para mudar o formato de visualização da imagem, escolha um valor no menu Formato imagem. Os formatos propostos são os formatos de visualização de imagens padrão do 4D Para apagar uma imagem personalizada, clique no botão Limpar ou dê um clique direito na área de visualização prévia e escolha Limpar no menu contextual. Cor de fundo: pode mudar a cor utilizada no fundo da janela do editor. Clique na área de seleção de cor e escolha uma cor no menu de seleção. Fonte padrão: para cambiar a fonte utilizada como padrão automático para a tabela e os nomes dos campos, escolha uma fonte nesse menu. Pode utilizar o menu Tamanho para modificar o tamanho da fonte como padrão automático. Buscar na Estrutura 4D permite realizar pesquisas na janela do editor de estrutura. As buscas podem ser realizadas pelos elementos: nomes das tabelas e/ou nomes dos campos números de tabelas. Para realizar uma busca, introduza a string ou o número de tabela a procurar na área de busca da barra de ferramentas. Quando você entra qualquer valor nessa área, automaticamente aparece uma barra de opções, o que permite aumentar o alcance e a precisão da busca: O menu Buscar permite definir o alcance da pesquisa (tabelas e campos ou apenas tabelas). O menu Opções permite definir o tipo de pesquisa: Conteúdo (padrão automático): a pesquisa de “ta” encontrará “Tabela,” “Carta,” “Computador,” etc. Começa com: a pesquisa de “pa” encontrará “papel”, “pago” mas não “reparação.” Número: a pesquisa de “2” encontrará as tabelas número 2, 12, 20, 21, etc. A pesquisa é realizada em tempo real, a medida que são introduzidos os valores. As tabelas e/ou campos encontrados pela pesquisa são destacados. Se a procura não encontra nada, a área de busca fica vermelha. Para sair do modo "busca", clique no botão na barra de opções de busca ou apague todos os caracteres da área de busca. - 159 - Inspetor As propriedades dos objetos do editor de estrutura (tabelas, campos e relações) podem ser visualizadas e modificadas através da palheta do Inspetor: Esta paleta aparece quando realiza um duplo clique sobre um objeto. Quando é mostrada, seu conteúdo se atualizada dinamicamente em função dos objetos selecionados. O inspetor mostra as propriedades globais da janela do editor de estrutura quando clica numa área vazia da janela (ver o parágrafo "Personalizar o fundo da janela do editor" na seção Editor de estrutura). As diferentes áreas da paleta podem ser expandidas ou contraídas com um clique sobre os ícones triangulares para mostrar ou ocultar a informação correspondente: - 160 - Podem ser usados diversos atalhos de teclado: Shift+clique no título de uma área contraída expande a área e contrai as outras áreas. Alt (Windows) ou Opção (Mac OS) + clique no título de uma área contraída expande todas as áreas. Alt (Windows) ou Opção (Mac OS) + clique no título de uma área expandida contrai todas as áreas. Ao fechar a janela, 4D memoriza a posição da paleta e o estado expandido/contraído de suas áreas. - 161 - Criar e modificar Tabelas Você pode criar tabelas a qualquer momento. 4D nomeia a primeira tabela de um novo banco [Tabela_1] e logo nomeia seqüencialmente as tabelas adicionais, até [Tabela_32767]. É possível renomear as tabelas de acordo com suas necessidades. É possível excluir as tabelas obsoletas ou criadas por equivocação. Esta eliminação pode ser permanente ou não. Tenha cuidado, se a eliminação é permanente, os dados armazenados na tabela também serão excluídos. Também é possível excluir uma tabela a partir dos editores do modo Aplicação, tornando-a invisível. Você pode definir triggers e atributos para cada tabela se necessário. Essas propriedades estão descritas em Propriedades de Tabela. Criar uma tabela É possível criar uma nova tabela diretamente na janela de estrutura ou através de uma caixa de diálogo. A criação direta é muito mais rápida; mas a criação utilizando a caixa de diálogo lhe permite especificar certos parâmetros da tabela e cancelar a operação quando seja necessário. Também é possível criar tabelas utilizando copiar-colar. Para criar uma nova tabela diretamente: 1. Clique direito na área vazia da janela do editor de estrutura, logo escolha Adicionar tabela... no menu contextual. OU No menu de adição de objetos da barra de ferramentas do editor de estrutura, escolha a opção Tabela: 4D cria diretamente a tabela no editor de estrutura. Logo é possível alterar seu nome, adicionar campos, etc. Nota: Se você deseja colocar a tabela em uma pasta específica, deve utilizar Página Início do Explorador. Para criar uma nova tabela utilizando a caixa de diálogo “Nova tabela”: 1. Selecione Novo > Tabela... no menu Arquivo (ou clique no botão Novo da barra de ferramentas de 4D). OU Em Página Tabelas do Explorador, clique no botão adicionar . A caixa de diálogo "Nova Tabela" aparece: 2. (Opcional) Modifique o nome da tabela a ser criada. Para maiores informações sobre as regras de nomes, consulte Regras para nomear tabelas e campos. 3. (Opcional) Especifique a pasta na qual você deseja colocar a nova tabela. Automaticamente, a tabela está localizada no primeiro nível da hierarquia de pastas (“Nível superior”): Para maiores informações sobre pastas de objetos, consulte o parágrafo Página Início. 4. Clique no botão OK. Se quiser cancelar a operação, clique no botão Cancelar. 4D cria a imagem de uma nova tabela que se converte na imagem selecionada na janela do editor de estrutura. Nota: a partir de 4D v14, toda nova tabela criada na base contém um campo chave primária por padrão. Para obter mais informação ao respeito, consulte Default primary key field. Parar criar uma nova tabela com copiar/colar 1. Selecione as tabelas a serem duplicadas e escolha o comando "copiar" (no menu 4D Editar, no menu do botão direito do mouse ou usando o atalho Ctrl+C/Command+C no Mac). 2. Escolha o comando Colar no menu Editar, no menu do botão direito do mouse ou usando o atalho - 162 - Ctrl+V/Command+V (no Mac). A tabela é colada com todos os seus campos. É renomeada automaticamente como “Copia(X)_de_NomeTabela,” onde NomeTabela é o nome original da tabela e X ºe o número de cópias da tabela. Renomear uma tabela É possível renomear uma tabela a qualquer momento. Se você utilizou o nome anterior da tabela em um método, 4D efetua a alteração de nome automaticamente sempre e quando o método estiver fechado. Se o método estiver aberto, você deverá realizar a alteração. Cada nome de tabela deve ser único no banco. É possível renomear uma tabela diretamente no editor de estrutura, no Explorador ou através do Inspetor. Para renomear uma tabela diretamente (editor de estrutura ou página Tabelas do Explorador): 1. Clique duas vezes no nome da tabela (se a tabela já foi selecionada, clique apenas uma vez). Passa ao modo edição: 2. Introduza o novo nome e clique fora da tabela. Para renomear uma tabela utilizando Inspetor: 1. Duplo-clique no nome da tabela. Ou Clique direito na imagem da tabela, e depois selecione Propriedades da tabela... no menu contextual. Ou No Explorador, duplo-clique no nome da tabela na página Tabelas. 4D mostra o nome e as propriedades da tabela selecionada na palheta Inspetor. A palheta também indica o número da tabela. Se o Inspetor já estiver aberto mas mostrar as propriedades de outra tabela ou objeto, selecione a imagem da tabela que deseja mostrar e a palheta mostrará suas propriedades. 2. Introduza o novo nome na área “Nome”. O novo nome se aplica de imediato. Nota: para conhecer as regras para nomear tabelas, consulte Regras para nomear tabelas e campos. Eliminar uma Tabela Você pode excluir tabelas de seus bancos de dados. Esta operação pode ser efetuada através do motor SQL de 4D ou através do editor de estrutura. Para maiores informações sobre a utilização de instruções SQL em 4D, consulte o manual Guia de referência SQL 4D (MissingRef). Existem duas formas de excluir uma tabela em 4D: exclusão definitiva (a tabela e seus dados são realmente excluído do banco) e exclusão não definitiva (a tabela é colocada na Página Lixeira e pode ser recuperada posteriormente). Eliminar permanentemente Para excluir definitivamente uma ou mais tabelas do banco a partir do editor de estrutura: 1. Selecione a(s) tabela(s) a serem excluída(s) e logo escolha o comando Excluir no menu Edição de 4D. OU Escolha o comando Excluir no menu contextual (botão direito do mouse) da tabela. Uma caixa de diálogo de alerta lhe pedirá para confirmar a operação: Se você clica em OK, 4D realiza as seguintes operações: A tabela ou campo é excluído definitivamente da estrutura. Todos os dados associados a tabela ou o campo são excluídos definitivamente do arquivo de dados - 163 - Todo trigger associado à tabela é excluído Os formulários tabela associados à tabela se transformam em formulários projeto e são localizados na Lixeira do Explorador (consulte Página Lixeira). Exclusão não permanente A exclusão não definitiva de uma tabela consiste em colocá-la na Lixeira do banco ( a qual pode ser acessada através do Explorador), tal como os mecanismos de excluir arquivos implementados por Windows e Mac OS. A tabela não aparece mais nos editores 4D e seus conteúdos se tornam inacessíveis mas podem ser recuperados sempre e quando não se esvazie a Lixeira. Para colocar uma ou mais tabelas na Lixeira a partir do editor de estrutura: 1. Escolha o comando Enviar para a lixeira no menu contextual da tabela. A tabela vai imediatamente para a Lixeira. OU Selecione a(s) tabela(s) a serem excluídas e logo pressione a tecla Del ou Backspace. Em ambos os casos, aparece uma caixa de diálogo de confirmação. 2. Se clicar OK, a tabela vai para a Lixeira. Ela pode ser recuperada a qualquer momento de Página Lixeira. Número de tabelas eliminadas Quando se exclui uma tabela, as outras tabelas do banco não são renumeradas, para evitar comprometer a estabilidade do banco. Portanto é possível ter, por exemplo, um banco com três tabelas numeradas 2, 4 e 5. Note que os números das tabelas excluídas permanentemente são reutilizados ao criar novas tabelas posteriormente. - 164 - Propriedades de Tabela É possível configurar várias propriedades para as tabelas utilizando Inspetor ou para algumas tabelas, usar o menu contextual das tabelas (clique com o botão direito). Triggers Um trigger é um método que é executado automaticamente quando ocorrem certos eventos relacionados com a tabela. Estes eventos são: Ao guardar um registro novo, Ao guardar um registro existente, Ao excluir um registro, Os eventos triggers podem ser configurados em Inspetor ou através do menu contextual associado com a tabela (clique direito na área de título da tabela): Marque cada evento para o qual deseja ativar o trigger. É possível acessar diretamente ao trigger de uma tabela através da janela de estrutura clicando no botão Editar... do Inspetor ou selecionando Editar método... no sub-menu contextual. Para maiores informações sobre triggers, consulte a seção Tipos de métodos.. Notes: também é possível criar e visualizar os triggers a partir de Página Métodos do Explorador. A barra de informação de Editor de estrutura indica os triggers ativados para cada tabela. O trigger que introduza no editor de métodos não se executará quando os eventos selecionados são detectados. Atributos É possível definir diferentes atributos para personalizar a aparência e o comportamento geral da tabela. Invisível Esta opção permite fazer uma tabela invisível no modo Aplicação e para os plug-ins. É possível ativar esta opção para as tabelas utilitárias ou para as tabelas que não estão sendo utilizadas temporariamente. Tornar uma tabela invisível lhe permite limitar as operações que um usuário pode realizar sobre a tabela e seus campos. Uma vez uma tabela é invisível, não aparece mais nos editores nem na maioria de caixas de diálogo que aparecem no ambiente Aplicação. Da mesma forma não podem ser utilizadas pelos plug-ins. Os editores e caixas de diálogo no ambiente Aplicação incluem: - 165 - todos os editores de pesquisa (consultar Procurar registros), Editor de ordenação, Editor etiquetas, Editor de relatórios rápidos, caixas de diálogo Exportar e importar dados, Editor de fórmulas. Em cada um destes editores, o usuário não pode ver ou escolher a tabela ou um de seus campos. Por exemplo, o usuário não pode incluir campos de uma tabela invisível em um relatório ou em uma etiqueta. Nota: Quando se utilizam estes editores, os usuários têm a opção de salvar no disco as características de pesquisas e ordenações, previamente criadas. Neste caso, as tabelas ou campos especificados como invisíveis podem ser utilizados posteriormente. Além do mais, os usuários podem escrever os nomes das tabelas e campos invisíveis na caixa de diálogo . As tabelas invisíveis e seus campos são exibidos em itálico na janela do editor de estrutura. Definir a cor da imagem de uma tabela É possível atribuir uma cor a cada tabela. O uso de cores ajuda a organizar a estrutura de um banco com muitas tabelas. Por exemplo, é possível utilizar uma cor para todas as tabelas relacionas com os clientes e outra cor para as tabelas relacionadas com o inventário. Nota: Também é possível atribuir uma cor a cada campo (ver ) e a cada relação (ver Definição). Para definir a cor de uma ou várias tabelas, efetue suas seleções e escolha uma cor utilizando: o botão Cor na barra de ferramentas do editor, o comando Cor no menu contextual das tabelas (botão direito do mouse), a opção Cor em Inspetor. A opção Automático pode ser usada para aplicar os padrões de cores automáticos a sua tabela. Registros eliminados definitivamente Esta opção permite otimizar a eliminação de uma seleção de registros realizada com a ajuda do comando DELETE SELECTION. Quando 4D elimina uma seleção, os marcadores dos registros também são apagados. Um marcador de registro é um cabeçalho associado ao registro que contém a informação relativa a esse registro. A eliminação dos marcadores e dos registros é mais lenta que a eliminação dos recursos. Em alguns casos, pode ser conveniente não eliminar automaticamente os marcadores dos registros. Esta opção permite definir o tipo de eliminação que deseja usar. Para acelerar a eliminação de uma grande seleção usando o comando DELETE SELECTION, desmarque a opção Registros apagados definitivamente. Os marcadores de registros não serão eliminados. Esta opção não pode ser definida por programação. Ativar replicação Quando esta opção está marcada, 4D gera, durante a utilização da tabela, a informação necessária para a replicação dos registros da tabela (baseada particularmente na chave primária da tabela). A função de replicação dos registros permite sincronizar os dados de dois bancos de dados 4D para maior segurança. Logo que essa opção estiver ativa, os mecanismos de replicação devem ser implementados usando os comandos específicos da linguagem SQL de 4D ou através do protocolo HTTP. Para mais informação sobre essa opção e sobre os mecanismos de replicação dos registros através do SQL, consulte a seção Replicação via SQL. Para mais informações sobre a replicação através do HTTP, consulte URL 4DSYNC/. Como padrão, esta opção não está selecionada.Para que ela esteja disponível, é necessário especificar uma chave primária para a tabela a ser replicada. Do contrário, a opção está em cinza. 4D permite definir a chave primária de uma tabela no editor de estrutura (ver a seguir). Expor com o serviço 4D Mobile Esta opção controla se a tabela se encontra exposta no contexto das solicitações 4D Mobile enviadas a base 4D. Por - 166 - padrão, todas as tabelas se expõem em 4D Mobile. Por razões de segurança, é possível que deseje somente expor certas tabelas de sua base as chamadas 4D Mobile. Por exemplo, foi criada uma tabela [Usuários] que armazena os nomes de usuário e senhas, seria melhor não expor. Se não deseja expor uma tabela (nem nenhum dos campos que contém), desative a opção Expor com o serviço 4D Mobile para a tabela. Nota: também pode estabelecer esta opção no nível de cada campo da tabela, ver Armazenado em registro, arquivo de dados ou fora do arquivo de dados. Esta opção pode ser utilizada no contexto da funcionalidade "4D Mobile". Para obter mais informação, consulte o manual [#title id="3388"/]. Incluir no arquivo de histórico Por defecto, esta opción está seleccionada para todas las nuevas tablas creadas en 4D v14 y para todas las tablas en bases de datos convertidas. Marque esta opción para que las operaciones realizadas en los datos de la tabla se incluyan en el archivo de registro de la base de datos Marque esta opción para que las operaciones realizadas en los datos de la tabla se incluyan en el archivo de registro de la base de datos (cuando se genera). Esta opción generalmente debe ser seleccionada para la mayoría de las tablas. Sin embargo, por razones de optimización, puede deseleccionarla, por ejemplo para tablas temporales o tablas utilizadas para la importación de datos. Nota: esta opción se pone gris cuando la tabla no tiene llave primaria. Es importante tener en cuenta que esta opción sólo indica que los datos de la tabla deben registrarse en el historial si la database usa un archivo de historial, no activa el procedimiento de historial a nivel de la base de datos (ver Gestão do arquivo de histórico). Mensagens de alerta 4D muestra un icono de advertencia a la derecha de la opción Incluir en archivo de historial cuando las condiciones necesarias se cumplen. Mientras este icono se muestre, el historial no se activa. Puede colocar el puntero del ratón sobre el icono para ver el motivo de la alerta: Pueden aparecer los siguientes mensajes: Mensaje Causa Correción necesaria Esperando para crear una llave primaria Imposible registrar operaciones en el historial si la tabla no tiene una llave primaria (nueva regla en 4D v14) Crear una llave primaria en la tabla utilizando SQL o el menú contextual de la tabla Esperando que los valores de la llave primaria se fijen Esperando para activar la opción usar archivo de historial Los valores de la llave primaria han sido verificados e incluyen anomalías La opción global para activación del historial no está seleccionada Retire todo duplicado o valores nulos en los registros para el campo (o utilice otra llave primaria) Compruebe la opción " Uso del archivo de historial' en la página Backup/Configuración de la configuración de la base de datos Comentários A área Comentários de Inspetor permite armazenar informação adicional sobre a tabela. Estes comentários estão disponíveis para todos os desenvolvedores. Note que cada campo e cada relação tem sua própria área de comentários. SQL A área SQL de Inspetor inclui o menu “Esquema” e uma área de informação. O menu “Esquema” lista todos os esquemas SQL definidos no banco. Pode utilizar este menu para definir o esquema ao qual pertence a tabela (também é possível modificar essa propriedade através dos comandos SQL). Cada banco tem ao menos um esquema, chamado DEFAULT_SCHEMA. Como padrão, todas as tabelas pertencem a este esquema. Para mais informação sobre os esquemas SQL, consulte Esquemas no Guia de referência SQL de 4D. A área de informação indica se o nome da tabela respeita as regras de nomenclatura SQL (por exemplo, ao contrário de 4D, SQL não permite que um nome de campo contenha espaços). - 167 - Definir ou eliminar uma chave primária Em 4D, é possível administrar a chave primária de uma tabela diretamente no editor da estrutura. Em SQL, uma chave primária identifica as colunas (ou campos) utilizados para especificar de forma única os registros (linhas) de uma tabela. A definição de uma chave primária é necessária para a função de replicação dos registros de uma tabela de 4D. Em SQL, a chave primária é definida utilizando a cláusula PRIMARY KEY seguida da lista de colunas (ver Chave primária no Guia de referência SQL de 4D). É possível criar e eliminar as chaves primárias diretamente utilizando o menu contextual (botão direito do mouse) do editor de estrutura. Para criar uma chave primária: 1. Selecione o campo ou campos que compõe a chave primária da tabela. 2. Dê um clique direito e selecione Criar chave primária no menu contextual: Os campos incluídos na chave primária aparecem subscritos no editor e sua descrição SQL mostra a palavra chave PRIMARY KEY. O campo ou os campos que pertencem à chave primária não podem conter valores duplicados. Se os valores duplicados já existem nos registros da tabela, aparecerá uma caixa de diálogo de advertência para indicar que não é possível criar a chave por isso. Nota: as colunas que pertencem à chave primária não aceitam valores NULL. Para apagar a chave primária de uma tabela. Clique com o botão direito sobre a tabela que contém a chave primária e escolha Eliminar a chave primária no menu contextual: - 168 - 1. Aparece uma caixa de diálogo de confirmação. Clique em Aceitar para eliminar a chave primária. Default primary key field Starting with 4D v14, every new table created in the database contains a primary key by default: This field, named "ID" by default, is of the Longint type, and has, in particular, the following attributes: Unique, Reject NULL value input, Autoincrement, Automatic index Note: On the Structure Page of the Preferences for the 4D application, you can modify the name and type of the primary keys that are created by default. You can use this field as is, or change its name and/or its properties if you want (for example, you may want to use an UUID field). You can also delete it if you want to use another field (or fields) as primary key(s). However, it is strongly recommended to keep at least one primary key in each 4D table. Note: Default primary keys are not added to tables that are created using the SQL CREATE TABLE command, or tables that are imported into the database. Definir uma chave primária Para crear una llave primaria desde el editor de estructura: 1. Seleccione el o los campo(s) que componen la llave primaria de la tabla. 2. Haga clic derecho y seleccione Crear la llave primaria en el menú contextual: - 169 - No puede tener más de una llave primaria para cada tabla. Si ya se ha especificado una llave primaria, aparecerá un caja de diálogo de alerta indicando que se desactivará la llave primaria existente. Se crea la llave principal de inmediato. Los campos incluidos en la clave principal se subrayan en el editor y su descripción SQL muestra la palabra clave PRIMARY KEY. El o los campo(s) que pertenece a la llave primaria no puede contener valores duplicados. Si ya existen valores duplicados en los registros de la tabla, un caja de diálogo de alerta aparece para indicar que no es posible crear la llave debido a esto. Nota: la o las columna(s) que pertenecen a la llave primaria no aceptan valores NULL. Eliminar a chave primária Para eliminar uma chave primária de uma tabela: 1. Faça clique direito sobre a tabela que contém a chave primária e selecione Suprimir chave primária no menu contextual: - 170 - Aparecerá uma caixa de diálogo de confirmação. Faça clique em Aceitar para eliminar a chave primária. - 171 - Gestão de chaves primárias O "Gestor de chaves primárias" é um assistente destinado a facilitar a solução de erros relacionados com a presença de tabelas sem chaves primárias, em particular no contexto de uma base com histórico: Pode utilizar este assistente para: diagnosticar a compatibilidade de cada tabela da base com o mecanismo de histórico, propor uma correção para cada tabela que se encontre que não seja compatível em particular mediante a criação de uma chave primária. Nota: O gestor de chaves primárias também se oferece como um recipiente da versão 13 que pode utilizar para preparar bases de dados 4D v13 para a conversão a v14. Acessar ao assistente Há duas formas de mostrar a janela do Gestor de chaves primárias: desde o Janela de erro de chaves primária: faça clique no botão Utilizar assistente para mostrar a janela de assistente. Nota: O assistente se mostra no modo Desenho. Se a base se inicia em Modo Aplicação, o assistente não aparece imediatamente e deverá passar a modo Desenho. desde o Editor de estrutura: faça clique no botão na barra de ferramentas desta janela mostra o assistente. Utilizando o assistente A janela Gestor de chaves primárias mostra uma linha para cada tabela na base. Nota: O assistente não leva em conta as tabelas na Caixa. O ícone no cabeçalho de cada linha indica se a tabela requer a atenção do usuário: - 172 - Aceitar Sem chave primária, campo(s) escolhido(s) Sem chave primária, sem campo(s) escolhido(s) Atenção Uma chave primária válida se define para a tabela. A tabela não tem uma chave primária, mas contém pelo menos um campo que poderia ser convertido em chave primária. A tabela não tem uma chave primária, mas contém pelo menos um campo que poderia ser convertido em chave primária (será necessário criar um campo chave primária). A tabela não tem uma chave primária e não se registra no histórico (opção "Incluir em arquivo de histórico" desativada para a tabela). É possível ocultar as tabelas que tem determinado intervalo desmarcando a opção Mostrar advertências. Para cada tabela registrada no histórico que não tenha uma chave primária, o assistente mostra um menu para configurar a ação a realizar. Pode escolher das seguintes opções: Ignorar: não modifica a tabela. Os erros não se corrigem e o estado da tabela não muda. Utilize esta opção se deseja intervir posteriormente ou se quiser criar a chave primária fora do assistente. Esta opção é necessária particularmente, quando você quer criar uma chave primária baseada em vários campos na tabela. Utilizar campo existente (só é mostrado para as tabelas com pelo menos um campo escolhido para ser uma chave primária): designa um dos campos da tabela como chave primária. Quando se escolhe esta opção, o assistente sugere o campo mais adequado de forma pré determinada. Se deseja utilizar outro campo ou se o assistente não pode identificar um campo adequado (o assistente mostra " Selecione um campo"), faça clique no segundo menu para ver a lista de campos escolhidos. Criar um novo campo: cria um novo campo chave primária na tabela. Este campo terá os mesmos atributos como o adicionado por padrão ao momento da criação de uma nova tabela (ver Default primary key field). Por padrão, o assistente propõe a criação de um campo de tipo Inteiro longo, chamado "ID". Pode modificar o nome e o tipo de padrão dos campos chave primária utilizando Página Estrutura nas Preferências da aplicação 4D. Pode acessar a página de Preferências fazendo clique no botão na janela do Gestor de chaves primárias. Também pode mudar o nome e/ou o tipo de campo diretamente na janela do Gestor de chaves primárias. Não registrar esta tabela: desmarca a opção "Incluir no arquivo de histórico" para a tabela. Pode escolher esta opção no caso das tabelas temporais (ver Incluir no arquivo de histórico ). Depois de validar esta caixa de diálogo, se atribui um estado “Advertência” a tabela. Uma vez realizada a configuração, faça clique em Aplicar... para aplicar as mudanças a base de dados ou Fechar para fechar o quadro de diálogo sem modificar a base. Ao fazer clique em Aplicar... , aparece um diálogo de confirmação que lista as operações a realizar, e você pode Aplicar ou Cancelar a operação: Foi designado os campos existentes como chaves primárias, 4D verifica cada tabela para ter certeza de que seus dados existentes respeitam as normas relativas a unicidade e os valores nulos para este tipo de campo. Se, por exemplo, um campo contém valores duplicados ou valores nulos, é gerado um erro: - 173 - Terá que encontrar e eliminar estas anomalias antes de que possa habilitar o histórico de dados. Nota: para facilitar a correção de erros relacionados com as chaves principais, os valores de chave principal se mostram no Análise de atividade do Centro de Manutenção e Segurança. - 174 - Criar e modificar Campos Para cada tabela, você deve criar os campos que vão acolher os dados que você deseja armazenar e administrar. Quando você cria um campo, lhe atribui um tipo de campo que descreve a classe de informação que será armazenada no campo. 4D utiliza o tipo de campo para realizar diferente operações de acordo ao tipo de dados. Por exemplo, se um campo contém uma data, você deverá criá-lo com o tipo Data. Dessa maneira, 4D pode calcular valores de datas, tais como tempo de serviço ou datas de vencimento. Adicionalmente, 4D pode ordenar os registros cronologicamente utilizando as datas neste campo. Os tipos de campo são descritos em Tipos de campos 4D. Além do tipo de campo, cada campo em uma tabela pode ter outras propriedades. Estas propriedades determinam as condições para introduzir, ver ou modificar dados nos campos. São descritos em Armazenado em registro, arquivo de dados ou fora do arquivo de dados. Depois de criar um campo, você pode modificar o seu tipo ou propriedades ou inclusive excluí-lo. Criar um campo Você pode criar até 32767 campos em uma tabela. Você pode criar um novo campo através dos comandos padrões de criação ou copiar-colar. Para criar um campo: 1. Clique com o botão direito sobre uma tabela, logo selecione Adicionar campo ou Inserir campo no menu contextual. OU Faça um clique duplo em uma linha vazia, debaixo do último nome de campo da tabela. OU Selecione uma tabela, logo no menu de adição de objetos da barra de ferramentas do editor, escolha a opção Campo: 2. (opcional) Para rapidamente criar campos adicionais, você pode apertar o ENTER quantas vezes quanto for necessário. Então os campos são adicionados a tabela e 4D os seleciona. Automaticamente, o campo se chama Campo_X onde X corresponde ao numero atual do campo (se foram excluídos esses campos, este número pode não corresponder ao número de campos da tabela, ver o parágrafo “Número de campos excluídos” abaixo). Você também pode modificar seus nomes, definir suas propriedades, etc. (ver os próximos parágrafos). Para criar um campo utilizando copiar-colar: 1. Selecione o(s) campo(s) a serem duplicados e escolha o comando padrão “copiar” (menu Editar de 4D, menu contextual ou atalho Ctrl+C/Comando+C). 2. Selecione a tabela onde você deseja adicionar os novos campos e logo escolha o comando Colar no menu Editar, no menu contextual ou utilizando o atalho Ctrl+V/Comando+V. . O campo é duplicado conservando seu tipo e suas propriedades. Se existe um campo com o mesmo nome na tabela de destino, é renomeado por padrão “Cópia_de_NomeCampo”, onde NomeCampo é o nome original do campo. Um número adicional é adicionado se você fizer várias cópias do mesmo campo. Nota: Propriedades de indexação não são mantidas quando campos são criados através de copiar/colar. - 175 - Renomear um Campo É possível renomear os campos a qualquer momento; 4D atualizará os nomes dos campos em formulários, métodos e arquivos. Atenção, se os métodos foram abertos no editor de métodos no momento da alteração do nome de um campo, eles devem ser fechados e abertos novamente para que o nome do campo seja atualizado. Cada nome de campo deve ser único em sua tabela. É possível renomear um campo diretamente no editor de estrutura e no Explorador, ou utilizando a palheta do Inspetor. Para renomear um campo diretamente (Editor de estrutura ou Página Tabelas do Explorador): 1. Clique duas vezes no nome do campo (se o campo já estiver selecionado, clique uma vez). OU (Editor de estrutura unicamente) Selecione o campo a ser renomeado e pressioneEnter. Ele mudar para o modo de editar. 2. Entre o novo nome e clique fora do campo. Para renomear um campo utilizando o Inspector de estrutura: 1. Faça duplo clique no campo. OU Clique com o botão direito no campo, logo selecione Propriedades do campo... no menu contextual. OU No Explorador, faça duplo clique no nome do campo na página Tabelas. 4D mostra o nome e as propriedades do campo selecionado em Inspetor. A palheta também indica o número da tabela e do campo. Se a palheta Inspetor já estiver aberta mas mostrando as propriedades de outro campo ou objeto, selecione o campo desejado para que a palheta mostre suas propriedades. 2. Entre o novo nome na área "Nome". O novo nome se aplica imediatamente. Para maiores informações sobre as regras para nomear campos, consulte Regras para nomear tabelas e campos. Reordenar os campos 4D permite modificar a ordem na qual aparecem os campos na tabelas no editor de estrutura. A modificação da ordem dos campos nas tabelas pode, por exemplo, facilitar a análise da estrutura. Note que a reorganização dos campos no editor de estrutura não influencia em sua visualização no outros editores da aplicação. Efetivamente, 4D sempre mostra os campos na ordem de criação (inclusive quando se utiliza o comando Inserir campo) – exceto no caso do Explorador, onde os objetos são exibidos em ordem alfabética. Existem duas formas de modificar a ordem dos campos: Reorganizar manualmente o conteúdo de uma tabela arrastando e soltando seus campos. Para fazer isto, simplesmente pressione a tecla Alt (Windows) ou Opção (Mac OS) – o cursor se transforma em uma mão – e mova o campo para onde desejar: A ordenação personalizada efetuada desta maneira é memorizada e pode ser aplicada novamente se for necessário utilizando o comando Personalizado do menu Ordenar (ver a seguir). Aplicar um critério de ordenação. Você dispõe de vários critérios de ordenação disponíveis utilizando o sub-menu Ordenar do botão de ferramentas do editor: - 176 - Quando escolhe uma opção, o critério se aplica a todas as tabelas selecionadas na janela. Este menu está inativo quando nenhuma tabela está selecionada. Igualmente o menu indica o critério aplicado atualmente com uma marca de seleção. Várias marcas de seleção são exibidas quando se utilizam diferentes critérios na seleção de tabelas. É possível selecionar um critério de ordenação a seguir: alfabético: os campos são ordenados alfabeticamente em ordem crescente tipo: exibe os campos ordenados em função do tipo (tipos por ordem alfabética crescente). campos indexados: exibe primeiro os campos indexados campos relacionados: exibe primeiro as chaves primárias e logo as chaves estrangeiras. Visibilidade: são exibidos primeiro os campos visíveis. Criação: os campos são exibidos em função da ordem de criação (ordem padrão). Personalizado: não se aplica nenhum critério de ordenação automática. Esta opção restaura a ordenação prévia efetuada manualmente por arrastar e soltar. Se não foi efetuado arrastar e soltar antes, esta opção não terá efeito. Eliminar um campo Você pode eliminar campos das tabelas. Entretanto, isso não pode ser revertido. Essa operação pode ser feita através da máquina SQL de 4D ou através do editor de Estrutura. Para mais informações sobre o uso de SQL em 4D, consulte o manual de referência de SQL 4D Para apagar um ou mais campos no banco de dados usando o editor de Estrutura 1. Selecione os campos a serem eliminados. Pode selecionar simultaneamente os campos de várias tabelas diferentes. 2. Selecione o comando Apagar no menu Editar de 4D. Ou Selecione Apagar no menu contextual (botão direito do mouse) da tabela. Ou Pressione a tecla Delou Back. Uma caixa de diálogo de alerta pede para confirmar a operação. Se clicar no botão Aceitar, o campo se elimina da estrutura. Todos os dados asociados ao campo são borrados do arquivo de dados. Número dos campos eliminados Quando se elimina um campo, os outros campos da tabela não são renumerados, para não comprometer a estabilidade do banco. Portanto, é possível ter uma tabela com quatro campos numerados 1,4, 6 e 8. Note que os números dos campos eliminados são reutilizados quando se criam novos campos posteriormente. - 177 - Tipos de campos 4D É necessário especificar um tipo de campo para cada campo. Os tipos de campos afetam a maneira como 4D manipula e armazena os dados nos campos e como os introduz e os exibe nos formulários. Como padrão, 4D atribui um tipo Alfanumérico para cada novo campo. Para modificar o tipo de um campo: 1. Clique no ícone do tipo de campo na imagem da tabela escolha o tipo que deseja no menu associado. OU Clique com o botão direito no campo cujo tipo você deseja alterar e escolha o novo tipo no sub-menu Tipo do menu contextual. OU Selecione o campo cujo tipo deseja alterar e clique na área Tipo do Inspetor para mostrar o menu de tipos. É possível alterar o tipo a qualquer momento, a menos que o campo tenha uma relação ou pertença à uma chave primária. Neste caso, o menu para escolher um tipo de campo está desativado. Você deve eliminar a relação ou a chave primária antes de alterar o tipo do campo. Se você altera o tipo de campo antes de introduzir dados no campo, 4D altera simplesmente o tipo de campo. Se você altera o tipo de campo depois de introduzir dados no campo, 4D converte, se for possível, os dados para que correspondam ao novo tipo. Os dados de um campo Imagem convertido em outro tipo não são exibidos. Quando se converte um tipo de campo, 4D conserva o valor original do campo até que você modifique o registro. Por exemplo, se um campo de tipo texto contém o valor “maior que 10” e você alterar o tipo de campo a Inteiro, o campo modificado exibe “10”. Se altera o campo novamente a Texto, 4D exibe novamente “maior que 10”. Por padrão, 4D suporta os seguintes tipos de campos: * Alfa: texto alfanumérico entre 1 e 255 caracteres. * Texto: texto de até 2 GB. * Data: datas entre o ano 100 e o ano 32 767. * Hora: hora expressada em horas:minutos:segundos. * Booleano: um campo que só pode conter os valores TRUE (verdadeiro) ou FALSE(falso). * Inteiro: número inteiro entre -32 768 y 32 767. * Inteiro longo: número uma faixa de mais ou menos 2 147 483 647. * Inteiro 64 bits (1): número inteiro de 8 bytes incluídos entre +/- 2E64, * Real: número real na faixa de ±1.7E±308 (com 13 cifras significativas). * Flutuante(1): número de ponto flutuante, * BLOB: todo objeto binário, como um gráfico, outra aplicação ou qualquer documento. * Imagem: uma imagem em um dos formatos suportados por 4D (ver Formatos Nativos Compatíveis no Manual de Referência de Linguagem 4D) (1) Atenção, estes tipos de campos só são utilizados pelo motor SQL de 4D. Se estes campos são utilizados na linguagem - 178 - de 4D, seus valores se convertem internamente em números reais Nota: O termo genérico "string" pode indicar um tipo Alfa ou Texto e "número" pode indicar um Inteiro, um Inteiro Longo, Inteiro 64 bits, Real ou Flutuante. Alfa Um campo tipo Alfa contém caracteres alfanuméricos (letras e números), sinais de pontuação, e caracteres especiais como o asterisco (*), o sinal de porcentagem (%), o hífen (-) e outros similares. Os campos alfa são utilizados para armazenar informação que deva ser tratada como texto e não ultrapasse 255 caracteres de comprimento. Um campo alfa pode estar associado a um índice padrão e/ou a um índice de palavras chaves. Para maiores informações sobre indexação, consulte o parágrafo Criar e modificar Índices. Alfa é o tipo de campo mais comum. Geralmente, se utiliza este campo para nomes, endereços, números telefônicos, códigos postais e similares. Durante a entrada de dados, um campo Alfa permite qualquer caractere, número, símbolo de pontuação ou caractere especial. Códigos Postais (CEP) devem utilizar o tipo Alfa por duas razões: os campos numéricos não exibem zeros ao início e alguns códigos postais contêm hífens. A regra geral que se aplica para escolher entre numérico e Alfa consiste em escolher o campo Alfa a menos que o campo seja utilizado em cálculos numéricos ou pesquisas ou ordenações baseadas em valores numéricos. É possível definir o comprimento máximo de um campo Alfa entre 1 e 255 caracteres. É possível concatenar dois ou mais campos Alfa. Por exemplo, é possível colocar o nome o sobrenome de uma pessoa em uma mesma linha de uma etiqueta. É possível fazê-lo simplesmente utilizando a linha de código a seguir: NomeCompleto:=[Empregados]Nome+" "+[Empregados]Sobrenome A variável NomeCompleto pode ser exibida ou impressa. Você também pode extrair parte da informação para uso em outro lugar (extrair uma substring). A substring pode então ser exibida ou impressa. Texto Um campo Texto é parecido a um campo Alfa, exceto por algumas diferenças. Um campo Texto pode conter até 2Gb de caracteres alfanuméricos. Geralmente, os campos tipo texto são utilizados para armazenar blocos de texto de tamanho grande, tais como comentários ou descrições. Por razões de otimização, o conteúdo de um campo Texto é armazenado, por padrão, fora dos registros (ver o parágrafo “Stored in the Record” Armazenado em registro, arquivo de dados ou fora do arquivo de dados). Neste caso, o campo não pode ser associado a um índice padrão. Como os campos Alfa, um campo Texto pode ser associado a um índice de palavras chaves. Para maiores informações sobre indexação, consulte o parágrafo “Management of Indexes” em Criar e modificar Índices. Em um formulário de entrada, um campo Texto pode ter barras de rolagem. Em um relatório impresso, o campo texto pode se estender tanto quanto seja necessário para imprimir toda a informação, inclusive se for necessário estender por várias páginas. Durante a entrada de dados, os campos Texto oferecem as características básicas de edição de texto: rolagem, ajuste de texto dentro da área definida para visualizar o campo, clique duplo para selecionar uma palavra, movimentar o cursor com a ajuda das teclas direcionais, e operações padrões como cortar, copiar e colar. Se tiver a opção multi-linha, um campo de tipo Texto aceita retornos de carro durante a entrada de dados para a criação de novos parágrafos (um campo tipo Alfa não permite isso). Se tiver a opção multi-estilo, o campo pode conter texto com variações de estilo como subscrito, negrito ou colorido. É possível colar o texto nos campos tipo texto, incluindo texto de outros processadores de texto. Nota: Outra forma de armazenar texto com um registro é utilizando o plug-in 4D Write. Com 4D Write, é possível utilizar diferentes atributos de fonte, alinhamentos de parágrafo, e outras características próprias dos processadores de texto que não estão disponíveis em campos Texto padrão. Como com todos os plug-ins 4D, a área 4D Write deve ser colocada em um campo de tipo BLOB – e não de tipo Texto. Para maiores informações sobre o uso de 4D Write, consulte Introdução a 4D Write no Manual de referência de Linguagem 4D. Data - 179 - Utilize um campo tipo Data para armazenar valores de datas como datas de início, datas de compra, aniversários, entre outros. Um campo tipo Data pode armazenar qualquer valor de data (dia, mês, ano) respeitando o formato DD/MM/AAAA entre o ano 100 e o ano 32767. Nota: O formato de datas utilizado no Brasil, Grã-Bretanha, Espanha e América Latina é DD/MM/AAAA, nos Estados Unidos é MM/DD/AAAA e na Suécia é AA/MM/DD. 4D armazena as datas de acordo com o formato selecionado no sistema operacional de seu computador. Hora Utilize um campo tipo Hora para armazenar horas com a hora atual, a hora de uma reunião, a hora de faturamento, entre outros). Um campo tipo Hora pode armazenar qualquer hora no formato HH:MM:SS. Booleanos Os campos Booleanos (algumas vezes chamados campos lógicos) contêm valores TRUE ou FALSE. É possível definir o formato de um campo Booleano como uma caixa de seleção ou um par de botões de opção. Uma caixa de seleção marcada é verdadeiro (TRUE); vazia é falso (FALSE). Selecionar o primeiro botão de opção equivale a verdadeiro (TRUE) e selecionar o segundo botão equivale a falso (FALSE). Nomeie os campos Booleanos de modo que seja possível perguntar “O campo nome é verdadeiro?”. Esta pergunta é útil ao realizar pesquisas porque 4D revisa o valor TRUE e FALSE em um campo Booleano. Por exemplo, é possível nomear um campo “Masculino” no lugar de “Sexo”. Seu critério de pesquisa pode então ser escrito como “Masculino é verdadeiro” no lugar de “Sexo é verdadeiro”. Inteiro O tipo de campo Inteiro é utilizado para armazenar números inteiros, ou seja, números sem frações decimais. Os campos de tipo Inteiro podem armazenar números inteiros entre -32.768 e 32.767. Inteiro Longo Utilize o campo Inteiro Longo para armazenar números inteiros muito grandes, que não podem ser armazenados no campo de tipo Inteiro. Este tipo de campo pode armazenar números inteiros entre ±2.147.483.647. Inteiro 64 bits Este tipo de campo pode ser utilizado para armazenar números inteiros de 8 bytes permitindo manipular valores inteiros de tamanho grande, entre +/- 2E64. Nota: Atenção, este tipo de campo é utilizado somente pelo motor SQL de 4D. Se este campo é utilizado é utilizado na linguagem de 4D, seu valor é convertido internamente em um número real. Real Os campos de tipo Real são utilizados para armazenar números reais, ou seja, números decimais (preço, salários, gastos, etc.). Os campos reais podem armazenar qualquer número na faixa de ±1.7E±308. Os formatos de saída numéricos são baseados automaticamente nos parâmetros regionais do sistema. 4D substitui os caracteres “,” e “.” nos formatos de saída numéricos por, respectivamente, o separador de milhares definido no sistema operacional. Nota: no motor da base de dados 4D, as comparações de números reais se realizam sempre com um valor ípsilon de 10^-6 com a finalidade de obter um nível de precisão suficiente. Para garantir a coerência dos dados e dos cálculos, este valor ípsilon não pode mudar. Particularmente, o motor de base de dados não leva em consideração o comando SET REAL COMPARISON LEVEL, que só se aplica aos tratamentos estabelecidos na linguagem de 4D. Devido a imprecisão inerente aos cálculos realizados nos números reais, não recomendamos o uso deste tipo de dados para armazenar valores precisos como identificadores. Flutuante Este tipo de campo pode ser utilizado para armazenar os números de ponto flutuante. Estes tipos de números permitem armazenar os valores reais sem perder precisão. - 180 - Nota: Atenção, este tipo de campo é utilizado unicamente pelo motor SQL de 4D. Se este campo é utilizado na linguagem 4D, seu valor se converte internamente em um número real. BLOB (Binary Large Object) Os campos de tipo Blob (Binary Large Object) armazenam documentos binários de todo tipo. Por exemplo, pode armazenar documentos criados por outras aplicações, imagens escaneadas ou outras aplicações. Um BLOB pode ser de até 2 Gb. Quando se trabalha com um registro que contém um campo BLOB, todo o BLOB é carregado na memória. É possível utilizar campos tipo BLOB para armazenar arquivos de desktop dentro do seu banco de dados. Também é possível escrever os conteúdos de um campo tipo BLOB em um arquivo de desktop. Por exemplo, é possível utilizar um campo tipo BLOB em um sistema de gestão de documentos que armazena documentos no banco de dados e os entrega aos usuários quando são solicitados. Você utiliza os comandos BLOB na linguagem 4D para manipular os campos tipo BLOB. Utilize os comandos DOCUMENT TO BLOB e BLOB TO DOCUMENT para ler e escrever documentos a partir e em campos BLOB. Os comandos COMPRESS BLOB, EXPAND BLOB, e BLOB PROPERTIES lhe permitem trabalhar com campos BLOBs comprimidos. Para maiores informações sobre o uso de campos BLOBs, consulte a seção BLOBs no Manual de linguagem 4D. Por razões de otimização, o conteúdo de um campo BLOB é armazenado fora dos registros. Os BLOBs só são carregados quando é necessário, por exemplo, uma vez que o registro buscado é encontrado. O conteúdo de um campo BLOB não é exibido na tela já que um BLOB pode representar qualquer tipo de dados. Imagem Os campos tipo Imagem são utilizados para armazenar fotografias digitalizadas, diagramas, mapas, e ilustrações criadas utilizando aplicações gráficas. As imagens são conservadas em seu formato nativo. Algumas aplicações gráficas armazenam informação adicional com as imagens, como por exemplo, instruções para dispositivos de saída como uma impressora PostScript™ ou, a partir de 4D v12, metadados. Esta informação acompanha a imagem quando se copia ou cola em um campo Imagem e é utilizada por 4D durante a impressão da imagem ou, no caso dos metadados, através dos comandos GET PICTURE METADATA e SET PICTURE METADATA. Por razões de otimização, o conteúdo de um campo imagem é armazenado fora dos registros. As imagens só são carregadas quando for necessário, por exemplo, uma vez que o registro buscado é encontrado. A partir de 4D v13, também pode eleger guardar imagens fora do arquivo de dados (ver a seção Armazenamento externo dos dados). Nomes por padrão dos arquivos imagem 4D pode memorizar um nome por padrão para cada imagem armazenada em um campo. Isso significa que você pode definir um nome de arquivo por padrão quando guarda o conteúdo de um campo imagem em um arquivo disco através de uma exportação usuário ou utilizando o comando WRITE PICTURE FILE (quando passa uma cadeia vazia no parâmetro nomArquivo). Se o conteúdo do campo é copiado em uma variável ou em outro campo, seu nome por padrão também é copiado. Pode associar um nome por padrão a uma imagem armazenada em um campo imagem de dois maneiras: Por programação, usando o comando SET PICTURE FILE NAME. Pode utilizar este comando para associar um nome de arquivo por padrão a imagem. Também pode utilizar o comando Get picture file name para averiguar o nome por padrão de uma imagem. Automaticamente, quando o conteúdo de um arquivo imagem se importa em um campo imagem utilizando o menu contextual ou usando o comando READ PICTURE FILE: neste caso, 4D memoriza o nome do arquivo imagem original. Isto se ilustra na seguinte sequencia: 1. usuário importa o arquivo com o nome logo64.png em um campo imagem: - 181 - 2. A continuação, o usuário guarda o conteúdo do campo imagem: o nome logo64.png se apresenta na caixa de diálogo (tenha em conta que se trata de um nome por padrão e pode mudar) Object Os campos objetos armazenam pares de atributo/valor dos diferentes tipos, sem esquemas de dados predefinidos. A estrutura de dados armazenada não é necessariamente a mesma entre os diferentes registos. Por exemplo, um objeto de campo [Person]Address pode conter atributos diferentes, dependendo da cidade, do país, e assim por diante: record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...} "></span></span><span id="result_box" lang="pt"><span title="[#codeJS]record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...} "></span></span>[#codeJS]record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...} record2= {"street1":"Umber Road", "Number":"28", "state":"MO",...} A estrutura dos objectos 4D baseia-se no princípio padrão de pares de "propriedade/valor". A sintaxe destes objetos baseia-se na notação JSON, mas ainda não a segue completamente: Um nome de atributo é sempre um texto, como "Nome". Um valor de atributo pode ser um dos seguintes tipos: número (Real, Integer, etc.) texto array (texto, real, inteiro longo, inteiro, booleano, objeto, apontador) nulo - 182 - Boolean ponteiro (armazenado como tal, avaliada utilizando o comando JSON Stringify ou cópia) data (formato "AAAA-MM-DDTHH: mm: ssZ") objeto (objetos podem ser aninhados em vários níveis) Atenção: Por favor, note que os nomes dos atributos diferenciam entre maiúsculas e minúsculas. Um campo objeto pode ser de até 2 GB. Ao trabalhar com um registro que contenha um campo objeto, todo o objeto é carregado na memória. Como para os campos do tipo texto, imagem ou campo BLOB, os campos objeto podem ser armazenados no arquivo de dados (com registros ou qualquer outro) ou fora do arquivo de dados; Esta opção está em Armazenamento externo dos dados. Use os comandos 4D Objetos (Linguagem) para gerenciar os campos objeto. Use os comandos OB Get e OB SET para ler e gravar dados de e para campos objeto. Você também pode armazenar e ler arrays como atributos usando os comandos OB SET ARRAY e OB GET ARRAY. Você pode usar o comando QUERY BY ATTRIBUTE para buscar entre os campos objeto. Como os campos de tipo de objeto são baseados em texto, seu conteúdo é exibido por padrão em um formulário 4D como texto e formato JSON (ver seção abaixo). Nota: Para trabalhar com objetos JSON, você pode usar os comandos encontrados no "JSON". Por que usar campos Objeto? O tipo objeto permite definir campos sem esquema dinâmico. Estes campos objeto podem ser considerados como campos "definidos pelo usuário" ou "personalizados". Em 4D v15, agora tem que escolher entre os modelos de dados com ou sem esquema. Em ambos os casos, você pode executar pesquisas indexadas rápidas. Observe também que os campos objeto podem simplificar os modelos de dados padrão. Por exemplo, para uma tabela "Contatos" convencional, apenas um campo de tipo objeto permite evitar a criação de dezenas de campos que representam todos os valores possíveis, a maioria dos quais não são usados em 90% dos casos. O modelo de informação em tempo real é criado somente se necessário. Exibir e inserir campos Objetos em Formulários Como padrão, os campos objeto são representados como áreas de texto nos formulários 4D. Dentro destas áreas, os dados objeto deve ser undefined, ou devem ser formatados em texto JSON; caso contrário, um erro é retornado. Por exemplo, se você definiu o campo [Rect]Desc como um campo objeto, você pode escrever: CREATE RECORD([Rect]) <p>[Rect]Name:="Blue square" OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue") SAVE RECORD([Rect]) Quando o campo [Rect]Desc estiver incluído no seu formulário, os seguintes conteúdos são exibidos: Você pode editar os valores que são exibidos diretamente no campo texto ou digitar dados objeto diretamente com a notação padrão; será formatado em JSON automaticamente quando pulsar a tecla [Tab]: No entanto, a edição direta deve ser feita com cautela, já que os espaços fora de lugar, ou símbolos, irá resultar em um erro de análise JSON e não se salvam os dados editados: - 183 - Normalmente, ele é mais preciso para lidar com o conteúdo dos campos objeto através de comandosObjetos (Linguagem) e JSON. Obter e definir valores de Campos Objeto Todos os comandos do Objetos (Linguagem) agora aceitam um campo objeto como o primeiro parâmetro (objeto). Da mesma forma que objetos de linguagem padrão, os valores de campo objeto são manipulados pelos comandos do tema Objetos (Linguagem). Por exemplo: // Defina um valor OB SET([Pessoas] Identity_OB;"Nome";$ firstName) OB SET([Pessoas] Identity_OB,"Last Name",$ lastName) // Obter um valor $ FirstNameOB=Get([Pessoas] Identity_OB;"Nome") $ ApelidoOB=Get([Pessoas] Identity_OB,"Last Name") Os arrays também são suportados, por exemplo: ARRAY TEXT($arrGirls;3)</p><p>$arrGirls{1}:="Emma" $arrGirls{2}:="Susan" $arrGirls{3}:="Jamie" OB SET ARRAY([Persons]Children;"Girls";$arrGirls) Formulas com Campos de Objeto Os campos de objeto pode ser usado em fórmulas (usando o editor de fórmulas padrão ou o comando EXECUTE FORMULA). No entanto, neste contexto, os campos de objectos podem ser manuseados apenas com os seguintes comandos: OB Get OB Is empty OB Is defined OB Get type Por exemplo, você pode executar a seguinte fórmula de pesquisa: OB Get([Rect]Desc;"color")="blue" Limitações atuais - 184 - A maioria das características padrão de 4D suportam campos de tipo objeto. Mas algumas partes avançadas do aplicativo não está prontas para usar diretamente os campos objeto na versão atual. Estas peças são progressivamente atualizadas e estarão disponíveis em versões futuras. Compatibilidade parcial através de 4D formulas As seguintes funções ou comandos suportam parcialmente campos objeto através de fórmulas 4D: Função/Comando Editor de pesquisas Editor de ordenação Editor de importação/exportação 4D Write 4D Write Pro 4D View 4D Tags PROCESS 4D TAGS Sem suporte As seguintes funções e comandos 4D não admitem campos objeto: Funções/Comandos Editor de relatórios rápidos Editor de etiquetas SQL Data Definition Language (CREATE TABLE) SQL Data Manipulation Language (SELECT, INSERT, UPDATE) SQL EXPORT DATABASE e SQL EXPORT SELECTION Gráficos PHP Plugin SDK DISTINCT VALUES RELATE ONE RELATE MANY ORDER BY SCAN INDEX - 185 - Armazenado em registro, arquivo de dados ou fora do arquivo de dados Além de seu nome e tipo (consulte a seção Tipos de campos 4D), as propriedades de um campo determinam sua aparência, suas condições de entrada, visualização, edição e armazenamento dos dados. As propriedades de cada campo de uma tabela podem ser definidas individualmente. As propriedades dos campos podem ser especificadas em Inspetor ou em alguns casos, no menu contextual que aparece com o clique direito em um campo. Nota: Pode modificar as propriedades de um campo no que já foi introduzido dados na base de dados. Certas mudanças levam em conta os dados existentes. Por exemplo, quando se escolhe o atributo único, 4D mostra uma caixa de diálogo de advertência e não permite que este atributo se ative se os dados do campo contém valores duplicados. No entanto, se modificar as propriedades de entrada de dados, isto não afeta aos dados existentes. Por exemplo, quando se escolhe o atributo Obrigatório, apenas as entradas realizadas depois serão revisadas, os valores introduzidos antes da modificação podem conter espaços em branco . Definição A área "definição" do Inspetor permite configurar as propriedades elementares do campo. Certas propriedades só estão disponíveis em função do tipo de campo selecionado. Cor É possível atribuir uma cor a cada campo. As cores podem ser utilizadas para diferenciar os campos de acordo com sua função ou seus atributos. Por exemplo, é possível utilizar uma cor para os campos únicos e outra cor para os campos obrigatórios. Também é possível atribuir individualmente uma cor a cada tabela (ver o parágrafo Definir a cor da imagem de uma tabela)) e a cada relação (ver Definição). Nota: A cor dos campos definido no editor de estrutura não tem incidência na cor dos campos mostrado nos formulários (ver ) Cores de fundo e de traço). A cor definida para um campo se aplica ao nome do campo. Para definir a cor de um ou mais campos, efetue sua seleção e escolha uma cor utilizando: o botão Cor da barra de ferramentas do editor, o comando Cor no menu contextual dos campos (botão direito do mouse), a opção Cor de Inspetor A opção Automática permite aplicar a cor padrão original do campo. Invisível É possível tornar um campo invisível no ambiente Aplicação selecionado a propriedade Invisível para o campo. O atributo invisível oculta o campo do usuário. Um campo com este atributo não aparece em nenhum dos editores e caixas de diálogo padrões de 4D que aparecem no ambiente Aplicação. Além disso, não é possível ser utilizado pelos plug-ins. Os seguintes editores e caixas de diálogo são afetados no modo aplicação: todos os editores de pesquisa (ver Procurar registros), o Editor de ordenação, o Editor etiquetas, o Editor de relatórios rápidos, as caixas de diálogo Exportar e importar dados, o Editor de fórmulas. Nestes editores e caixas de diálogo, o usuário não poderá ver ou selecionar o campo. Por exemplo, o usuário não pode selecionar um campo invisível para um relatório criado com o editor de relatórios rápidos. Nota: Ao usar os editores, os usuários têm a opção de salvar em disco as características da pesquisa ou da ordenação criada por eles. Neste caso, qualquer campo declarado invisível posteriormente poderá ser utilizado. Adicionalmente, os usuários podem introduzir manualmente os nomes dos campos invisíveis na caixa de diálogo de aplicação de fórmulas (consultar Editor de fórmulas). - 186 - Os campos invisíveis aparecem em itálico na janela do editor de estrutura. Único A propriedade Único se utiliza quando quer que cada registro de uma tabela tenha um valor diferente (único). A propriedade Único é bem útil para validar os campos que contém números de identificação, números de segurança social, números de ordem de compra, etc. A propriedade Único evita ter duplicados de valores vazios ou de valores introduzidos. Se um campo tem a propriedade Único, só um registro poderá conter um valor vazio para esse campo. A barra de informação do editor indica se a propriedade único está selecionada para um campo (ver a seção Editor de estrutura). Em 4D, os campos com o atributo Único devem ser indexados: Um sinal visual indica que será criado um índice (se não existe) quando se seleciona o atributo Único para um campo: O editor não lhe permite eliminar o índice de um campo único (a opção Nenhum ou eliminar comandos não estão disponíveis para os índices quando se seleciona um campo deste tipo): Se deseja eliminar o índice de um campo único, tem que eliminar o atributo Único de antemão. Expor com o serviço 4D Mobile Esta opção controla a exposição do campo no contexto de petições 4D Mobile enviadas a base 4D através de REST. Por padrão, todas as tabelas e todos os campos estão expostos em 4D Mobile. Por razões de segurança, é possível que deseje expor somente certos campos de sua base as chamadas 4D Mobile. Por exemplo, se não deseja expor o campo [Empregados]Salário. Se não quer expor um campo, não selecione a opção Expor com o serviço 4D Mobile para o campo. Nota: também pode definir esta opção a nível da tabela, consulte Propriedades de Tabela. Para que um campo seja acessível por meio de 4D Mobile, sua tabela pai também deve ser acessível. Se a tabela pai não está exposta, nenhum de seus campos são acessíveis, independentemente de sua situação individual. Isto significa que você pode ativar ou desativar a exposição de uma tabela em 4D Mobile temporalmente sem modificar o valor individual da opção de exposição de cada campo. Esta opção pode ser utilizada no contexto da funcionalidade "4D Mobile" functionality. Para obter mais informação, consulte o manual 4D Mobile. Rejeitar a escritura do valor NULL A propriedade Rejeitar o valor NULL de entrada permite evitar o armazenamento de valores NULOS. Quando este atributo está selecionado para um campo, não será possível armazenar o valor NULO neste campo. Se um campo que tem esta propriedade recebe um valor NULL, um erro é gerado. Esta propriedade de baixo nível corresponde precisamente ao atributo NOT NULL de SQL. Em geral, se deseja utilizar valores NULOS em seu banco de dados 4D se recomenda utilizar exclusivamente a linguagem SQL de 4D. Nota: Em 4D, os campos podem ter a propriedade “Obrigatório”. Os dois conceitos são similares, mas seu alcance é diferente: o atributo “Obrigatório” é um controle de entrada de dados, enquanto que o atributo “Rejeitar valor NULO de entrada” trabalha a um nível do motor do banco de dados. Mapear valores NULOS a valores vazios - 187 - Esta propriedade permite tornar consistente o processamento de valores “vazios” e de valores NULOS para o campo através da linguagem de 4D. Por razões de compatibilidade, os valores NULOS armazenados nos campos dos bancos de dados 4D se convertem automaticamente em valores de padrões quando são manipulados através da linguagem de 4D. Por exemplo, no caso da seguinte instrução: minhaVarAlfa:=[minhaTabela]MeuCampoAlfa ...se o campo MeuCampoAlfa contém um valor NULO, a variável minhaVarAlfa conterá “” (string vazia). Os valores padrões dependem do tipo de dados: para os tipos Alfa e Texto: “” para os tipos numéricos (Real, Inteiro e etc.): 0 para o tipo Data: “00/00/00” para o tipo Hora: “00:00:00” para o tipo Booleano: False para o tipo Imagem: imagem vazia para o tipo Blob: BLOB vazio Por outra lado, este mecanismo em princípio não se aplica aos processos efetuados em nível do motor do banco de dados 4D, tal como as pesquisas. De fato, a pesquisa de um valor “vazio” (por exemplo, meuvalor=0) não encontrará registros que armazenem o valor NULL e vice-versa. Quando ambos os tipos de valores (valores padrões e NULL) estão presentes nos registros para um mesmo campo, certos processos podem ser alterados ou necessitar código adicional. Para evitar estes inconvenientes, a opção Mapear valores NULOS a valores vazios permite padronizar todos os processos na linguagem de 4D. Esta propriedade permite estender o princípio de uso dos valores padrões a todos os processos. Os campos que contém valores NULOS serão considerados automaticamente como que contém os valores padrões. Esta propriedade se leva em consideração a um nível muito baixo do motor do banco de dados. Atua particularmente no comando Is field value Null. Note: Os campos Alpha no formato UUID que não são gerados não são considerados como NULL, veja [#title id="649" anchor="106190"/]formato UUID ). Incrementação automática A propriedade "Auto incrementar" permite gerar os identificadores únicos para os registros. Pode ser utilizado com os Tipos de campos 4D Inteiro, Inteiro Longo e Inteiro Longo 64 bits (ver a seção REGISTER CLIENT). Um campo com esta propriedade é incrementado automaticamente a cada novo registro na tabela. O número atribuido ao campo corresponde ao "contador interno" da tabela, mantido por 4D. Esse contador interno também pode ser acessado através dos comandos 4D Sequence number e Get database parameter e utilizando o marcador #N (ver Valores padrão). Os números atribuídos são permanentes e nunca podem ser reutilizados, mesmo quando são os registros são apagados ou compactados. Os números gerados durante uma transação anulada nunca são "perdidos". Entretanto, é possível reiniciar o contador interno de uma tabela usando o comando SET DATABASE PARAMETER. A propriedade "Autoincrementar" corresponde ao atributo SQL AUTO_INCREMENT e pode ser especificada usando esta linguagem (ver exemplo). A etiqueta AUTO INCREMENT também aparece na área de informação SQL do Inspetor para os campos que têm essa propriedade. O seguinte código permite gerar um campo "id" de tipo inteiro na tabela "animais": ARRAY TEXT($nomes;6) $nomes{1}:="cachorro" $nomes{2}:="gato" $nomes{3}:="golfinho" $nomes{4}:="cobra" $nomes{5}:="borboleta" $nomes{6}:="avestruz" Begin SQL CREATE TABLE animais( id INT NOT NULL AUTO_INCREMENT , name VARCHAR(30)NOT NULL, PRIMARY KEY(id)); INSERT INTO animais(nome)VALUES(:$nomes); End SQL O seguinte código: - 188 - SELECT * FROM animais; ... devolve estes valores: id nome 1 2 3 4 5 6 cachorro gato golfinho cobra borboleta avestruz Armazenado no registro Este menu de opções está disponível para os campos de tipo Texto, BLOB e Imagem unicamente. Permite definir o lugar de armazenamento dos dados do campo. As seguintes opções estão disponíveis: No registro: os dados são guardados com cada registro. Geralmente, não deve eleger esta opção para campos que contenham dados de grande tamanho. No entanto, está selecionada por padrão para os campos de tipo Texto porque este tipo de armazenamento é necessário se você quer utilizar os índices "estandarte" de tipo B-Tree. O menu de seleção dos índices está oculto quando os dados texto se guardam fora dos registros. No arquivo de dados: os dados se armazenam no arquivo de dados, mas fora de cada registro. Esta aplicação está selecionada por padrão para los campos BLOBE imagem O armazenamento de texto, imagens e blobs fora dos registros permite otimizar o funcionamento das bases quando se trabalha com grandes volumes de dados. Fora do arquivo de dados: os dados se armazenam em arquivos separados, fora do arquivo .4D. Esta opção se descreve na seção Armazenamento externo dos dados. Nota de compatibilidade: esta opção somente é tida em conta para os novos registros criados posteriormente na tabela. Quando se define esta opção para uma tabela na qual os registros já foram intriduzidos, não se modificam e a tabela funcionará em modo de armazenamento mixto interno/externo. Caso deseje ampliar este modo aos registros existentes, deve compactar os dados utilizando a opção Forçar a atualização dos registros (ver Compactar). Tamanho máximo de armazenamento Como se descreveu na seção anterior, por razões de otimização, os dados de los campos de tipo BLOB, Imagem e Texto são armazenados fora dos registros ou fora do arquivo de dados. Nesta configuração, pode ser interessante, por razões de rendimento, "forçar" o armazenamento dos dados nos registros quando seu tamanho é limitado. Este funcionamento é particularmente otimizado se sua aplicação maneja dados BLOB, Imagem ou Texto de tamanhos não homogêneos. Este parâmetro é acessível através da opção Tamanho máximo de armazenamento. O valor introduzido nessa área representa o tamanho máximo em bytes para que os dados do campo sejam armazenados nos registros. Por exemplo, se introduzir 30.000 em um campo imagem, uma imagem de 20 Kb seria armazenada dentro do registro e uma de 40 Kb seria armazenada fora do registro. Como padrão, o valor é 0: todos os dados serão armazenados fora dos registros. formato UUID Esta propriedade está disponível para os campos do tipo Alfa. Indica que o campo é utilizado para armazenar os identificadores UUID. Os dados armazenadas devem ser ajustados ao formato UUID (combinação de 32 letras (AF, af) e números (0-9)). Para fazer isto, pode utilizar a propriedade Auto UUID, o comando Generate UUID ou qualquer algoritmo personalizado. Se tentar armazenar neste campo uma string que não cumpra com o formato de UUID, 4D a converterá automaticamente. A mesma operação também se aplica aos valores dos campos existentes não alfa que sejam transformados em campos UUID: ao carregar os registros, os valores são reformatados e depois são novamente guardados. Os campos com a propriedade Formato UUID podem ser mostrados nos formulários e continuar sendo editáveis. Seu conteúdo é mostrado em caracteres em maiúsculas. Deve passar seu conteúdo através de uma variável se deseja ver os caracteres em minúsculas. Notas: Os campos com o formato UUID não podem ser associados aos índices de palavras-chave, nem às listas de opções. É possível criar uma relação entre dois campos com o formato UUID mas não é possível relacionar um campo Alfa padrão a um campo que tenha o formato UUID. Auto UUID Esta opção somente está ativa quando a propriedade Formato UUID estiver selecionada. - 189 - Pode utilizar a propriedade Auto UUID para gerar automaticamente um número UUID no campo cada vez que um registro for criado. O número é calculado automaticamente nos seguintes contextos: quando um registro for criado, quando um registro for carregado cujo campo UUID contém um valor Null. Isso ocorre mais particularmente por registros criados e guardados antes do campo UUID é adicionado na tabela, quando a opção Map NULL values to blank values não for marcada. Naturalmente, em todos os casos, o registro deve ser guardado para que a UUID automaticamente gerada deve ser guardada no campo. Nota: quando dados são importados, mesmo que essa propriedade esteja selecionada, 4D não gera um número novo, e sim utiliza os valores importados (e os transforma quando seja necessário, caso o formato não seja válido). Entretanto, se o valor do campo importado está vazio, um UUID é automaticamente gerado). Compressão QuickTime Nota de compatibilidade: esta opção se conserva por razões de compatibilidadee não tem nenhum efeito por padrão. Para poder utilizar esta opção, deve habilitar QuickTime em sua aplicação (ver Introdução a Imagens). Pesquisas e ordenações em texto sem etiquetas Esta propriedade está disponível para os campos Texto e Alfa. Quando selecionar essa opção, as pesquisas e ordenações realizadas nos dados armazenados no campo não consideram nenhum tipo de etiqueta de estilo (style tag). Esta opção está relacionada com a possibilidade em 4D de se aplicar diferentes estilos dentro de uma mesma área de texto (texto enriquecido) em um formulário. Para obter mais informação sobre essa função, consulte a seção Multiestilo (área Rich text). A definição de estilos é feita inserindo etiquetas HTML no texto. Essas etiquetas são interpretadas no momento da visualização da área de texto. As etiquetas de estilo são armazenadas com os dados. Por exemplo, se escrever "fim de semana" em um campo de texto, 4D guardará "fim de <SPAN STYLE = "color: #D81E05">semana</SPAN>". Esta operação é transparente para o usuário a nível de formulário. Entretanto, para as buscas e as ordenações, uma configuração específica é necessária para que 4D ignore as etiquetas de estilo. Para "fim de semana", a busca somente a encontrará se tiver selecionado a opção Ignorar estilo ao buscar e ordenar para o campo no editor de estrutura. Nota: com esta opção, uma busca de ovalor entre os dados de ocampo é o mesmo que a execução dessa instrução dentro de 4D: QUERY BY FORMULA(OBJECT Get plain text(ocampo)="ovalor") Indexação A propriedade Indexação está disponível para todos os tipos de campos exceto para BLOBs e imagens. A propriedade índice de palavras chaves está disponível para campos de tipo Alfa, Texto e imagem. O uso de índices permite acelerar os processos e as pesquisas entre os dados. A gestão de índices é detalhada no parágrafo Criar e modificar Índices. . Controles de entrada Pode estabelecer controles de entrada de dados para campos e objetos editáveis ao nível dos formulários. Os controles de entrada restringem o que o usuário pode introduzir no campo ou objeto editável em um formulário em particular. Obrigatório Quando o atributo Obrigatório é selecionado para um campo, o usuário deve obrigatoriamente introduzir um valor no campo durante a entrada de dados. 4D não aceita um registro com campos obrigatórios vazios. Você deve definir como obrigatórios aqueles campos cuja informação seja essencial para o seu banco. O campo que identifica como único a cada registro em uma tabela é um bom candidato a ser Obrigatório. Campos que devem ser obrigatórios para proteger a integridade dos registros são os que contêm dados como os números de CPF, números de fatura, certas datas ou códigos de empregados. Também é possível definir o atributo Obrigatório para um campo em um formulário particular. Se você selecionar este atributo no editor de Estrutura, não pode desabilitá-lo em uns formulários particular. Mesmo assim, pode aplicar o atributo - 190 - Obrigatório em um formulário para um campo que não tenha este atributo no editor de Estrutura. Para maiores informações sobre como definir o atributo Obrigatório para um campo em um formulário, consulte a seção Atributos Editável e Obrigatório e propriedades de campos. Nota: em 4D, campos também podem ter a propriedade "Rejeitar valor NULO como entrada" (ver acima). Os dois conceitos são similares, mas seu alcance é diferente: o atributo "Obrigatório" é um controle de entrada de dados, onde "Rejeitar valor NULO como entrada" trabalha ao nível da máquina do banco de dados. Não modificável Se o atributo Não modificável é selecionado para um campo, 4D valida o valor inicial introduzido no campo, mas não permite que o usuário modifique o valor depois que se guarde o registro. O usuário só pode modificar este valor durante a criação do registro, antes que o registro seja aceito. Uma vez que o usuário salva o registro, o valor deste campo não é modificável. Este valor pode ser modificado por um método ou retornando ao ambiente Desenho e desativando este atributo. Utilize o atributo Não modificável para campos que devem oferecer informação de rastreamento (auditorias) tais como data de recebimento, data de pagamento, etc. O atributo Não modificável é atribuído freqüentemente ao campo que identifica cada registro como único na tabela. Nota: Este atributo só funciona com campos mostrados em um formulário de entrada. Em outros casos (entrada em lista, entrada em sub-formulário e em modo de listagem), o valor do campo poderá ainda ser modificado. Não editável O usuário não pode introduzir valores a partir do teclado em um campo que tenha o atributo Não editável. Ele deve utilizar um valor padrão para este campo ou escrever um método que insira um valor no campo. Um campo com atributo não editável é útil para mostrar os valores que você não deseja que os usuários do banco modifiquem, tais como totais ou um número de série atribuído por um método. Também é possível definir esta propriedade para um campo em um formulário em particular. Para maiores informações, consulte a seção Atributos Editável e Obrigatório e propriedades de campos. Multilinha Esta opção só está disponível para os campos de tipo Texto. Quando está selecionada, o campo Texto é configurado automaticamente, nos formulários criados posteriormente, de maneira que possam ter várias linhas de texto. Suas características padrões são as seguintes: altura correspondente a várias linhas, barra de rolagem horizontal, em execução, um retorno de carro provoca uma nova linha. Quando esta opção não estiver selecionada, a aparência padrão do campo texto nos formulários é idêntica a dos campos de tipo Alfa: somente uma linha de altura sem barra de rolagem; um retorno de carro o passa ao seguinte campo do formulário. É possível alterar a aparência padrão do campo a qualquer momento através do editor de formulários. Permitir Lista Utilize Permitir lista se deseja mostrar uma lista de seleção para a entrada de informação no campo. Para utilizar este atributo, primeiro você deve criar a lista com ajuda do editor de listas (consultar Listas). Utilize este atributo quando deseja padronizar as entradas no campo e evitar erros de digitação. Esta propriedade é útil para os campos que tem um número limitado de possíveis valores ou entradas usuais. Utilizar uma lista de valores não necessariamente evita que o usuário escreva valores diferentes aos da lista. Também é possível atribuir uma lista de seleção em um formulário particular. Mesmo assim, quando atribui uma lista de seleção somente em um formulário, a lista não é exibida nos outros editores ou caixas de diálogo, tal como o editor de pesquisas. Para maiores informações sobre o uso de listas de valores em formulários, consulte a seção Controles de entrada de dados e ajuda de entrada Nota: Também é possível definir em nível dos formulários as listas de valores obrigatórios e de valores excluídos. Quando se seleciona a opção Permitir lista, o menu suspenso associado é ativado. É possível então selecionar uma lista existente que deseja atribuir ao campo ou pode clicar em [...] para acessar diretamente ao editor de listas (consultar Listas). Mensagens de ajuda É possível dar aos usuários informação adicional sobre um campo adicionando uma mensagem de ajuda. Se você escrever uma mensagem de ajuda nesta área, será exibida debaixo do campo quando o usuário coloque o cursor no campo. Uma mensagem de ajuda é exibida em todas as plataformas. - 191 - Quando o usuário colocar o ponteiro do mouse debaixo de um campo, aparece a mensagem em uma mensagens de ajuda, como se mostra a seguir. Também é possível utilizar uma mensagem de ajuda para um campo em um formulário particular. Se você atribuir uma mensagem de ajuda somente a alguns formulários, não aparecerá nos demais formulários. Para maiores informações em como usar as mensagens de ajuda com formulários, consulte Mensagens de ajuda. Comentários A área Comentários do Inspector permite armazenar informação adicional sobre o campo. Estes comentários estão disponíveis para todos os desenvolvedores. Note que cada tabela e cada relação dispõem de sua própria área de comentários. SQL A área SQL do Inspector oferece informação útil sobre o campo a partir da perspectiva de seu uso através da linguagem SQL: Esta área indica particularmente se o nome do campo não respeita as regras da nomenclatura SQL (por exemplo, diferente de 4D, SQL não permite que um nome de campo contenha espaços). Para cada campo, a área de informação SQL indica seus atributos SQL (tipo e propriedades). - 192 - Armazenamento externo dos dados Pode escolher onde guardar os dados de cada campo de tipo BLOB, Imagem e Texto. Além das opções de armazenamento internas (no registro ou no arquivo de dados), pode optar por armazenar estes campos fora do arquivo de dados. Neste caso, seus dados são guardados como arquivos externos que são gerenciados por 4D e podem ser gerenciados pelas aplicações de terceiros, sempre e quando você tenha a precaução de conservar a integridade dos dados. Este princípio é transparente para o usuário: o acesso aos dados é o mesmo, independentemente de sua localização. O armazenamento externo dos dados permite otimizar o funcionamento da aplicação, permitindo por exemplo transportar grandes volumes de dados ou acessar desde o sistema operativo aos textos ou as imagens contidas na base, inclusive quando não está aberta. Modo automático ou modo personalizado O suporte para o armazenamento externo de dados pode ser realizado de duas maneira: Modo automático: neste modo, 4D cria e gerencia uma pasta por padrão, estruturada em uma forma específica e que contém todos os dados de armazenamento externo. Neste caso, estes dados se administram de maneira transparente e têm as mesmas funções e o funcionamento automático que para os campos armazenados internamente. Para ativar este modo automático, você pode: Configurar o armazenamento externo no editor de estrutura (parâmetros guardados com a estrutura da base). Esta opção se descreve no Stored in the record. Utilizar o comando SET EXTERNAL DATA PATH com uma cadeia vazia no parâmetro rota (configuração válida para a sessão). Modo personalizado: neste modo, você decide livremente o lugar onde se armazenam os arquivos externos para cada campo e cada registro. Neste caso, 4D conserva unicamente a relação entre o campo e seus dados e alguns dos mecanismos de base de dados já não estão disponíveis. O modo personalizado se ativa utilizando o comando SET EXTERNAL DATA PATH e indicando uma pasta (diferente a pasta por padrão) no parâmetro rota. A seguinte tabela compara as funções e automatizações disponíveis nos modos automático e personalizado: Configuração da pasta de armazenamento Criação, carga e registro dos arquivos externos Supressão do arquivo externo se o registro é eliminado Supressão do arquivo externo se o valor nulo for atribuído ao campo Integração automática quando é guardada a base Suporte automático durante a integração do arquivo de histórico Suporte dos índices padrões (campos texto) Suporte dos índices de palavras chave (campos texto e imagem) Suporte das transações Modo automático Modo personalizado Nome e lugar definidos por 4D, só uma pasta por padrão para toda a base Nome e localização livres, pode ser diferente para cada campo Automático Automático Sim Não Sim Não Sim Sim (rota externa) Sim Sim (rota externa) Não Não Sim Não Sim Não Localização dos dados externos Os dados armazenados fora do arquivo de dados são organizados de acordo com os seguintes princípios: Para cada registro, os dados são armazenados em um arquivo externo chamado xxx.txt (campo de texto), xxx.blob - 193 - (campos BLOB e objeto) ou xxx.jpg, xxx.tiff ... (campo de imagem, a extensão depende do tipo Imagem), onde xxx for um identificador exclusivo (UUID) gerido por 4D. No modo automático, todos os dados externo são colocados em uma pasta chamada <NomDoBanco>. ExternalData onde <NomDoBanco> for substituído pelo nome da estrutura de banco de dados de arquivo. Esta pasta está localizada ao lado do arquivo de dados do banco (arquivo .4 DD). Dentro dessa pasta, 4D cria uma pasta para cada tabela que possui dados externos (chamado "Tabela + número da tabela"), então uma subpasta para cada campo externo (chamado "Campo + número do campo"). Os primeiros 100 elementos de campo são armazenados no primeiro nível desta pasta, os seguintes são armazenadas em subpastas numeradas a partir de "2", com cada subpasta contendo 100 itens. Por exemplo, se o campo No. 5 da tabela No.3 do banco de dados "Contabilidade" for armazenadado fora do arquivo de dados, a seguinte estrutura árvore for criada por 4D: Contabilidade.4DD [Contabilidad.ExternalData] Tabela3 Campo5 Data_1B7F3A 56F6544B45951EFA60426D5ABC.txt Data_1B7F3A 56F6544B45951EFA60426D5CCC.txt ... 2 Data_2ADBFBA478AAE4409DA9C2D13C90A53B.txt Data_32F8A30B87EE7E4BBC802468D553DC43.txt ... Em modo personalizado, o nome e a localidade da pasta puder ter sido configurada livremente e se puder ter sido especificada separadamente para cada campo que for armazenado de forma externa vía o comando SET EXTERNAL DATA PATH. Esta configuração não for guardada na estrutura do banco de dados. Criar e atualizar arquivos No modo automático, a escrita de campo em um arquivo externo é feita no momento do registro no disco (após a validação da transação se necessário): Se o arquivo externo não existir: no modo automático, ele é criado; em modo personalizado, é devolvido um erro; Se um arquivo externo já existir, 4D vai substitui-lo por um novo. Se você deseja manter o arquivo , você pode especificar um caminho diferente (usando o SET EXTERNAL DATA PATH), ou utilizando o comando RELOAD EXTERNAL DATA para carregar na memória o conteúdo do campo de seu arquivo externo antes de salvá-lo em disco novamente. Essa opção é útil quando o arquivo tenha sido modificado por outro aplicativo depois de carregar o registro. Sincronização e replicação O armazenamento de dados é um parâmetro local, em cada banco de dados. Durante a sincronização ou replicação (ver Replicação via SQL, estes parâmetros podem variar entre o banco de dados local e o banco de dados remoto Neste caso, o armazenamento está em conformidade com os parâmetros de cada banco de dados;. a sincronização ou replicação não as modifica. Por exemplo, se um campo imagem do banco de dados remoto é salvo normalmente fora do arquivo de dados e este mesmo campo no banco de dados local é armazenado no arquivo de dados, quando ocorre a replicação, quaisquer dados adicionados a este campo no banco de dados local (no arquivo de dados) são armazenados fora do arquivo de dados no banco de dados remoto. Acesso externo a arquivos Arquivos de armazenamento externos são acessíveis em modo de leitura / escrita em outros aplicativos diferentes de 4D (sistemas operacionais, editores de texto ou gráficos, etc.). No entanto, isto deve ser feito com cuidado, já que eles podem alterar o funcionamento da aplicação: Se um armazenamento externo arquivo é excluído, renomeado ou movido pelo sistema operacional ou uma aplicação de terceiros, 4D considera que o campo tem o valor nulo e no modo automático, o arquivo será criado de novo (se não for nulo) quando o registro for salvo. Em modo personalizado, um erro é gerado quando o comando SET EXTERNAL DATA PATH for executado. Se você usar índices e se os arquivos de armazenamento forem modificados por um aplicativo de terceiros, sem que os registros pai sejam reescritos no disco, os índices não são atualizados. Nota: Os arquivos de texto externos são salvos no formato UTF-8 sem BOM. Se eles são abertos por um aplicativo de terceiros e, em seguida, salvos com BOM, ainda podem ser reaberto por 4D, mas serão salvos sem BOM. - 194 - Note-se que o carregamento de um registro em modo "read-only" não bloqueia os arquivos externos dos campos deste registro. Esses arquivos ainda podem ser modificados no disco por 4D ou aplicativos de terceiros, embora o seu conteúdo tenha sido carregado na memória para 4D. - 195 - Regras para nomear tabelas e campos Os nomes de tabelas e campos devem respeitar as seguintes regras: O nome pode ter até 31 caracteres. Deve começar por uma letra do alfabeto. Pode conter combinações de letras, números, espaços e subscritos. Os caracteres seguintes não são permitidos em nomes de tabelas (geram erro no editor de Estrutura): ( ) + - / * " ; = & | # > < ^ ' { } % DIAMOND (0x00D7), CUBE (0x00B3), SQUARE (0x00B2), PLUS-MINUS (0x00B1) Em geral, deve evitar caracteres que possam causar que o nome seja mal interpretado em 4D ou em linguagens externas, por exemplo sinais de pontuação (vírgulas, pontos, etc.) 4D trunca os nomes das tabelas que superam os 31 caracteres e exclui os espaços ao principio e ao final do nome. Não utilize o mesmo nome para dois objetos visíveis. Se você utiliza o mesmo nome duas vezes, uma caixa de diálogo de alerta lhe indicará que outro objeto visível já tem este nome e, portanto a entrada não é possível.. Não utilize os nomes reservados para tabelas ou campos. Os nomes reservados incluem os nomes de comandos (Data, Hora, etc.), palavras chaves (If, For, etc.) e constantes. Recomendação: Ainda que seja possível inserir espaços nos nomes dos objetos, introduzir um nome sem espaços lhe permitirá, no editor de métodos, selecionar o objeto fazendo duplo clique diretamente nele. Portanto se recomenda utilizar um underscore no lugar de um espaço. Notas: Devem ser respeitadas regras adicionais quando os objetos devem ser manipulados através do SQL: só se aceitam os caracteres _0123456789abcdefghijklmnopqrstuvwxyz, e o nome não deve incluir palavras reservadas SQL (command, attribute, etc.). A área “SQL” do Inspetor lhe avisará se o nome não respeita uma regra SQL (ver o parágrafo UNREGISTER CLIENT). Também deve ter certeza de utilizar caracteres que sejam compatíveis com JavaScript se deseja acessar a suas tabelas e campos desde uma aplicação Wakanda por meio de um link 4D Mobile (Programming and Writing Conventions na documentação Wakanda). - 196 - Criar e modificar Índices É possível associar índices aos campos que são utilizados freqüentemente para efetuar as pesquisas e ordenações. Por exemplo, é possível indexar um campo que armazene os sobrenomes, empresas, ou nomes de produtos se você planeja efetuar pesquisas de registros particulares ou ordenar os registros com ajuda destes campos. Também é possível utilizar estas propriedades para os campos que estabelecem relações entre as tabelas. Para maiores informações, consulte a seção Criar e modificar Relações. Quando um índice é associado a um campo, 4D cria uma tabela de índices para o campo. Esta tabela permite a 4D realizar rapidamente pesquisas e ordenações no campo. Quando se realiza pesquisas ou ordenações em um campo não indexado, 4D explora seqüencialmente os dados e examina cada registro. A indexação permite a 4D evitar buscar em todos os registros. É possível indexar os campos de tipo Alfa, Texto, Data, Hora, Booleano, Inteiro, Inteiro longo, Inteiro 64 bits, Real, Flotante e Imagem . Quando se adiciona e exclui registros, 4D atualiza automaticamente sua tabela de índices. Se você criar um índice para um campo que já existe, 4D indexa automaticamente os dados existentes. É possível definir tantos campos indexados quanto desejar. Os índices também são recreados durante operações específicas como a conversão de bases antigas ou a compactação de dados. Não indexe todos os campos. Um índice aumenta o tamanho do banco, utilizando mais espaço em disco. Utilizar muitos índices também aumenta o tempo necessário para salvar um registro já que 4D atualiza as tabelas de índices com cada validação de registros. Os campos indexados são exibidos em caracteres em negrito no editor de estrutura. Tipos de Índices 4D propõe diferentes tipos de índices. A escolha de um tipo de índice é efetuada em função do resultado esperado e o tipo de dado presente no campo. A escolha de um tipo de índice é efetuada em função do resultado esperado e do tipo de dado presente no campo. Existem três tipos principais de índices: Índices padrões: este índice mono-campo permite acelerar as operações habituais do banco de dados (pesquisa e ordenações). 4D lhe permite escolher a arquitetura interna deste tipo de índice: Árvore-B ou Árvore-B agrupada. Índices compostos: este índice armazena valores combinados de dois ou mais campos que com freqüência se buscam juntos, por exemplo Sobrenome+Nome. Índices de palavras chaves: estes índices estão disponíveis unicamente para os campos de tipo Alfa, Texto e Imagem. Estão desenhados para facilitar as pesquisas rápidas em textos ou no caso das imagens, entre as palavraschave associadas as imagens. Índices Padrão Um índice padrão está desenhado para acelerar as operações do banco de dados (um índice padrão faz referência a um índice genérico, contrário a um índice de palavras chaves ou a um índice composto). 4D oferece dois tipos de arquiteturas para os índices padrões: Árvore-B e Árvore-B agrupada. Árvore-B: índice de tipo B-Tree clássico. Este tipo de índice multi-propósito responde a maioria das necessidades de indexação. Árvore-B agrupada: índice de tipo B-Tree utilizando os clusters. Esta arquitetura é mais eficiente quando o índice não contém um grande número de chaves, ou seja, quando os mesmos valores ocorrem freqüentemente nos dados. Nota: um índice Árvore-B associado com um campo do tipo Texto armazena os primeiros 1024 caracteres do campo (Máximo). Portanto, nesse contexto, buscas por strings contendo mais que 1024 caracteres não funcionarão. Quando se escolhe a arquitetura do índice, 4D também propõe a opção Automática. Neste caso, 4D seleciona a arquitetura em função da natureza dos dados. A opção Automática é a única opção disponível para Objetos campos. Na verdade, nesse caso, todos os caminhos de atributo são automaticamente indexados. Índices compostos Os índices compostos armazenam o valor conjunto de dois ou mais campos para cada entrada. O exemplo clássico é um índice composto baseado nos campos Nome+Sobrenome. A pesquisa de “Pedro Silva” será otimizada em comparação com uma pesquisa padrão (pesquisa de “Silva” e logo pesquisa de “Pedro”). 4D leva vantagem automaticamente dos índices compostos durante as pesquisas e ordenações. Por exemplo, se existe um - 197 - índice composto “Cidade+Código Postal”, será utilizado em caso de uma pesquisa do tipo sobrenome=Abreu e cidade=Rio de Janeiro e CódigoPostal=22121. No editor de estrutura, a criação dos índices compostos se realiza sob a caixa de diálogo de criação de índices. Para uma descrição detalhada desta caixa de diálogo, consulte o parágrafo “Criar um Índice” abaixo. Índice de palabras-chaves Os campos Alfa, Texto e Imagem podem ter um tipo de índice específico: palavras chaves. Quando se associa este tipo de índice com um campo Alfa ou Texto, os textos armazenados no campo serão indexados palavra por palavra. Todas as palavras se indexarão inclusive se tiverem 1 ou 2 caracteres. Este tipo de índice permite acelerar drásticamente as pesquisas posteriores por palavras chaves em campos de tipo texto É possível associar de uma vez um índice padrão e um índice de palavras chaves aos campos Alfa e aos campos Texto (quando se armazena com os registros). 4D utilizará o índice apropriado em função do contexto. Quando associado este tipo de índice a um campo Imagem, as pesquisas entre as palavras chaves associadas as imagens (meta dados) se aceleram de maneira significativa. Atenção: os índices de palavras chaves de imagens são baseadas exclusivamente nos meta dados de tipo IPTC/Keywords. Estes tipos de meta dados estão suportados em particular pelos formatos TIFF e JPEG (note que BMP, PNG e GIF não os suporta). Outros tipos de meta dados não são suportados pela indexação. A atualização dos índices de palavras de imagens é efetuada automaticamente por 4D cada vez que se guarda o campo Imagem (criação ou modificação do registro, importação de dados, etc.). Os meta dados de tipo IPTC/Keywords são indexados automaticamente por 4D quando estão presentes na imagem (não é necessário chamar ao comando SET PICTURE METADATA para incluir-lo no índice do campo imagem). Pode utilizar o comando DISTINCT VALUES para obter a lista de palavras chaves contidas em um índice de palavras chaves. Utilize os índices de palavras chaves texto ou imagem com ajuda do operador % : este operador deve localizar-se nas fórmulas de pesquisa ou de ordenação para utilizar especificamente um valor de índice. Por exemplo: QUERY([IMAGENS];[IMAGENS]Fotos%"gatos") // busca as fotos associadas a palavra chave gatos Isto funciona da mesma forma para todos os comandos de pesquisa e ordenação: QUERY BY FORMULA, QUERY SELECTION, ORDER BY, etc. Para maior informação sobre o operador % e as pesquisas por palavras chaves, consulte a seção Operadores de Comparação no manual Linguagem de 4D. Lista de Índices O botão da barra de ferramentas do editor de estrutura mostra a janela da Lista de Índices. Essa janela mostra a lista e propriedades de todos os índices de estrutura, sem importar o tipo: A lista de índices permite visualizar as principais propriedades dos índices: Tipo: tipo de índice. Cada tipo de índice (Árvore-B, Árvore-B agrupada, palavras chaves) é representado com um ícone diferente.tipo de índice. É possível modificar o tipo de índice clicando no triângulo invertido e selecionando um valor diferente no menu pop-up. Descrição: tabela e campos do índice. Para um índice composto, esta lista contém todos os campos do índice.. - 198 - Nome: nome do índice. Esta propriedade é utilizada particularmente nos comandos de linguagem. Você pode alterar ou adicionar um nome de índice fazendo duplo clique nesta área. O botão mostra a caixa de diálogo de configuração do índice. O botão exclui o índice selecionado (aparece uma caixa de diálogo de confirmação). Este botão pode ser utilizado particularmente para excluir os índices compostos. Dois comandos adicionais são acessíveis através do menu associado ao botão de ferramentas (disponível quando um índice é selecionado): Modificar: exibe as propriedades do índice selecionado na caixa de diálogo de configuração do índice (ver o próximo parágrafo). Este comando tem o mesmo efeito que um clique duplo em uma linha da lista (exceto para a área do nome). Reconstruir: permite excluir e reconstruir o índice selecionado. Ao selecionar este comando aparece uma caixa de diálogo de confirmação. Criar um índice A maneira de criar um índice depende de seu tipo. Adicionalmente, você pode escolher criar um índice diretamente ou por meio da caixa de diálogo de criação de índices. Para criar diretamente um índice padrão: 1. Selecione um campo, logo selecione um valor no menu “Índice” da palheta do Inspector. OU Clique com botão direito no campo logo selecione um valor no sub-menu Índice>do menu contextual. Você dispõe de quatro opções: Árvore-B: cria um índice de tipo árvore-B clássico.. Árvore-B agrupada: cria um índice de tipo árvore-B utilizando clusters. Automático: 4D seleciona a arquitetura em função dos dados. Nenhum: nenhum índice ou eliminação do índice existente.. Para criar diretamente um índice de palavras chaves: - 199 - 1. Selecione um campo Alfa, Texto ou Imagem, logo selecione a opção “Índice de palavras chaves” no Inspetor de campo. OU Clique com o botão direito em um campo, logo selecione Palavras chaves no sub-menu índice> do menu contextual. Para criar um índice composto ou todo tipo de índice utilizando a caixa de diálogo de criação de índices:: 1. Selecione a opção Novo índice no menu contextual da tabela ou Índice no menu de adição de objetos da barra de ferramentas do editor. Ou Selecione vários campos enquanto pressiona o botão Ctrl (Windows) ou Command (OS X) logo faça clique direito em um dos campos e selecione Novo índice no menu contextual. A caixa de diálogo de configuração de índice aparece. Ela contém os seguintes elementos: Tabela: pronta todas as tabelas do banco. Escolha neste menu a tabela a qual pertencerá o índice. Nome: área de entrada do nome do índice. Este nome é utilizado pelos comandos de linguagem de 4D. Tipo: menu de seleção do tipo de índice a ser criado. Se você conservar a opção “Automática”, 4D escolherá automaticamente o tipo de índice em função do conteúdo do campo. Lista de campos: esta área é utilizada para especificar o(s) campo(s) associados ao índice. Pode conter um campo padrão dependendo da seleção atual no editor. Para adicionar um campo ao índice, clique no botão que se possa indicar o campo a adicionar ao índice. . A lista de campos da tabela selecionada é exibida de maneira Se deseja criar um campo composto, adicione cada campo a ser incluído no índice. Uma vez que a lista esteja completa, é possível reorganizar os campos utilizando as setas ou utilizando arrastar e soltar. Se criar um índice composto baseado nos campos da chave primária, tenha certeza de colocar os campos no mesmo ordem na chave primária e no índice. Se você escolheu o tipo “Índice de palavras chaves”, somente os campos Alfa ou Texto podem ser selecionados. Neste caso, você não pode incluir somente um campo no índice. Para excluir um campo do índice, selecione-o e clique no botão . Uma vez configurado o índice, clique em Aceitar para gerar o índice. Eliminar um índice no editor de estrutura Você pode excluir a qualquer momento um índice que já não seja útil. Esta operação pode ser efetuada diretamente no editor de estrutura ou utilizando a janela Lista de índices. Para maiores informações sobre a janela Lista de índices, consulte o parágrafo “listar índices” Para excluir um índice padrão: 1. Selecione o campo associado ao índice a ser excluído, logo escolha a opção Nenhum no menu Índice do Inspector.. OU 2. Clique com o botão direito no campo associado com o índice, logo escolha a opção Nenhum no sub-menu Índice do menu contextual. - 200 - Para excluir um índice de palavras chaves:: 1. Selecione o campo associado ao índice que deseja excluir, logo deselecione a opção “Palavras chaves” no Inspector. OU 2. Clique com o botão direito no campo associado ao índice, logo deselecione a opção Palavras chaves no sub-menu índice> do menu contextual. A eliminação (e visualização) de um índice composto só pode ser efetuada a partir da janela Lista de índices (utilizando o botão ). Reindexar um campo Você pode reindexar um campo a qualquer momento, ou seja, reconstruir as tabelas de índices associadas a ele, de acordo com os dados presentes. Isto pode ser útil na manutenção de aplicações. A reindexação pode ser efetuada através do comando Reconstruir da lista de índices (botão de ferramentas, ver acima). Lembre que modificar a linguagem dos dados (consultar Comparação de texto) ou operações de manutenção como compactar (ver Compactar) também causarão reindexação. - 201 - Criar e modificar Relações Pode criar ou excluir relações através do editor de estrutura ou através dos comandos SQL de 4D. Esta seção trata da criação de relações no ambiente Desenho. Para maior informação sobre o uso de instruções SQL em 4D, consulte o Manual de referência SQL de 4D. Criar uma relação Para criar uma relação entre duas tabelas trace manualmente uma linha entre dois campos ou utilizando o menu de adicionar objetos da barra de ferramentas. Para criar uma relação entre duas tabelas utilizando a janela do editor de estrutura: 1. Na janela de Estrutura, mova o mouse sobre o campo chave "estrangeiro" para a relação. 2. Mantenha pressionado o botão do mouse e arraste até a tabela com que será relacionado. A medida que move o mouse, 4D seleciona o campo e cria a relação, como mostrado abaixo: 3. Arraste ao campo chave primária na tabela Um e solte o botão do mouse. Para criar uma relação desde o menu de adição de objetos: 1. Selecione dois campos do mesmo tipo que pertençam a duas tabelas diferentes. 2. A ordem de seleção determinará a direção da relação. O primeiro campo selecionada é considerado como o campo chave estrangeira (campo Muitos) e o segundo como o campo Chave Primária (campo Um). 3. No menu de adição de objetos da barra de ferramentas do editor, selecione a opção Relação. 4D mostra a relação como uma flecha entre duas tabelas no editor de estrutura. A forma do conector de origem e fim, assim como os caracteres N e 1, indica a direção da relação: Inspetor mostra as propriedades da relação (ver a seção Propriedades de Relações). - 202 - Relações criadas com SQL A aparência das relações é diferente quando são geradas com SQL (conectores de quadrados): Eliminar uma relação 4D permite excluir uma relação a qualquer momento: 1. Selecione a relação a ser excluída. Quando se seleciona uma relação, seu contorno se torna azul. 2. Clique com o botão direito na relação e escolha o comando Excluir do menu contextual. OU Pressione Delete ou Backspace. Em ambos os casos, aparece uma caixa de diálogo de alerta que permite confirmar ou anular esta ação. Se você confirmála, 4D elimina a seta e as tabelas já não estarão relacionadas. Os possíveis índices dos campos Muitos e Um não são excluídos. Redefinir uma relação É possível redefinir uma relação a qualquer momento. Por exemplo, se por algum erro, você desenhar a relação entre campos equivocados ou se deseja alterar uma propriedade da relação, 4D permite redefinir uma relação simplesmente redesenhando a relação novamente. No caso de estruturas complexas, é possível selecionar os campos nas tabelas fonte e de destino de uma relação com ajuda dos comandos Selecionar campo fonte e Selecionar campo de destino, localizados no menu contextual da relação. Para redefinir uma relação utilizando os mesmos campos, faça duplo clique na relação no editor de estrutura. 4D mostra as propriedades da relação no Inspector para que se possa efetuar todas as alterações necessárias. Para redefinir uma relação utilizando um campo diferente da tabela Um, desenhe novamente a relação a partir do campo Muitos. Para redefinir uma relação utilizando um campo diferente na tabela Muitos, primeiro elimine a relação equivocada antes de desenhar a relação completa. - 203 - Tipos de relações O tipo de relação mais comumente usado é a relação entre uma tabela Muitos e uma tabela Um, chamada relação Muitos para Um. Entretanto, também pode criar relações Muitos a Muitos e Um a Um. Todas as relações podem ser manuais ou automáticas. Relações manuais e automáticas As relações podem ser automáticas ou manuais. Em uma relação automática, quando um registro em uma tabela relacionada se converte no registro atual, 4D seleciona o(s) registro(s) correspondentes. Estes registros especificados podem ser visualizados, impressos, modificados, ou utilizados para realizar pesquisas e ordenações. Não é necessário utilizar programação. Em uma relação manual, você pode exercer controle sobre a carga em memória dos registros correspondentes por parte de 4D. Para exercer este controle é necessário utilizar métodos. Para maiores informações sobre a criação de métodos que controlem tabelas relacionadas, consulte o Manual de Linguagem 4D. É possível utilizar uma relação manual se você deseja otimizar o rendimento de aplicações especificas que não necessitem carregar todos os registros correspondentes de uma vez. Por exemplo, se sua estrutura relaciona 3 ou mais tabelas, você poderia querer controlar quando carregar os registros relacionados em memória. É possível utilizar uma relação manual se você deseja relacionar duas tabelas com duas relações diferentes. Só pode existir uma relação automática entre duas tabelas, enquanto que o número de relações manuais entre duas tabelas não tem limite. Relações Muitos a Um Ao criar uma relação entre duas tabelas, a tabela que contém a chave primária na relação é chamada de tabela Um e a tabela contendo a chave estrangeira na relação é chamada de tabela Muitos. As tabelas se denominam Um e Muitos porque em um registro da tabela Um está relacionado com muitos registros da tabela Muitos e muitos registros da tabela Muitos estão relacionados com um registro da tabela Um. Este tipo de relação é denominado relação Muitos para Um. Em uma relação entre empregados e empresas, a tabela [EMPRESAS] é a tabela Um e a tabela [EMPREGADOS] é a tabela Muitos. O registro de uma empresa está relacionado com vários empregados (todos os empregados desta empresa) e vários empregados estão relacionados com uma empresa (a empresa para qual trabalham). Por exemplo, pode haver um registro correspondente a empresa Acme na tabela [EMPRESAS] e vários registros de pessoas empregadas por Acme na tabela [EMPREGADOS]. Quando um registro da tabela [EMPREGADOS] se converte no registro atual, 4D carrega o registro correspondente da tabela [EMPRESAS]. Se alguns campos foram incluídos a partir da tabela [EMPRESAS], os valores destes campos são publicados automaticamente. A imagem a seguir mostra como o nome da empresa em um registro da tabela [EMPREGADOS] especifica um registro da tabela [EMPRESAS] de maneira que o registro da tabela [EMPREGADOS] pode exibir o endereço e o número telefônico da empresa. - 204 - Por outro lado, quando um registro da tabela [EMPRESAS] se converte no registro atual, 4D cria uma seleção de registros da tabela [EMPREGADOS] e os exibe no formulário. Como a relação especifica diversos registros na outra tabela, os nomes e cargos de muitos empregados podem ser exibidos. Somente registros atualmente exibidos no formulário estão carregados na memória. A imagem a seguir mostra como o nome de uma empresa em um registro da tabela [EMPRESAS] especifica vários registros da tabela [EMPREGADOS] de maneira que o registro da tabela [EMPRESAS] possa mostrar uma lista de pessoas empregadas por esta empresa. A diferença entre a tabela Um e a tabela Muitos é própria de cada relação. Uma tabela pode ser a tabela Um em uma relação e pode ser a tabela Muitos em outra relação. Uma tabela em uma relação só necessita ter uma chave primária, mas pode ter várias chaves estrangeiras. Por exemplo, suponha que você decide enviar um pacote de mercadoria de amostra para todas as pessoas da tabela [EMPREGADOS]. Você adiciona uma tabela [Tarifa_Postal] que contém os códigos postais e a tarifa postal para cada código postal. O uso desta estrutura lhe permite imprimir as etiquetas para cada pessoa, incluindo o valor para enviar o pacote. A imagem abaixo mostra a tabela [Tarifa_Postal] adicionada à estrutura do banco de dados. - 205 - O campo Código_Postal da tabela [CODIGOS_POSTAIS] é a chave primária, assim que nesta relação, a tabela [Tarifa_Postal] é a tabela Um. O campo CodigoPostal na tabela [EMPRESAS] é a chave estrangeira para esta relação: neste caso, podem ter valores duplicados para empresas que estão em uma mesma área. A tabela [EMPRESAS] é então a tabela Muitos para a relação com a tabela [CODIGOS_POSTAIS]. Uma tabela é uma tabela Um ou Muitos dependendo da relação com a outra tabela. A tabela [EMPRESAS] é a tabela Muitos na relação com a tabela [CODIGOS_POSTAIS] e é a tabela Um na relação com a tabela [EMPREGADOS]. Relações Um a Um As relações Um a Um são utilizadas apenas em casos especiais, já que as tabelas relacionadas por esse tipo poderiam ter sido combinadas em uma só tabela. Algumas das razões para utilizar relações Um a Um são: Seu banco tem dados de tipo Texto, Imagem ou BLOB muito grandes. Estes campos poderiam fazer com que o banco de dados fique lento se são carregados na memória quando um registro é convertido no registro atual. Ao colocar os textos, imagens, ou BLOBS em outra tabela, pode carregar na memória apenas os dados de que necessita, e dessa forma otimizar o funcionamento do banco. Seu banco contém um número muito grande de campos e necessita dividir os campos em grupos lógicos. As tabelas separadas podem tornar o banco de dados mais rápido e fácil de usar. Para limitar o acesso a certos campos. Utilizando tabelas separadas, pode atribuir diferentes privilégios de acesso para cada tabela. Relações Muitos a Muitos Algumas vezes, é necessário relacionar muitos registros em uma tabela com muitos registros em outra tabela. Este tipo de relação é conhecida como relação Muitos para Muitos. Um exemplo de uma relação Muitos para Muitos é um banco de dados que faz o acompanhamento das matrículas de estudantes. Imagine que este banco tem duas tabelas: [Estudantes] e [Matérias]. Um estudante pode se inscrever em várias matérias e uma matéria pode ter vários estudantes. Você deseja ver as matérias em que o estudante se matriculou e todos os estudantes matriculados em uma matéria. Outros exemplos de relações Muitos para Muitos são: [Fornecedores] e [Produtos]: cada fornecedor fornece diferentes produtos e cada produto pode ser fornecido por diferentes fornecedores. [Empregados] e [Contas]: cada empregado trabalha em diferentes contas e cada conta pode ser utilizada por diferentes empregados. [Filmes] e [Atores]: cada filme reúne diferentes atores e cada ator pode participar de diferentes filmes. É possível utilizar 4D para criar automaticamente relações Muitos para Muitos. A chave é criar uma tabela intermediária relacionada a outras tabelas utilizando relações Muitos para Um. Logo é possível criar os formulários de entrada e saída para controlar o acompanhamento e visualização de dados. Esta seção descreve o uso das relações automáticas para administrar uma relação Muitos para Muitos. A imagem a seguir mostra o banco de dados de inscrições com três tabelas, [ESTUDANTES], [MATERIAS] e [MATRÍCULAS]. Esta seção utiliza a estrutura deste banco de dados para explicar como funcionam as relações Muitos para Muitos. - 206 - A tabela [ESTUDANTES] é uma tabela Um. Contém um registro por cada estudante, incluindo seu nome, sobrenome e média escolar. Seu Código de Estudante o o identifica de maneira única. A tabela [MATÉRIAS] também é uma tabela Um. Contém um registro para cada matéria, incluindo o nome da matéria e o professor. O campo Código da Matéria identifica cada matéria de maneira única. Uma tabela intermediária, a tabela [MATRÍCULA], é a tabela Muitos para as outras duas tabelas. Contém registros de vários estudantes e matérias. Os formulários desta tabela são utilizados para entrada e exibição de dados de outras duas tabelas. O uso de três tabelas assegura que os dados sejam armazenados eficientemente. O registro completo de um estudante só é armazenado uma vez. Os registros que relacionam os estudantes e as classes são armazenados uma vez por cada inscrição. Toda a informação está disponível em qualquer combinação. Entrar dados com relações Muitos a Muitos É utilizada uma tabela intermediária, neste exemplo a tabela [MATRICULAS], para introduzir e mostrar informação das outras duas tabelas. Cada registro introduzido na tabela [ESTUDANTE_MATERIA] está relacionado com as outras tabelas (ESTUDANTES e MATERIAS). Os registros da tabela [MATRICULAS] só contém as duas partes de informação que estabelece a relação: a identificação do estudante e o nome da matéria. Este é um exemplo de um registro que está sendo introduzido na tabela [MATRICULAS]: Este registro indica que o estudante José da Silva está inscrito na classe de programação avançada. Este registro combina informação da outras duas tabelas. Um registro similar existe por cada matéria na qual o estudante haja feito inscrição. Na tabela [MATRICULAS] só estão armazenados os campos de identificação do estudante e o nome da matéria. Cada registro indica a inscrição de um estudante em particular a uma matéria específica. Nota: Quando um registro da tabela [MATRICULAS] é carregado (como durante sua criação), é criado automaticamente uma seleção de registros nas tabelas relacionadas. A seleção está composta pelos registros de estudantes e matérias correspondentes. Ao abrir cada uma das outras tabelas, você constatará que só se mostra um registro. Para mostrar todos os registros, selecione Exibir todos no menu Pesquisas. O formulário de entrada para este registro é mostrado a seguir. Note que contém campos das tabelas [ESTUDANTES] e [MATERIAS]. - 207 - Os dados são introduzidos unicamente nos campos de identificação do estudante e da matéria. Quando se introduz a identificação de um estudante, 4D busca a informação do estudante na tabela relacionada [ESTUDANTES] e a exibe nos campos Sobrenome e Nome. Igualmente, quando se introduz a identificação da matéria, 4D busca a informação na tabela relacionada [MATERIAS] e a exibe no formulário de entrada. Exibir informação usando um sub-formulário É possível exibir informação destas três tabelas utilizando sub-formulários. No registro do estudante, é possível exibir todas as matérias nas quais está inscrito. É possível exibir todos os estudantes inscritos em uma classe particular a partir do registro da classe.. Para mostrar a lista de matérias no registro de um estudante, utilize um sub-formulário. Para maiores informações sobre a criação de sub-formulários, consulte a seção Criar e definir um subformulário. O registro da imagem anterior está na tabela [ESTUDANTES]. É exibida a informação do estudante na parte superior, e o sub-formulário na parte inferior mostra a informação das matérias inscritas, trazida da tabela [MATRICULAS]. Note que o sub-formulário corresponde à tabela [MATRICULAS], não à tabela [MATERIAS]. A tabela [MATRICULAS] contém os registros que conectam os dados do estudante com os dados das matérias. Os sub-formulários contém o campo Nome da matéria [MATERIAS]. Devido à relação entre as tabelas [MATRICULAS] e [MATERIAS], 4D pode mostrar o nome da matéria automaticamente. Este é um exemplo de um registro que exibe a lista de estudantes matriculados em uma classe: - 208 - Este é um registro da tabela [MATERIAS]. Exibe informação da matéria e a lista de estudantes inscritos. A informação dos estudantes também é trazida da tabela [MATRICULAS], que contém os registros que relacionam as classes com os estudantes inscritos nelas. Nos exemplos anteriores de sub-formulários, você pode introduzir dados em todos os campos exibidos. Por exemplo, para introduzir o registro de um novo estudante, coloque o cursor no último registro do sub-formulário e pressione as teclas Ctrl + Shift + /: (Windows) ou Comando+ Shift + / (Mac OS) para criar um novo registro (você pode mudar o atalho em Propriedades do Banco de dados, consulte ). Quando introduzir o nome da matéria, o resto da informação é introduzido automaticamente no registro. Análise das relações do banco de dados As relações estabelecidas em um banco de dados têm um papel muito importante no funcionamento do banco controlando o fluxo de dados entre as tabelas. Se um registro com uma relação automática é carregado em um formulário de entrada, os registros da tabela relacionada correspondente serão selecionados. Se a relação seleciona somente um registro em uma tabela relacionada, esse registro será carregado a partir do disco. Se a relação faz referência a vários registros, uma nova seleção atual de registros será criada para esta tabela e será carregado o primeiro registro dessa seleção. O registro que é carregado se chama registro atual da tabela. Nos exemplos deste capítulo, foram definidas relações entre não mais que três tabelas. Em realidade, com freqüência se definem relações entre várias tabelas e se ativa uma relação, 4D cria uma seleção de registro na tabela relacionada e carrega um registro. O registro carregado é convertido no registro atual para a tabela e se a tabela tem uma relação automática, 4D cria uma nova seleção na tabela seguinte da cadeia, e assim por diante. Se as relações das tabelas não foram definidas cuidadosamente, o fluxo de informação entre as tabelas pode chegar a ser desordenado ou incorreto. Os casos a seguir ilustram estruturas relacionais as quais é necessário prestar muita atenção. Relações circulares Uma relação circular é um conjunto de relações definidas de maneira que a transferência de dados forme um loop indefinidamente. A imagem a seguir lhe mostra uma relação circular na qual a tabela [EMPREGADOS] está relacionada a tabela [EMPRESAS], que por sua vez está relacionada a tabela [SEGURADORA], que volta a se relacionar com a tabela [EMPREGADOS]. - 209 - Quando um registro da tabela [EMPREGADOS] é carregado, 4D carrega o registro correspondente da tabela [EMPRESAS]. Este registro é convertido no registro atual da tabela [EMPRESAS], o que implica a carga do registro relacionado da tabela [SEGURADORA]. Se as relações tivessem permissão para continuar, os registros relacionados com esta seguradora (todas as pessoas asseguradas pela empresa) seriam selecionadas na tabela [EMPREGADOS] e o primeiro registro dessa seleção se converteria no registro atual. Observe que este registro atual pode ser diferente ao registro atual que tinha inicialmente quando se iniciou a progressão. Neste caso, 4D não tem como saber qual o verdadeiro registro atual. Quando 4D encontra este tipo de relações circulares, as relações entre as tabelas são detidas na última tabela na última tabela na cadeia. Neste caso, a relação entre as tabelas [SEGURADORA] e [EMPREGADOS] não é realizada. Relações múltiplas para a mesma tabela Um conflito similar entre registros atuais ocorre se existe mais de um link a mesma tabela. Como não é possível ter mais de um registro atual por vez, não é possível controlar uma relação automática na qual duas ou mais tabelas estão relacionadas com a mesma tabela. A imagem a seguir mostra uma estrutura de banco de dados na qual uma tabela e sua sub-tabela estão relacionadas com a mesma tabela. Quando um usuário está trabalhando com um registro da tabela [EMPREGADOS], o registro relacionado da tabela [SEGURO] é carregado e se converte no registro atual para esta tabela. Entretanto, também existe uma relação entre a sub-tabela [BENEFICIARIOS] e a tabela [SEGURO]. Isto significa que outro - 210 - registro relacionado é carregado na tabela [SEGURO] de acordo com o sub-registro atual da tabela [BENEFICIARIOS] (o primeiro registro da seleção atual). Se a empresa asseguradora dos beneficiários é diferente a de seus pais, esta estrutura relacional causará problemas. Neste caso, 4D não detém a execução das relações. Ambas as relações são executadas, mas não ao mesmo tempo. Se você deseja utilizar uma estrutura deste tipo, deve utilizar relações manuais e controlar as relações utilizando os comandos descritos no Manual de linguagem de 4D. Outro exemplo de uma estrutura relacional que não pode ser controlada com relações automáticas é a de uma estrutura na qual uma tabela tem mais de uma relação com outra tabela. Cada vez que um usuário modifique um dos campos relacionados na tabela 1, o registro atual da outra tabela Muitos vai ser alterado. Neste caso, você não pode saber que relação esta sendo ativada. Relações de múltiplos registros Como existe um registro atual em cada tabela, as relações não estão estabelecidas para todos os registros de uma seleção. Observemos por exemplo o banco de faturamento que é exibido a seguir: Quando um registro da tabela [FATURAS] é utilizado, é criada uma seleção de registros na tabela [LINHA_FATURA] que contém todas as linhas para esta fatura. Só é carregado o registro da tabela [ITENS] correspondente ao primeiro registro da tabela [LINHA_FATURA]. A seleção atual da tabela [ITENS] não contém informação sobre todos os objetos da fatura, só sobre o primeiro objeto da fatura. Entretanto, se você coloca a tabela [LINHA_FATURA] em um sub-formulário na tabela [FATURAS], 4D chama cada uma das linhas de faturamento e ativa a relação para cada uma delas. - 211 - Propriedades de Relações Sempre se desenha uma relação da tabela Muitos a tabela Um. Os campos relacionados devem ser do mesmo tipo. É possível utilizar estes tipos de campos para os campos chave primária e chave estrangeira: string (Alfa e Texto) numérico (Real, Inteiro, Inteiro longo, Inteiro 64 bits e Float), Hora Booleano Data Os campos chave primária em geral estão indexados (não obrigatório). As propriedades da relação podem ser configuradas usando Inspetor ou, em certos casos, usando o menu contextual que aparece quando você clica numa relação com o botão direito. Definição A área de definição identifica os campos chaves estrangeira e primária. De: O campo “De” é o campo chave estrangeira da tabela Muitos para esta relação. No menu contextual, este campo se chama “campo fonte.” Até: O campo “Até” é o campo chave primária da tabela Um. No menu contextual, este campo se chama “campo destino”. Você traça a relação do campo chave estrangeira da tabela Muitos até o campo chave primária na tabela Um. Cor: Este menu pop up permite definir a cor de uma relação tal como será exibida no editor de estrutura. A cor de uma - 212 - relação não está associada as suas propriedades. A cor de uma relação também pode ser definida utilizando o menu contextual das relações. Opções de Muitos a Um As opções Muitos para Um permitem definir o funcionamento da relação quando se abre um registro da tabela Muitos. Nome: Área de entrada do nome da relação Muito para Um (opcional). Nota: como parte de um link 4D Mobile, este nome se utiliza para criar um atributo relacional correspondente no modelo junto Wakanda (ver Uso de relações no manual 4D Mobile). Neste caso, deve utilizar um nome que é compatível com as regras JavaScript. Manual/Automática: Este menu permite definir o modo de funcionamento da relação que associa a tabela Muitos a tabela Um. Ao selecionar a opção Automática, as funções de automatização serão ativadas. Por exemplo, quando um registro da tabela [EMPREGADOS] é aberto no ambiente Aplicação, o registro da empresa correspondente é selecionado na tabela [Empresas]. Isto permite a 4D mostrar a informação sobre a empresa para a qual trabalha o empregado. Por padrão, é selecionada a opção Manual. Neste caso, você deve administrar a carga e descarga do registro relacionado da tabela Um utilizando as rotinas da linguagem. Para maiores informações, consulte o parágrafo Relações manuais e automáticas. A propriedade Relação automática Um também pode ser definida através do menu contextual das relações. Lista de registros relacionados: Esta opção tem o efeito de inserir, automaticamente e de maneira invisível, o caractere (@) a todo valor introduzido na tabela Muitos quando o usuário pressiona a tecla Tab ou clica fora do campo. Se o usuário introduz um valor parcial, 4D busca um valor correspondente no campo relacionado da tabela Um. Se o programa encontra somente um valor possível, completa a entrada. Se for encontrado mais de um valor possível, dá ao usuário a lista de valores possíveis. Advertir se registro Um não existe: Se esta opção estiver selecionada, 4D mostra uma caixa de diálogo que permite ao usuário criar o registro Um relacionado se não existir. Por padrão, quando você introduzir um valor em um campo relacionado da tabela Muitos, 4D verifica se existe um registro correspondente na tabela Um relacionada. Se 4D não o encontra, aparece a caixa de diálogo a seguir: Esta caixa de diálogo permite criar um registro correspondente na tabela Um enquanto introduz um registro na tabela Muitos. Por exemplo, imagine que seu banco contém uma tabela [Faturas] e uma tabela [Clientes]. Se você introduzir uma fatura na tabela [Faturas] e o cliente a quem está destinada a fatura não tem um registro correspondente na tabela [Clientes] quando valide o registro da tabela [Faturas]. É possível eliminar esta caixa de diálogo deselecionando a opção Advertir se registro Um não existe. Eliminar esta caixa de diálogo é útil quando se deseja controlar a criação do registro Um relacionado utilizando um método. Campo discriminante A lista de campos discriminantes permite selecionar um campo adicional para mostrar na lista de valores (que aparece quando usuário escreve o caractere curinga (@) no campo relacionado durante a entrada de dados). Geralmente, é melhor selecionar o campo que melhor identifique ao registro. Assim é como funciona esta opção durante a entrada de dados: 4D permite ao usuário consultar os valores da tabela Um enquanto introduz dados no campo chave estrangeira na tabela Muitos. O usuário simplesmente usa o caractere curinga (@) padrão no campo relacionado. Ao fazê-lo, 4D busca a entrada correspondente na tabela Um relacionada. O caractere curinga pode ser utilizado de duas formas: para completar uma entrada parcial ou para mostrar a lista de valores válidos. Quando se mostra uma lista, o usuário pode selecionar o valor da lista. Um campo adicional, o campo discriminante, pode ser mostrado junto ao campo relacionado. Por exemplo, imagine que o usuário está criado um registro na tabela [Empregados]. Em vez de escrever Acme no campo Empresa, o usuário pode escrever Ac@ e logo pressionar a tecla Tab para passar ao próximo campo. Como @ é o caractere curinga de 4D, esta entrada significa que “o valor começa por “Ac” e está seguido por outros caracteres”. 4D busca na tabela relacionada o registro que corresponda a este critério. Se só encontra um registro, completa a entrada automaticamente e passa o próximo campo na ordem de entrada do formulário. A imagem a seguir mostra este tipo de uso dos caracteres curinga. - 213 - Se 4D encontra mais de um valor que corresponda ao critério, mostra uma lista de valores para que o usuário possa selecionar o valor apropriado. A imagem a seguir mostra a lista: É possível especificar um segundo campo que será mostrada na lista para ajudar ao usuário a decidir que empresa selecionar. O segundo campo é o campo discriminante que você selecionou na caixa de diálogo de definição do tipo de relação. A imagem a seguir mostra a lista de empresas junto com sua cidade. Este campo discriminante ajuda ao usuário a selecionar a entrada correta se não se lembra o nome da empresa, mas se lembra a cidade em que está localizada. Para ver uma listagem completa de todas as empresas na tabela [Empresas], o usuário digita apenas @. 4D exibe uma lista de todas as companhias para que o usuário escolha a correta. A figura abaixo mostra uma lista de companhias sendo exibida: - 214 - A janela de seleção de registros pode ser redimensionadas. Para ver uma lista de todas as empresas na tabela [Empresas], o usuário deve escrever @ unicamente. 4D mostra uma lista de todas as empresas para que o usuário selecione a correta. Opções Um para Muitos As opções Um para Muitos controlam as relações automáticas em sentido contrário. Nome: Área de entrada do nome da relação Um para Muitos (opcional). Nota: como parte de um link 4D Mobile, este nome se utiliza para criar um atributo relacional correspondente no modelo junto Wakanda (ver Uso de relações no manual 4D Mobile). Neste caso, deve utilizar um nome que é compatível com as regras JavaScript. Manual/Automática: Este menu permite definir o modo de funcionamento da relação que une a tabela Um a tabela Muitos. Se você selecionar a opção Automática, as funções automáticas serão ativadas. Por exemplo, quando um registro da tabela [Empresas] se abre em modo Aplicação, os registros relacionados na tabela [Empregados] são carregados. Isto permite a 4D mostrar os registros dos empregados que trabalham para a empresa em um subformulário.Por padrão, a opção Manual é selecionada (não as funções automáticas). Para maiores informações, consulte o parágrafo Relações manuais e automáticas. A propriedade Relação automática Um para Muitos também pode ser definida através do menu contextual das relações. Autoatribuir valor no subformulário: Esta opção é utilizada para atribuir automaticamente o valor do campo chave primária na tabela Um ao campo chave estrangeira na tabela Muitos durante a entrada de dados. Esta opção só aparece disponível se a opção Automática tiver sido selecionada. Esta opção afeta a entrada de dados quando um formulário de entrada de uma tabela Um tem um sub-formulário de uma tabela Muitos relacionada (para maiores informações sobre sub-formulários, consulte a seção Subformulários e widgets). Se a opçãoAutoatribuir valor no subformulário estiver selecionada, um usuário pode adicionar registros ao sub-formulário (ou seja, a tabela Muitos relacionada) e ter o valor relacionado automaticamente atribuído aos campos da tabela relacionada. Na relação entre a tabela [Empresas] e a tabela [Empregados], a tabela [Empresas] é uma tabela Um e a tabela [Empregados] é a tabela Muitos relacionada. Cada empresa tem um registro na tabela [Empresas] e vários registros na tabela [Empregados]. Quando o campo chave estrangeira da tabela Muitos é exibido no sub-formulário, você pode ver o efeito desta opção: o valor do campo é copiado automaticamente no sub-formulário cada vez que se adiciona um sub-registro. - 215 - Esta opção também funciona quando o campo chave estrangeira da tabela Muitos não se apresenta no sub-formulário: o valor do campo chave primária é copiado automaticamente “internamente” no campo chave estrangeira. É possível verificá-lo passando ao modo página. Quando a opção Autoatribuir valor no subformulário não estiver selecionada, os sub-registros criados não são relacionados automaticamente ao registro apropriado da tabela Muitos. Neste caso, você deve associar o subregistro: seja manualmente, se mostra o campo chave: no exemplo anterior, foi suficiente introduzir “Telcon” no campo empresa de cada sub-registro, ou por programação: só é necessário executar uma linha de código do tipo TableN]Field1:=[Table1]Field1 durante a criação de sub-registros. Nota: Ao modificar o valor do campo relacionado na tabela Um depois de criar registros na tabela Muitos, a opção Designação automática do valor relacionado com subformulários não tem efeito e você deverá atribuir o valor do campo relacionado manualmente ou utilizando a linguagem. Integridade Referencial As opções de Integridade referencial controlam a eliminação de registros na tabela Muitos ao excluir um registro na tabela Um. Normalmente, o usuário não pode eliminar registros em uma tabela a menos que seja a tabela atual. Isto significa, por exemplo, que para excluir registros na tabela [Empregados], primeiro você deve convertê-la na tabela atual. Para transformar uma tabela na tabela atual, selecione-a na caixa de diálogo Lista de tabelas no ambiente Desenho. Deixar registros selecionados intactos: Selecionar este botão opção permite ao usuário excluir um registro da tabela Um, deixando intactos os registros correspondentes da tabela Muitos. Isto deixa registros da tabela Muitos sem correspondência com um registro relacionado da tabela Um. O único efeito é fazer com que a informação da tabela Um não esteja disponível. Nenhum registro da tabela Um é carregado quando um registro correspondente aos registros eliminados é carregado na tabela Muitos. Eliminar registros relacionados: Selecionar este botão lhe indica a 4D que deve excluir automaticamente todos os registros relacionados na tabela Muitos quando um usuário elimine um registro da tabela Um. Esta opção assegura que os registros Muitos relacionados não sejam convertidos em “órfãos” quando se elimine o registro Um correspondente.. Não eliminar se há registros relacionados: Selecionar este botão radio impede que o usuário elimine um registro da tabela Um se existirem registros relacionados na tabela Muitos. Esta opção permite assegurar que os registros não sejam eliminados por equivocação. Note que é possível excluir registros livremente da tabela Muitos, sem importar a opção selecionada. Os botões de opção Eliminar registros relacionados e Não eliminar se há registros relacionados reforçam o que é conhecido como integridade referencial na teoria dos bancos de dados. Quando o controle de integridade referencial está vigente, 4D se assegura que cada registro da tabela Muitos esteja associado a um registro único da tabela Um. Se existirem várias tabelas relacionadas, o controle de integridade referencial é ativado para cada relação como uma cadeia. Por exemplo, imagine que você tenha a estrutura a seguir. Se você eliminar um registro da tabela [CODIGOS_POSTAIS] (tabela Um) e a opção Excluir registros relacionados tiver sido selecionada para cada relação, 4D primeiro elimina os registros correspondentes da tabela [EMPRESAS] e logo elimina os registros de todos os empregados que trabalham para essas empresas na tabela [EMPREGADOS]. - 216 - Quando há uma configuração contraditória de controle de integridade referencial, 4D não permite a eliminação de registros. Por exemplo, se você tiver selecionada a opção Eliminar registros relacionados para a relação entre as tabelas [EMPRESA] e [CODIGOS_POSTAIS], mas tem selecionada a opção Não eliminar se há registros relacionados para a relação entre as tabelas [EMPREGADOS] e [EMPRESAS], não será efetuado nenhuma eliminação e os registros das tabelas [EMPRESAS] e [EMPREGADOS] permanecerão intactos. SQL A área SQL do Inspector oferece informação útil para trabalhar com a estrutura através da linguagem SQL. Para as relações, a área indica as propriedades FOREIGN KEY e REFERENCES. - 217 - Exportar e importar definições de estrutura 4D permite exportar a definição da estrutura do banco de dados como arquivo XML ou HTML. Do lado contrário, é possível utilizar uma definição de estrutura guardada em formato XML para gerar rapidamente um novo banco de dados 4D. Estas novas possibilidades respondem a diferentes necessidades: permitir representar estruturas em formatos personalizados (relatórios, tabelas, etc.) ou para serem analisadas em outros ambientes, permitir gerar bancos de dados a partir de arquivos de descrição. Formato de uma definição de estrutura 4D As definições de estrutura 4D estão baseadas no formato XML. É possível visualizar uma definição de estrutura com a ajuda de um simples editor de texto. O formato XML permite igualmente prever todo tipo de uso em particular através das transformações XSL. Além disso, 4D utiliza um arquivo .XSL para exportar a definição de estrutura em formato HTML. Uma definição de estrutura inclui tabelas, campos, índices e relações, junto com seus atributos e as diferentes características necessárias para uma descrição completa da estrutura. A “gramática interna” das definições de estrutura 4D está documentada por intermédio de arquivos DTD, também utilizados para a validação de arquivos XML. Os arquivos DTD utilizados por 4D são agrupados na pasta DTD localizada junto a aplicação 4D. Os arquivos banco_core.dtd e common.dtd são utilizados para a definição da estrutura. Para maiores informações sobre as definições de estrutura 4D, consulte estes arquivos, como também os comentários que eles contêm. Exportar uma definição de estrutura 4D permite exportar uma estrutura em formato XML ou HTML. Escolha o formato que mais se ajuste a suas necessidades: Formato XML: uma estrutura em formato XML pode ser visualizada em um simples editor de texto ou utilizada de várias formas (transformação XSL personalizada, importação e análises em outro software, etc.). Escolha este formato quando desejar utilizar a definição de estrutura para criar novos bancos. Formato HTML: este formato lhe permite a representação da estrutura em forma de relatório, visualizável e imprimível através de um navegador. Para exportar uma definição de estrutura em XML: 1. Selecione o comando Exportar > Definição de estrutura a um arquivo XML... no menu Arquivo de 4D. Aparece uma caixa de diálogo padrão de registro, de modo que é possível especificar o nome e a localização, como também o tipo do arquivo a ser exportado. 2. Especificar o nome e a localização da exportação e logo validar a caixa de diálogo. Para exportar uma definição de estrutura em HTML: 1. Selecione o comando Exportar > Definição de estrutura a um arquivo HTML… no menu Arquivo de 4D. Aparece uma caixa de diálogo de seleção de pastas de modo que é possível escolher a localização onde serão armazenados os arquivos HTML. 2. Clique no botão Criar uma nova pasta ou especifique uma pasta existente. 4D cria automaticamente, na localização especificada, uma pasta chamada “Mystructure.4db Structure Export” ) que contém os elementos exportados (Mystructure.4db é o nome do arquivo de estrutura do banco). Uma caixa de diálogo permite visualizar diretamente o resultado da exportação no navegador padrão. As definições de estrutura em formato HTML são vistas dessa forma: - 218 - Personalizar a transformação XSL Para gerar as páginas HTML de definição de estrutura, 4D efetua as transformações XSL padrões utilizando o arquivo “Structure_to_html.xsl” localizado na sub-pasta /Resource/language.lproj da aplicação. Nota: Se este arquivo não estiver presente, a exportação em HTML não estará disponível na caixa de diálogo de exportação. É possível personalizar estas transformações como desejar utilizando um arquivo de folhas de estilo XSL personalizado. Para fazer isto, simplesmente crie um arquivo chamado “Structure_to_html.xsl” (você pode duplicar o arquivo padrão) e colocá-lo no mesmo nível do arquivo .4db. 4D utilizará então este arquivo para gerar a definição de estrutura em formato HTML. Criar um banco de dados de uma definição de estrutura As definições de estruturas exportadas em formato XML podem ser utilizadas para criar rapidamente novos bancos de dados idênticos. Neste caso, a definição de estrutura pode ser considerada como um modelo de estrutura, que é possível duplicar. Uma definição de estrutura XML pode ser utilizada como tal ou ser modificada antes através de um editor XML. Isso permite o uso de todo tipo de mecanismo usado para gerar estruturas por programação. Além disso, como o formato interno da definição de estrutura de arquivos XML 4D é público (ver a seção “Format of a 4D Structure Definition”), é possível criar este tipo de arquivo a partir de outros ambientes de bancos de dados ou a partir de qualquer aplicação para gerar automaticamente bancos de dados 4D. Para criar um banco de dados a partir de uma definição de estrutura: 1. Selecione o comando Novo > Banco de dados a partir de uma definição de estrutura... no menu Arquivo de 4D. Aparece uma caixa de diálogo padrão de abertura de documentos de maneira que é possível especificar o arquivo de descrição a ser aberto. Você deve selecionar um arquivo em formato XML que respeite a gramática das descrições de estrutura de 4D (o programa valida o arquivo através da DTD). 2. Selecione um arquivo XML de descrição de estrutura e logo clique em Aceitar. 4D exibe uma caixa de diálogo que lhe permite escolher o nome e a localização do banco de dados a ser criado. 3. Escolha o nome e a localização do banco a ser criado e logo clique em Salvar Se o arquivo XML é válido, 4D fecha o banco atual (se aplica) e cria uma nova estrutura baseada na definição de estrutura e mostra janela do Explorador. Também é criado um arquivo padrão de dados vazio. - 219 - Gerenciar Formulários Visão Geral Criar um formulário com o assistente de formulário Criar um formulário em branco Editar um formulário Renomear um formulário Definir formulários de entrada e saída Eliminar um formulário Imprimir um formulário Salvar formulários - 220 - Visão Geral Os formulários constituem a interface através da qual a informação pode ser introduzida, consultada, modificada e impressa. Um usuário interage com os dados de um banco e imprime relatórios utilizando formulários. Em aplicações personalizadas, você pode usar formulários para criar palhetas e caixas de diálogo específicas. Cada tabela em seu banco de dados tem, em geral, ao menos dois formulários. Um para mostrar uma lista de registros na tela e outro para mostrar um registro de cada vez, também utilizado para introduzir e modificar dados. O formulário que lista os registros se chama formulário de saída ou formulário listado e o formulário que mostra um registro de cada vez se chama formulário de entrada ou formulário detalhado. Quando se visualiza os registros utilizando o formulário listado, você pode fazer um clique duplo sobre um registro para vê-lo no formulário detalhado atual. Conteúdos de formulários Nas aplicações personalizadas, é possível usar a linguagem para definir qual formulário utilizar. Por exemplo, seria possível querer passar de um formulário a outro segundo o tipo de tela que utilize o usuário. Também poderia utilizar a linguagem para utilizar diferentes conjuntos de formulários para os usuários de 4D Client ou de um navegador web. Quando cria uma aplicação personalizada, pode criar formulários para serem utilizados como caixas de diálogo personalizadas ou palhetas flutuantes. Nas aplicações personalizadas, pode utilizar vários processos para permitir aos usuários trabalhar simultaneamente com vários formulários. Um formulário pode mostrar os campos de várias tabelas. Pode pôr os campos de uma tabela relacionada Um em um formulário e dessa forma permitir aos usuários introduzir valores diretamente na tabela Um relacionada. Também pode incluir um sub-formulário que mostre uma lista de registros de uma tabela Muitos relacionada. Um sub-formulário mostra uma lista de registros de outra tabela ou subtabela na tabela master. Com um sub-formulário, o usuário pode ver, introduzir e modificar os registros de outra tabela. Por exemplo, uma aplicação de faturação e cobrança pode utilizar um sub-formulário de faturação que permita ao usuário introduzir elementos para a fatura. Mesmo que as linhas da fatura apareçam na tela de faturação, elas são armazenadas em uma tabela Muitos relacionada. Um formulário que é utilizado para a entrada de dados pode ter mais que um sub-formulário. Por exemplo, um banco de dados que administre os contatos pode utilizar um sub-formulário para os números de telefone, outro para as ações a realizar e outro para os contatos anteriores com essa pessoa. Cada sub-formulário mostra os registros de uma tabela relacionada "Muitos" diferente. Um formulário particular pode utilizar alguns ou todos os campos de uma tabela. Por exemplo, você poderia ter dois formulários de entrada, um para operários e outro para supervisores, e nenhum dos dois formulários utilizar todos os campos. Poderia usar outro grupo de campos para mostrar em tela e outros para imprimir relatórios. Os formulários podem ser modificados a qualquer momento, sem importar se têm ou não dados no banco de dados. As mudanças nos formulários não afetam de nenhuma forma os dados armazenados em disco. Cada formulário tem um ou mais páginas onde aparecem os campos e objetos editáveis. Se seus campos não cabem em uma página, pode criar páginas adicionais. Quando criar um formulário multipáginas, pode adicionar abas ou botões para permitir aos usuários passar de uma página a outra. Cada formulário tem uma página de fundo (página zero) na qual você coloca os objetos que aparecem em todas as páginas. Use essa página para colocar elementos gráficos de fundo, botões, abas e outros elementos gráficos que definam a "aparência" da página, tais como etiquetas e retângulos. Nota: quando um formulário de tabela multipáginas é utilizado como formulário de saída (por exemplo, para impressões), apenas aparece a primeira página. Criar formulários 4D permite criar rapidamente formulários padrões. Também lhe proporciona poderosas ferramentas que lhe permite criar formulários para interfaces sofisticadas. Seus formulários podem oferecer exatamente o que seu banco de dados necessite. Somente com operações básicas, é possível criar um formulário básico, com campos, botões, variáveis, etc. 4D tem duas ferramentas para a criação e modificação de formulários: o assistente de criação de formulários e o editor de formulários. Assistente de formulário O Assistente de formulários é o ponto de partida para a criação de qualquer tipo de formulário. Com o assistente, é possível criar um novo formulário selecionando os campos que você deseja de uma lista e escolhendo um modelo de formulário no menu suspenso. Os modelos de formulários controlam a aparência dos formulários; Um modelo especifica características - 221 - como o tamanho do formulário, a interface da plataforma, os atributos das fontes e botões. Para mais informações, consulte Criar um formulário com o assistente de formulário. Editor de formulário O editor de formulários é um ambiente gráfico orientado a objetos que permite personalizar seus formulários manipulando diretamente os objetos no formulário. Por exemplo, é possível reposicionar os objetos, adicionar objetos não suportados pelo assistente, criar formulários multi-páginas com guias, reforçar a segurança do banco especificando controles de entrada, definir os privilégios de acesso para um formulário, associar uma barra de menu personalizada a um formulário, e escrever métodos de formulário e objetos que são executados automáticamente quando o formulário é utilizado. Para mais informação veja Editar um formulário. Formulários de tabela e de projeto 4D permite criar duas categorias de formulários: formulários de tabela e formulário de projeto. Basicamente, os formulários de tabela estão associados a tabelas e se beneficiam das funções automáticas úteis para o desenvolvimento de aplicações baseadas no banco de dados. Os formulários de projeto são formulários independentes, não associados a tabelas. Estão desenhados particularmente para criar caixas de diálogo de interface como também para a criação de componentes. Os formulários de projeto permitem criar facilmente interfaces que cumpram as normas dos sistemas operacionais. Em particular, a chamada através do comando DIALOG de formulários de projeto que mostra as seleções de registros nos subformulários é recomendada por 4D para a visualização de registros em lista. Com um pouco de programação adicional, esta combinação substitui vantajosamente os comandos MODIFY SELECTION e DISPLAY SELECTION. Os formulários de tabela e os formulários de projeto estão agrupados separadamente na página Página Formulários do Explorador: Características de formulários de tabela Cada formulário está associado a uma tabela. Cada tabela deve ter pelo menos um formulário para permitir a entrada e visualização dos dados. Em geral, uma tabela tem formulários de entrada e saída separados. O formulário de entrada é o que é utilizado para a entrada de dados. É exibido um registro por tela e existem botões que permitem salvar ou cancelar as modificações efetuadas a um registro e navegar entre os registros (ex: Primeiro registro, Último registro, Registro anterior, Próximo registro). O formulário de saída exibe uma lista de registros, com uma linha por registro. O resultado das pesquisas é exibido no formulário de saída e o usuário pode fazer clique duplo em uma linha para abrir os formulários de entrada desse registro. Os próximos exemplos mostram um formulário de entrada e um formulário de saída típicos: Se você tentar exibir os registros de uma tabela antes de criar um formulário para a tabela, 4D lhe propõe automaticamente os formulários de entrada e saída padrões. - 222 - Nota: Com a opção Criação automática de formulários nas Preferências, é possível fazer com que 4D crie automaticamente os formulários padrões sem exibir a caixa de diálogo. Para maiores informações, consulte o parágrafo Página Geral . Clique em Sim (ou Sim para todos) para criar os formulários padrões. Logo é possível retornar ao ambiente Desenho para modificá-los ou substituí-los com formulários mais sofisticados. Sem fazer nenhuma modificação, é possível começar a usar os formulários padrões criados para a entrada e visualização de dados em seu banco. Também é possível clicar em Não se você não deseja associar um formulário à tabela. A entrada e/ou visualização de dados pode ser realizada utilizando formulários projeto. Seu banco de dados pode utilizar até 32.000 formulários por tabela, que realizem operações específicas. Características de formulários de projeto Os formulários projeto se diferenciam dos formulários tabela das seguintes maneiras: os formulários projeto podem ser unicamente de tipo detalhado (página). Os mecanismos dos formulários de saída (listagem) não são compatíveis com os formulários de projeto. Os formulários de projeto não aparecem na lista de tabelas e não podem ser atribuídos como formulários de entrada ou saída atuais. Não podem ser utilizados no Editor etiquetas nem no editor de importação/exportação de 4D (ver Exportar e importar dados). Os formulários projeto só podem ser exibidos utilizando o comando DIALOG ou como formulários herdados (ver Formulários Herdados). Os formulários de projeto podem conter os mesmos tipos de objetos que os formulários tabela, incluindo campos. Quando são utilizados os campos, o formulário de projeto armazena o número da tabela e do campo. Em caso de cópia do formulário de um banco a outro ou dentro de um componente, as referências também são copiadas. A tabela e o campo utilizados são as do banco objetivo. No caso de incompatibilidade (tabela não existente, tipo de campo incorreto, etc.), o formulário não funcionará corretamente. Como os formulários de projeto estão desenhados principalmente para serem utilizados no contexto do comando DIALOG, as ações padrões relativas à gestão de registros (Próximo registro, Excluir registro, etc.) não aparecem por padrão no editor nem o assistente de criação de formulários. Você deve administrar a visualização e modificação de registros utilizando os comandos na linguagem de programação. Por outro lado, quando os formulários de projeto são utilizados como formulários herdados pelos formulários tabela, é possível o uso de mecanismos automáticos de gestão de registros. Os formulários de projeto podem ter um método de formulário, como os formulários tabela, acessível a partir de Current form table do Explorador. Transformar um formulário de tabela em de projeto (e vice-versa) É possível transformar um formulário de tabela em formulário de projeto ou efetuar a operação reversa a qualquer momento. Atenção, no caso da transformação de formulários tabela em formulários projeto, os possíveis funcionamentos automáticos relativos à gestão de dados presentes no formulário de tabela não funcionarão mais, uma vez se transforme em formulário. Da mesma forma, um formulário de tipo “lista para a tela” ou “lista para impressão” se transformará em formulário de projeto de tipo “página”. A alteração de tipo de um formulário pode ser realizada arrastando e soltando ou copiando e colando em Página Formulários do Explorador. É possível efetuar esta operação no mesmo banco ou entre dois bancos diferentes. Para transformar um formulário de projeto em formulário de tabela ou vice-versa:: 1. Na página Formulários do Explorador, clique no formulário que você deseja transformar e solte-o no elemento de destino. Ao transformar um formulário de projeto em um formulário de tabela, você deve soltar o formulário no nome da tabela a qual será associada.. Por padrão, o formulário se move quando a operação arrastar e soltar é efetuada dentro do mesmo banco de dados. Se você deseja copiar o formulário, mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS) durante a operação de arrastar e soltar. Se o arrastar e soltar é entre dois bancos diferentes, só é possível a cópia do formulário. Também é possível utilizar os comandos padrões Copiar/Colar do menu contextual do Explorador. - 223 - Criar um formulário com o assistente de formulário Com o assistente de criação de formulários, é possível criar rapidamente novos formulários. É possível utilizar um novo formulário imediatamente depois de sua criação ou editá-lo usando o editor de formulários. O assistente de criação de formulários tem duas telas. A tela básica permite criar novos formulários em poucos passos. A tela Avançada permite a personalização do formulário antes de criá-lo. Passos para criar um novo formulário Para criar um novo formulário usando o Assistente de Formulário: 1. Selecione Novo > Formulário... no menu Arquivo ou usando o botão Novo na barra de ferramentas. OU Em Página Formulários do Explorador, clique no menu de opções e selecione Novo formulário com assistente. 4D exibe a tela básica do assistente de formulário. 2. Para criar um formulário de tabela, selecione a tabela no menu "Tabelas". Os campos da tabela são listados alfabeticamente na área "Campos disponíveis" quando a opção Tabela principal está selecionada na lista expandível. OU Para criar um formulário de projeto, escolha Nenhum (Formulário de projeto) do menu "Tabelas". A lista de campos de todas as tabelas serão exibidas na área "Campos disponíveis". Os formulários listados e os formulários listados para impressão são removidos da lista de tipos de formulários disponíveis. 3. Nomeio o formulário usando o campo Nome do formulário. Você pode referenciar esse formulário por nome usando a linguagem de programação. Assegure-se de usar um nome que esteja de acordo com as regras específicas de 4D (ver Convenções no 4D Language Reference). 4. Selecione um tipo de formulário da lista de tipos. - 224 - Suas opções são: Formulário detalhado: um formulário para entrar e modificar dados, Formulário listado (apenas para formulários tabela): Um formulário para listar na tela os registros, Formulário de Impressão detalhado: um relatório impresso com uma página por registro, como no exemplo de uma fatura, Formulário de Impressão listado (apenas formulários de tabela): um relatório impresso que faz uma lista dos registros. 5. Escolha um modelo para o formulário. O modelo controla diversos aspectos da aparência do formulário, incluindo fonte, etiquetas, o design do retângulos decorativos que contornam os campos, e a interface da plataforma. 4D tem diversos modelos de formulário e você pode usar o Assistente de Formulário para adicionar modelos personalizados à lista. Para mais informações sobre como adicionar modelos personalizados, veja “Criar um formulário modelo” abaixo. 6. (Opcional) Selecione uma pasta para armazenar o formulário. Se você selecinar uma pasta a partir da lista, o formulário será gravado nessa pasta. Pastas podem ser usadas para organizar os objetos das suas aplicações e são gerenciados em Página Início do Explorador. O padrão é que o formulário seja criado no Nível superior, isso é, em nenhuma pasta. 7. Selecione os campos que você deseja no formulário a partir da área "Campos disponíveis". Você pode dar um duplo-clique nos campos, usar arrastar e soltar ou usar os botões no painel central: Você pode selecionar qualquer campo de qualquer tipo, exceto BLOB. Você pode criar formulários que incluam campos: tabela principal (no caso de formulários tabela), tabelas relacionadas, todas as tabelas. A página Subformulário na tela de opções avançadas permite que você crie subformulários que exibem campos de muitas tabelas assim como tabelas que não estão relacionadas. Se você selecionar campos de uma tabela que não é a tabela principal ou uma tabela Um automaticamente relacionada, você necessita usar a linguagem de programação para gerenciar a entrada e exibição dos dados selecionados. Quando você adicionar campos ou mudar o tipo ou modelo do formulário, suas mudanças são exibidas na área de visualização do lado direito do assistente. Após colocar campos no formulário, você pode mudar sua ordem usando arrastar e soltar: - 225 - Nota: Se sua tela é muito pequena para criar um formulário de tamanho suficiente para conter todos os campos selecionados, o assistente cria um formulário multipáginas, e coloca todos os botões e objetos estáticos na página 0. Quando editar esse tipo de formulário, primeiro exiba a página 0 para poder editar esses objetos. 8. Se necessário, crie uma ou mais caixas de grupo na lista de Campos Selecionados. Nota: Essa função não está disponível para os formulários listados. Uma caixa de grpo tem sua própria etiqueta e conjunto de campos, e tem a seguinte aparência: Para criar uma caixa de grupo, clique no botão caixa de grupo . Um item é adicionado na lista Campos Selecionados. Seu nome padrão é "Grupo", que pode ser renomeado. Nota: O nome da caixa grupo é um texto estático; você pode usar a referência "localizável"como com qualquer outra etiqueta 4D (ver Usar referências em texto estático e MissingRef). Você pode adicionar campos à caixa de grupo arrastando eles da lista de Campos Disponíveis e sos soltando no novo item. A lista de Campos Selecionados tem a forma de uma lista hierárquica. À medida em que os campos são adicionados à caixa de grupo, eles aparecem abaixo do nome da caixa de grupo. - 226 - Nota: Quando um ítem caixa de grupo é expandido, você pode adicionar campos que já estão na lista Campos selecionados, usando arrastar e soltar. 9. Se você quer editar o novo formulário no editor de Formulários, clique Editar. OU Se você quer testar o formulário, clique Usar (formulários de tabela somente). OU Se vocè quer personalizar o novo formulário com as opções avançadas do assistente de formulários, clique Avançado... Opções Avançadas Para mostrar as opções avançadas do assistente de formulários, clique no botão Avançado... na tela básica do assistente. Se desejar voltar à primeira tela do assistente de criação de formulários, clique no botão < Anterior. A tela de opções avançadas também permite criar novos formulários em poucos cliques, além disso, oferece uma ampla variedade de opções de personalização. As opções de personalização dependem do tipo de formulário selecionado na tela básica do assistente de criação de formulários. O assistente de criação de formulário aceita os seguintes tipos de formulários:: Formulários detalhados, Formulários listados (somente formulários de tabela), Formulários de impressão detalhados, Formulários de impressão listados (somente formulários de tabela). Além disso, o assistente de formulários permite salvar suas opções de personalização como um modelo. Seus modelos são adicionados a lista suspensa Modelos que aparece na tela básica do assistente de formulários. Com seus próprios modelos é possível criar rapidamente formulários altamente personalizados desde a primeira página do assistente de criação de formulários, simplesmente selecionando os campos e seu modelo personalizado. Página Campos A página Campos é similar a tela básica do assistente de criação de formulários. A página campos é utilizada para adicionar campos ao formulário da mesma forma que na tela básica do assistente de formulários. Esta funcionalidade está duplicada para aqueles usuários que querem ir diretamente à janela de opções avançadas. Para maiores informações sobre o processo de adição de campos ao formulário, consulte a seção acima. Campos relacionados acessíveis A página Campos oferece uma opção adicional: Campos relacionados acessíveis. Esta opção permite escolher ou não a propriedade “Editável” para os campos das tabelas relacionadas. Esta opção está selecionada por padrão (os campos são editáveis). Pode ser útil desmarcar esta opção quando você quer evitar que os usuários possam modificar os valores dos campos relacionados quando a opção “Atribuição automática de valores em sub-formulários” estiver selecionada para uma relação (para maiores informações a respeito, consulte o parágrafo Propriedades de Relações). Para maiores informações sobre a propriedade “Editável”, consulte Atributos Editável e Obrigatório e propriedades de campos. Página Opções - 227 - A página Opções é utilizada para definir diferentes opções relativas às dimensões, etiquetas e visualização do formulário Tamanho de formulário Esta área permite definir o tamanho do formulário. É possível ajustar o tamanho do formulário de acordo com seu conteúdo ou definir um tamanho fixo indicando a largura e altura máxima ou selecionando um tamanho de tela. Também é possível combinar os dois parâmetros. A lista suspensa Monitor lhe dá as seguintes opções: automático (o tamanho do formulário se adapta ao tamanho do monitor atual) baixa resolução 640x480 resolução média 800x600 padrão1024x768 alta resolução 1280x1024 Tela larga 1600x1200. Os valores correspondem à relação largura x altura, expressada em pixels Quando se introduz um tamanho de tela ou se seleciona um tamanho da lista suspensa, a área de visualização é alterada para refletir sua seleção. O assistente de criação de formulários tratará de ajustar os campos e a localização dos objetos no formulário de forma que se ajustem o tamanho de tela selecionado. Se a opção Criar várias páginas se for necessário estiver selecionada e 4D não conseguir ajustar todos os objetos em uma página, serão geradas várias páginas de visualização para ajustar todos os campos ao formulário. Se o assistente de criação de formulários gera múltiplas páginas, são colocados botões, o título do formulário e os retângulos decorativos na página de fundo (página 0). Ajustar tamanho segundo os campos: ao selecionar esta opção, o assistente de criação de formulários reduz os espaços vazios no formulário, com a finalidade de ajustar o tamanho do formulário e seu conteúdo. Para formulários de impressão (Formulários de Impressão Listado and Formulário de Impressão Detalhado): A área "Tamanho de formulário" inclui um botão Ajustar Página que exibe a caixa de diálogo da configuração atual de impressão, onde você pode escolher o tamanho de papel para imprimir o relatório. 4D ajusta o tamanho do formulário e a área de pré-visualização ao formato de página que for escolhido. Na área "Opções de visualização", você pode selecionar variáveis para inserir nos seus relatórios de maneira a mostrar o título do formulário, número de página, data, e hora em que o documento foi impresso. Para o tipo Formulário Listado: A área "Tamanho de formulário" inclui uma opção Largura desejada. Se você não marcar essa opção, a largura do formulário de saída é calculada automaticamente relativa ao do tamanho dos campos. Entretanto, se você marcar essa opção, e determinar uma largura em pixels, o assistente tentará reduzir o tamanho dos campos para que eles se "ajustem" à largura definida. Se você também marcar a opção "Truncar se necessário", o assistente então remove um ou mais campos de maneira que a largura do formulário seja menor que a especificada. Mas se você marcar essa segunda opção, a largura do formulário pode ser ligeiramente maior que a especificada pela opção Largura desejada. Posição etiquetas A área Posição etiquetas da página Opções lhe permite definir a posição das etiquetas com respeito aos campos. É possível especificar que as etiquetas estejam localizadas na frente ou em cima dos campos. Da mesma forma, é possível não exibir as etiquetas. Opções de visualização A área Opções de visualização da página Opções lhe permite adicionar vários elementos opcionais ao formulário e definir diversas opções. As opções disponíveis são as seguintes: Título do formulário: adiciona o nome da tabela como título do formulário acima dos campos. Esta opção não está disponível para os formulários de projeto. Um campo por linha: selecione esta caixa de seleção para organizar os campos verticalmente. Se esta opção não estiver selecionada, o assistente organiza os campos em filas. Criar várias páginas se for necessário: se esta opção estiver selecionada, o assistente de formulários criará várias páginas automaticamente se os campos não se ajustam a somente uma página. Se você utilizar esta opção, o assistente de formulários localiza na página de fundo os objetos apropriados. Nomes de campos dinâmicos: quando esta opção está selecionada, os nomes de campos e tabelas são inseridos no formulário como referências dinâmicas. Isto assegura que os campos e etiquetas de tabelas reflitam qualquer alteração no nome do campo ou da tabela. Os nomes dos campos ou das tabelas podem ser modificados no editor de estrutura ou utilizando os comandos SET FIELD TITLES ou SET TABLE TITLES. Para mais informações, veja Usar referências em texto estático. Barra de menus associada: selecione esta opção e selecione o número da barra de menu que você deseja associar ao formulário. Para maiores informações, consulte Atribuir uma barra de menu a um formulário. Número de registro/Total de registros: adiciona ao formulário uma variável 4D (chamada por padrão vRecNum) que exibe o número do registro atual e o número total de registros. Esta opção não está disponível para os formulários de projeto. Página botões - 228 - A página Botões permite personalizar os botões utilizados no formulário. Nota: Esta página não está disponível para "Formulário de Impressão Listado" e "Formulário de Impressão Detalhado". Os formulários detalhados e listados (os de não impressão) utilizam botões que permitem ao usuário salvar e cancelar as alterações feitas a um registro e passar de uma página a outra em um formulário multi-páginas. Além disso, os formulários de tabela podem ter botões que permitem navegar entre os registros (primeiro registro, último registro, registro anterior, próximo registro), adicionar ou eliminar registros em um sub-formulário ou eliminar o registro atual. Na página Botões, é possível selecionar o estilo, as ações, a localização e etiquetas dos botões no formulário. Nota: No editor de formulários, também é possível adicionar, eliminar, mover botões e associar um método a um botão para especificar a ação que deve ser realizada. Família de botões e localização As áreas Família de botões e Localização permitem escolher o aspecto visual e a localização dos botões. É possível clicar nos botões > o < para visualizar os diferentes botões da família selecionada. Ações automáticas de botões 4D oferece um conjunto de ações predeterminadas para os botões. Quando você atribui uma destas ações a um botão, não é necessário escrever um método para especificar o que deve acontecer quando o usuário clique sobre o botão. O número de ações pré-definidas propostas depende da categoria do formulário (tabela ou projeto). Por exemplo, as ações para se mover entre registros em uma tabela não podem ser utilizadas com os formulários de projeto. Para os formulários detalhados, as ações predefinidas acessíveis através do assistente de criação de formulários são as seguintes: OK: salva um novo registro ou salva as alterações realizadas a um registro existente, Cancelar: anula o novo registro ou anula as alterações feitas a um registro existente, Próxima página, página anterior, primeira página, última página: exibe a página solicitada em um formulário multi-páginas. As ações a seguir só estão disponíveis para os formulários de tabela: Próximo registro, Registro anterior, Primeiro registro, Último registro: salva o registro atual e exibe o registro solicitado. Excluir registro: exclui o registro atual do banco (aparece uma caixa de diálogo de confirmação). Nota: Quando se insere um sub-formulário, 4D insere automaticamente dois botões adicionais se a opção Botões de adição e exclusão da página Sub-formulário estiver selecionada. Os botões do sub-formulário são: Adicionar (adiciona um novo registro a uma tabela Muitos ou uma sub-tabela) e Excluir (elimina o registro atual do sub-formulário). 4D propõe outras ações pré-determinadas. Estas ações estão disponíveis quando se cria um formulário utilizando o assistente de criação de formulários ou quando se modifica um formulário utilizando o editor de formulários. Para mais informação, consulte Ações padrões. Os botões padrões estão listados na área Ações da página: - 229 - É possível selecionar e desmarcar a seleção dos botões de ação automática da mesma forma que se seleciona ou elimina os campos na página Campos. Os botões localizados na área Ações selecionadas aparecerão no formulário. Nota: Ainda que os botões de gestão de páginas (Página anterior, Próxima página, etc.) estejam selecionados na área “Ações selecionadas”, só serão incluídas no formulário se for necessário criar um formulário multi-páginas. Se você deseja modificar a etiqueta padrão de um botão (o modelo selecionado deve incluir etiquetas), selecione o botão na lista de ações selecionadas e escreva o novo texto na área Etiqueta. If you want to modify the default label of a button (the template chosen must include labels), highlight the button in the Selected Actions list and enter a new label in the Label area. Depois de escrever o texto da etiqueta, pressione a tecla Tab ou clique em outro botão da lista Ações selecionadas para que a área de visualização mostre a nova etiqueta. Notas: As etiquetas dos botões podem ser introduzidas como referências para a tradução do banco (ver Apêndice C: arquitetura XLIFF). As mensagens de ajuda são independentes das etiquetas. Se você deseja associar uma mensagem de ajuda a um botão, utilize a palheta de propriedades dos objetos do editor de formulários. Para maiores informações consulte Mensagens de ajuda. Página subformulários A página sub-formulário permite adicionar um sub-formulário ao formulário. Este sub-formulário deve vir de uma tabela Muitos relacionada se você deseja se beneficiar dos mecanismos automáticos de atualização dos sub-formulários. Quando você quiser utilizar os campos de uma tabela Muitos relacionada, adicione um sub-formulário ao formulário. O subformulário lista vários registros por vez. A utilização de um sub-formulário lhe permite visualizar os registros relacionados ou os de outra tabela. Também é possível introduzir dados nos registros que são exibidos no sub-formulário. É possível exibir em um sub-formulário campos de uma tabela Muitos relacionada ou de uma tabela que não esteja relacionada. Se você incluir campos de uma tabela Muitos relacionada, a relação determina quais registros são exibidos. Se você incluir campos de uma tabela não relacionada ou de uma tabela com uma relação manual, por padrão, é exibida a seleção atual dessa tabela. Também é possível controlar a seleção de registros utilizando um método. A página sub-formulário da tela de opções avançadas permite utilizar um formulário como sub-formulário, especificar suas opções e definir botões que permitam aos usuários trabalhar com o sub-formulário. Para adicionar um subformulário ao formulário, marque a opção Incluir um subformulário. Selecione a tabela para o subformulário na lista "Tabela" e selecione o subformulário a ser usado na lista de formulários. Você tamb~em pode usar a lista "formulário detalhado" para determinar uma página de formulário a ser exibida quando o usuário clicar no subformulário. Esse subformulário aparece na área de pré-visualização como fazendo parte do formulário atual. A área de visualização mostra o sub-formulário integrado ao formulário atual. - 230 - É possível definir as seguintes opções para o sub-formulário: Seleção múltipla: o usuário pode desmarcar a seleção de vários sub-registros simultaneamente utilizando as teclas Shift e Ctrl (Windows) ou Comando (Mac OS). Digitação em lista: o usuário pode modificar os valores dos sub-registros diretamente no sub-formulário. Botões de adição e exclusão: o assistente insere automaticamente dois botões no formulário (correspondente a família de botões definida para o formulário), associados às ações padrões Adicionar sub-registro e Excluir subregistro: Para maiores informações sobre estas opções, consulte o parágrafo Subformulário lista. Gerar o formulário avançado Quando você tiver terminado de definir todas as propriedades avançadas do novo formulário, clique em OK em qualquer página para criar o novo formulário. Ao clicar no botão OK, aparece a caixa de diálogo a seguir: Para criar o novo formulário, clique no botão Utilizar para passar a testar o formulário (formulários de tabela somente) ou Modificar para abrir o novo formulário no editor de formulários Criar um modelo de formulário A caixa de diálogo de geração do formulário permite criar um novo modelo de formulário que poderá utilizar por padrão os parâmetros atuais de opções avançadas (botões opções, etc.). Se você criar um modelo de formulário, seu nome será adicionado à lista suspensa de modelos disponíveis no assistente. O modelo de formulário é guardado independentemente do formulário. Parar criar um modelo de formulário, clique no botão OK e entre o nome na área de nome do modelo. - 231 - Criar um formulário em branco É possível criar diretamente um formulário vazio diretamente de Explorador sem utilizar o assistente de criação de formulário. Neste caso, o formulário é criado sem campo, botões ou variáveis e é aberto no editor de formulário onde é possível construí-lo totalmente. Criar formulário vazios é útil para gerar caixas de diálogo que só contenham variáveis ou áreas de plug-in. Para criar um formulário vazio: 1. Abra Página Formulários do Explorador. 2. Selecione o elemento correspondente a categoria do formulário que você deseja criar: Formulário de projeto: selecione “Formulários de projeto” ou um formulário de projeto existente, Formulário de tabela: selecione o nome da tabela. 3. Clique no botão adicionar do Explorador. Aparece a caixa de diálogo a seguir: Formulário de projeto: Formulário de tabela: 4. Introduza o nome do formulário na área de entrada correspondente. Este nome servirá para se referir ao formulário no momento da programação. 5. (Opcional) Selecione uma pasta de armazenamento para o formulário.. Se você selecionar um nome de pasta, o formulário será localizado nesta pasta. As pastas permitem organizar os objetos de suas aplicações e são administrados através da página Página Início do Explorador. Por padrão, é criado o formulário em nível superior, ou seja, fora das pastas. 6. Clique no botão Modificar. O formulário vazio é aberto em uma nova janela do Editor de formulários. - 232 - Editar um formulário Para abrir un formulário no editor de formulários: 1. Selecione Abrir > Formulário... no menu Arquivo. Ou No editor de estrutura, pressione Ctrl+Shift e um duplo clique no nome da tabela do formulário-tabela que deseja abrir. Ou No editor de estrutura, clique direito no nome da tabela, logo selecione Mostrar os formulários no menu contextual. 4D mostra a Página Formulários do Explorador. Pode expandir o tema "Formulários projeto" ou os nomes das tabelas para ver os formulários associados a elas. Se fez duplo clique em um nome de tabela, ou se selecionou um nome de tabela com o menu contextual do editor de estrutura, a tabela já estará selecionada. 2. Se for necessário, expanda a tabela que contém o formulário a ser modificado. 3. Clique direito no nome do formulário a ser modifiado, logo selecione Modificar formulário no menu contextual. Ou Selecione o formulário e depois Modificar formulário... no menu de opções do Explorador. Ou Faça um duplo clique no nome do formulário ou na área de pré-visualização. 4D mostra o formulário na janela do editor de formulários. Nota: estas ações também estão disponíveis na Página Início do Explorador. 4D Server: quando dois ou mais usuários tentam modificar um mesmo formulário simultaneamente, o objeto é bloqueado. Se um usuário está modificando um formulário no ambiente Desenho, o formulário é bloqueado. Os outros usuários não podem modificar o mesmo formulário até que o primeiro usuário o libere, ao fechá-lo. - 233 - Renomear um formulário Pode renomear um formulário na lista de propriedades ou em Página Formulários do Explorador ou na Lista de propriedades. Os nomes dos formulários são utilizados quando se seleciona os formulários de entrada e saída padrão para uma tabela e em comandos que aceitam um nome de formulário como parâmetro, tais como INPUT FORM e OUTPUT FORM. Não é possível utilizar o mesmo nome para vários formulários de uma mesma tabela. Se o fizer, 4D não saberá a qual dos formulários se refere cada vez que utilizar esse nome. Entretanto, pode sim utilizar o mesmo nome de formulário em tabelas diferentes. Por exemplo, pode chamar a todos seus formulários de entrada “Entrada” e a todos seus formulários de saída “Saída”. Atenção: se renomear um formulário referenciado em outras partes do banco de dados (por exemplo, em métodos), atualize as referências ao formulário. Para fazer isso, pode usar a função de buscar e substituir no ambiente Desenho (ver Renomear). Para renomear um formulário utilizando o Explorador: 1. Mostre a Página Formulários do Explorador. Aparece a lista hierárquica de tabelas e formulários. 2. Mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS) e clique no nome do formulário a ser renomeado. Ou Clique duas vezes no nome do formulário que deseja mudar. O nome do formulário agora pode ser editado. 3. Introduza o novo nome. 4. Pressione a tecla Tab ou clique fora da área de edição para guardar o novo nome. Para renomear um formulário utilizando a Lista de propriedades do editor de formulários (ver Lista de propriedades): 1. Mostre as propriedades do formulário na Lista de propriedades. 2. Escreva um nome na área Nome do formulário. Também pode renomear um formulário utilizando a janela de propriedades do formulário através do Explorador (ver a seção Propriedades de formulário (Explorador)). - 234 - Definir formulários de entrada e saída Cada tabela possui um formulário atual de entrada e um formulário atual de saída. O formulário de entrada é utilizado para introduzir e modificar os registros, e o formulário de saída é utilizado para mostrar os registros na lista. Geralmente se utiliza um formulário detalhado como formulário de entrada, e um formulário listado como formulário de saída. É possível mudar de formulário de entrada ou saída a qualquer momento. Essa mudança pode ser feita em Janela Lista de tabelas ou com a ajuda dos comandos INPUT FORM e OUTPUT FORM. Nesse caso, as modificações são aplicadas unicamente à sessão de trabalho atual. Igualmente pode especificar os formulários de entrada e saída padrão no ambiente Desenho. Nesse caso, as mudanças serão guardadas com o banco de dados. Para mudar os formulários de entrada e saída de uma tabela: 1. Vá à Página Formulários do Explorador. 2. Expanda a tabela para a qual deseja modificar o formulário de entrada ou saída padrão. A letra E é mostrada junto ao nome do formulário de entrada atual e a letra S é mostrada junto ao formulário de saída atual. 3. Clique com o botão direito no nome do formulário a atribuir e selecione o comando Formulário de entrada ou Formulário de saída no menu contextual: Ou Escolha o comando Formulário de saída ou Formulário de entrada no menu de opções do Explorador. Nota: apenas os formulários de tabela podem ser designados como formulários de entrada ou de saída. Também pode designar um mesmo formulário como formulário de entrada e saída. Neste caso, junto ao nome do formulário aparece a letra A (de Ambos). - 235 - Eliminar um formulário É possível excluir qualquer formulário de projeto ou de tabela que não esteja designado como formulário de entrada ou saída atual (ou ambos). O botão Excluir estará desabilitado quando se selecione um formulário de entrada ou de saída. Para excluir um formulário:: 1. Vá a Página Formulários do Explorador. 2. Exiba o tema “Formulários de projeto” ou a tabela que contém o formulário que você deseja excluir. 3. Selecione o formulário a ser excluído e clique no botão excluir do Explorador. OU Use o comando Excluir Formulário no menu contextual do Explorer (clique com o botão direito no nome do formulário). 4D pede para confirmar a eliminação. 4. Clique em OK. 4D elimina o formulário. O formulário é enviado para a Lixeira e pode ser recuperado enquanto a Lixeira não for esvaziada (ver Página Lixeira). Nota: Também é possível eliminar um formulário em Página Início do Explorador (usando o mesmo procedimento). - 236 - Imprimir um formulário Cada formulário tem uma área máxima de aproximadamente 115 metros quadrados. O acesso às partes ocultas do formulário é obtido com a barra de rolagem. Para visualização em tela, toda essa área pode ser utilizada. Pode visualizar todos os elementos do formulário por navegação. Para a impressão, os elementos do formulário deven encaixar dentro da largura de uma página, do tamanho do papel, e das especificações na janela Ajustar página. 4D mostra os limites da página no editor de formulários na forma de linhas. Estas linhas de limites da página, respondem aos ajustes de página realizados. As especificações de configuração da página são guardadas com o formulário ao fechá-lo. Os limites do formulário podem ser mostrados ou ocultados usando oc omando Papel no submenu Mostrar do editor de formulários (ver Mostrar/ocultar elementos no editor de formulários). A seguinte imagem mostra as linhas de limite de página: Configuração de impressão de formulários Você pode definir uma configuração de impressão para cada formulário. Estas configurações são consideradas quando o formulário está sendo impresso no modo Aplicação. Clique no botão Configurações/Editar.... na lista de propriedades do formulário, tema "Imprimir" (ver Configuração de impressão de formulários). - 237 - Uma caixa de diálogo de Configuração de impressão aparece, permitindo que você modifique as configurações de impressão específicas do formulário: formato do papel, orientação, etc. As opções disponíveis nesta caixa de diálogo padrão dependem de sua configuração sistema. Para maior informação sobre a impressão de registros em modo Aplicação, consulte a seção Imprimir registros. - 238 - Salvar formulários É importante guardar qualquer mudança feita no formulário, especialmente quando usar o 4D Server com múltiplos usuários. O formulário pode ser guardado ao ser fechado. Você pode fechar um formulário ao clicar no botão fechar da janela ou selecionando Fechar Formulário do Arquivo. Para guardar um formulário sem fechá-lo, selecione Salvar Formulário no menu Arquivo. Uma vez que o formulário estiver guardado, você pode continuar a trabalhar nele. Se você cometer um erro ou não gostar das alterações, pode voltar à última versão guardada. Isso faz com que o formulário apareça exatamente como estava na última vez em que foi guardado. Par fazer isso, escolha Restaurar.. do menu Arquivo. 4D Server: Quando um formulário é guardado no ambiente Desenho, usuários podem ver as mudanças na próxima vez que abrirem o formulário. - 239 - Criar formulários Editor de formulários Propriedades de formulário Propriedades de formulário (Explorador) Criar um formulário multi-página Formulários Herdados Modificar a ordem de entrada dos dados Inserir e organizar objetos de formulário Definir as propriedades de visualização dos objetos Rotação de texto Usar imagens estáticas Usar referências em texto estático Duplicar em uma matriz Incrementar um conjunto de variáveis Redimensionar um formulário Usar métodos de objetos Modos de exibição de objetos Usar as Marcas Usar a biblioteca pré-configurada Criar e usar objetos de biblioteca personalizados Exibir informação sobre objetos em formulários sendo executados - 240 - Editor de formulários Quando criar um novo formulário com o assistente de criação de formulários, pode escolher várias opções de personalização. Utilizando modelos, pode controlar o tipo de fonte, tamanho, estilo de texto, controlar a aparência dos campos e etiquetas, e adicionar um conjunto de botões automáticos. Além disso, 4D oferece um editor de formulários muito completo que permite modificar seu formulário até atingir os resultados esperados. Com o editor de formulários pode criar e eliminar objetos, manipulá-los diretamente e definir as propriedades de formulários e de objetos. O editor de formulários mostra cada formulário em sua própria janela, a qual tem uma barra de ferramentas e uma barra de objetos. É possível ter vários formulários abertos ao mesmo tempo. As réguas da margem direita e inferior ajudam a localizar os objetos no formulário. Pode mudar a unidade de medida das réguas para que meçam em polegadas, centímetros ou pixels. Esta seção cobre os elementos básicos do editor de formulários. A seção Trabalhar com objetos ativos descreve detalhadamente os campos e outros objetos ativos. Mostrar/ocultar elementos no editor de formulários Pode mostrar ou ocultar os elementos de interface do editor de formulários. Esta característica permite mostrar somente os elementos necessários para criar ou visualizar o formulário ou as ferramentas que deseja usar. Esta opção é sempre aplicada à janela atual do editor de formulários. Por exemplo, é útil mostrar os marcadores enquanto trabalha em um formulário de saída. Para mostrar ou ocultar um elemento no editor de formulários: 1. Selecione Exibir no menu Formulário. Ou Utilize o comando Exibir do menu contextual do editor (faça um clique com o botão direito na região fora do objeto. Aparece um submenu hierárquico com a lista de todos os elementos que pode mostrar ou ocultar: - 241 - Ao lado de cada elemento visível aparece uma marca de seleção. Para ocultar um elemento. selecione e sua marca desaparecerá. 2. Selecione o elemento que deseja exibir ou ocultar. Esta é a descrição dos comandos deste menu: Formulário herdado: exibe ou oculta os objetos do formulário herdado (se houver um) na página atual do formulário. Para mais informação, consulte Formulários Herdados. Página 0: exibe ou oculta os objetos da página 0 na página atual do formulário. Esta opção permite diferenciar entre os objetos da página atual do formulário e dos da página 0. Para mais informações, consulte Criar um formulário multi-página. Papel: exibe ou oculta as margens da página de impressão, com linhas de cor cinza. Esta opção pode não ter efeito quando está selecionada a opção Limites (ver abaixo). Se o tamanho do formulário é menor que o tamanho da página de impressão, as margens da página aparecem fora do formulário. Consulte a seção Imprimir um formulário. Réguas: exibe ou oculta as réguas da janela do editor de formulários. Marcadores: exibe ou oculta os marcadores que mostram os limites das diferentes áreas do formulário. Etiquetas de marcadores: exibe ou oculta as etiquetas dos marcadores, disponíveis apenas quando os marcadores estão visíveis. Para mais informação, consulte a seção Mover as linhas de controle de saída. Limites: exibe ou oculta os limites do formulário. Quando esta opção está selecionada, pode ver o formulário do jeito que aparece no modo Aplicação. Dessa forma pode ajustar seu formulário sem ter que mudar a modo Aplicação para ver o resultado. Nota: as opções Tamanho baseado em, Margem horizontal e Margem vertical, das propriedades do formulário modificam os limites do formulário. Quando utiliza estas propriedades, os limites se baseiam nos objetos no formulário. Quando muda o tamanho de um objeto localizado perto da margem do formulário, a margem é modificada para refletir essa mudança. Para mais informação sobre as propriedades do formulário, consulte a seção Propriedades de formulário. Zoom É possível fazer um zoom no formulário atual. Pode passar ao modo "zoom" clicando na lupa correspondente à escala desejada , ou diretamente na barra . As porcentagens de visualização são 50%, 100%, 200%, 400% e 800%. Ao clicar na lupa, o cursor se transforma numa lupa. Para aumentar a porcentagem de visualização, clique no formulário. Para diminui a porcentagem de visualização, mantenha pressionada a tecla Shift e clique no formulário. Ao clicar em uma das barras de porcentagem, a visualização se modifica imediatamente. No modo Zoom, todas as funções do editor de formulários permanecem disponíveis. Barra de ferramentas A barra de ferramentas do Editor de formulários oferece um conjunto de ferramentas que podem ser usadas para manipular e modificar o formulário. Cada janela do editor tem sua própria barra de ferramentas. A barra de ferramentas contém os seguintes elementos: Executar o formulário: permite provar a execução do formulário. Ao clicar nesse botão, 4D abre uma nova janela e mostra o formulário em seu contexto (lista os registros para um formulário listado e mostra o registro atual para um formulário detalhado). O formulário é executado no processo principal. - 242 - Flecha de seleção: permite selecionar, mover e redimensionar os objetos d formulário. Para mais informação, consulte Selecionar objetos. Nota: quando um objeto de tipo Texto ou Área de grupo é selecionado, pressionar a tecla Enter permite passar ao modo edição. Ordem de entrada: passa ao modo “Ordem de entrada”, no qual se pode visualizar e modificar a ordem de entrada atual do formulário. Para mais informação, consulte Ordem de entrada dos dados. Note que agora as marcas permitem visualizar a ordem de entrada atual, enquanto trabalha no formulário (consulte a seção Usar as Marcas). Mover: passa a modo “Mover”, no qual é possível alcançar rapidamente a qualquer parte do formulário utilizando arrastar e soltar na janela. O cursor se transforma numa mão. Esse modo de navegação é particularmente útil quando se utiliza o zoom no formulário. Zoom: permite modificar a escala de visualização do formulário (100% é o padrão automático). Pode passar ao modo “Zoom” clicando na lupa ou diretamente na barra correspondente à escala de zoom que deseja. Esta função está detalhada na seção anterior. Alinhar: este botão está associado a um menu que permite alinhar os objetos no formulário. Que essa função esteja ativa ou não depende dos objetos selecionados. Distribuir: este botão está associado a um menu que permite distribuir os objetos no formulário. Que essa função esteja ativa ou não depende dos objetos selecionados. Nota: Para mais informação sobre alinhamento e distribuição de objetos, consulte Alinhar objetos. Plano: este botão está associado a um menu que permite modificar o plano dos objetos no formulário. Que essa função esteja ativa ou não depende dos objetos selecionados.. Para mais informação, consulte Superposição de objetos. Agrupar/Desagrupar: este botão está associado a um menu que permite agrupar e desagrupar a seleção de objetos do formulário. Que essa função esteja ativa ou não depende dos objetos selecionados.. Para mais informação, consulte Agrupar objetos. Exibir e controlar páginas: esta área permite passar de uma página a outra e adicionar páginas. Para navegar pelas páginas do formulário, clique nos botões de flecha ou clique na área central e selecione a página a ser exibida no menu que aparecer. Se clicar no botão com flecha para a direita, quando já estiver na última página do formulário, 4D permite adicionar uma página nova. Para mais informação, consulte Criar um formulário multipágina. Gestão de vistas: este botão exibe ou oculta a palheta de vistas. Esta função é descrita em Modos de exibição de objetos. Marcas: cada clique nesse botão provoca a visualização sucessiva de todos os tipos de marcas. Este botão também está associado a um menu que permite escolher diretamente o tipo de marcas a mostrar. Essa função é detalhada em Usar as Marcas. Abrir a biblioteca de objetos pré-configurados: este botão mostra a janela da biblioteca de objetos predefinidos, oferece vários objetos com as propriedades padrão. Para mais informação, consulte Usar a biblioteca pré-configurada. Bloqueio de usuário: quando este ícone estiver presente à direita da barra de ferramentas, significa que o formulário é "modificável pelo usuário". Para editar o formulário diretamente, deve primeiro desbloquear o formulário clicando nesse ícone. Para mais informação, consulte Editável pelo usuário. Barra de objetos A barra de objetos contém todos os objetos ativos e inativos utilizáveis nos formulários de 4D. Alguns objetos estão agrupados por temas (botões, botões de opção, menus, etc.). Cada tema inclui várias alternativas que pode selecionar. Quando a barra de objeto tem o foco, pode selecionar os botões utilizando as teclas. A seguinte tabela descreve as famílias de objetos disponíveis e sua tecla associada. - 243 - Botão Família Tecla Texto / Área de grupo T Campo / Variável F Área de rolagem / Lista hierárquica / List Box L Combo box / Menu suspenso / Menu hierárquico suspenso / Menu imagem suspenso P Botão / Botão 3D / Botão inverso / Botão invisível / Botão imagem / Grade de botões B Botão de opção / Botão de opção 3D / Botão imagem de opção R Caixa de seleção / Caixa de seleção 3D C Indicador de progresso / Dial / Régua I Retângulo / Linha / Retângulo arredondado / Oval / Matriz S Separador / Guia D Área de plug-in / Sub-formulário / Web Area X Para desenhar um tipo de objeto, selecionar o botão correspondente e logo traça o objeto no formulário. Depois de criar um objeto, pode modificar seu tipo utilizando a Lista de propriedades. Mantenha pressionada a tecla Shift enquanto cria um objeto para obrigar que sua forma seja regular. As Linhas regulares são as verticais, horizontais ou 45º, os retângulos se tornam quadrados e os ovalados se tornam círculos. Ao clicar na parte direita de um dos botões, aparece o menu de variações. A variação atualmente selecionada no menu será o objeto inserido no formulário. Quando um botão estiver selecionado, pode navegar através de suas variações usando o atalho Shift + Tecla de Seleção. As mensagens de ajuda mostram a variação atual selecionada e a tecla associada ao objeto. Pode clicar duas vezes no botão para que permaneça selecionada inclusive depois de se traçar um objeto no formulário (seleção persistente). Esta função facilita a criação de múltiplos objetos do mesmo tipo. Para cancelar uma seleção permanente, selecione outro objeto ou ferramenta. Lista de propriedades Os formulários e os objetos do formulário têm propriedades que controlam o acesso ao formulário, sua aparência e comportamento durante o uso. As propriedades de formulário incluem, por exemplo, o nome do formulário, a barra de menu associada e o tamanho. As propriedades de um objeto incluem, por exemplo, o nome, tamanho, cor e fonte. Pode ver e modificar essas propriedades utilizando a Lista de propriedades. Essa palheta é atualizada dinâmicamente em função dos objetos selecionados na janela do editor. Para mostrar ou ocultar a Lista de propriedades: 1. Selecione Lista de propriedades no menu Formulário ou no menu contextual do editor de formulários (clique com o botão direito na janela do editor, mas sem clicar em nenhum objeto). Ou Utilize a combinação de teclas Ctrl+Shift+Barra de espaço (Windows) ou Comando+Shift+Barra de espaço (Mac OS). Aparece a lista de propriedades: - 244 - Selecionar as propriedades A lista de propriedades mostra as propriedades do formulário ou as do objeto selecionado: Quando não há um objeto selecionado, a lista de propriedades mostra as propriedades do formulário, Quando um objeto ou conjunto de objetos estiver selecionada, a lista de propriedades mostra as propriedades do objeto ou as propriedades comuns dos objetos selecionados. Pode selecionar os elementos cujas propriedades deseja mostrar clicando sobre eles no formulário ou usando a lista de seleção, localizada na parte superior da janela Lista de propriedades. A lista de seleção contém três partes, separadas por uma linha: nome do formulário, os objetos dinâmicos (associados a uma variável), Lista dos objetos estáticos (não associados a uma variável). Para cada objeto dinâmico, a lista mostra o nome da variável seguido pelo nome do objeto entre parêntesis, ou unicamente o nome do objeto. Pode definir a visualização usando o menu associado à lista. O comando indica o tipo de visualização atual: - 245 - Também pode modificar a ordem de cada parte da lista. Como padrão, a lista é ordenada em função do plano dos objetos (do primeiro plano ao fundo). O menu associado permite ordenar a lista em ordem alfabética. Os botões localizados à esquerda da lista permitem selecionar cada objeto da lista sucessivamente, de cima para baixo. Propriedas de visualização de páginas Pode escolher o modo de visualização da informação na lista de propriedades utilizando as abas de seleção das páginas. A primeira página (Principal) mostra toda a informação relativa ao objeto selecionado usando diferentes temas (fonte de dados, coordenadas e dimensões, eventos, etc.). Pode expandir ou contrair cada tema clicando no ícone de expansão localizado à esquerda de seu nome; isso permite mostrar apenas as propriedades com as quais deseja trabalhar. A visualização é contextual: apenas são mostrados os temas e propriedades significativos para o tipo de objeto selecionado. A visualização de algumas propriedades também muda dinamicamente segundo o valor de outras propriedades. Por exemplo, a propriedade Tabulável para um campo aparece como disponível apenas se a propriedade Editável foi previamente definida. As outras seis páginas contém informação específica relacionada com o objeto selecionado. Além disso, são mostradas todas as propriedades de cada tema, sem importar o tipo de objeto. As propriedades não pertinentes aparecem inativas. Esta alternativa oferece uma visão mais global das possibilidades de parâmetros associados aos objetos. A seguir são descritas as seis páginas temáticas: Definição: reúne as propriedades que definem a identidade do objeto (tipo, nome, fonte de dados, etc.). Comportamento: reúne as propriedades que definem o comportamento dinâmico dos objetos (método associado, arrastar e soltar, eventos de formulário). Dimensões: reúne as propriedades que definem as coordenadas, o tamanho e o redimensionamento do objeto. Valor: reúne as propriedades que definem a edição e a visualização dos objetos editáveis (controle de entrada, atalho de teclado, formato de saída, etc.). Aspecto: reúne as propriedades que definem a aparência gráfica dos objetos. Específico: reúne as propriedades específicas do tipo de objeto selecionado (mensagens de ajuda para campos, animação para botões imagem, parâmetros de impressão para formulários, etc.). Diferente das outras páginas temáticas, as propriedades não relevantes para o objeto não aparecem. Atalhos de movimentação Pode navegar na Lista de propriedades utilizando os seguintes atalhos de teclado: Flechas verticais ↑ ↓: para ir de uma célula a outra. Flechas horizontais ← →: para expandir/contrair temas ou menus. RePg e AvPg: para selecionar a primeira ou a última célula visível da Lista de propriedades. Início e Fim: para selecionar a primeira ou última célula da Lista de propriedades. Ctrl+clique (Windows) ou Comando+clique (Mac OS) em um evento: seleciona/deseleciona todos os eventos na lista, em função do estado inicial do evento no qual cique. Ctrl+clique (Windows) ou Comando+clique (Mac OS) em uma etiqueta de tema: colapsa/expande todos ls temas na lista. Ícones de cadeado Quando aplica a propriedade Modificável pelo usuário ao formulário, aparecem na lista de propriedades os ícones de bloqueio que indicam quais são as propriedades modificáveis ou não pelo usuário: - 246 - Para mais informação, consulte o parágrafo Editável pelo usuário. Usar as réguas As réguas do editor de formulários se extendem pela altura e largura do formulário. Pode ocultar as réguas para aumentar o espaço de sua área de trabalho na janela do Editor de formulários. Pode mostrar ou ocultar as réguas a qualquer momento, selecionando Réguas no submenu Exibir do menu Formulário ou no menu contextual do Editor de formulários (clique com o botão direito do mouse na área de trabalho, sem selecionar nenhum objeto). As réguas contém marcadores que indicam a posição do cursor quando cria ou redimensiona um objeto. Enquanto estiver movendo o objeto, os marcadores mudam para indicar os limites superior, inferior, direito e esquerdo do objeto. Os marcadores dos objetos permitem alinhar outros objetos na mesma posição das réguas. Pode modificar as unidades de medida das réguas segundo suas preferências. Para definir a unidad de las réguas: 1. Selecione Definir unidades no menu Formulário (um formulário deve estar selecionado para que esse menu seja visível). mostra a caixa de diálogo Definição da régua. 2. Clique na unidade de medida que deseja utilizar. Clique em Pontos para mostrar as réguas em escala de pontos. Um ponto equivale a largura de um pixel. Uma polegada tem 72 pontos. Clique em Centímetros para mostrar as réguas em sistema métrico. Clique em Polegadas para mostrar as réguas em sistema inglês (polegadas e pés). 3. Clique no botão Ok. 4D muda a unidade de medida para a escala selecionada. As coordenadas dos objetos também utilizarão as mesmas unidades. - 247 - Propriedades de formulário As propriedades de um formulário são definidas na Lista de propriedades de Editor de formulários. Algumas propriedades do formulário podem ser definidas utilizando a janela propriedades do Explorador. Para mais informação, consulte a seção Propriedades de formulário (Explorador). Propriedades Gerais Tipos de formulários Pode mudar o tipo de formulário, ou seja, seu propósito. Para os formulários de projeto, há dois tipos disponíveis: Formulário detalhado e Formulário de impressão detalhado. Para os formulários tabela, há dois tipos adicionais: Formulário listado e Formulário de impressão listado. Esta propriedade determina as opções presentes na lista de propriedades para o formulário. Esta propriedade também permite restringir o número de formulários mostrados nas listas de seleção de formulários de entrada e de saída atuais (a janela Lista de tabelas, ver a seção Navegar entre tabelas e formulários): apenas são mostrados os formulários cujo tipo corresponde à lista. A propriedade Tipo de formulário se encontra na parte superior da lista de propriedades. Quando o formulário é do tipo Nenhum, aparece em ambos menus da Lista de tabelas. Nota: igualmente pode definir o tipo de formulário utilizando a janela de propriedades própria do Explorador (consulte a seção Propriedades de formulário (Explorador)). Formulários herdados Estas propriedades são descritas na seção Formulários Herdados. Título padrão de janela O nome automático da janela é utilizado quando o formulário é aberto usando as funções Open window e Open form window em aplicações personalizadas. O título automático da janela aparece na barra de título da janela. Para definir o título automático da janela, escreva o nome na área Título da janela. Pode utilizar referências dinâmicas para definir o título da janela: Uma referência XLIFF padrão (ver MissingRef). Uma etiqueta de um campo ou de uma tabela: a sintaxes a aplicar é do tipo <?[NumTabela]NumCampo> ou <? [NomeTabela]NomeCampo>. O valor dessas referências se calcula no momento da execução dos comandos INPUT FORM (se é passado o parâmetro * e está seguido por uma chamada a Open window) e quando se chama o comando Open form window. Uma variável ou um campo: a sintaxe a aplicar é <NomeVariavel> ou <[NomeTabela]NomeCampo>. O valor atual da variável ou do campo se mostrará no título da janela. Notas: O número de caracteres para o título de uma janela está limitado a 31. Também pode definir o título da janela desde a janela de propriedades especifica del Explorador (ver Propriedades de formulário (Explorador)). Editável pelo usuário A propriedade Modificável pelo usuário permite indicar que o formulário pode ser personalizado pelos usuários desde o editor de formulários em modo Aplicação (ver Formulários de usuário). Para utilizar estes mecanismos é necessário definir parâmetros adicionais, os quais são descritos na seção Formulários de usuário do manual de Linguagem 4D. Quando a propriedade Modificável pelo usuário estiver selecionada, o formulário é bloqueado. Quando abrir um formulário com essa propriedade, aparece um ícone de cadeado na barra de ferramentas, e não é possível realizar modificações. Deve clicar nesse ícone para desbloquear o formulário, nesse caso, os possíveis formulários usuários são convertidos em obsoletos e devem ser regenerados. Quando a propiedade Modificável pelo usuário estiver selecionada, la lista de propriedades também fica com cadeados indicando as propriedades que foram bloqueadas. Pode clicar nesses ícones para "abrir" os cadeados e assim fazer com que as propriedades correspondentes voltem a ser modificáveis no editor de formulários de usuários. . - 248 - Nota: também pode definir a propriedade Modificável pelo usuário utilizando a janela de propriedades especifica desde o Explorador (consulte Propriedades de formulário (Explorador)). Memorizar Geometria Quando a opção Memorizar geometria está selecionada, se a janela é aberta com o comando Open form window com o parâmetro *, vários parâmetros do formulário serão guardados automaticamente por 4D quando a janela seja fechada, independentemente da forma em que foram modificados durante a sessão: a página atual, a posição, o tamanho e a visibilidade de cada objeto do formulário (incluindo o tamanho e a visibilidade das colunas de list box). Nota: esta opção não leva em conta os objetos gerados com o comando OBJECT DUPLICATE. Para que um usuário recupere seu entorno quando utilize este comando, o desenvolvedor deve repetir a sequência da criação, definição e posicionamento dos objetos. Quando se seleciona esta opção, a opção Memorizar valor também está disponível para certos objetos. Para mais informação e alguns exemplos de seu uso, consulte Memorização da geometria das janelas. Não inverter objetos (Windows) A opção Não invertir objetos permite desativar o modo "direita para esquerda" para o formulário. O modo "direita para esquerda" (apenas para o sistema Windows) inverte os objetos e títulos dos formulários do banco de dados. Esse modo é utilizado no contexto de idioma que são lidos da direita para a esquerda (como o árabe). Para mais informação sobre a ativação desse método, consulte o parágrafo "Idiomas de direita para a esquerda" na seção OBJECT Get enabled. Quando a opção Não inverter objetos estiver selecionada para um formulário, o modo direita para a esquerda não se aplica a este formulário em modo Aplicação, sem importar a configuração do banco de dados. Essa opção pode ser utilizada, por exemplo, para definir formulários "internacionais" em um banco de dados configurado em modo direita para esquerda. Essa opção é encontrada na lista de propriedades, como também em uma caixa de diálogo Propriedades de formulário (Explorador). Nota: esta propriedade também pode ser manejada por programação usando o comando GET FORM PARAMETER. Tamanho de janela de formulário Um formulario sempre é mostrado numa janela. 4D permite definir o tamanho do formulário e da janela, assim como seu comportamento respectivo em caso de redimensionamento. Estas propriedades são interdependentes e a interface de sua aplicação é o resultado de sua combinação. Atenção que o resultado também é dependente das propriedades de redimensionamento atribuídas a cada objeto do formulário (para mais informação, consulte ). Tamanho de formulário Defina as propriedades de tamanho do formulário no tema “Tamanho do formulário” da Lista de propriedades. As seguintes opções estão disponíveis: Tamanho baseado em: Tamanho automático: o tamanho do formulário será o necessário para mostrar todos os objetos que ele contiver; neste caso as outras duas opções permitem adicionar Margem horizontal e Margem Vertical (em píxeis). Tamanho baseado em: Ajustar tamanho: o tamanho do formulário estará baseado no valor que você defina (em píxeis) nos campos Largura e Altura (ao selecionar Ajustar tamanho, as opções Margem horizontal e Margem vertical se transformam em Largura e Altura). Tamanho baseado em: um objeto: o tamanho do formulário estará baseado na posição do objeto do formulário selecionado. Por exemplo, se escolher um objeto localizado na parte inferior direita, o tamanho do formulário será um retângulo cuja esquina superior esquerda será a origem do formulário e a esquina inferior direita corresponderá à parte inferior direita do objeto selecionado, mais os valores de margens. Pode utilizar essa opção quando queira utilizar os objetos ativos localizados fora da área visível (ou seja, fora do retângulo da janela) com uma janela de tamanho automático. Devido à essa opção, a presença desses objetos não modificará o tamanho da janela. Quando seleciona a opção Tamanho automático ou um tamanho baseado em um objeto, dispõe dos campos Margem horizontal e Margem vertical. Pode introduzir os valores (em píxeis) para definir margens adicionais para ser adicionadas às margens do formulário. Estes valores também determinam as margens superior e direita dos formulários utilizados no Editor etiquetas. Nota: para os formulários de saída, só estão disponíveis os campos Margem horizontal ou Largura. Ajuste dinâmico: a propriedade Ajuste dinâmico está disponível no tema “Tamanho do formulário” para os formulários convertidos de versões anteriores de 4D, quando a propriedade Tamanho automático está selecionada. Esta propriedade permite modificar o modo de redimensionamento dos formulários. Nas versões anteriores de 4D, quando um formulário tinha a propriedade Tamanho automático, o tamanho do formulário se calculava só no momento de ser - 249 - aberto. Se havia alguma mudança posterior utilizando comandos como OBJECT MOVE, o tamanho do formulário não se ajustava. Além disso, o tamanho do formulário se ajusta dinamicamente neste caso. Este princípio se ativa para novos formulários. Por outro lado, por razões de compatibilidade, os formulários de bancos de dados convertidos não se beneficiam desta propriedade automática. Se deseja que o tamanho dos formulários convertidos se ajuste dinamicamente, marque a opção Ajuste dinâmico. Tamanho de janela Quando um formulário de entrada é mostrado em uma aplicação personalizada, geralmente é aberto usando as funções Open window ou Open form window. Open window permite definir as coordenadas superior, esquerda, inferior e direita, e o tipo da janela. Neste caso, o tamanho da janela não depende do tamanho do formulário. Por outro lado, as possibilidades de redimensionamento dependem das opções definidas no tema "Tamanho do formulário" e do tipo de janela. Open form window cria uma nova janela baseada nas propriedades de tamanho e redimensionamento do formulário passadas como parâmetros. Pode definir o redimensionamento da janela do formulário na Lista de propriedades. As seguintes opções estão disponíveis: Com restrições: esta propriedade está disponível para os formulários convertidos desde uma versão anterior de 4D. Se utiliza para reproduzir o funcionamento da antiga propriedade do formulário “Redimensionável”: quando esta opção não está selecionada, os mecanismos que manejam o redimensionamento de objetos e as restrições do tamanho das janelas são desativadas. Desse modo, o usuário pode redimensionar livremente a janela do formulário mas os objetos que contém não são redimensionados nem movimentados. As propriedades do tamanho mínimo e máximo ou fixo assim como as propriedades de redimensionamento dos objetos são ignoradas. Este funcionamento corresponde às antigas versões de 4D e só devem ser usadas por razões de compatibilidade em interfaces específicas. O funcionamento dos bancos de dados 4D atuais corresponde à opção selecionada (modo padrão). Largura fixa: se seleciona esta opção, a largura da janela será bloqueada e o usuário não poderá redimensioná-la. Se essa opção não estiver selecionada, a largura da janela do formulário poderá ser modificada. Nesse caso, as áreas de entrada Largura mínima e Largura máxima podem ser usadas para determinar os limites de redimensionamento.. Altura fixa: se marca esta opção, a altura da janela será bloqueada e o usuário não poderá redimensionar verticalmente a janela do formulário. Se essa opção não estiver selecionada, a altura da janela do formulário poderá ser modificada. Nesse caso, as áreas de entrada Altura mínima e Altura máxima podem ser usadas para determinar os limites de redimensionamento. Como regra geral, é necessário evitar que o usuário oculte as áreas editáveis e os botões de controle. Aparência Plataforma A propriedade de interface de plataforma permite definir a aparência do formulário segundo o contexto de execução. Essa propriedade também pode ser definida individualmente para cada objeto do formulário (consulte LOG EVENT) Duas propriedades de interface estão disponíveis: Sistema e Impressão. São usadas quando, na tela, um formulário deve respeitar a interface do sistema operativo atual (sistema) ou quando um formulário é para impressão, a aparência dos objetos deve ser adaptada (Impressão), sem importar a plataforma. Sistema: esta propriedade permite adaptar automaticamente a aparência do formulário ou do objeto em função da plataforma atual de execução de 4D: Quando o formulário é mostrado em Mac OS X, o formulário ou o objeto tem a aparência Mac OS X, Quando o formulário é mostrado em Windows, o formulário ou o objeto tomam a aparência definida no parâmetro “Aparência” atual das propriedades de visualização do painel de controle. Este modo é utilizado automaticamente para todos os formulários e objetos dos bancos criados com 4D a partir da versão 2004. Impressão: essa propriedade permite adaptar a aparência do formulário ou do objeto a imprimir: qualquer objeto ou elemento gráfico (botão, caixa de seleção, aba, linha, etc.) é desenhado como um vetor com o propósito de produzir um resultado satisfatório de impressão. O mesmo resultado é obtido sem importar a plataforma onde se mostre ou imprima o formulário. Opções de aparência para Mac OS Pode definir duas opções específicas para configuras a aparência do formulário em Mac OS: Aparência metalizada e Botão barra de ferramentas. Quando o formulário é executado em Windows, essas opções não têm efeito. Aparência metalizada (Mac OS): esta propriedade de formulário permite ativar o modo de aparência texturizada para o formulário quando se mostra utilizando o comando Open form window em Mac OS. Esta aparência se encontra com frequência na interface Mac OS X: - 250 - Se o formulário é mostrado em uma janela que não foi criada pelo comando Open form window (por exemplo no modo Desenho), a propriedade não será considerada. Em Mac OS, o efeito aparência metalizada é pré-visualizado no editor de formulários quando se seleciona a opção Aparência metalizada e são mostrados os limites do formulário. Botão barra de ferramentas (Mac OS): esta propriedade permite mostrar o botão de gestão da barra de ferramentas em Mac OS. Este botão padrão permite alternadamente mostrar ou ocultar a barra de ferramentas da janela: Utilize esta opção se criar a janela com o comando Open form window ou DIALOG por exemplo. Isto equivale a utilizar a constante Has toolbar button Mac OS com o comando Open window ou Open form window. Nota: o evento de formulário On Mac toolbar button se gera quando o usuário clicar no botão. É tarefa do desenvolvedor da interface especificar as ações a ser realizadas quando se clica no botão. Esconder caixa de redimensionamento Esta opção permite controlar a presença de uma caixa de redimensionamento na janela do formulário. Essa opção é considerada quando se chama o formulário através do comando DIALOG por exemplo. Imprimir As propriedades de impressão estão descritas na seção Imprimir um formulário. Atribuir uma barra de menu a um formulário Quando cria uma aplicação, pode criar menus personalizados. Os menus personalizados permitem adicionar comandos de menus que automatizem as ações comuns associadas a um formulário particular, como por exemplo a geração de um informe. Os menus personalizados são criados no editor de barras de menus. Cada barra de menu que criar tem pelo menos um menu, um nome e um número de identificação únicos. Para mais informação sobre a criação de barras de menus, menus e comandos de menus, consulte Menus e barras de menus. Para associar uma barra de menus a um formulário, selecione uma barra de menus na lista "Barra de menus associada" na Lista de propriedades. O botão [...] permite acessar diretamente o editor de Menus e barras de menus. Em modo Aplicação, uma barra de menus associada a um formulário se adiciona do lado direito da barra de menus atual. Se a barra de menus do formulário é idêntica à barra de menus atual, não é adicionada. A barra de menus de um formulário opera para os formulários de entrada e saída. A opção Barra de menus ativa aparece quando seleciona uma barra de menus. Se deseja utilizar este formulário em uma aplicação personalizada, selecione a opção Barra de menus ativa. Esta opção indica a 4D que não desative a barra de menus atual. Se esta opção não estiver selecionada, 4D desativa a barra de menus atual e apenas permite acesso à barra de menus associada ao formulário. Nota: também pode associar uma barra de menus ao formulário na caixa de diálogo Propriedades de formulário (Explorador). Controlar acesso ao formulário Pode controlar o acesso a um formulário estabelecendo os privilégios de Acesso e Proprietário para os grupos de usuários. Apenas pode associar um grupo de usuários a cada privilégio usando as listas de Acesso e Proprietário. Para mais informação sobre a criação de um sistema de acesso por senhas com usuários e grupos, consulte o capítulo Usuários e grupos. - 251 - A lista Acesso define qual grupo pode utilizar o formulário na janela de visualização de registros ou em uma aplicação personalizada. Se um usuário que não pertence a este grupo intenta utilizar o formulário, 4D mostrará uma mensagem indicando ao usuário que sua senha não permita acessar ao formulário. A lista Proprietário determina que grupo pode modificar o formulário no ambiente Desenho. Se um usuário que não pertença a este grupo tenta abrir o formulário no ambiente Desenho, 4D mostrará uma mensagem indicando ao usuário que não tem privilégios para modificar o formulário. Os usuários que pertencem aos dois grupos podem utilizar o formulário no ambiente Desenho ou em aplicações personalizadas. Para definir os privilégios de acesso de um formulário: 1. Exibir as propriedades do formulário na Lista de propriedades. 2. Utilize as listas Acesso e Proprietário para afetar os privilégios necessários. Os nomes dos grupos existentes são mostrados em cada lista. O botão [...] permite acessar diretamente à página Grupos na Caixa de ferramentas de 4D. Também pode atribuir grupos de acesso a um formulário na caixa de diálogo Propriedades de formulário (Explorador). Ajuda 4D permite associar um arquivo de ajuda em linha personalizada para cada banco. A criação de arquivos de ajuda é descrita em Apêndice A: Designar um arquivo de ajuda personalizado. Um arquivo de ajuda pode ser contextual, ou seja, pode mostrar informação relacionada com o contexto desde o qual foi chamado. Para isso, pode associar um Número de tema de ajuda a um formulário e o mesmo número à seção ou à página correspondente do arquivo de ajuda. Esta operação se realiza no tema “Ajuda” da Lista de propriedades. Ação O botão Editar... permite acessar ao método do formulário. Este tema é tratado na seção Editar Métodos. Marcadores Esta área permite definir com precisão a localização dos marcadores na régua vertical do formulário. Os marcadores só são relevantes para os formulários de saída. Eles controlam a informação que é mostrada e definem as áreas de cabeçalho e rodapé do formulário. Para mais informação sobre o uso de marcadores de controle, consulte Usar linhas de controle de saída. Nota: o marcador localizado na régua horizontal controla o tamanho das etiquetas quando cria um formulário com o objetivo de imprimir etiquetas através do comando PRINT LABEL. Eventos - 252 - Esta área permite definir os eventos que podem chamar a execução do método formulário. Quando o formulário é usado, apenas ocorrerão os eventos que tenha selecionado. Se não selecionar nenhum evento, o método formulário não será chamado. Sua aplicação será executada mais rapidamente se desmarcar os eventos supérfluos. Para mais informação sobre os eventos disponíveis, consulte Form event. Para selecionar ou desmarcar todos os eventos, utilize a combinação Ctrl (em Windows) ou Comando (em Mac OS) e clique em um evento. - 253 - Propriedades de formulário (Explorador) É possível acessar as propriedades principais de um formulário na Página Formulários do Explorador. Clique no nome do formulário, logo clique no comando Propriedades do formulário.... no menu contextual (botão direito) ou no menu de opções da página. As propriedades são mostradas numa caixa de diálogo específica: A maioria das propriedades nessa caixa de diálogo (nome, acesso, plataforma, etc.) também podem ser definidas na Lista de propriedades do editor de formulários e são descritas na seção Propriedades de formulário. Entretanto, a propriedade "Publicado como subformulário no banco principal" (descrita a continuação) é encontrada nessa caixa de diálogo. Publicado como subformulário no banco principal Essa opção é útil no contexto do desenvolvimento de componentes que contém formulários (ver o parágrafo Compartilhar formulários). Para que um formulário de componente possa ser selecionado como subformulário em um banco local, deve ter sido escolhido explicitamente como "Publicado como subformulário no banco principal": para fazer isso, selecione a opção Publicado como subformulário no banco local. Apenas os formulários projeto podem ser especificados como subformulários publicados. Para mais informação sobre a definição e utilização de subformulários de componentes, consulte a seção Desenvolver componentes. - 254 - Criar um formulário multi-página Pode criar várias páginas para um formulário de entrada. Se tem mais campos dos que cabem em uma tela, pode criar páginas adicionais parar que os mostre. Utilizar páginas múltiplas permite: Colocar a informação mais importante na primeira página, e a informação secundária nas demais páginas. Organizar as páginas por temas. Reduzir ou eliminar a necessidade de rolagem da tela durante a entrada de dados. Ter espaço ao redor dos elementos do formulário para obter um design de tela mais atrativo. Os formulários de páginas múltiplas são convenientes para os formulários de entrada, não para as impressões. Ao imprimir um formulário multi-páginas, apenas se imprime a primeira pãgina. Não há limite no número de páginas que um formulário pode ter. Um mesmo campo pode aparecer várias vezes em um formulário e em tantas páginas quanto deseje. Entretanto, maior o número de páginas, maior o tempo para mostrar o formulário. Um formulário multi-páginas tem uma página de fundo (página 0) e várias páginas de visualização. No editor de formulários, os objetos localizados na página de fundo são visíveis em todas as páginas, mas somente podem ser selecionados e editados na páginas 0. Nos formulários multi-páginas, deve colocar a palheta de botões na página de fundo. Também é necessário incluir um ou mais objetos na página de fundo, que permitam ao usuário navegar de uma página a outra. Para mais informação sobre como adicionar ferramentas de navegação de páginas, consulte o parágrafo Agregar controles de navegação de página. Nota: a página Opções do assistente de criação de formulários contém uma opção que permite criar automaticamente um formulário mult-ipáginas se o número de campos não se ajustan em uma página. Se selecionar essa opção, o formulário pode ter mais de uma página de visualização. Quando o assistente de criação de formulários criar várias páginas, coloca automaticamente os botões, as variáveis, o título do formulário e os objetos decorativos na página 0 Adicionar uma página de exibição a um formulário Cada formulário tem pelo menos uma página de exibição e uma página de fundo. O número da página atual aparece na barra de ferramentas da janela do formulário. Essa área tem um menu destacável que permite navegar pelas diferentes páginas do formulário. Para adicionar uma página: 1. Selecione o comando Adicionar página no menu Formulário. 4D cria uma nova página. Ou 2. Vá à última página do formulário e clique no ícone Página Seguinte na barra de ferramentas. 4D mostra uma nova caixa de diálogo perguntando se deseja adicionar uma página. Clique no botão Ok para criar a nova página. Uma nova página vazia aparece na janela do editor de formulários. A área de número de página indica o número da página que está sendo visualizada. Também pode adicionar campos e outros elementos à nova página. Para inserir uma página antes da página atual: 1. Selecione o comando Inserir página no menu Formulário. 4D insere uma nova página antes da página atual e a mostra em tela. Mover-se entre páginas Para ver a página de fundo ou passar à outra página, pode usar as ferramentas de navegação da palheta de ferramentas ou o menu pop up da janela do editor de formulários. Para mostrar a página de fundo (página 0): 1. Vá para a primeira página do formulário e clique no ícone Página anterior Ou Utilize o menu de navegação para passar para a página 0. Ou Selecione 0 no submenu Ir a página do menu Formulário. - 255 - na barra de ferramentas. Ou Pressione Alt+clique (Windows) ou Opção+clique (Mac OS) em um objeto da página 0, ou fora de qualquer objeto da página atual (p atalho Alt+clique ou Opção+clique em um objeto da página atual cria ou abre o método do objeto). 4D mostra a página 0. A página 0 é a página de fundo. Os objetos da página 0 aparecem em todas as páginas. Pode colocar todo tipo de objeto na página de fundo. Nota: Não confunda a opção Ir a página > 0 com a opção Mostrar > Página 0. Esta última mostra ou oculta os elementos da página 0, estando em qualquer página. Para mais informação consulte “Mostrar/Ocultar elementos no editor de formulários” na seção Editor de formulários. Para utilizar as ferramentas de navegação de páginas: 1. Para passar a página seguinte, clique no ícone Página seguinte 4D mostra a página seguinte ou anterior à página atual. na barra de ferramentas. Se clicar no ícone Página anterior quando estiver na primeira página do formulário, aparece a página de fundo. Se clicar no ícone Página anterior estando na página de fundo, nada acontecerá. Se clicar em Página seguinte estando na última página do formulário, 4D perguntará se deseja adicionar outra página para o formulário. Para mostrar qualquer página: 1. Clique na área de número da página e pressione o botão do mouse para mostrar o menu pop-up associado. Ou Vá ao submenu Ir à página> do menu Formulário. 2. Selecione o número da página a mostrar. Eliminar uma página Pode apagar qualquer página de um formulário multi-páginas. Todos os campos e objetos nas páginas eliminadas também são eliminados. As páginas restantes são renumeradas. Não pode eliminar a primeira página ou a página de fundo (0) em um formulário que tenha apenas essas duas páginas. Para eliminar uma página de um formulário: 1. Utilize as ferramentas de navegação de páginas ou o menu pop-up para mostrar a página a ser eliminada. 2. Selecione a opção Eliminar página do menu Formulários. Aparece uma caixa de diálogo de verificação para confirmar se deseja eliminar a página do formulário. 3. Clique no botão Ok. São eliminados do formulário a página e os objetos que ela conter. Agregar controles de navegação de página Quando criar um formulário multi-páginas, é necessário oferecer aos usuários uma maneira de passar de uma página para outra. 4D oferece três formas de agregar ferramentas de navegação: Abas: as abas dão aos usuários acesso aleatório às páginas individuais. Localize a aba na página de fundo do formulário e utilize suas propriedades para proporcionar controles de navegação de páginas. Botões automáticos: pode agregar botões automáticos ao formulário, primeira página, última página, página seguinte, e página anterior. Estes botões devem estar localizados na página de fundo. Métodos de objeto: adicionalmente, a linguagem de programação inclui o comando FORM GOTO PAGE. É possível usar esse comando no método de objeto para criar controles de navegação personalizados. Por exemplo, pode utilizar o botão imagem ou um menu pop-up como interface de navegação entre páginas. Agregar botões de navegação Pode incluir os botões de navegação no momento em que está criando o formulário, usando a página Botões do assistente de criação de formulários. Uma vez gerado o formulário, abra o formulário no editor de formulários e e agregue as páginas que considere necessárias. Se necessita agregar botões de navegação de páginas depois de ter criado o formulário, pode usar a ferramenta de criação de botões da barra de objetos. Para mais informações, consulte Botões. Utilizar abas Uma aba permite um acesso direto a uma página. Ou seja, os usuários não estão obrigados a passar sequencialmente de uma página para outra. Uma aba oferece informação sobre a página atual e as páginas restantes. Para maior informação sobre a criação e ativação de abas, consulte Controle de abas. - 256 - Formulários Herdados 4D permite utilizar “formulários herdados”. O princípio dessa função consistente em poder usar objetos de um formulário A em um formulário B: o formulário B "herda" os objetos do formulário A. Suponhamos por exemplo que todos os formulários de entrada de um banco devam ter os botões Ok, Cancelar, Próximo e Anterior e um logo. Simplesmente crie um formulário que contenha apenas esses elementos e depois use-o como um formulário herdado em todos os formulários de entrada do banco. Cada formulário de entrada contém apenas os campos e objetos específicos para seu uso. Diferente dos "modelos" definidos no assistente de formulários (consulte Criar um modelo de formulário), a referência a um formulário herdado sempre permanece ativa: se um dos elementos do formulário herdade é mudado (por exemplo o estilo ou posição dos botões), todos os formulários que utilizam esse elemento também serão automaticamente modificados. Os formulários herdados são compatíveis com os formulários tabela e formulários projeto. Como funciona Durante o uso do banco, os objetos do formulário herdado são combinados dinamicamente com os objetos do formulário aberto. Esse mecanismo é muito similar aos mecanismos da "página 0" dos formulários, a diferença é que um formulário herdado pode ser aplicado ao conjunto de formulários do banco. Quando um formulário é executado, os objetos são carregados e combinados na seguinte ordem: 1. 2. 3. 4. Página zero do formulário herdado Página 1 do formulário herdado Página zero do formulário aberto Página atual do formulário aberto. Esta ordem determina a ordem de entrada de objetos no formulário. Nota: apenas as páginas 0 e 1 do formulário herdado podem aparecer em outros formulários. As propriedades (nome da janela, redimensionamento, eventos, etc.) e os métodos de um formulário herdado não são levados em consideração quando usados como um formulário herdado. Por outro lado, são chamados os métodos de objetos que contém. Definir um formulário herdado Se deseja definir um formulário como herdado, deve utilizar o editor de formulários 4D. Para definir um formulário herdado: 1. No editor de formulários, abra o formulário onde deseja utilizar o formulário herdado. 2. Exiba a Lista de propriedades e clique fora de todos os objetos do formulário para visualizar as propriedades do formulário. As listas "Tabela de formulário herdado" e "Nome de formulário herdado" estão disponíveis. Nessas listas aparecem todas as tabelas de seu banco de dados e seus formulários. 3. Selecione a tabela e o nome do formulário a herdar. Para herdar de um formulário projeto, selecione <Nenhum> na lista "Tabela do formulário herdado". Todos os formulários podem ser atribuidos como formulário herdado. Entretanto, os elementos do formulário devem ser compatíveis com a utilização das diferentes tabelas do banco de dados. - 257 - Depois de selecionar o formulário herdado, seu conteúdo aparece na janela atual do editor de formulários. Aparece apenas como "visualização prévia", e não é possível selecionar ou modificar um objeto nesse formulário. Para fazer isso, deve abrir o formulário em sua própria janela. Pode ocultar os objetos de um formulário herdado desmarcando a opção Formulário herdado no submenu Mostrar do menu Formulário ou no menu contextual do editor. Para não utilizar mais um formulário como formulário herdado, selecione a opção <Nenhum> na Lista de propriedades. Nota: é possível definir um formulário herdado em um formulário que se utilizará como formulário herdado de um terceiro formulário. A combinação dos objetos são efetuados de maneira recursiva. 4D detecta loops recursivos (por exemplo, se o formulário [tabela1]formulario1 está definido como formulário herdado de [tabela1]formulario1, ou seja, tem o mesmo nome) e interrompe a cadeia de formulários. - 258 - Modificar a ordem de entrada dos dados A ordem de entrada dos dados na qual os campos, sub-formulários e outros objetos ativos são selecionados quando pressiona a tecla Tab ou Enter em um formulário de entrada. É possível movimentar-se pelo formulário na direção oposta (ordem de entrada invertida) pressionando as teclas Shift + Tab ou Shif +Enter A ordem de entrada inclui cada área editável na qual pode entrar um valor. Os campos booleanos (que aparecem como botões de opção ou caixinhas de seleção), subformulários, combo boxes e áreas que aceitam imagens também são incluídas na ordem de entrada dos dados. Indicadores de progresso, réguas e dials também podem ser usados para introduzir dados. Esses objetos, entretanto, não são incluídos na ordem de entrada dos dados. Deve selecioná-los clicando neles. Se não especificar a ordem de entrada personalizada, 4D usa como padrão as capas de objetos para determinar a ordem de entrada na direção "fundo até primeiro plano". A ordem de entrada corresponde então à ordem de criação dos objetos no formulário. Em alguns formulários, é necessário definir uma ordem de entrada personalizada. Por exemplo, na seguinte imagem, foram adicionados campos relacionados com a direção depois da criação do formulário. A ordem de entrada resultante por padrão é ilógica e obrigado o usuário a introduzir os dados de uma forma incoerente.: En casos como este, a ordem de entrada personalizada permite introduzir os dados em uma ordem mais lógica: - 259 - Ver e mudar a ordem de entrada de dados Pode ver a ordem de entrada atual usando as marcas "Ordem de entrada" ou usando o modo "Ordem de entrada". Entretanto, apenas pode modificar a ordem de entrada usando o modo "Ordem de entrada". Este parágrafo descreve a visualização e modificação da ordem de entrada do formulário no modo "Ordem de entrada". Para mais informação sobre a visualização da ordem de entrada usando as marcas, consulte Usar as Marcas. Para ver ou modificar a ordem de entrada: 1. Selecione Ordem de entrada de dados no menu Formulário ou clique no botão da barra de ferramentas da janela. O cursor toma a forma de um cursor de ordem de entrada e 4D cria uma linha no formulário indicando a ordem em que os objetos serão selecionados durante a entrada de dados. Visualizar e modificar a ordem de entrada são as únicas ações que podem ser realizadas até que se selecione outra ferramenta na palheta de ferramentas. 2. Para modificar a ordem de entrada, coloque o cursor em um objeto no formulário e mantendo pressionado o botão do mouse, arraste o mouse até o próximo objeto na ordem de entrada. 4D ajusta a ordem de entrada de dados como resultado. 3. Repita o passo 2 tantas vezes quantas sejam necessárias até obter a ordem de entrada de dados que deseja. 4. Quando estiver satisfeito com a ordem de entrada, clique em outra ferramenta da barra de ferramentas ou selecione o comando Ordem de entrada de dados no menu Formulário. 4D volta ao modo de funcionamento normal do editor de formulários. Nota: apenas são mostradas a ordem de entrada da página atual. Se o formulário contém objetos editáveis na página 0 ou provenientes de um formulário herdado, a ordem de entrada por padrão é a seguinte: objetos da página 0 do formulário herdado > Objetos da página 1 do formulário herdado > Objetos da página 0 do formulário aberto > Objetos da página atual do formulário aberto. Determinar o primeiro objeto na ordem de entrada Todos os objetos editáveis fazem parte da ordem de entrada. Para definir o primeiro objeto da ordem de entrada de dados, deve modificar sua posição dentro dos níveis de formulário. O modo Ordem de entrada de dados deve estar desativado. Para definir o primeiro objeto da ordem de entrada: 1. Selecione o objeto a ser definido como primeiro da ordem de entrada. 2. Selecione Enviar ao fundo no menu Objeto. Ou Selecione Enviar ao fundo no submenu Nível no menu contextual do objeto. - 260 - 3. Selecione Ordem de entrada de dados do menu Formulário ou clique no botão da barra de ferramentas. O objeto selecionado passa a ser o primeiro na ordem de entrada e o objeto que estava de primeiro passa a ser o segundo. Agora pode arrastar o cursor de um objeto a outro segundo a ordem de entrada de dados que deseje aplicar. 4. Uma vez que tenha terminado, selecione novamente Ordem de entrada de dados no menu Formulário ou clique em outra ferramenta da barra de ferramentas. O editor de formulários volta ao seu funcionamento normal. Usar um grupo para a entrada de dados Enquanto modifica a ordem de entrada, pode selecionar um grupo de objetos do formulário de modo que a ordem de entrada seja aplicada aos objetos do grupo. Isso facilita definir a ordem de entrada de dados em formulários nos quais os campos estão organizados em grupos ou colunas. Para criar um grupo de entrada: 1. Selecione Ordem de entrada de dados no menu Formulário ou clique no botão da barra de ferramentas. 2. Desenhe um quadro de seleção ao redor dos objetos a agrupar para a entrada de dados. Ao liberar o botão do mouse, os objetos rodeados ou tocados pelo retângulo mantém a ordem de entrada de dados padrão. A ordem de entrada de dados para os demais objetos é ajustada conforme seja necessário. Excluir um campo da ordem de entrada Como padrão automático, todos os campos formam parte da ordem de entrada. Se deseja excluir um campo da ordem de entrada, conservando sua propriedade "Editável", apenas desmarque a propriedade Tabulável para esse campo. Para mais informação, consulte Controles de entrada de dados e ajuda de entrada. - 261 - Inserir e organizar objetos de formulário Adicionar objetos Pode adicionar objetos no formulário de diversas maneiras: desenhando o objeto diretamente no formulário após selecionar seu tipo na barra de objetos (ver Barra de objetos) arrastando e soltando o bojeto desde a barra de objetos Arrastando e soltando ou copiando e colando desde a biblioteca de objetos pré-configurados (ver Usar a biblioteca pré-configurada ou desde uma biblioteca personalizada (ver Criar e usar objetos de biblioteca personalizados), Arrastando e soltando um objeto desde outro formulário, Arrastando e soltando um objeto desde o Explorador (campos) ou desde outros editores no ambiente Desenho (listas, imagens, etc.) Logo que o objeto foi colocado no formulário, você pode modificar suas características com o editor de formulários. Pode trabalhar com dois tipos de objetos em seus formulários: Objetos estáticos (linhas, quadrados, imagens de fundo, etc.): esses objetos são usados geralmente para definir a aparência do formulário e suas etiquetas como também a interface gráfica. Esses objetos estão disponíveis na barra de objetos do editor de formulários. Também pode definir os atributos gráficos (tamanho, cor, fonte, etc) e suas propriedades de redimensionamento com a ajuda da lista de propriedades. Diferente dos objetos ativos, os objetos estáticos não tem variáveis associadas. Entretanto, pode inserir objetos dinâmicos em objetos estáticos (ver Usar referências em texto estático). Objetos ativos: estes objetos realizam tarefas ou funções na interface. Há vários tipos de objetos ativos: campos, botões, listas pop-up, etc. Cada objeto ativo está associado com um campo ou variável. Os objetos ativos são descritos no capítulo Trabalhar com objetos ativos. Selecionar objetos Antes de realizar uma operação sobre um objeto (como mudar a largura de uma linha ou fonte), deve selecionar o objeto que deseja modificar. Para selecionar um objeto utilizando a barra de ferramentas: 1. Clique sobre o botão Flecha na barra de ferramentas. Quando mover o cursor do mouse dentro da área do formulário, o cursor se transforma numa flecha. 2. Clique sobre o objeto que deseja selecionar. Os pontos de redimensionamento identificam o objeto selecionado. Para selecionar um objeto utilizando a Lista de propriedades: 1. Selecione o nome do objeto na lista de seleção localizada na parte superior da Lista de propriedades. Utilizando estes dois métodos, pode selecionar um objeto oculto atrás de outros objetos, ou localizado fora da área visível da janela. Para desmarcar um objeto, clique fora da margem do objeto ou clique no objeto mantendo a tecla Shift pressionada. Nota: também é possível selecionar objetos com um duplo clique neles na janela de resultados de uma busca no banco de dados. Para mais informação, consulte a seção Renomear. Se encontrar dificuldades ao tentar selecionar objetos criados pelo assistente de formulários, vá para a página de fundo clicando no botão selecionando 0 no menu de páginas, e tente novamente. Também pode pressionar a tecla Alt (windows) ou Opção (Mac) e clicar em um objeto na página 0 para acesso direto. Também pode ocultar todos os objetos da página de fundo desmarcando a opção Página 0 do submenu Exibir do menu Formulário (ou do menu contextual do editor - acessível com o botão direito do mouse). Selecionar múltiplos objetos É possível ter que realizar a mesma operação em vários objetos do formulário, por exemplo, mover, alinhar, ou modificar sua aparência. 4D permite selecionar vários objetos ao mesmo tempo. Há várias formas de selecionar vários objetos: Escolha Selecionar tudo no menu Editar para selecionar todos os objetos. Clique com o botão direito no objeto e selecione o comando Selecionar objetos similares no menu contextual. Mantenha pressionada a tecla Shift e clique nos objetos que queira selecionar. Clique fora do grupo de objetos que deseja selecionar e crie um marco (retângulo de seleção) ao redor de todos os - 262 - objetos que deseja selecionar. Todo objeto incluído nos limites do retângulo ou que toque esses limites é selecionada quando solta o botão do mouse. Mantendo pressionada a tecla Alt (Windows) ou Opção (Mac OS) e desenhando um retângulo de seleção. Todo objeto dentro do marco será selecionado. A seguinte imagem representa a seleção de objetos com a ajuda de um retângulo de seleção: Para desmarcar um objeto que faz parte de um conjunto de objetos selecionados, mantenha pressionada a tecla Shift e clique no objeto. Os demais objetos permanecem selecionados. Para desmarcar todos os objetos selecionados, clique fora dos limites de todos os objetos. Duplicar objetos Pode duplicar todo objeto do formulário, inclusive os objetos ativos. As cópias de objetos ativos conservam todas as propriedades do objeto original, incluindo nome, tipo, ação padrão, formato de saída, e método de objeto. Pode duplicar diretamente um objeto ou utilizar a caixa de diálogo Duplicar vários para duplicar um objeto mais de uma vez, igualmente nessa caixa de diálogo pode definir a distância entre os objetos duplicados. Quando duplica uma variável, pode usar funções específicas de duplicação que permitam incluir um número automáticos nos nomes das cópias. Para mais informação, consulte Duplicar em uma matriz . Para duplicar um ou mais objetos: 1. Selecione o objeto a duplicar. 2. Selecione Duplicar no menu Editar 4D cria uma cópia de cada objeto selecionado e coloca a cópia na frente e ao lado do objeto original. 3. Leve a cópia para a posição que deseja. Se usar novamente a opção Duplicar, 4D cria outra cópia de cada objeto e a posiciona exatamente na mesma distância e direção da primeira cópia. Se necessita distribuir cópias do objeto ao longo de uma linha, deve aplicar o seguinte processo: duplique o obojeto original, mova a cópia até a outra posição no formulário, e logo duplique a cópia. A segunda cópia se posiciona automaticamente na mesma relação da primeira cópia com o objeto original. As cópias posteriores também ficam na mesma relação com suas originais. A seguinte imagem mostra o funcionamento do posicionamento relativo das cópias: Duplicar vários A caixa de diálogo "Duplicar vários" aparece quando selecionar um ou mais objetos e escolher o comando Duplicar vários... no menu Objeto. - 263 - Na área superior, coloque o número de colunas e linhas de objetos a obter. Por exemplo, se deseja três colunas e duas filas de objetos, escreva 3 na área Coluna(s) e 2 na área Linha(s). Se deseja três cópias do objeto na mesma linha, escreva 4 na área Coluna(s) e deixe 1 na área Linha(s). Para as linhas e colunas, defina o espaço entre cada cópia. O valor deve ser expressado em pontos e será aplicado a cada cópia, em relação com o objeto original. Por exemplo, se deseja um intervalo vertical de 20 pontos, e a altura do objeto fonte é de 50 pontos, escreva 70 na área Intervalo para Coluna(s). Se deseja criar uma matriz de variáveis, selecione a opção Numerar as variáveis, e selecione a direção em que deseja numerá-las, por linhas ou por colunas. Esta opção está ativa apenas se o objeto selecionado for uma variável. Para mais informação sobre essa opção, consulte Duplicar em uma matriz . Mover objetos Pode mover todo objeto de um formulário, gráfico ou ativo, incluindo campos e objetos criados com um modelo. Para mover um objeto, tem as seguintes opções: arrastar o objeto Usar as teclas de flechas para mover o objeto pixel por pixel, Usar as teclas de flechas para mover o objeto por passos (20 em 20 pixels por padrão). Escrever manualmente as coordenadas do objeto na lista de propriedades dos objetos (esse ponto é descrito em "Redimensionar objetos" no próximo parágrafo). Quando começa a movimentar um objeto com a ajuda do mouse, suas marcas desaparecem. 4D mostra os marcadores que indicam a localização dos limites dos objetos nas réguas de maneira que possa deixá-los com mais exatidão no local desejado. Cuidado de não arrastar uma ou mais dessas marcas, porque redimensionaria o objeto. Pode pressionar a tecla Shift para movimentar com uma restrição. Quando a quadrícula magnética está ativada, os objetos são movimentados por etapas indicando os locais notáveis. Para mais informação, consulte Usar a quadrícula magnética. Para mover um objeto pixel por pixel: 1. Selecione o objeto ou grupo de objetos a ser movido. 2. Utilize as teclas de flecha para mover o objeto. Cada vez que pressionar uma tecla de flecha, a seleção se movimenta um pixel na direção da flecha. Para mover um objeto por passos: 1. Selecione o objeto a movimentar. 2. Pressione a tecla Shift e use as teclas de flecha para mover o objeto. Como padrão automático, os passos são de 20 pixels. Pode mudar esse valor em Página Formulários das Preferências. Agrupar objetos 4D permite agrupar objetos de modo que se possa selecionar, mover e modificar o grupo como se fosse um único objeto. Os objetos agrupados mantém a posição relativa aos demais. Geralmente se agruparia um campo com sua etiqueta, um botão invisível com seu ícone, etc. Os grupos podem ser parte de outros grupos. Quando redimensiona um grupo, todos os objetos no grupo são redimensionados proporcionalmente (exceto as áreas de - 264 - texto, as quais são redimensionadas por passos de acordo a seus tamanhos de fonte). Os grupos de objetos são necessários para o funcionamento coordenado dos botões de opção (ver Botões de opção e botões imagem de opção). Também são usados para sincronizar as Áreas de rolagem agrupadas. Pode desagrupar um grupo de objetos a qualquer momento, para tratar os objetos novamente como independentes. Um objeto ativo agrupado deve ser desagrupado antes de acessar suas propriedades ou seus métodos. Entretanto, é possível selecionar um objeto que pertença a um grupo sem ter que desagrupar, com, Ctrl+clique (Windows) ou Comando+clique (Mac OS) no objeto (o grupo deve ter sido selecionado previamente). A agrupação apenas afeta os objetos no editor de formulários. Quando o formulário é executado, todos os objetos agrupados (exceto os botões de opção e as áreas de deslocamento) se comportam como se estivessem desagrupados. Nota: não é possível agrupar objetos pertencentes a diferentes vistas. Apenas pode agrupar objetos da vista atual (consulte Modos de exibição de objetos). Para agrupar objetos: 1. Selecione os objetos a agrupar. 2. Selecione Agrupar no menu Objeto. Ou Clique no botão Agrupar na barra de ferramentas do editor de formulários. 4D marca os limites do grupo com pontos. Os objetos do grupo não tem marcas de seleção. Ao modificar o grupo de objetos, modifica todos os objetos do grupo. Para desagrupar um objeto: 1. Selecione o grupo de objetos a desagrupar. 2. Selecione Desagrupar no menu Objeto. Ou Clique no botão Desagrupar (variante do botão Agrupar), na barra de ferramentas do editor de formulários. Se Desagrupar está desativado, isso significa que o objeto selecionado já está separado em sua forma mais simples. 4D marca os limites dos objetos individuais com marcas de seleção. Alinhar objetos As ferramentas de alinhamento do editor de formulários ajudam a alinhar os objetos com outros objetos ou usando a quadrícula invisível do formulário. Pode alinhar objetos entre si, pela margem superior, inferior, esquerda ou direita, ou seu eixo central horizontal ou vertical. Pode alinhar diretamente uma seleção de objetos usando as ferramentas de alinhamento ou pode aplicar parâmetros mais avançados usando o assistente de alinhamento. Esse assistente permite, por exemplo, definir o objeto a utilizar como referência e pré-visualizar o alinhamento no formulário. Quando usar a quadrícula invisível, cada objeto pode ser alinhado manualmente com os outros baseado nas "línhas de guia" (linhas vermelhas pontilhadas) que aparecem ao se mover um objeto perto de outros. Ferramentas para alinhamento rápido As ferramentas de alinhamento da barra de ferramentas (ver Editor de formulários) e o submenu Alinhar do menu Objeto permitem alinhar rapidamente os objetos selecionados. Quando 4D alinha objetos, usa um dos objetos como referencial para alinhar os demais.O objeto referência é o mais próximo ao sentido de alinhamento selecionado. Por exemplo, se deseja alinhar um grupo de objetos à direita, o objeto localizado mais a direita será usado como referência para alinhar aos outros objetos. A imagem abaixo mostra objetos sem alinhar, "alinhamento à esquerda, "centrados horizontalmente" e "alinhamento à direita": - 265 - Assistente de Alinhamento A caixa de diálogo de alinhamento permite aplicar todo tipo de alinhamento e distribuição dos objetos selecionados. Para mostrar esta caixa de diálogo, selecione os objetos a alinhar e logo selecione o comando Alinhamento do submenu Alinhar no menu Objeto ou desde o menu contextual do editor. 1. Nas áreas “Alinhar esquerda/direita” e “Alinhar acima/abaixo”, clique sobre o ícone de alinhamento correspondente ao desejado. A área de exemplo mostra os resultados da sua seleção. 2. Para realizar um alinhamento usando o esquema padrão, clique em Visualizar ou Aplicar. Nesse caso 4D utiliza o objeto mais adiante na direção de alinhamento como âncora e alinha os outros objetos a esse objeto. Por exemplo, se alinhar um grupo de objetos à direita, os objetos são alinhados ao lado direito do objeto mais à direita do grupo. Ou: Para alinhar objetos a um objeto específico, selecione a opção “Alinhar sobre” e selecione então o nome do objeto de referência na lista de objetos. Neste caso, a posição do objeto de referência não muda. Pode pré-visualizar os resultados do alinhamento clicando em Visualizar. Os objetos aparecem alinhados temporariamente no editor de formulários, mas como a caixa de diálogo Alinhar e Distribuir permanece no primeiro plano ainda se pode cancelar ou aplicar o alinhamento. Nota: esta caixa de diálogo combina o alinhamento de objetos e sua distribuição em uma operação. Para mais informação sobre como distribuir objetos, consulte Distribuir objetos. Usar a quadrícula magnética O editor de formulários oferece uma quadrícula magnética virtual que ajuda a posicionar e alinhar os objetos em um formulário. O alinhamento automático dos objetos é baseada na posição relativa dos objetos entre si. Apenas se pode usála quando há pelo menos dois objetos presentes no formulário. O alinhamento automático funciona da seguinte maneira: quando desloca um objeto no formulário, 4D indica as possíveis posições para esse objeto, baseado nos alinhamentos notáveis relativos a outros objetos do formulário. Um alinhamento notável é estabelecido cada vez que: horizontalmente, os extremos ou centros de dois objetos coincidem, - 266 - verticalmente, os extremos de dois objetos coincidem. Quando isso acontece, 4D coloca o objeto na posição sugerida e mostra uma linha vermelha indicando o alinhamento notável considerado: 4D propõe uma distância de distribuição de objetos baseada em padrões de interface. Da mesma maneira que no alinhamento automático, linhas vermelhas indicam as distâncias notáveis quando são alcançadas. Esta operação aplica a todos os tipos de objetos de formulário. O alinhamento automático pode ser ativado ou desativado a qualquer momento usando o comando Alinhamento automático do menu Formulário ou do menu contextual do editor. Também se pode definir a ativação por padrão dessa característica desde a Página Formulários das Preferências da aplicação. Pode ativar ou desativar temporariamente o alinhamento automático quando selecionar um objeto, pressionando a tecla Ctrl (Windows) ou Controle (Mac OS). Nota: o alinhamento magnético também afeta o redimensionamento manual dos objetos. Distribuir objetos Pode distribuir objetos de modo a que haja um espaço idêntico entre eles. Pode fazer isso usando as ferramentas de distribuição da Palheta de ferramentas ou o assistente de alinhamento que permite alinhar e distribuir os objetos na mesma operação. Nota: quando o alinhamento automático estiver ativo, é oferecido um guia visual para distribuição ao se mover o objeto manualmente. Para mais informação, consulte a seção anterior. Para distribuir objetos com igual espaço entre eles: 1. Selecione três ou mais objetos e clique na ferramenta de distribuição desejada. 2. Na barra de ferramentas, clique na ferramenta de distribuição que corresponda ao desejado. Ou Selecione o comando do menu de distribuição do submenu Alinhar no menu Objeto. 4D distribui os objetos de acordo a sua escolha. Os objetos são distribuídos usando a distância entre os centros e a distância maior entre dois objetos consecutivos é utilizada como distância de referência. Para distribuir objetos utilizando a caixa de diálogo Alinhar e distribuir: 1. Selecione os objetos a distribuir. 2. Escolha o comando Alinhamento do submenu Alinhar no menu Objeto ou desde o menu contextual do editor. Aparece a seguinte caixa de diálogo: 3. Nas áreas Alinhar esquerda/direita e Alinhar acima/abaixo, clique no ícone de distribuição padrão. (ícone de repartição horizontal padrão) A área de exemplo mostra o resultado de sua seleção. 4. Para realizar uma distribuição utilizando o esquema padrão, clique no botão Visualizar ou Aplicar. - 267 - Neste caso, 4D realiza uma distribuição padrão, como foi descrito anteriormente nessa seção. Ou: Para fazer uma distribuição específica, selecionar a opção Distribuir (por exemplo se deseja distribuir os objetos baseado na distância ao lado direito). Esta opção age como um interruptor. Se estiver selecionada, muda a função dos ícones localizados abaixo dela: Horizontalmente, os ícones correspondem às seguintes distribuições: equidistante a margem esquerda, centro (hor.) ou margem direita dos objetos selecionados. Verticalmente, os ícones correspondem às seguintes distribuições: equidistante às margens superior, central (vert.) e inferior dos objetos selecionados. Pode pré-visualizar o resultado de seus parâmetros clicando no botão Visualizar: a caixa de diálogo Alinhar e distribuir fica em primeiro plano e o editor de formulários mostra os objetos alinhados e distribuídos. Apenas pode Cancelar ou Aplicar as mudanças. Nota: esta caixa de diálogo permite combinar o alinhamento e distribuição de objetos. Para mais informação sobre alinhar objetos, consulte Alinhar objetos. Superposição de objetos É possível que, em algum momento, necessite reorganizar objetos que impeçam ver os outros objetos no formulário. Por exemplo, pode desejar que um gráfico apareça atrás dos campos no formulário. 4D dá as seguintes opções para "superpor" os objetos no formulário, Enviar ao fundo, Trazer a frente, Trazer adiante, e Enviar atrás. Esses planos determinam a ordem de entrada por padrão (ver a seção Modificar a ordem de entrada dos dados. A seguinte imagem mostra objetos adiante e atrás de outros objetos: Para mover um objeto a outro nível, selecione e escolha: um dos comandos Enviar para trás, Trazer para frente, Avançar e Recuar no menu Objeto, um dos comandos do submenu Nível> do menu contextual do editor, um dos comandos associados ao botão de gestão dos planos da barra de ferramentas. Nota: quando vários objetos são superpostos, utilize o atalho Ctrl+clique/Comando+clique para selecionar um a um cada objeto, descendendo um nível até o fundo com cada clique. Para ordenar os diferentes planos, 4D sempre vai do fundo ao primeiro plano. Portanto, o plano anterior move a seleção de objetos de um plano ao último plano do formulário. O seguinte plano move a seleção a um nível atrás do formulário. Definir um modelo de objeto O comando Guardar como modelo, disponível no menu contextual do editor quando se clica sobre um objeto, guarda o objeto como modelo. Este modelo e suas propriedades são utilizadas para a criação de objetos do mesmo tipo. No próximo exemplo, o comando é aplicado a um objeto do tipo Texto. Todos os objetos de tipo Texto criados depois utilizarão por padrão as propriedades definidas para esse objeto: - 268 - Pode utilizar um modelo personalizado para cada tipo de objeto. Há apenas um modelo personalizado por tipo objeto para todo o banco. O modelo guarda todas as propriedades do objeto definidas quando se executa o comando, exceto as coordenadas absolutas e o método do objeto (se aplicável). Eliminar modelos de objetos Para modificar ou substituir um modelo de objeto, deve criar um novo para o tipo de objeto em questão. Também pode eliminar todos os modelos de objeto (e regressar aos modelos padrão) utilizando o comando Apagar todos os modelos personalizados no menu Objeto do Editor de formulários. Quando seleciona este comando aparece uma caixa de diálogo de confirmação. Se confirmar esta caixa de diálogo, todos os modelos de objetos são reinicializados em seus valores padrão. - 269 - Definir as propriedades de visualização dos objetos Todos os objetos em um formulário têm propriedades para definir sua aparência, sua visualização, e seu redimensionamento no modo Aplicação. Essas propriedades estão disponíveis usando a Lista de propriedades (ver a seção Editor de formulários). As propriedades específicas dos objetos dinâmicos são discutidas nos seguintes capítulos: Trabalhar com objetos ativos, List boxes e Subformulários e widgets. Tamanho dos objetos Para definir o tamanho de um objeto no editor de formulários, é possível: Mover uma de suas marcas de seleção. Redimensionar o objeto pixel por pixel utilizando a tecla Ctrl (Windows) ou Comando (Mac OS) e as teclas de flechas. Redimensionar o objeto por passos (o padrão é de 20 píxeis por vez). Introduzir manualmente as novas dimensões do objeto na Lista de propriedades. O redimensionamento de um objeto através de suas marcas de seleção é feito de maneira padrão. Se pressionar a tecla Shift e arrasta a marca, o movimento é restrito. As linhas apenas podem ser verticais, horizontais ou de 45º, os retângulos são quadrados e os ovais são circulares. Se o alinhamento magnético estiver ativo, o redimensionamento manual se realizará em incrementos de 5 píxeis. Para mais informação, consulte Usar a quadrícula magnética. Para redimensionar um objeto píxel por píxel, selecione o objeto e mantenha pressionada a tecla Ctrl (Windows) ou Comando (Mac OS) e use as teclas de flecha para redimensionar o objeto. As teclas Acima ou Abaixo redimensionam a altura do objeto, enquanto as teclas Esquerda ou Direita redimensionam a largura do objeto. Ao manter pressionada a tecla Shift ao mesmo tempo em que se realiza o redimensionamento por passos (como padrão, os passos são de 20 píxeis). Pode mudar esse valor em Página Formulários das Preferências. Para mover ou redimensionar um objeto introduzindo manualmente suas coordenadas, selecione o objeto e expanda o tema "coordenadas e dimensões" na Lista de propriedades. As coordenadas do objeto são expressas em píxeis, centímetros, ou polegadas (dependendo da régua). A origem das coordenadas (0,0) está localizada na parte superior esquerda do formulário. Introduza os novos valores nas áreas de entrada das coordenadas. 4D move as margens do objeto de acordo com os valores introduzidos. Dependendo desses valores, pode ser que o objeto se movimento, seja redimensionado, ou as duas coisas. - 270 - Nota: em um contexto multi-plataforma, a aplicação de folhas de estilo pode fazer com que a altura do objeto varie, já que sua altura é ajustada automaticamente de modo a que seja um múltiplo da altura da fonte definida para a plataforma atual. Para mais informação sobre as folhas de estilo, consulte o capítulo Folhas de estilo. Tamanho automático Pode redimensionar as áreas de texto estático e as imagens para obter uma visualização ótima levando em conta suas características gráficas atuais (tamanho de fonte, estilo, etc.): 1. Clique com o botão direito em um objeto e escolha o comando Tamanho automático no menu contextual. Ou Pressione a tecla Ctrl (em Windows) ou Comando (em Mac OS) e clique na esquina inferior direita do objeto. Este comando produz os seguintes efeitos: As áreas de texto estático, caixas de seleção, botões de opção e os botões são redimensionados de modo a que seu conteúdo corresponda exatamente a seus limites. Os campos e variáveis são redimensionados de modo a que sua altura corresponda ao tamanho de fonte e sua largura seja de 100 pontos, se o tamanho do objeto é maior que esse tamanho mínimo, o comando não tem efeito. Imagens e botões imagem são visualizados usando o tamanho original da imagem fonte. As áreas de rolagem e as listas hierárquicas são visualizadas a uma altura dependente do tamanho da fonte atual. Os combo boxes, menus/listas suspensos e menus suspensos hierárquicos, são visualizados com sua altura mínima por padrão se a altura atual é insuficiente. Rádio da esquina (retângulos) A propriedade Rádio da esquina se encontra no tema "Coordenadas e dimensões" da Lista de propriedades para os objetos de tipo Retângulo arredondado: Por padrão, o valor do rádio de retângulos arredondados é de 5 píxels. Pode mudar esta propriedade para desenhar retângulos arredondados com formas personalizadas: O valor mínimo é 0, neste caso se desenha um retângulo arredondado não padrão. O valor máximo depende do tamanho de retângulo (que não pode exceder a metade do tamanho do lado mais curto do retângulo) e se calcula de forma dinâmica. Também pode definir esta propriedade utilizando os comandos OBJECT Get corner radius e OBJECT SET CORNER RADIUS. Redimensionar - 271 - No modo Aplicação, quando um usuário redimensiona a janela de um formulário, os objetos que contém podem ser redimensionados ou movidos. O redimensionamento automático é realizado quando um usuário redimensiona uma janela de um formulário. O redimensionamento automático faz com que, ao aumentar um formulário, o objeto aumente também, ou que se reduza ao se reduzir o tamanho de uma janela. Por exemplo, se usar um retângulo que contenha os campos em um formulário de entrada, o redimensionamento automático fará com que o retângulo cresça na direção das margens da janela, quando o usuário aumente o tamanho da janela. Também é possível ativar o reposicionamento automático. O reposicionamento automático move um objeto horizontal ou verticalmente à medida em que o formulário é redimensionado. Quando o reposicionamento automático está ativo, 4D tenta manter o objeto à vista enquanto o usuário reduz o tamanho da janela. Por exemplo, se o usuário redimensiona uma fila de botões de maneira a que alguns botões fiquem ocultos, o reposicionamento automático tenta mover os botões vertical ou horizontalmente, para que permaneçam visíveis. O redimensionamento e o reposicionamento automático são definidos nas propriedades dos objetos. Há duas linhas, Dimensionamento horizontal e Dimensionamento vertical, para as quais se pode atribuir três propriedades (Nenhum, Aumentar e Mover). Opción Resultado Dimensionamento horizontal: Aumentar Dimensionamento horizontal: Mover Dimensionamento vertical: Aumentar Dimensionamento vertical: Mover Quando o usuário redimensiona a largura da janela, 4D aplica a mesma porcentagem à largura do objeto. Quando o usuário redimensiona a largura da janela, 4D move o objeto para a direita ou esquerda na mesma quantidade. Quando o usuário redimensiona a altura da janela, 4Daplica a mesma porcentagem à altura do objeto. Quando o usuário redimensiona a altura da janela, 4D move o objeto para cima ou para baixo na mesma quantidade. As opções de reposicionamento permitem aos objetos ser movimentados na direção especificada para permanecerem visíveis. Quando se utiliza a opção Nenhum, o objeto permanece quieto ao se redimensionar o formulário. Deslocamento lateral Em 4D, o extremo inferior direito das janelas pode ser utilizado para definir os limites padrão. Isso significa que os objetos que são encontrados à direita ou abaixo dos limites da janela na tela, são automaticamente deslocados até a direita ou até abaixo quando se aumenta o tamanho da janela: Nota: este princípio não funciona com janelas que tem barras de rolagem. Invisível por padrão Pode associar a propriedade Invisível por padrão com a maioria dos objetos de formulário. Esta propriedade simplifica o desenvolvimento de interfaces dinâmicas. Nesse contexto, com frequencia é necessário ocultar objetos por programação durante o evento On load do formulário para só então mostrá-los. A propriedade Invisível por padrão permite inverter esta lógica, fazendo com que certos objetos sejam invisíveis por padrão. O desenvolvedor pode então programar sua exibição com o comando OBJECT SET VISIBLE de acordo com o contexto. Para mais informação sobre este comando, consulte o manual de Linguagem 4D. Nota: não confunda esta propriedade com a propriedade Invisível dos menus suspensos, que permite que não se desenha o objeto enquanto ainda permanece ativo. Plataforma - 272 - Pode definir a interface da plataforma para cada objeto por separado, para fazer isso, há as seguintes opções: Herdada do formulário: a interface da plataforma do objeto é a mesma do formulário. A interface da plataforma do formulário é definida em Propriedades de formulário. Sistema: sem importar a plataforma definida a nível do formulário, o objeto é desenhado em função da plataforma de execução da aplicação. Impressão: sem importar a plataforma definida ao nível do formulário, o objeto é desenhado da maneira que seja apropriada para impressão. Nota: se o banco foi convertido de uma versão anterior de 4D, as propriedades adicionais de plataforma estão disponíveis. Para mais informação sobre as propriedades de plataforma, consulte a seção Propriedades de formulário. Fundo e margem As propriedades de fundo e margem permitem modificar as linhas de margem e a aparência gráfica dos objetos. Transparente O atributo Transparente está disponível no tema "Fundo e borda" para os objetos que podem ser opacos ou transparentes: campos, variáveis, list boxes, botões, imagens ou textos estáticos, etc. Pode mudar o fundo do objeto para transparente de maneira que fique com a mesma cor do fundo do formulário. Os exemplos a seguir mostram uma imagem estática sem e com o atributo Transparente: Estilo da Borda Pode definir o estilo da borda para a maioria dos objetos utilizando o tema "Fundo e margem" da Lista de propriedades ou o submenu Estilo da borda do menu contextual. Tem as seguintes opções disponíveis: Transparente: os objetos aparecem sem borda. Plano: os objetos aparecem bordeados por uma linha contínua de 1 ponto. Pontilhado: os objetos aparecem bordeados por uma linha pontilhada de 1 ponto. Elevado: os objetos aparecem bordeados com um efeito 3D elevado Profundo: os objetos aparecem bordeados com um efeito 3D profundo. Dobro: os objetos aparecem bordeados com uma linha dupla, ou seja, duas linhas contínuas de 1 ponto, separadas por 1 píxel. Nota: as outras propriedades do tema se actualizam de acordo ao tipo de traço definido. Por exemplo, quando seleciona "Pontuado", a propriedade Tipo de pontuado fica disponível na Lista de propriedades. A seguinte imagem compara estes estilos em Windows: Para mais informação sobre os efeitos dessas opções nos diferentes objetos de formulários, consulte a seção Botões e a seção Caixas de seleção. Cores de fundo e de traço 4D permite aplicar cores aos objetos para serem mostrados em tela ou impressos. Pode definir cores diferentes para o fundo e o borde dos objetos, utilizando o comando Cor do menu contextual do editor ou diretamente em listas de propriedades. - 273 - Nota: na lista de propriedades, a cor de fundo é chamada Cor de Fundo, e a cor de primeiro plano é chamada Cor da Linha. Para objetos com texto, a cor do texto corresponde a Cor de letras. Para a cor de fundo, a lista de propriedades oferece duas opções padrão: Automática: o objeto é mostrado com cores automáticos definidos no sistema operativo. Nenhuma: o fundo do objeto será transparente. A lista de propriedades oferece a opção Outra, que permite usar a palheta de cores do sistema para definir uma cor personalizada. Tipo de linha pontilhada Esta propriedade está disponível quando seleciona "Pontilhada" como Estilo de borde. Permite eleger um formato de linhas pontilhadas Largura da linha 4D permite especificar diferentes larguras para as linhas e os objetos que as utilizem tais como ovais, grades e retângulos. Pode especificar a largura da linha usando a propriedade Largura da linha da lista de propriedades: - 274 - Escolha uma das larguras de linha. A primeira opção desse menu é a Linha Fina, ou seja, a linha mais fina que pode ser impressa na impressora, seguida das linhas de 1, 2, 3 ou 4 pontos. Se escolher Outros, 4D mostra uma caixa de diálogo na qual pode especificar até 20 pontos. Atributos de texto É possível definir os atributos de fonte e estilo dos objetos de tipo texto por meio das propriedades de objeto que se encontram no tema "Texto" da Lista de propriedades Pode definir os seguintes atributos: Folha de estilo: permite associar uma folha de estilo ao objeto. Para maior informação sobre folhas de estilos, consulte o capítulo Folhas de estilo. Fonte: nome da fonte utilizada no objeto. Estilo: estilo utilizado no objeto (negrito, itálica, sublinhado). Tamanho de fonte: tamanho da fonte em pontos. Cor da fonte: cor de fonte utilizado no objeto. No menu contextual, a color de fonte equivale à cor do primeiro plano Array de estilos/Array cores de fonte: nome dos arrays de gestão de estilos e de cores (somente disponível nos list box de tipo array). Alinhamento horizontal: localização horizontal do texto na área que o contém Alinhamento vertical: localização vertical do texto na área que o contém (disponível unicamente para os list box) Orientação: modifica a orientação (rotação) da área de texto. Para obter mais informação, consulte Rotação de texto. Multi estilo: permite autorizar a utilização de estilos personalizados nas áreas de texto dinâmicas (campos ou variáveis) em modo Aplicação. Para maior informação sobre este ponto, consulte a seção Multiestilo (área Rich text). Autorizar seletor fonte / cor: permite aceitar a modificação da fonte ou da cor do objeto pelo usuário para a sessão atual, quando o seletor sistema correspondente se chama utilizando o comando OPEN FONT PICKER ou OPEN COLOR PICKER. Esta opção controla o campo de ação dos comandos de seletor sistema (font picker e color picker). Está disponível para os objetos de formulário de tipo campo, variável e combo box. Por padrão, está desativada para todos os objetos dos formulários. Deve selecionar explicitamente para cada objeto onde deseje que os atributos de fonte e/ou cor possam ser modificados utilizando a janela seletor sistema. Nota de compatibilidade concernente a renderização de textos (OS X) Atualizamos e unificamos os frameworks utilizados para a renderização de texto em 4D v13 em OS X, de conformidade com as recomendações de Apple (abandono dos frameworks obsoletos QD/MLTE e generalização do uso de CoreText). Apesar de nossos esforços para limitar seu impacto, a utilização do novo framework CoreText pode causar ligeiras variações na renderização das áreas de texto das aplicações convertidas a 4D v13 em OS X, especialmente a nível do espaço entre linhas. Estas variações podem fazer com que seja necessário mudar o tamanho de certos objetos de formulários durante a conversão de bases v12. - 275 - Rotação de texto 4D lhe permite rotar as áreas de texto em seus formulários: A funcionalidade de rotação de texto está disponível seja no editor de formulários (propriedade permanente) ou sob o comando OBJECT SET TEXT ORIENTATION (propriedade definida para o processo atual). Objetos que podem rotar A possibilidade de realizar rotações concerne as áreas de texto não editáveis dos formulários,ou seja: textos estáticos variáveis e campos textuais não editáveis - "textual" se refere aos objetos cujos conteúdos são baseados em texto, incluindo objetos de tipo cadeia, assim como data, hora ou número, linhas múltiplas ou multi estilo. Os outros tipos de objetos de formulário (botões, áreas de entrada, listas, botões rádio, etc.) não podem rotar. Definir a rotação A nova propriedade "Orientação" está disponível, para os objetos que suportam a rotação, na área "Texto" da Lista de propriedades. A orientação das áreas de texto se realiza em incrementos de 90°: Cada opção de orientação se aplica enquanto conserva o ponto de origem inferior esquerdo do objeto: 0° (por defecto): - 276 - 90° Derecha: 180°: 90° Izquierda: Rotação sob o editor de formulários ou o comando da linguagem Quando se aplica uma rotação no editor de formulários, o objeto que contém o texto se submete a mesma rotação que o texto faz. O princípio não é o mesmo quando a rotação de texto é realizada pelo novo comando OBJECT SET TEXT ORIENTATION: quando se executa este comando, só se modifica o texto, enquanto que o objeto que contém o texto não rota. Por exemplo, a aplicação de uma rotação de 90° Esquerda ao texto "Chicago" no editor de formulários ou sob o comando OBJECT SET TEXT ORIENTATION, terá diferentes resultados quando se executa o formulário: 90° Esquerda (Lista de propriedades) 90° Esquerda (linguagem) Para obter mais informação, consulte a descrição do comando OBJECT SET TEXT ORIENTATION. Rotação de campos e variáveis Só os objetos texto não editáveis e não enfocáveis podem girar. Quando se escolhe uma opção do menu "Orientação" (que não seja 0°) para um objeto de tipo variável ou campo, as propriedades Controles de entrada e Acessível se desativam de forma automática para o objeto (se aplica): - 277 - Este objeto se exclui então da ordem de entrada e seu fundo se torna transparente por padrão. Pelo contrário, se seleciona a propriedade Editável ou Enfocável para um objeto orientado, a propriedade de orientação se reinicializa automaticamente em 0°. Modificar um objeto com rotação Uma vez que se faz o texto girar, pode mudar seu tamanho ou sua posição usando ponteiros de seleção ou utilizando comandos da linguagem tais como OBJECT SET COORDINATES, assim como todas suas propriedades. Tenha em conta que as propriedades de largura e altura da área de texto não dependem de sua orientação: Se o objeto muda o tamanho na direção A, sua largura se modifica; Se o objeto muda o tamanho na direção C, sua altura se modifica; Se o objeto muda o tamanho na direção B, tanto sua largura como sua altura se modificam. Também pode ser modificado o conteúdo de uma área no editor de formulários. Antes de passar ao modo edição, o texto volta a orientação por padrão: - 278 - Usar imagens estáticas Pode usar dois tipos de imagens estáticas em seus formulários: imagens independentes guardadas diretamente nos formulários ou imagens referenciadas guardadas fora dos formulários. Por razões de otimização, usar imagens inseridas por referência é recomendada geralmente quando as imagens são usadas em vários lugares, já que a imagem só é guardada uma única vez. Além disso, há um link entre a imagem e cada uma de suas referências, de modo que a imagem fonte é modificada, todas suas ocorrências são modificadas automaticamente em todo o banco de dados. Em 4D as imagens inseridas por referência têm o tipo "Imagem da biblioteca" e as imagens independentes têm o tipo "Imagem estática" (visível no campo Tipo da Lista de propriedades). Para inserir imagens por referência, deve usar a biblioteca de imagens ou arrastar e soltar uma imagem armazenada na pasta Resources do banco de dados. Se colocar uma imagem na página 0 de um formulário multipáginas, a imagem aparecerá automaticamente como fundo em todas as páginas. Também pode incluir a imagem em um formulário herdado, como fundo para outros formulários. Das duas formas seu banco se executará muito mais rápido que se colar a imagem em cada página. Pode atribuir propriedades a imagens estáticas inseridas nos formulários. Por exemplo, a propriedade de visualização Duplicado permite definir uma imagem pequena como imagem de fundo do formulário: a imagem é duplicada tantas vezes quanto sejam necessárias para encher a página formulário. Inserir imagens estáticas Há três maneiras de inserir imagens estáticas em seus formulários: colando uma imagem desde a área de transferência, arrastando e soltando um arquivo de imagem, ou arrastando e soltando uma imagem da biblioteca de imagens. Copiar-colar ou Arrastar e soltar uma imagem Para colar ou soltar uma imagem estática em um formulário: 1. Copie uma imagem na área de transferência e a cole no formulário. Ou Selecione uma imagem em uma aplicação externa (arquivo imagen em uma janela sistema, navegador web, outra aplicação, etc.) e coloque no formulário usando arrastar e soltar. A imagem original deve ser guardada em um formato administrato nativamente por 4D (4D reconhece os principais - 279 - formatos de imagens: JPEG, PNG, BMP, SVG, GIF, etc.). Se cola automaticamente na área objetivo em seu formato original. Notas: Este princípio também funciona com a biblioteca de imagens, as imagens associadas aos objetos (por exemplo a imagem de um botão 3d) e os campos ou variáveis em modo Aplicação. Pode inserir uma referência de imagem arrastando e soltando um arquivo guardado na pasta Resources do banco de dados (ver “Referenciação automática dos arquivos imagens” a continuação). 2. Reposicione a imagem e defina suas propriedades segundo suas necessidades. Inserir imagens a partir da biblioteca Para mais informação sobre o funcionamento da biblioteca de imagens, consulte o capítulo Biblioteca de imagens. Para inserir uma imagem da biblioteca num formulário: 1. Abra a Biblioteca de imagens na Caixa de ferramentas e clique no nome da imagem que deseja. 2. Arraste a imagem da biblioteca de imagens ao formulário. Se a imagem está definida como tabela de miniaturas, aparecerá automaticamente inserida como um botão imagem (ou como menu imagem suspenso se pressionar a tecla Shift enquanto arrasta a imagem). Se deseja a inserir como imagem estática ou imagem da biblioteca de imagens, pressione a tecla Alt (Windows) ou a tecla Opção (Mac OS) enquanto arrasta a imagem. Como padrão, a imagem inserida será do tipo Imagem da biblioteca, ou seja, 4D conservará o link com a imagem original da biblioteca. Se deseja romper esse link, deve modificar o tipo da imagem estática na Lista de propriedades (ver o seguinte parágrafo). As propriedades de imagens estáticas e das imagens da biblioteca são geralmente idênticas. 3. Relocalize a imagem na posição que deseja e defina suas propriedades. A imagem tem um conjunto de propriedades de objeto, como qualquer outro objeto de formulário, e essas propriedades podem ser modificadas. Desassociar uma imagem da biblioteca Quando inserir uma imagem da biblioteca de imagens, em realidade insere uma referência a uma imagem. A lista de propriedades indica seu tipo (em Objetos) como Imagem da biblioteca. Se a imagem é modificada na biblioteca de imagens, cada instância será modificada. Você poderia necessitar desassociar uma imagem inserida em um formulário de sua fonte na biblioteca. Para desassociar uma imagem de sua fonte na biblioteca de imagens: 1. Mostre as propriedades da imagem na Lista de propriedades. 2. No tema “Objetos”, clique na linha Tipo. Estão disponíveis dois tipos: Imagem da biblioteca (valor padrão) e Imagem estática. 3. Selecione Imagem estática. A imagem será tratada adiante, como se tivesse sido colada desde a área de transferência ou soltada de um arquivo. Referenciar automaticamente arquivos de imagem Pode usar a pasta Resources para guardar as imagens estáticas utilizadas em seus formulários e as manipular por referência. A visualização dessas imagens são otimizadas e se facilita sua manipulação. Nota: para mais informação sobre o funcionamento da pasta Resources, consulte a seção Descrição dos Arquivos 4D. Particularmente, pode chamar imagens .png (bitmap) ou .svg (vetoriais). A inserção dessas imagens nos formulários pode ser efetuadas por arrastar e soltar desde a pasta Resources: - 280 - Se soltar a imagem em um objeto dinâmico (botão imagem, botão 3D, menu pop-up imagem, etc.), 4D define automaticamente a fonte de imagem "File" e insere a referencia da imagem no formulário desta forma:“{viadeacesso+}nomearquivo”. Se soltar a imagem em uma área vazia do formulário, uma imagem da livraria é criada e se referencia desta forma: “file:{viadeacesso+}nomearquivo”. - 281 - É possível colocar as imagens nas subpastas da pasta Resources. Pode também usar o mecanismo da pasta lproj para as imagens em diferentes idiomas (para mais informação sobre esse mecanismo, consulte MissingRef). Definir o modo de visualização de uma imagem estática Pode definir o modo de visualização de uma imagem estática ou de uma imagem da biblioteca localizada em um formulário. O modo de visualização determina a maneira como a imagem deve ser desenhada em caso de redimensionamento da área que a contém. Para definir o modo de visualização de uma imagem, selecione a imagem e logo, no tema "Imagem" selecione uma opção do menu Exibir: Em escala (padrão): quando o objeto imagem é aumentado ou reduzido, a imagem é redimensionada de modo a que ela permaneça completamente visível. Truncado: quando o objeto imagem é aumentado ou reduzido, a imagem mantém suas proporções e apenas mudam os seus limites. A imagem permanece no centro do objeto imagem. Se reduzir o tamanho do objeto imagem a um tamanho menor que a imagem, está fica truncada. Duplicado: quando o tamanho do objeto imagem é aumentado, a imagem é duplicada tantas vezes quantas sejam necessárias para encher a nova área. Esta opção é recomendada especialmente para criar fundos que não necessitem demasiada memória. Se reduzir o tamanho do objeto a um tamanho menor que o da imagem, a imagem é truncada (não centrada). Efeito Espelho (Windows) A opção Efeito espelho (Windows) está disponível no tema "Imagem" da Lista de propriedades para as imagens mostradas nos formulários. Esta opção pode ser utilizada em aplicações configuradas em idiomas "direita para esquerda" que tem uma versão inversa da interface (para mais informação sobre o modo "direita para esquerda", consulte ). Como padrão, o modo direita para esquerda não inverte o conteúdo das imagens nos formulários. Entretanto, algumas vezes poderia ser necessário inverter algumas imagens. Esse seria o caso, por exemplo, com imagens usadas na interface, tais como flechas, que estão vinculadas com a posição dos objetos. Quando a opção Efeito Espelho (Windows) estiver marcada, uma inversão de esquerda a direita (efeito espelho) é aplicada à imagem: - 282 - Esta opção está disponível para imagens estáticas e as imagens de biblioteca, como também para objetos ativos usando imagens (ver Efeito espelho (Windows)). Esta opção apenas são consideradas: no modo Aplicação, em Windows, quando o modo "direita para esquerda" estiver ativo para o formulário. - 283 - Usar referências em texto estático Pode usar todos os valores atuais de campos e variáveis, assim como também os nomes de tabelas e campos em suas etiquetas etáticas com o fim de criar interfaces dinâmicas. Pode inserir essas etiquetas dinâmicas nos seguintes tipos de texto estático: Áreas de texto estático (objeto Texto ou Área de grupo), Nomes de janelas de formulários, Dicas de ajuda (ver Controles de entrada de dados e ajuda de entrada). Nota: as referências dinâmicas baseadas na arquitetura XLIFF (XML), especialmente adaptadas para a tradução de interfaces, também se possa utilizar nestas etiquetas, assim como também nas etiquetas de menus e de botões. Para obter mais informação, consulte Apêndice C: arquitetura XLIFF. No editor de formulários, pode escolher a versão das etiquetas a mostrar selecionando o comando Mostrar o nome ou Mostrar recurso no menu Objetos. Valores de campos ou variáveis É possível integrar em uma etiqueta estática os valores atuais de campos ou variáveis. Quando a área de texto é mostrada ou impressa, os valores dos campos ou variáveis do registro atual são substituídas. Use esse sistema para criar documentos de correspondência e nos cabeçalhos e pés de página. É possível incluir o nome do campo ou variável inserindo-o entre os símbolos < >. É possível usar um campo de qualquer tabela no banco. Os campos da tabela atual não têm que especificar o nome da tabela; eles podem ser introduzidos da maneira <Nome do campo>. Os campos de outras tabelas deven especificar o nome da tabela, se introduzen assim: <Nome da tabela]Nome do campo>. Quando se imprime o formulário, a informação do campo para cada registro substitui o elemento <Nome do campo> na área de texto. Uma variável deve ser inserida assim: <Nome da variável>. Tenha certeza de que o valor de cada variável seja atribuído por um método objeto ou método formulário. Pode especificar a maneira como será mostrado o campo ou a variável inserindo um ponto e vírgula seguido de um formato de visualização. Por exemplo, a variável <vTotal;$###,##0.00> calcula a quantidade do pagamento total da pessoa para o mês e é mostrado em um formato apropriado. Para obter mais informação sobre formatos de visualização, consulte Formatos de saída. Para ver um exemplo de formulário de combinação de correspondência usando referências de variáveis e campos, consulte Criar documentos de fusão de correio. - 284 - Duplicar em uma matriz Algumas vezes se deseja colocar ao mesmo tempo vários objetos ativos semelhantes num formulário, numerando-os sequencialmente de modo a que seus nomes sejam únicos. Por exemplo, poderia querer criar uma série de botões que realizem operações de bancos de dados. Duplicar uma matriz tem a vantagem adicional de alinhar fácil e rapidamente a múltiplos objetos. Pode duplicar manualmente um objeto ativo em uma matriz ou usar a caixa de diálogo Duplicar Vários, que permite encher a matriz rapidamente. Usar a caixa de diálogo Duplicar vários Para duplicar um ou vários objetos usando a caixa de diálogo Duplicar vários: 1. Selecione o objeto a ser duplicado 2. Selecione Duplicar vários... do menu Objeto. Aparece a caixa de diálogo Duplicar vários: 3. Na área Matriz, introduza o número de linhas e colunas e o intervalo entre elas. Para mais informação sobre este ponto, consulte “Duplicar Objetos” em Inserir e organizar objetos de formulário. 4. Selecione a opção “Numerar as variáveis”. Esta opção está ativa apenas se o objeto selecionado for uma variável. 5. Selecione a ordem de numeração. Se seleciona a opção Linha(s), 4D numerará os objetos ativos de cima para baixo (linha por linha) e de esquerda a direita. Se selecionar a opção Coluna(s), 4D numerará os objetos ativos de esquerda para direita (coluna por coluna) e de cima para baixo. Os objetos são copiados e numerados de acordo com suas preferências. 6. Clique no botão Aceitar. Obtém o número de colunas e de linhas de objetos solicitado. Duplicar um objeto diretamente numa matriz 1. Selecione a ferramenta Matriz na barra de objetos (variação do grupo Retângulo) e cria uma matriz no formulário. Tome cuidado para que cada célula na matriz seja o suficientemente grande para que contenha o objeto a duplicar. 2. No tema “Grid" (Grade) da Lista de propriedades, defina o número de colunas e de filas da matriz. - 285 - 3. Defina a aparência da matriz utilizando as opções do tema Aparência (opcional). Pode definir o estilo da borda, a largura da linha, a cor e o padrão do fundo. 4. Tenha certeza de que as células da matriz sejam suficientemente grandes para conter o objeto a ser duplicado. 5. Crie um novo objeto ativo e coloque-o na parte superior esquerda da célula da matriz. 6. Selecione simultaneamente o objeto e a matriz. 7. Escolha o comando Duplicar sobre Matriz do menu Objeto. 4D copia o objeto ativo en cada célula da matriz, dando un número único. Os objetos são copiados junto com suas propriedades de tamanho e estilo, assim como também com seu método associado (se aplicável). 4D numera os objetos ativos de cima para baixo em cada coluna. Esses números se adicionam aos nomes dos objetos, criando um objeto único em cada célula da matriz. Nota: para numerar as séries de objeto ativos de esquerda a direita em cada fila, mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS) quando escolher Duplicar sobre Matriz . Pode fazer referência a esses objetos em métodos utilizando os nomes que lhes foram dados. Pode eliminar a matriz ou conservá-la no formulário. - 286 - Incrementar um conjunto de variáveis 4D oferece um prático atalho para incrementar automaticamente um conjunto de variáveis criadas num formulário. Esse atalho permite por exemplo reorganizar as variáveis dos botões de um formulário ou assegurar que cada variável de formulário seja única. Lembre que essa função apenas modifica os nomes das variáveis com os objetos, não os nomes dos objetos. Para incrementar automaticamente um conjunto de variáveis: 1. Selecione cada objeto ativo cuja variável necessite ser renumerada. Pode selecionar todo tipo de objeto ativo. 2. Em Windows, Ctrl+Alt+clique em um dos objetos. Em Mac OS, Comando+Opção+clique em um dos objetos. Aparece a seguinte caixa de diálogo: Nota: esta caixa de diálogo não aparecerá se a seleção contém um objeto que não estiver ativo ou um campo. 3. Defina o número de início e o incremento a ser aplicado. 4. Clique em Aceitar. As variáveis dos objetos selecionados são renumeradas imediatamente usando os parâmetros definidos. Os números são adicionados ao final dos nomes das variáveis atuais. A renumeração é realizada da esquerda para direita e cima para baixo. - 287 - Redimensionar um formulário A caixa de diálogo "Redimensionar formulário" (menu Formulário, opção Redimensionar), permite redimensionar os objetos do formulário com o fim de que se vejam bem quando um banco passe para outra plataforma. Os objetos de formulário criados em Mac OS aparecem menores em Windows, e vice-versa, mesmo quando realmente são do mesmo tamanho. Essa diferença é porque a resolução da tela em Windows é 25% maior que a resolução em Macintosh. Por exemplo, os textos de 12 pontos em Windows. Se o tamanho de fonte em Mac OS é adequado, pode ser que seja muito pequeno em windows, ou se estiver adequada para Windows, pode ser que esteja muito grande para o Mac. Para compensar as diferenças de resolução de tela, deve modificar a escala dos objetos. Com a opção Redimensionar do menu Formulário pode redimensionar proporcionalmente todos os objetos do formulário em uma só operação. Pode escolher entre as seguintes opções: Macintosh a Windows (133%): esta opção é a automática quando usa 4D em Mac OS. Use essa opção para redimensionar um formulário criado para uma resolução de tela Macintosh, com o fim de adaptar para uma resolução Windows. Para realizar essa operação, o programa aumenta o tamanho de todos os objetos do formulário em uma terceira parte. Por exemplo, os textos de 9 pontos se transformarão em 12 pontos. Windows a Macintosh (75%): esta opção é a opção automática quando usa 4D no Windows. Use essa opção para redimensionar um formulário criado para uma resolução de tela Windows, com o fim de adaptar a resolução de tela Macintosh. Para realizar esta operação, o programa diminui o tamanho de todos os objetos do formulário em uma quarta parta. Por exemplo, os textos de 12 pontos passarão a ser de 9 pontos. Porcentagem manual: esta opção permite redimensionar um formulário utilizando a porcentagem indicado na área “%”. Com esta opção pode redimensionar um formulário para que se veja bem numa resolução de tela pouco comum. Também pode usar essa opção para modificar o tamanho de todos os objetos do formulário para a plataforma atual. Por exemplo, se deseja duplicar o tamanho de todos os objetos, escreva a 200%; se deseja reduzir até a metade, escreva 50%. Redimensionar as imagens: esta opção não está selecionada automaticamente. Geralmente, diminuir ou aumentar o tamanho das imagens de mapas de bits não dá muitos bons resultados estéticos. Por essa razão o programa não redimensiona as imagens estáticas do formulário a menor que você selecione essa opção. Ao invés disso move as imagens à nova posição que lhes corresponde "relativamente" dentro do formulário. Se tiver certeza de obter bons resultados redimensionando mapas de bits ou se usa imagens diferentes a mapas de bits, pode escolher redimensionar imagens. - 288 - Usar métodos de objetos Pode associar um método a qualquer objeto ativo de um formulário. Os métodos associados a objetos individuais de um formulário são chamados métodos de objeto. Os seguintes são alguns dos usos mais comuns dos métodos de objeto: Restringir a entrada de dados, Iniciar e manejar os objetos de interface tais como abas, menus suspensos, listas suspensas, list boxes, combo boxes, listas hierárquicas, etc. Definir a ação que é realizada quando se faz clique ou duplo clique num objeto, Manejar operações de arrastar e soltar. Esses são alguns exemplos simples de operações realizadas nos dados. O seguinte método calcula um total baseado nos dados de outros campos: Linha Total:=[Produtos]Preco *[Ordens]Quantidade Este é um método que transforma os caracteres de um campo Nome para maiúsculas: [Clientes]Nome:=Uppercase([Clientes]Nome) O seguinte método concatena valores de um campo Nome e um campo Sobrenome e os atribui a uma variável chamada vNome: vNome:=[Empregados]Nome+" "+[Empregados]Sobrenome Como cada método de objeto está associado a seu objeto, você pode criar métodos de objeto desde o editor de formulários. Para mais informação sobre como usar o editor de métodos, consulte Editar Métodos. Eventos de objeto Os métodos de objeto são executados quando se produzem certos eventos. Por exemplo, a ação associada a uma aba faz sentido apenas quando um usuário clica na aba. Numa área de rolagem, pode executar o método apenas quando um usuário faz duplo clique em um elemento. Na seção "Eventos" da Lista de propriedades pode definir os eventos que serão executarão o método do objeto para um objeto particular. A lista contém todos os eventos de formulário pertinentes para o objeto selecionado. Alguns eventos apenas estão disponíveis para tipos de objetos específicos. Igualmente existem eventos adicionais que somente são gerados ao nível de formulário. Para uma descrição detalhada de todos os eventos de formulário, consulte o comando Form event no manual de Linguagem 4D. Selecione um evento clicando na caixa de seleção associada. Para marcar ou desmarcar todos os eventos de uma vez, pressione a tecla Ctrl (Windows) ou Comando (Mac OS) enquanto clica em qualquer evento. Se necessita executar diferentes instruções para vários eventos diferentes, use uma instrução Case of...Else...End case em seu método e prove para cada evento selecionado na seção Eventos. Para provar um evento, use a função Form event e as constantes do tema Eventos de Formulários. Um exemplo de estrutura de método de objeto está abaixo: Case of :(Form event=On Load) //Localiza o código a ser executado quando se abre o formulário :(Form event=On Data Change) //Localiza o código a ser executado quando os conteúdos do objeto são modificados :(Form event=On Validate) //Localiza o código a ser executado quando o formulário é validado End case - 289 - Criar um método de objeto Para criar um método de objeto: 1. No editor de formulários, selecione o objeto ao qual deseja associar um método. 2. Clique no botão Editar do lado da linha Método de objeto (tema “Ação”) na Lista de propriedades. Ou Escolha Método de objeto do menu Objeto. Ou Clique direito no objeto e escolha Método de objeto no menu contextual. Ou Mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS) e clique no campo ou objeto. 4D mostra uma nova janela do editor de métodos, vazia por padrão. O nome do método é “Método de Objeto:” seguido pelo nome do objeto ou campo. 3. Escreva o método como foi descrito no capítulo Editar Métodos, e após isso, feche a janela e grave seu trabalho. O método agora está associado com o campo ou objeto ativo. Pode visualizar os objetos associados a um método exibindo as marcas “Método de objeto”: Pode visualizar ou modificar um método a qualquer momento. Abrir um método de objeto Para abrir um método objeto: 1. No editor de formulários, selecione o objeto cujo método deseja abrir. 2. Clique no botão Editar.. perto da linha Método de objeto (tema "Ação") na lista de propriedades. Ou Escolha Método de objeto no menu Objeto. Ou Clique com o botão direito no objeto e escolha o comando Método de objeto no menu contextual. Ou Mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS) e clique no objeto ao qual está associado o método. O editor de métodos aparece com seu método, pronto para que modifique o código. Apagar um método de objeto Pode eliminar um método de objeto a qualquer momento. Para isso, selecione o objeto ao qual o método está associado, e logo escolha Puede borrar un método de objeto en cualquier momento. Para hacerlo, seleccione el objeto al cual el método está asociado y luego elija Eliminar método do objeto do menu Objeto. - 290 - Modos de exibição de objetos Você pode usar vários modos de exibição ("vistas" nos formulários de 4D. Essa função facilita a construção de formulários complexos através da distribuição dos objetos em diferentes vistas que podem ocultar, mostrar ou bloquear de acordo com as suas necessidades. A distribuição de objetos pode ser efetuada, por exemplo, segundo seu tipo (campos, variáveis, objetos estáticos, etc.), Todos os tipos de objetos, inclusive os sub-formulários e as áreas de plugin, podem ser incluídos nas vistas Como funciona Há 9 vistas disponíveis por formulário, chamadas automaticamente de Vista 1 a Vista 9 (os nomes podem ser mudados). Cada vista pode ser ocultada, mostrada ou bloqueada. A gestão de vistas se realizada desde a palheta Vistas. Para mostrar esta palheta, clique no botão de modo de exibição da barra de ferramentas ou selecione o comando Modo de exibição no menu contextual (clique no objeto com o botão direito do mouse) ou no menu Formulário cliqueem Lista de Vistas. Estas são algumas regras para trabalhar com vistas: Contexto de uso: as vistas são uma ferramenta puramente gráfica que só se pode utilizar no editor de Formulários; não se pode acessar as vistas por programação ou em modo Aplicação. Vistas e páginas: os objetos de uma mesma vista podem pertencer às diferentes páginas de um formulário; só se podem mostrar os objetos da página atual (e da página 0 se estiver visível), sem importar a configuração da vista. Vistas e níveis: as vistas são independentes dos níveis dos objetos, não há hierarquia de exibição entre as diferentes vistas. Vistas e grupos: só os objetos que pertencem à vista atual podem ser agrupados. Nota: em formulários criados utilizando o Assistente de criação de formulários, o título do formulário se encontra na Vista 2 e os botões de ação (botões de imagem) na Vista 3. Colocar um objeto em uma Vista Um objeto só pode pertencer a uma vista. Todo objeto criado em um formulário é colocado na vista atual. A vista 1 é selecionada automaticamente como padrão; por isso, todos os objetos estão localizados na primeira vista do formulário. Para criar um objeto em outra vista, simplesmente selecione previamente outra vista na palheta clicando na linha correspondente: - 291 - Também é possível mover um ou mais objetos de uma vista a outra. Para fazer isso, selecione os objetos no formulário cuja vista deseja modificar. A lista de vistas indica com um símbolo a qual vista pertence a seleção: Nota: a seleção pode conter vários objetos que pertencem a vistas diferentes. Após isso, simplesmente selecione a vista destino da seleção e clique em Enviar a vista. A seleção passa à nova vista: Nota: pode mostrar a vista na que se encontra cada objeto utilizando as marcas de 4D. Para mais informação sobre este ponto, consulte Usar as Marcas. Renomear Vistas O modos de exibição (vistas) podem ser renomeados, por exemplo, para dar um nome à vista que descreva os objetos que contém. Pode renomear as 9 vistas de forma diferente em cada formulário do banco de dados. Para renomear uma vista, utilize Ctrl+clique (Windows) ou Comando+clique (Mac OS) sobre o nome da vista, ou dê um duplo clique no nome da vista (neste caso, a vista se seleciona). O nome da vista torna-se editável: Trabalhar com as Vistas Logo que coloque os objetos em uma ou mais vistas, pode usar a palheta de vistas para: selecionar todos os objetos de uma vista com um só clique, mostrar ou ocultar os objetos de cada vista, bloquear os objetos de uma vista. Selecionar todos os objetos de uma Vista Pode selecionar todos os objetos que pertençam a uma mesma vista na página atual do formulário. Essa função é útil para aplicar mudanças globais a um conjunto de objetos. Para fazer isso, escolha a vista onde deseja selecionar todos os objetos e clique em Selecionar tudo visível. Exibir ou ocultar objetos em uma vista A qualquer momento é possível mostrar ou ocultar os objetos de uma vista na página atual do formulário. Essa função permite, por exemplo, concentrar-se em certos objetos durante a modificação do formulário. Como padrão automático, todas as vistas são visíveis, como indica o ícone em frente de cada vista na palheta de vistas. Para ocultar uma vista, clique neste ícone. Então fica inativo e os objetos da vista correspondente já não são mostrados no formulário: - 292 - Nota: não é possível ocultar a vista atual (selecionada na lista de visitas). Para mostrar uma vista oculta, simplesmente selecione ou clique novamente no ícone de visualização. Bloqueando os objetos de uma vista Pode bloquear os objetos de uma vista para impedir que sejam selecionados, modificados ou eliminados do formulário. Uma vez bloqueado, um objeto não pode ser selecionado por um clique, um retângulo de seleção, nem pela opção Selecionar objetos similares do menu contextual. Essa função é útil para evitar erros de manipulação. Como padrão automático, todas as vistas estão desbloqueadas, como indica o ícone frente a cada vista na palheta de vistas. Para bloquear objetos de uma vista, clique sobre o ícone. O cadeado se fecha, o que significa que a vista está bloqueada: Nota: a vista atual (selecionada na lista de vistas) não pode ser bloqueada. Para desbloquear uma vista, simplesmente selecione o clique novamente no ícone de bloqueio. - 293 - Usar as Marcas O editor de formulários permite marcas para facilitar a visualização das propriedades dos objetos. O principio desta função é o seguinte: cada marca está associada a uma propriedade (por exemplo, Mensagens de ajuda, significa que o objeto “tem uma mensagem de ajuda associada”). Quando ativa uma marca, 4D mostra um pequeno ícone (marca) na parte superior esquerda de cada objeto do formulário onde se aplica a propriedade. Para as propriedades de tipo “verdadeiro/falso” (como Mensagens de ajuda), a marca só é mostrada se o objeto tem essa propriedade. Para as propriedades de tipo “valor” (por exemplo Número de vista), a marca mostra o valor da propriedade para cada objeto. Para ativar uma marca, clique no botão de seleção de marcas, até selecionar a marca desejada. Também pode clicar na parte direita do botão e selecionar diretamente o tipo de marcas a ser mostrada no menu associado: Para não mostrar as marcas, selecione Ocultar marcas no menu seleção. Nota: pode definir as marcas a ser mostradas automaticamente em Página Formulários das Preferências da aplicação. A seguir uma descrição de cada tipo de marca: Ícone Nome Descrição... Método de objeto É mostrada para os objetos com um método de objeto associado Ação automática É mostrada para os objetos com uma ação automática associada Ordem de entrada É mostrada para os objetos com ao menos uma propriedade de redimensionamento, indica a combinação de propriedades atuais É mostrada para os objetos editáveis, indica o número de ordem de entrada Número de vista É mostrada para todos os objetos, indica o número de vista Folha de estilo É mostrada para os objetos com uma folha de estilo associada Filtro É mostrada para os objetos com um filtro de entrada associado Mensagem de ajuda É mostrada para os objetos com uma mensagem de ajuda associada É mostrada para os objetos cuja etiqueta provêm de uma referência (etiqueta que começa por “:”). A referência pode ser de tipo recurso (STR#) ou XLIFF. É mostrada para os objetos que contém uma referência dinâmica a um campo, uma tabela ou uma variável (sintaxe do tipo “<label>” ) Oculta todas as marcas Redimensionamento Localizado Referência dinâmica Ocultar as marcas - 294 - Usar a biblioteca pré-configurada A biblioteca de objetos preconfigurados de 4D é uma ferramenta criada para facilitar a adição de objetos nos formulários 4D. Ela oferece uma coleção de objetos preconfigurados que podem ser usados em seus formulários com um simples arrastar/soltar ou copiar/colar. Objetos da biblioteca Essa biblioteca utiliza exclusivamente objetos 4D comuns (botões, áreas de texto, etc.) com certas propriedades que foram predefinidas com o propósito de acelerar e facilitar sua implementação. Por exemplo, o objeto "área de ingresso da senha" é uma variável texto associada a uma folha de estilos específica. A biblioteca também oferece objetos de alto nível, como os widgets datepicker e timepicker (ver o manual 4D Widgets). Diferente das bibliotecas de objetos usuário (consultar Criar e usar objetos de biblioteca personalizados), a biblioteca de objetos pré-configurados de 4D não é modificável: não pode adicionar ou eliminar objetos dessa biblioteca. Usar a biblioteca A biblioteca de objetos pré-configurados aparece como uma janela independente. Os objetos podem ser inseridos no editor de formulários com arrastar e soltar. Para mostrar a janela da biblioteca de objetos pré-configurados, clique no botão da barra de ferramentas do editor de formulários de 4D. A biblioteca de objetos pré-configurados é mostrada a seguir em uma nova janela. Tem uma área de filtro (menu pop-up e botões), uma área de visualização prévia e uma área de comentários: Filtrado de objetos: os objetos são classificados em diferentes categorias (botões, áreas de entrada, etc). Para restringir a seleção a uma categoria de objetos, use o menu pop-up ou escolha Todas as categorias para mostrar todos os objetos. Certos objetos estão relacionados a uma plataforma (Windows ou Macintosh). Pode filtrar os objetos mostrados, de acordo com a plataforma, utilizando o botão localizado na esquina superior direita da janela. - 295 - Área de visualização prévia: a área central mostra uma visualização prévia, assim como o nome de cada objeto. Pode clicar no objeto para obter informação sobre ele: sua descrição é mostrada na parte inferior da janela. Pode variar o tamanho das miniaturas na janela com o cursor localizado na área de visualização prévia Área de comentários: mostra informação sobre o objeto selecionado. Os objetos podem ser inseridos em um formulário simplesmente com arrastar e soltar ou copiar e colar das áreas centrais da janela até o formulário. O objeto é inserido com suas propriedades pré-definidas. Depois disso, pode modificar as propriedades para adaptar o objeto às suas necessidades. - 296 - Criar e usar objetos de biblioteca personalizados 4D permite criar e utilizar bibliotecas de objetos. Uma biblioteca de objetos é um arquivo externo criado por 4D que permite armazenar todo tipo de objetos (botões, textos, imagens, listas hierárquicas, etc). É possível usar esses objetos em diferentes formulários. Os objetos são guardados com todas as suas propriedades, incluindo seus métodos de objeto. As bibliotecas são juntadas e utilizadas com um simples arrastar e soltar, ou copiar e colar. São como uma espécie de área de transferência perpétua. Utilizando bibliotecas, pode construir fundos para objetos de formulário, agrupados por famílias gráficas, funcionalidades, etc. Como as bibliotecas são guardadas como arquivos externos, seu uso com diferentes bancos de dados é bem simples. Finalmente, também pode combinar as bibliotecas de objetos com os formulários de usuário com o propósito de oferecer objetos que possam ser usados para a personalização de bancos de dados. Estes princípios são descritos em Formulários de usuário. Criar uma biblioteca de objetos Para criar uma biblioteca de objetos, selecione o comando Novo>Biblioteca de objetos... do menu 4D Arquivo ou da barra de ferramentas de 4D.. Aparece uma caixa de diálogo padrão para guardar arquivos, que permite indicar o nome e a localização da biblioteca de objetos. Uma vez valide a caixa de diálogo, 4D cria uma nova biblioteca de objetos em seu disco e mostra sua janela correspondente (em branco é o padrão). Pode criar tantas bibliotecas quantas queira em um banco de dados. Uma biblioteca criada e construída em Mac OS pode ser usada no Windows e vice-versa. Construir uma biblioteca de objetos Os objetos são colocados em uma biblioteca de objetos usando arrastar e soltar, ou copiar e colar. Podem vir de um formulário ou de outra biblioteca de objetos (incluindo Usar a biblioteca pré-configurada). Nenhum link com o objeto original é conservado: se o original muda, a modificação não será transmitida ao objeto copiado. Nota: para arrastar e soltar objetos desde formulários até biblioteca de objetos, deve selecionar a opção “Iniciar arrastar e soltar” nas Preferências de 4D (ver Página Formulários). Operações básicas tais como adição, eliminação ou modificação são acessíveis através do menu contextual (botão direito do mouse), ou do menu de opções da janela: Pode colocar na biblioteca a objetos individuais ou conjuntos de objetos. Cada objeto ou conjunto de objetos é agrupado em apenas um elemento: - 297 - Uma biblioteca de objetos pode ter até 32 000 elementos. Os objetos são copiados com todas as suas propriedades, gráficas e funcionais. Essas propriedades são conservadas quando o elemento é copiado em um formulário ou em outra biblioteca. Renomear um objeto Cada novo elemento é nomeado "Objeto", seguido por um número aleatório, por exemplo Objeto2012. Pode renomear cada elemento como deseje. Para fazer isso, pode: dar duplo clique no elemento a renomear dar clique direito no elemento a renomear, e depois escolher o comando Renomear no menu contextual. Aparece uma caixa de diálogo que permite renomer o elemento: Mais de um elemento pode compartir o mesmo nome. Objetos dependentes Utilizar copiar e colar, ou arrastar e soltar, com certos objetos da biblioteca, também faz com que sejam copiados os objetos dependentes. Por exemplo, ao copiar um botão, também é copiado obrigatoriamente o método de objeto que possa ter associado. Esses objetos apenas podem ser copiados diretamente ou usando arrastar e soltar. A lista a seguir mostra os objetos dependentes que são copiados junto com os objetos que os utilizam (quando for o caso): Listas Folhas de estilo Formatos/Filtros Imagens Mensagens de ajuda (associadas a um campo) Recursos STR# Métodos de objeto. No caso dos recursos STR#, se copia o STR# completamente e não apenas a string associada ao objeto. Abrir uma biblioteca de objetos Para abrir uma biblioteca de objetos já existente, selecione Abrir>Biblioteca de objetos... no menu Arquivo ou na barra de ferramentas de 4D: Aparece uma caixa de diálogo para abrir arquivos, que permite selecionar a biblioteca de objetos a ser aberta. Uma biblioteca de objetos apenas pode ser aberta por um banco de dados por vez. Entretanto, um banco de dados pode abrir diversas bibliotecas de objetos ao mesmo tempo. A extensão dos arquivos de biblioteca é ".4il". Acessar biblioteca de objetos - 298 - As biblioteca de objetos são acessíveis desde o ambiente Desenho de 4D, desde que o desenvolvedor permita esse acesso, no editor de formulários usuário em modo Aplicação (ver Formulários de usuário). Todos os elementos da biblioteca são visíveis em modo Desenho. Entretanto, no editor de formulários de usuário, só podem ser vistos os elementos que não tem um método de objeto associado a eles. Os elementos que tenham ao menos um método de objeto associado, aparecem com uma marca (a mesma marca que é mostrada sobre os objetos com um método de objeto em um formulário, consulte Usar as Marcas) e seu nome aparece em azul. Isso permite diferenciar facilmente os objetos visíveis para o desenvolvedor, no modo Desenho, daqueles visíveis para o usuário, no modo Aplicação. Funcionar em modo Remoto Para que todas as máquinas clientes possam acessar uma biblioteca de objetos, o arquivo da biblioteca deve estar localizado em uma pasta chamada Resources do banco (ver Descrição dos Arquivos 4D). Esta pasta permite compartir elementos personalizados entre o servidor e as máquinas cliente (imagens, arquivos XLIFF, etc.). Para mais informação consulte a seção Gerenciamento da pasta Resources no Manual de referência de 4D Server. Pode visualizar e administrar o conteúdo da pasta Resources através de Explorador de Recursos. - 299 - Exibir informação sobre objetos em formulários sendo executados Quando um formulário está em execução, é possível utilizar um atalho de teclado para obter informação útil sobre os objetos que contém (nome, coordenadas, etc.). Esta informação se mostra como uma mensagem de ajuda que aparece ao pressionar Ctrl+Shift (Windows) ou Control+Shift (Mac OS) e passar o cursor sobre um objeto: Esta informação está disponível para cada objeto mostrado em um formulário quando se abre o ambiente Desenho. - 300 - Trabalhar com objetos ativos O que são objetos ativos Objetos de campo e variáveis Botões Botões 3D, caixa de seleção 3D e botões de opção 3D Botões imagem Grade de botões Caixas de seleção Botões de opção e botões imagem de opção Menus suspensos/Listas suspensas Combo Boxes Menus suspensos hierárquicos e listas hierárquicas Menu Imagem suspenso Indicadores Controle de abas Separador Área Web Áreas plug-in - 301 - O que são objetos ativos Um objeto ativo é um objeto em um formulário que realiza uma tarefa ou uma função de interface. Há muitos tipos de objetos ativos. Os campos são considerados objetos ativos. Outros objetos ativos são objetos editáveis (variáveis), combo boxes, listas suspensas, botões imagens, etc, armazenam dados temporariamente na memória ou realizam alguma ação como abrir uma janela de diálogo, imprimir um relatório, ou iniciar um processo em segundo plano. Em alguns casos, pode especificar a ação de um objeto ativo selecionando a janela de propriedades dos objetos. Por exemplo, pode usar as ações integradas automáticas de um botão para definir as ações dos botões. Em outros casos, pode especificar a ação do objeto escrevendo um método associado ao objeto. Em 4D, pode utilizar os seguintes objetos ativos: Objetos de campo e variáveis, Botões, Botões 3D, caixa de seleção 3D e botões de opção 3D, Botões imagem, Grade de botões, Caixas de seleção, Botões de opção e botões imagem de opção, Menus suspensos/Listas suspensas, Combo Boxes, Menus suspensos hierárquicos e listas hierárquicas, Menu Imagem suspenso, Indicadores, Controle de abas, Separador, Área Web, Áreas plug-in, List boxes (descrito em um capítulo independente), Subformulários e widgets (descrito em um capítulo independente). A aparência e o funcionamento dos objetos ativos são regidos por um conjunto de propriedades. As propriedades específicas a cada tipo de objeto são descritos com os objetos. As propriedades genéricas fundamentais tais como os controles de entrada ou os formatos de visualização são descritos no capítulo Propriedades de objetos ativos. - 302 - Objetos de campo e variáveis Em um formulário, as variáveis e os campos funcionam de maneira muito parecida. Os campos de um formulário são utilizados para introduzir ou mostrar os dados de um registro. Quando criar um novo formulário utilizando o assistente de criação de formulários, selecione os campos a incluir no formulário na forma de objetos padrão. Quando o formulário tiver sido criado, pode usar o editor de formulários para especificar propriedades adicionais, como o formato de visualização e os controles de entrada. Estas propriedades só aplicam aos formulários nos quais tenham sido especificados. Pode utilizar as mesmas propriedades para outros formulários ou definir outras. Pode mudar as propriedades dos campos ou adicionar/eliminar campos em um formulário. As variáveis podem ser editáveis ou não editáveis e pode receber dados de tipo alfa, texto, número, data, hora e imagem. As variáveis objeto são criadas utilizando a ferramenta Variável . Pode criar automaticamente um grande número de variáveis usando Duplicar em uma matriz . Do mesmo modo que os campos, as variáveis permitem ingressar e mostrar dados. As variáveis são utilizadas para o armazenamento temporário de dados. Um uso comum de uma variável é para mostrar os cálculos que são realizados utilizando um método como: vTotal := Quantidade * Preço Se criar uma variável que mostre o resultado do cálculo, se chama a variável vTotal e usa um método para fazer o cálculo. Utilize os métodos para manejar as variáveis editáveis e não editáveis. Uma variável editável aceita dados. Pode estabelecer os controles de entrada para o objeto como se fosse um campo. Os dados introduzidos são associados com o nome do objeto. Pode administrar os dados com métodos objeto ou de formulário que utilizem diretamente o nome da variável. Também pode representar campos e variáveis em seus formulários de formas alternativas: Pode visualizar e introduzir diretamente os dados dos campos do banco de dados nas colunas dos List box de tipo "seleção" (ver Visualização de campos em list boxes). A partir de 4D v14, pode representar diretamente um campo ou uma variável listada em um formulário utilizando objetos Menus suspensos/Listas suspensas e Combo Boxes. Tipo de Variável Você pode usar a propriedade tipo de variável no tema de "objetos" da Lista de propriedades para especificar o tipo de dados para a variável: Lembre que a principal finalidade desse ajuste é definir os temas e opções disponíveis na lista de propriedades para correspondam com o tipo de dados. Na verdade, não digita realmente a variável. Na perspectiva da compilação do banco de dados, você deve usar os comandos do Compilador No entanto, o menu de tipo de variável tem uma função de digitação em dois casos específicos: As variáveis imagem: Você pode usar este menu para declarar variáveis antes de carregar o formulário no modo interpretado (veja abaixo) As variáveis dinâmicas: Você pode usar este menu para declarar o tipo de variáveis dinâmicas (ver Variáveis Dinâmicas). - 303 - Declaração de variáveis do tipo imagens em formulários Mecanismos nativos específicos governam a visualização de variáveis imagem nos formulários. Esses mecanismos requerem que as variáveis imagem sejam declaradas obrigatoriamente antes de se carregar o formulário, ou seja, antes do evento de formulário On Load, diferente de outros tipos de variáveis. Para fazer isso, é necessário: que a instrução C_PICTURE(varName) tenha sido executada antes de carregar o formulário (tipicamente, no método que chama o comando DIALOG), que a variável tenha sido declarada a nível de formulário utilizando o menu pop-up Tipo de variável da Lista de propriedades. Do contrário, a variável imagem não será mostrada corretamente (apenas no modo interpretado). Exibir As variáveis e os campos podem ser de qualquer tamanho. Ao mostrar os caracteres, o tamanho da área varia em passos relacionados com o tamanho da fonte dos caracteres utilizados. As variáveis e os campos podem fazer uso dos formatos de visualização (ver Formatos de saída). As variáveis e os campos de tipo Texto e Imagem podem utilizar as barras de rolagem horizontal e vertical (ver Barra de rolagem) e podem ser impressas com um marco variável (ver Imprimir campos de tipo texto). Quando a propriedade Multiestilo tenha sido selecionada para o objeto, as variáveis e os campos de tipo Texto ou Alfa aceitam variações de estilo (ademais do estilo geral especificado a nível do objeto). Para obter mais informação, consulte a seção Multiestilo (área Rich text). Quando um campo ou variável de tipo texto ou alfa contém uma URL (strings que começam por http, ftp, www ou mailto) são detectadas automaticamente. Se o usuário pressiona Ctrl+clique (Windows) ou Comando+clique (Mac OS) na área, a URL é executa diretamente no navegador web padrão. Em Windows, as URLs detectadas são mostradas em azul e subscritos: Nota: as direções de correio eletrônico devem ser escritas na forma mailto:endereço. Adicionar campos a um formulário Pode adicionar ou eliminar campos de um formulário em qualquer momento. Por exemplo, pode adicionar campos a um formulário nos seguintes casos: se percebe que necessita um campo que não foi selecionado no assistente de criação de formulários. se adicionou um campo à estrutura do banco de dados e necessita adicionar ao formulário para poder utilizar. Para adicionar um campo a um formulário: 1. Selecione a ferramenta de inserção na barra de ferramentas e desenvolva o campo no formulário. 4D mostra automaticamente as propriedades do novo campo na Lista de propriedades. 2. Selecione o campo que deseja inserir da lista de tabelas/campos: - 304 - Nota: não é possível selecionar um campo de tipo BLOB. 3. Se desejar, defina as propriedades específicas a aplicar ao campo. Depois de criar o campo, deve geralmente definir propriedades adicionais. Pode definir os controles de entrada, escrever a mensagem de ajuda associado, associar um método, definir as opções de redimensionamento ou de reposicionamento, definir o tipo de fonte ou as opções de aparência (ver Propriedades de objetos ativos). Nota: também pode inserir um campo usando arrastar e soltar desde a Página Tabelas do Explorador. O novo campo aparece no formulário onde o localizou. A área de campo mostra o nome do campo que foi selecionado, precedido pelo nome da tabela. Como padrão, 4D não adiciona uma etiqueta para designar o campo mas pode criar uma usando uma área de texto estático. Note que a etiqueta pode ser definida dinamicamente (ver Usar referências em texto estático). Depois de localizar um campo em um formulário, pode modificar como o faria com qualquer outro objeto do formulário. Pode ser redimensionado, mudar a fonte, mudar a cor, etc. Transformar um campo em uma variável e vice-versa Pode transformar todo tipo de objeto (ativo ou não) em outro tipo de objeto. Também pode transformar um campo em uma variável e vice-versa. Essa possibilidade é bastante útil quando depois de inserir um campo em um formulário, deseje convertê-lo em uma variável porque não necessita armazenar o valor. Quando 4D transforma um objeto em outro, conserva as propriedades do objeto original (coordenadas, método do objeto, aparência, cor, etc.) O tipo de dados atribuido a um campo é conservado para a variável: um campo tipo imagem será convertido a uma variável tipo imagem. Para converter um campo em uma variável ou vice-versa, selecione o objeto e selecione Campo ou Variável da lista Tipo na Lista de propriedades, (tema “Objetos”). A Lista de propriedades é atualizada para mostrar as propriedades do novo tipo de objeto. O nome de objeto, o método de objeto e suas propriedades (tamanho, editável, etc.) são conservadas. Quando transforma uma variável em um campo, 4D atribui como padrão ao objeto o primeiro campo da primeira tabela. Pode definir manualmente a Tabela e o Campo fonte (tema “Fonte de dados”). Guardar como Quando associa uma lista de seleção a um campo ou variável, pode utilizar a opção Guardar como Valor/Referencia no tema de "Fontes de dados" da Lista de propriedades. Esta opção lhe permite optimizar o tamanho dos dados guardados. Para mais informação, consulte Guardar como Valor ou Referência . - 305 - Botões Visão Geral O editor de formulários permite adicionar uma grande variedade de botões a seus formulários. É possível associar uma ação padrão a cada botão do formulário. Os botões automáticos permitem ao usuário aceitar, cancelar, ou eliminar registros, se mover entre registros, se mover de uma página a outra em um formulário multipáginas, e abrir, excluir, ou adicionar registros a um subformulário, etc. Geralmente, os botões são localizados quando se cria o formulário utilizando o assistente de formulários. É possível modificar as ações destes botões a partir da lista de propriedades. Por exemplo, é possível apagar a ação padrão de um botão e escrever um método de objeto que especifique a ação do botão. Da mesma forma é possível adicionar botões e atribuir ações de botões com o editor de formulários. Por exemplo, se você precisa de vários subformulários no formulário, é possível adicionar os subformulários adicionais e botões automáticos no editor de formulário. Simplesmente adicione cada botão ao formulário e associe uma ação padrão a cada botão. 4D permite utilizar os seguintes tipos de botões: Botões: estes botões são mostrados na interface da plataforma atual. O texto do botão é mostrado na fonte, tamanho, estilo e cor selecionadas. A etiqueta mostrada pelo botão está definida no campo Título do tema “Objetos” na Lista de propriedades. É possível modificá-la a qualquer momento: Botões padrões: um botão padrão tem exatamente a mesma aparência que um botão normal, exceto que sua borda é um pouco mais grossa. Isto indica ao usuário que o botão é a opção recomendada. A imagem a seguir compara um botão padrão com um botão normal. Sob Mac OS, os botões padrões são botões de pulsações: O tipo de objeto botão padrão não existe como tal, mas é uma propriedade acessível para os botões padrões. Nota: Você só pode ter um botão padrão por página de formulário. Botões inversos e botões invisíveis: estes botões estão desenhados para serem localizados sobre objetos gráficos.Os botões invertidos são transparentes. Quando o usuário clica no botão invertido, os gráficos do botão são ressaltados. Os botões invisíveis permanecem invisíveis e não são ressaltados quando se clica neles. A ação resultante, como a de abrir uma página diferente, indica que o botão foi clicado. Um botão invisível deve ser localizado sobre o texto ou sobre um gráfico que denote sua função; o usuário clica no texto ou gráfico e o botão é ativado. Botões 3D e Botões de imagem: a família de botões 3D (botões 3D, caixas de seleção 3D e botões rádio 3D) e os botões de imagem incluem numerosas propriedades específicas. Estes botões são descritos Botões 3D, caixa de seleção 3D e botões de opção 3D e Botões imagem. Gestão das ações dos botões Os botões com ação estandarte se tornam cinzas automaticamente quando é necessário durante a execução do formulário. Por exemplo, se é mostrado o primeiro registro de uma tabela, o botão primeiro registro aparecerá atenuado. Você cria um botão escolhendo o tipo de botão da lista suspensa Tipo. Logo escolhe a ação automática do botão da lista suspensa ação automática (ver Ações padrões): - 306 - Nota: Da mesma forma você pode utilizar o comando hierárquico Ação automática do menu contextual do editor (clique direito no objeto). Sem importar o tipo de botão, você deve selecionar um valor da lista. Se você prefere que o botão realize uma ação que não está na lista, escolha “Sem ação” e escreva um método que defina a ação do botão (ver Editar Métodos). Geralmente, você ativa o evento On Clicked na página Eventos e o método é executado apenas quando se clica no botão. As variáveis associadas aos botões (padrão, invertidas, invisíveis, de opção, de imagem, ou caixas de seleção) são inicializadas em 0 quando o formulário se abre primeiro em modo Desenho ou Aplicação. Quando o usuário clica em um botão a variável passa a 1. Para uma descrição de cada ação, consulte Ações padrões. Nota de compatibilidade: Nas versões anteriores de 4D, um "efeito secundário" permite ser beneficiado de um botão personalizado de ativação/desativação automática se lhe da o mesmo nome de variável que um botão com ação estandarte. Por exemplo, se seu formulário contém um botão v1 com ação estandarte e um botão personalizado cujo nome de variável também é v1, este último se ativa/desativa automaticamente em função do estado do botão estandarte. Este funcionamento foi corrigido a partir de 4D v12 e agora a ativação/desativação de cada botão dever ser lidada de forma independente. - 307 - Botões 3D, caixa de seleção 3D e botões de opção 3D A família de botões 3D inclui botões 3D, caixas de seleção 3D e botões de opção 3D. Estes objetos são estruturalmente idênticos; a única diferença é o tatamento da variável associada: A variável associada de um botão é igual a 0 quando se abre o formulário (estado padrão); é igual a 1 quando o usuário clica no botão (estado pressionado); logo o botão retorna a seu estado padrão e é igual a 0 novamente. A variável associada a uma caixa de seleção 3D é igual a 0 quando a caixa não está marcada e é igual a 1 quando a caixa está marcada. Diferentemente dos botões, a caixa de seleção 3D se mantém em seu estado (0 ou 1) até que o usuário a seleciona novamente. Para maiores informações, consulte o parágrafo Caixas de seleção. Os botões de opção 3D funcionam em grupos; a variável do botão selecionado é igual a 1, e dos outros a 0. A variável pode ser igual a 0 ou a 1 quando se abre o formulário. Para maiores informações, consulte o parágrafo Botões de opção e botões imagem de opção. A família de botões 3D oferece numerosas propriedades específicas, que podem ser utilizadas para estabelecer interfaces perfeitamente integradas aos diferentes sistemas operacionais. Mais especificamente, é possível aplicar diferentes estilos pré-definidos aos botões 3D (botões bevel, botões push, etc.) ou associar menus suspensos a eles. É possível obter um grande número de variações ao combinar as diferentes propriedades Título Esta propriedade permite inserir uma etiqueta no botão. A fonte e o estilo desta etiqueta podem ser definidas no tema “Texto”. Você pode forçar um retorno de carro na etiqueta utilizando o caractere \ (barra reversa). Para inserir uma "\" na etiqueta, introduza "\\". Por padrão, a etiqueta se localiza no centro do botão. Quando o botão também tem um ícone, é possível modificar a localização relativa destes dois elementos utilizando a propriedade Posição Título/Imagem. É possível esconder o título deselecionando a opção Título visível. Neste caso, o ícone se localiza automaticamente no centro do botão. - 308 - Para a tradução do banco, você pode introduzir na área da etiqueta de um botão uma referência XLIFF ou STR# (ver Apêndice C: arquitetura XLIFF). Estilo de botão Esta propriedade permite definir a aparência geral do botão. O estilo também influencia na disponibilidade de certas opções. Os seguintes estilos estão disponíveis:(ilustrações Windows/Mac OS): Nenhum (valor padrão) Um botão 3D com o estilo “Nenhum” é similar a um botão invisível: não se vê seu contorno. Mesmo assim, possui todas as opções de botões 3D. Em Mac OS, não é possível mostrar o triângulo indicando a associação a um menu pop-up. Fundo modificado Este estilo corresponde aos botões inversos, exceto que quando o usuário clique neste tipo de botão se obtém um efeito 3D ao mover a imagem localizada sob o botão.. Quando o estilo “Fundo modificado” estiver selecionado, nenhuma opção estará disponível. Pulsador Um botão 3D com o estilo “Pulsador” tem a aparência de um botão padrão do sistema. Mesmo assim, se beneficia das opções dos botões 3D, com exceção da propriedade “Com menu suspenso”. Botão de barra Este estilo de botão 3D está particularmente destinado para uma integração em uma barra de ferramentas. Em Windows, seu contorno aparece quando se passa o mouse sobre ele. Quando se usa a propriedade “Com menu suspenso”, aparece um triângulo à direita e no centro do botão. Em Mac OS, o contorno do botão nunca aparece. Quando você tem a propriedade “Com menu suspenso” , um triângulo aparece no canto inferior direito do botão. Personalizado Este estilo se beneficia de las opciones de botones 3D, con excepción de la propiedad “Con menú desplegable”.Este estilo de botão 3D aceita uma imagem de fundo personalizada e permite controlar vários parâmetros adicionais (rolagem de ícone e margens). Para maiores informações, consulte o parágrafo “Botões 3D personalizados” a seguir. Este estilo utiliza as opções de botões 3D, com exceção da propriedade “Com menu suspenso”. Círculo Em Mac OS X, um botão 3D com o estilo “Círculo” aparece como um botão de sistema redondo. Dois conjuntos de estilos estão disponíveis para o círculo, dependendo do tamanho do botão no formulário. Este estilo se aproveita das opções de botões 3D, com exceção da propriedade “Com menu suspenso”. Em Windows, este estilo de botão é idêntico ao estilo “Nenhum” (o círculo ao fundo não é levado em consideração). Quadro de sistema Em Mac OS X, um botão 3D com estilo “Quadro de sistema” aparece como um quadro de sistema. Este estilo se aproveita das opções de botões 3D, com exceção da propriedade “Com menu suspenso”. Em Windows, este estilo de botão é idêntico ao estilo “Nenhum” (o quadrado ao fundo não é levado em consideração). Office XP Um botão 3D com o estilo “Office XP” tem as seguintes características:: As cores de seu contorno e fundo se baseiam nas cores do sistema,. Sob Windows, em uso, seu contorno só aparece quando o mouse passa sobre ele. Este estilo aproveita as opções de botões 3D. Bevel - 309 - Em Mac OS, um botão “Bevel” aparece como um botão do sistema padrão. Um botão de estilo Bevel aproveita as opções de botões 3D, incluindo a propriedade “Com menu suspenso”. Em Windows, este estilo de botão é parecido ao estilo “botão de barra”, a única diferença é o triângulo que indica a presença de um menu associado localizado na parte inferior direita do botão. Bevel arredondado Em Mac OS, um botão “Bevel arredondado” é similar a um botão “Bevel” exceto pelos seus contornos que são arredondados. Em Windows, este estilo de botão é idêntico ao estilo “Bevel”. Contrair/Exibir Este estilo de botão permite adicionar um ícone padrão de contração/exibição. Esses botões são usados nativamente nas listas hierárquicas. Em Windows, o botão tem a aparência de um [+] ou um [-]; em Mac OS, se vê como uM triângulo apontando para cima ou para baixo. Este estilo se utiliza unicamente com as caixas de seleção 3D, onde os dois estados do botão correspondem aos estados marcado/desmarcado da caixa. Ajuda Este estilo de botão permite mostrar um botão de ajuda padrão do sistema. Pode usar esse estilo para adicionar botões de ajuda "sistema" em seus formulários. Texturizado OS X Em Mac OS X, um botão "Texturizado" é um botão padrão que mostra um degradê de cinza. Sua altura está predefinida: não é possível aumentar ou diminuir o botão. Esse estilo de botão pode usar todas as opções de botões 3D. Em Windows, este estilo equivale a um botão pulsador, o qual pode ter um menu pop-up e a característica especial de ser transparente em Vista. Gradiente OS X Em Mac OS X, um botão "Gradiente" é um botão de sistema bicolor. Este estilo de botão pode utilizar todas as opções de botões 3D. Em Windows, este estilo é equivalente a um botão pulsador, o qual poede ter um menu pop-up. Adicionar um ícone ao botão 3D É possível adicionar um ícone a todos os estilos de botões 3D (exceto o estilo “Fundo deslocado”): O manejo de ícones se realiza utilizando as propriedades: Fonte da imagem, Nome/No da imagem. Fonte da imagem Ao igual que os botões de imagem, o ícone de um botão 3D pode vir de três fontes diferentes: Variável, Biblioteca de imagens, Arquivo de recursos ou Arquivo. Uma vez designada a fonte, pode introduzir o nome ou o número de imagem na propriedade "Nome/No da imagem". Nome/No da imagem Uma vez definida a fonte da imagem, introduza o nome (se a imagem é uma variável ou vem da biblioteca de imagens) ou o número (se a imagem viene de la biblioteca de imagens ou de um arquivo de recursos) ou a rota de acesso da imagem (se a imagem vem de um arquivo de imagem ); neste último caso, a rota de acesso deve ser relativa a pasta Resources do banco (ver o parágrafo Referenciar automaticamente arquivos de imagem). Escreva 0 nesta propriedade para não associar uma imagem ao botão 3D. Nota: pode associar uma imagem a un botão por arrastar e soltar uma imagem da biblioteca de imagens ou de um arquivo de disco. Número de estados Esta propriedade permite precisar o número exato de estados presentes na imagem utilizada como ícone pelo botão 3D. Em geral, um ícone de botão tem 4 estados: ativo, pressionado, mouse over e inativo. Na imagem fonte, os estados deven ser localizadas verticalmente: - 310 - Título visível/ ícone visível Quando o botão inclui um título e uma imagem, pode ocultar um ou outro deselecionar a opção Título visível ou Ícone visível (ou ambas). Quando um elemento está oculto, é substituído por outro automaticamente no centro do botão. Posição Título/Imagem Esta propriedade permite modificar a localização relativa del título del botão con relación al ícone asociado. Esta propiedade não tem efeito quando o botão contém só um título (sem imagem associada) ou uma imagem (sem título). Por padrão, quando um botão 3D contém um título e uma imagem, o texto se localiza abaixo da imagem. Este é o resultado das diferentes opções desta propriedade: Esquerda: o texto se localiza a la izquierda do ícone. O conteúdo do botão está alinhado a la derecha. Acima: o texto se localizado arriba do ícone. O conteúdo de botão está centrado. Direita: o texto se localiza a la derecha do ícone. O conteúdo do botão está alinhados a esquerda. Abaixo: o texto se localiza debajo do ícone. O conteúdo do botão está centrado. Centro: o texto do ícone está centrado vertical e horizontalmente no botão. Este parâmetro é útil, por exemplo, para texto incluído num ícone Com menu pop-up Esta propriedade permite distribuir um símbolo na forma de triângulo no botão 3D, o qual indica que há um menu pop up associado: A aparência e localização deste símbolo depende do estilo do botão e da plataforma atual. Os estilos de botões 3D que aceitam a propriedade “Com menu suspenso” são os seguintes: Nenhum Botão de barra Bevel Bevel arredondado Office XP OSX Textura OSX Gradiente Ligado e separado Para associar um símbolo de menu suspenso a um botão 3D, tem duas opções: Ligado e Separado. Separado Ligado - 311 - Nota: a disponibilidade efetiva de um modo “separado” depende do estilo de botão e da plataforma. Cada opção especifica a relação entre o botão e o menu pop up associado: Quando o menu pop-up está separado, ao clicar na parte esquerda do botão se executa diretamente a ação atual de botão; esta ação pode ser modificada utilizando o menu pop-up acessível desde a parte direita do botão. Quando o menu pop-up está ligado, um clique no botão só exibe o menu pop-up. Só a seleção da ação no menu pop up provoca sua execução. Estas opções influem igualmente a gestão de eventos de formulário para o botão (para maior informação, consulte o manual de Linguagem de 4D). Administrar o menu suspenso É importante notar que a propriedade “Com menu suspenso” só maneja o aspecto gráfico do botão. A exibição do menu suspenso ( pop-up) e seus valores devem ser manejados completamente pelo desenvolvedor, especialmente utilizando eventos de formulário e os comandos Dynamic pop up menu e Pop up menu. Botões 3D Quando se seleciona o estilo de botão 3D “Personalizado”, várias propriedades adicionais estão disponíveis: Fonte do fundo, Nome/número do fundo, ícone visível, margem horizontal e margem vertical. Fonte do fundo: esta propriedade permite selecionar a imagem que será desenhada ao fundo do botão. Da mesma forma que para o ícone, é possível indicar que a imagem provém de uma variável, da biblioteca de imagens ou de um arquivo de recursos ou de um arquivo no disco. Nome/Número do fundo: uma vez selecionada a fonte, é possível indicar o nome e o número da imagem nesta área. Da mesma forma que para os ícones, as imagens de fundo podem conter quatro áreas verticais distintas, que serão utilizadas por 4D para representar os quatro estados padrões do botão: ativo, ao clicar, ao passar por cima, e desativado. Observe que o efeito produzido ao clicar também pode ser controlado utilizando a propriedade Sangria ícone. Sangria ícone Esta propriedade permite definir um valor de sangria personalizado (em pixels) que será utilizado em caso de que se clique no botão: o título do botão será movido para a direita e para baixo o número de pixels introduzido. Esta função permite aplicar um efeito 3D personalizado quando se clica no botão. Margem horizontal/Margem vertical Estas propriedades lhe permitem definir o tamanho (em pixels) de margens internas do botão. Estas margens delimitam as áreas que o ícone do botão 3D e o título não devem sobrepassar. Este parâmetro é útil, por exemplo, quando a imagen de fundo contém bordas: Botão 3D personalizado sem margem Botão 3D personalizado com margem de 13 pixels - 312 - Botões imagem Usar Um botão imagem pode ter diferentes estados, por comparação, um botão padrão aceita três estados: ativo, desativado e pressionado. Como seu nome indica, um botão imagem representa cada estado com uma imagem diferente. Os botões imagem podem ser utilizados de duas maneiras: como botões de comando em um formulário. Neste caso, o botão imagem inclui geralmente quatro estados diferentes: ativo, desativado, pressionado e ao passar com o mouse em cima. Este modo de funcionamento é utilizado pelo assistente de criação de formulários para a maioria de telas de formulários. como botão imagem permite ao usuário escolher entre várias opções. Neste caso, um botão imagem pode ser utilizado em lugar de um menu imagem suspenso. Com Menu Imagem suspenso, todas as opções são apresentadas simultaneamente (como os elementos no menu suspenso), enquanto que o botão imagem mostra as opções consecutivamente (a medida que o usuário clica no botão). Este é um exemplo de um botão imagem. Suponha que você queira dar aos usuários de uma aplicação personalizada a oportunidade de escolher a linguagem da interface para a aplicação. Você pode implementar a opção como um botão imagem em uma caixa de diálogo personalizada de propriedades, como se mostra a seguir: Ao clicar no objeto muda a imagem. O botão imagem é implementado da seguinte maneira. Primeiro, se prepara um gráfico no qual a série de imagens esteja organizada em filas, colunas, ou na tabela. É possível adicionar este gráfico à [#title id="581"/], a uma variável imagem, ou a um arquivo imagem. O botão de imagem está desenhado para mostrar somente uma imagen por vez de uma série de imagens É possível organizar as imagens em colunas, filas ou em tabelas (como é mostrado na imagem anterior). Quando você organiza imagens em uma tabela, as imagens são numeradas da esquerda para a direita, fila por fila, começando por 0. Por exemplo, a segunda imagem da segunda fila de uma tabela de quatro filas e três colunas, é a de número 4. - 313 - Nota: A Biblioteca de imagens inclui características que lhe permitem organizar uma imagem como uma tabela de miniaturas. Quando uma imagem foi definida como uma tabela de miniaturas, é possível criar um botão de imagem arrastando o nome da imagem da Biblioteca. Propriedades Os botões de imagem tem as seguintes propriedades específicas: No tema “Imagem”, defina a fonte da imagem utilizando a lista suspensa “Fonte”. É possível escolher entre Variável, Biblioteca de imagens, Arquivo de recursos e Arquivo. Uma vez definida a fonte da imagem, introduza o nome (se a imagem é uma variável) ou o número (se a imagem provém da biblioteca de imagens ou de um arquivo de recursos) ou a rota de acesso (se a imagem vem de um arquivo de imagem) relativa à pasta Resources do banco de dados” (ver o parágrafo “ Referenciar automaticamente arquivos de imagem). No tema “Recorte”, defina o número de filas e colunas que compõem a tabela de miniaturas. Em nosso exemplo, utilizamos uma imagem que consta de três colunas e duas filas. No tema “Animação”, é possível definir o modo de visualização do botão imagem e seu funcionamento. É possível combinar várias opções. Este ponto é descrito com mais detalhes no parágrafo a seguir. Nota: A variável associada a um botão de imagem retorna o número de índice, na tabela de miniaturas, da imagem mostrada atualmente. A numeração de imagens da tabela começa por 0. Animação Aqui estão as diferentes opções de visualização e funcionamento de botões de imagem. Naturalmente, estas opções podem ser combinadas.: <Nenhuma opção marcada> Mostra a imagem seguinte da série quando o usuário clica no botão; mostra a imagem anterior da série quando o usuário pressiona a tecla Shift e clica. Quando o usuário alcança a última imagem da série, a imagem não muda quando o usuário clica novamente. Ou seja, o botão não volta para a primeira imagem da série. Alterar constantemente ao clicar É similar ao anterior exceto que o usuário pode manter presionado o botão do mouse para mostrar a imagem continuamente (ou seja, como uma animação). Quando o usuário alcança a última imagem, o objeto não volta para a primeira imagem. Voltar ao início É similar ao anterior exceto que as imagens são mostradas em um ciclo contínuo. Quando o usuário alcança a última imagem e clica novamente, a primeira imagem aparece e assim sucessivamente. Alterar ao passar o cursor em cima O conteúdo do botão de imagem é modificado quando o cursor passa por cima. A imagem inicial é restabelecida quando o cursor deixa a área do botão. Este modo é utilizado com frequência em aplicativos multimídia ou em documentos HTMLA imagem mostrada é a última da tabela de miniaturas, a menos que esteja selecionada a opção Usar Última Imagem Quando Desativado. Se esta opção está selecionada, a imagem que se exibe é a miniatura seguinte à última. Voltar ao soltar o clique Este modo funciona com duas imagens. Mostra a primeira imagem todo o tempo exceto quando o usuário clica no botão. Neste caso, a segunda imagem é mostrada até que o usuário solte o botão do mouse, com o qual volta à primeira imagem. Este modo lhe permite criar um botão de ação com uma imagem diferente para cada estado (normal e pressionado). É possível utilizar este modo para criar um efeito 3D ou mostrar qualquer imagem que represente a ação do botão. Usar Última Imagem se Desativado Este modo lhe permite definir a última miniatura como a miniatura a se mostrar quando o botão estiver inativo. Quando este modo está selecionado, 4D mostra a última miniatura quando o botón está inativo. A miniatura utilizada quando o botão está inativo é tratada a parte por 4D: quando você combina esta opção com as opções “Mudar continuamente ao clicar” e “Voltar para o início”, a última imagem é excluída da sequência associada com o botão e só aparece quando o botão está inativo. Mudar a cada x tiques Este modo permite fazer um ciclo através do conteúdo do botão de imagem a uma velocidade específica (em tiques). Por exemplo, se você põe 10, as miniaturas mudarão a cada 10 tiques. Neste modo, todas as outras opções são ignoradas. Nota: Observe que a opção Transparente (tema “Aparência”) também pode ser utilizada para definir a representação do botão de imagem (torna o fundo da imagem transparente). Por exemplo, você deseja definir um botão que aceite os seguintes modos: Voltar ao soltar o clique, Mudar ao passar o cursor por cima e Usar última imagem quando desativado. No caso de uma tabela de miniaturas que tem uma fila e quatro colunas, cada miniatura corresponde aos seguintes estados: padrão, pressionado, curso por cima e desativado. - 314 - Na Lista de propriedades é possível definar as seguintes propriedades: 1 fila, 4 colunas bem como as opções Voltar ao soltar o clique, Mudar ao passar o cursor por cima e Usar última imagem quando desativado. - 315 - Grade de botões Uso Uma grade de botões é um objeto transparente localizado sobre uma imagem. A imagem deve representare uma tabela. É possível utilizar uma grade de botões para determinar onde o usuário deve clicar no gráfico. Seu método de objeto utiliza o evento On Clicked e toma as medidas apropriadas dependendo da localização do clique. Em 4D, uma grade de botões é utilizada como uma paleta de cores: Os botões na grade estão numerados da parte superior esquerda para a parte inferior direita. Neste exemplo, a grade é de 16 colunas por 16 filas. O botão situado na parte superior esquerda é o botão número 1. O último botão à direita da segunda fila é o botão número 32. Para criar uma grade botões, adicione uma imagem de fundo ao formulário e coloque uma grade de botões sobre a imagem. Especifique o número de filas e colunas nas áreas de entrada correspondentes do tema “Recorte”. Ação Ir para a página É possível atribuir a ação Ir para a página a uma grade de botões. Quando esta ação está ativa, 4D mostra automaticamente a página do formulário que corresponde ao número do botão selecionado na grade de botões. Por exemplo, se o usuário seleciona o décimo botão da grade, 4D mostrará a décima página do formulário atual (se existir). Se você deseja manejar você mesmo o efeito da seleção de um botão, selecione Sem ação. Para mais informação consulte a seção Ações padrões. - 316 - Caixas de seleção Uso Uma caixa de seleção é utilizada para introduzir ou mostrar dados bionários (verdadeiro-falso). Uma caixa de seleção é um tipo de botão que pode estar selecionando ou desmarcando. Seu efeito é controlado por um método. Como todos os botões, uma caixa de seleção se inicia no 0 quando o formulário é aberto pela primeira vez. O método associado a uma caixa de seleção é executado quando a caixa de seleção é selecionada. Geralmente uma caixa de seleção mostra o texto junto a um quadrado pequeno. Este texto é definido na área Título do tema “Objetos” na lista de propriedades. É possível introduzir nesta área uma etiqueta em forma de referência XLIFF ou STR# (ver MissingRef). Quando o usuário clica no objeto, a caixa é marcada e seu valor é 1. Quando não está marcada, seu valor é 0. Todas as caixas de seleção em um formulário podem ser marcadas ou desmarcadas. Um grupo de caixas de seleção permite ao usuário selecionar várias opções. Diferente de um campo booleano com formato de caixa de seleção, os valores da variável da caixa de seleção não são salvos automaticamente. É necessário utilizar um método para manejar a variável. Nota: As caixas de seleção 3D tem o mesmo funcionamento que as caixas de seleção porém sua aparência (por exemplo, a representação do estado selecionado/não selecionado) é definida pelas propriedades da família de botões 3D. Para maiores informações, consulte o parágrafo Botões 3D, caixa de seleção 3D e botões de opção 3D. Caixa de seleção de Três Estados Os objetos de tipo caixas de seleção aceitam um terceiro estado. O terceiro estado é um estado intermediário, usado geralmente para visualização. Este estado permite, por exemplo, indicar que uma propriedade está presente em uma seleção de objetos, porém não em todos os objetos. Para que uma caixa de seleção tome controle deste terceiro estado, você deve definir a propriedade Três estados no tema “Exibir” da Lista de propriedades: - 317 - Esta propiedade está disponível somente para caixas de seleção padrão associadas a variáveis numéricas, as caixas de seleção 3D e as caixas de seleção para campos booleanos não podem utilizar a propriedade Três estados (um campo booleano não puede estar em um estado intermediário). A variável associada à caixa de seleção retorna o valor 2 quando a caixa de seleção está no estado intermediário. Dica: no modo entrada, as caixas de seleção mostram cada estado sequencialmente, na seguinte ordem: não selecionado/ selecionado/intermediário/não selecionado, etc. O estado intermediário geralmente não é muito útil no modo entrada; no código, simplesmente força o valor da variável a 0 quando toma o valor 2 com o fim de passar diretamente do estado selecionado ao estado não selecionado. - 318 - Botões de opção e botões imagem de opção Os botões de opção e os botões de opção de imagem são objetos que permitem ao usuário selecionar um valor ou imagem entre um grupo de valores ou de imagens. Um botão de opção aparece como um círculo seguido por um texto. Os botões de opção de imagem mostram um ícone ou uma imagem e estão sobre uma imagem. Nota: Os botões de opção 3D funcionam igual, porém sua aparência é definida pelas propriedades da família de botões 3D. Para maiores informações, consulte o parágrafo Botões 3D, caixa de seleção 3D e botões de opção 3D. Cada tipo de botão de opção é selecionado da mesma maneira: você clica no objeto para selecioná-lo. Também é possível clicar em um botão de opção de imagem marcado para desmarcá-lo, porém não se pode fazer isso com um botão de opção. Os botões de opção de imagem são similares aos botões inversos em que são transparentes até que sejam selecionados. Quando são selecionados, invertem a imagem atrás deles até que outro botão de opção seja selecionado. A parte restante desta seção utiliza o termo “botão de opção” para todos os tipos de botões de opção. Os botões de opção são utilizados em forma de conjuntos coordenados: somente um botão por vez pode ser selecionado no conjunto. Para funcionar de maneira coordenada, um conjunto de botões de opção deve estar agrupado no editor de formulários. Para fazer isso, é possível utilizar o comando Grupo no menu Objeto ou o botão correspondente da barra de ferramentas do formulário. Em versões anteriores de 4D, o funcionamento coordenado de um conjunto de botões de opção era obtido ao dar a mesma letra inicial a suas variáveis associadas (por exemplo, m_botao1, m_botao2, m_botao3, etc.). Por razões de compatibilidade, este principio é mantido por padrão em bancos de dados convertidos. No entanto, é possível forçar o uso deste novo modo de utilização nas Preferências (consulte o parágrafo Página Compatibilidade). Os efeitos dos botões de opção são controlados com métodos. Como todos os botões, um botão de opção é inicializado em 0 quando o formulário é aberto pela primeira vez. Um método associado a um botão de opção é executado quando se seleciona o botão. O exemplo a seguir representa um grupo de botões de opção 3D utilizado em uma base de dados de uma coleção de videos para introduzir a velocidade de gravação. (SP, LP, ou EP). Ao selecionar um botão de opção de um grupo o botão se põe em 1 e os outros botões do grupo em 0. Só é possível selecionar um botão de opção ao mesmo tempo. Nota: também pode associar as variáveis de tipo booleano aos botões de opção. Nesse caso, quando um botão de um grupo for selecionado, sua variável é verdadeira e as variáveis para os outros botões de opção são falsas. O exemplo a seguir é de um botão de opção imagem. O botão de opção imagem selecionado aparece com fundo preto: O valor contido em um objeto de botão de opção não é salvo automaticamente; os valores de botões de opção devem ser armazenados em suas variáveis e manejados com a ajuda de métodos. - 319 - Menus suspensos/Listas suspensas Apresentação Os pop-up/listas suspensos, são objetos que permitem ao usuário selecionar um elemento de uma lista. Os elementos que aparecem nas listas suspensas são manipulados utilizando um array ou uma lista de valores por padrão. Um array é uma lista de valores guardados em memória referenciados pelo nome do array (ver Arrays e objetos de formulário). Um pop-up/listas suspensas mostra um array como uma lista de valores que aparece quando se clica sobre ele. Os nomes “Pop-up“ e "Lista suspensa” se referem aos mesmos objetos; “Pop-up” é parte da terminologia de Mac OS e “Lista suspensa” de Windows. Como mostram os exemplos a seguir, a aparência destes objetos é ligeiramente diferente dependendo da plataforma: Windows Mac OS Utilizar um array Um array é uma lista de valores guardados em memória referenciados pelo nome do array (ver Arrays e objetos de formulário). Um pop-up/listas suspensas mostra um array como uma lista de valores que aparece quando se clica sobre ele. Os objetos pop-up/listas suspensas são iniciados ao carregar uma lista de valores em um array. Pode-se fazer isso de várias formas: Introduzir uma lista de valores padrão nas propriedades do objeto. Para fazê-lo, clique no botão Editar... no tema “Fonte de dados” da Lista de Propriedades. Para maiores informações, consulte Listas de valores padrão. Os valores padrão são carregados automaticamente em um array. É possível fazer referência ao array utilizando o nome da variável associada ao objeto. Antes que o objeto seja mostrado, execute o código que atribua os valores aos elementos do array. Por exemplo: ARRAY TEXT(aCidades;6) aCidades{1}:="São Paulo" aCidades{2}:="Rio de Janeiro" aCidades{3}:="Curitiba" aCidades{4}:="Brasília" aCidades{5}:="Salvador" aCidades{6}:="Porto Alegre" Também neste caso, o nome da variável associada ao objeto no formulário deve ser aCidades. Este código deveria ser localizado no método de formulário e executado quando se produz o evento de formulário On Load. Antes que o objeto seja mostrado, carregue os valores de uma lista no array utilizando o comando LIST TO ARRAY. Por exemplo, LIST TO ARRAY ("Cidades";aCidades) Neste caso, o nome da variável associada ao objeto no formulário deve ser aCidades. Este código pode ser executado no lugar das declarações de atribuição anteriores Se você precisa guardar em um campo a escolha do usuário, é necessário utilizar uma declaração de atribuição que seja executada depois de que se aceite o registro. Uma declaração completa tipo Case no método de objeto seria vista - 320 - como esta: Case of :(Form event=On Load) LIST TO ARRAY("Cidades";aCidades) If(Record number([Pessoas])<0) `novo registro aCidades:=3 `mostrar um valor padrão Else `registro existente, mostrar valor armazenado aCidades:=Find in array(aCidades;Cidade) End if :(Form event=On Clicked) `A seleção se modifica Cidade:=aCidades{aCidades} `o campo recebe um novo valor :(Form event=On Validate) Cidade:=aCidades{aCidades} :(Form event=On Unload) CLEAR VARIABLE(aCidades) End case Na página Eventos da janela Lista de propriedades, você deve escolher os eventos que você testou em sua declaração tipo Case.. Os arrays sempre contém um número finito de elementos. A lista de elementos é dinâmica e pode ser modificada por um método. Os elementos em um array podem ser modificados, organizados e adicionados. Para maiores informações sobre a criação e utilização de um array, consulte o capítulo sobre arrays no capítulo Arrays do Manual de Linguagem. Utilizar uma lista de seleção Se deseja utilizar um pop-up/lista suspensa para manipular os valores de um campo ou de uma variável listada, 4D lhe permite referenciar diretamente o campo ou a variável como fonte de dados do objeto. Isto faz com que seja mais fácil a gestão dos campos/variáveis listados. Nota: se utilizada uma lista hierárquica, será mostrará e pode ser selecionado o primeiro nível. Por exemplo, no caso de um campo de "Cor" que só pode conter os valores "Branco", "Azul", "Verde" ou "Vermelho", agora é possível criar uma lista que contém estes valores e associar a um objeto pop -up de menu que referencia ao campo "Cor" 4D. 4D se encarrega então da gestão automática da entrada e a visualização do valor atual no formulário Para associar um menu pop-up/lista suspensa ou um combo box a um campo ou variável, só é introduzido diretamente o nome do campo ou da variável na área Nome da variável do objeto: Quando se executa o formulário, 4D gerencia automaticamente o menu suspenso ou o combo box durante a entrada ou a visualização: quando um usuário escolhe um valor, é guardado no campo, quando mostrado o formulário, este valor de campo é mostrado no menu suspenso: Nota: não é possível combinar este princípio com o uso de um array para inicializar o objeto. Se introduz um nome de campo na área de Nome de variável, então deve utilizar uma lista de opções. - 321 - Guardar como Ao relacionar um objeto pop-up/lista suspensa a uma lista de seleção com um campo, pode utilizar a opção Guardar como Valor/Referência disponível no tema de "Fontes de dados" da Lista de propriedades. Esta opção lhe permite otimizar o tamanho dos dados guardados. Para obter mais informação, consulte Guardar como Valor ou Referência . Ação Ir para a página É possível atribuir a ação automática Ir para a página a um objeto pop-up/lista suspensa (tema “Ação” da Lista de propriedades). Quando esta ação está selecionada, 4D mostra automaticamente a página do formulário que corresponda ao número do elemento selecionado na lista. Por exemplo, se o usuário seleciona o terceiro elemento da lista, 4D mostrará a terceira página do formulário atual (se existe). Se deseja manejar você mesmo o efeito da seleção de um elemento, selecione Sem ação. - 322 - Combo Boxes Um combo box é similar a uma lista suspensa, exceto pelo fato de que o objeto aceita a entrada de texto pelo usuário e que dispõe de duas opções específicas.. Um combo box é inicializado da mesma forma que uma lista suspensa (ver Menus suspensos/Listas suspensas). Se o usuário introduz texto no combo box, preenche-se o elemento 0 do array. Em outras palavras, deve considerar o combo box como uma zona editável que utiliza um array como um conjunto de valores padrão. Utilize o evento On Data Change para manejar os valores de entrada para a área editável, assim como você utilizaria um objeto da área editável. Para mais informação, consulte a descrição do comando Form event no manual de Linguagem de 4D. Opções de combo box Os objetos de tipo Combo box aceitam duas opções relativas as listas de seleção associadas a eles: Inserção automática e Exclusões (lista de valores excluídos). Inserção automática A opção Inserção automática se encontra no tema "Fonte de dados" da Lista de propriedades para os objetos de tipo combo box: Nota: esta opção também está disponível para as colunas do quadro de lista, já que suas células são mostra como quadros combinados quando uma coluna está associado com uma lista de seleção. Quando se ativa esta opção, se um usuário introduz um valor que não se encontra na lista de seleção associada ao objeto, este valor se adicione automaticamente a lista armazenada na memória. Pode associar listas de seleção utilizando o comando OBJECT SET LIST BY NAME ou OBJECT SET LIST BY REFERENCE. Por exemplo, dada uma lista de opção é associada ao combo box "País" e contém "França, Alemanha, Itália”. Se o usuário introduz "Espanha" e se a opção Inserção Automática está selecionada, o valor "Espanha" se adicione automaticamente a lista na memória: Naturalmente, o valor introduzido não deve pertencer a lista de valores excluídos associados ao objeto, se foi definido (ver o seguinte parágrafo). Nota: se a lista é criado a partir de uma lista definida no modo Desenho, a lista original não se modifica. Se a opção Inserção automática não está selecionada, o valor introduzido se armazena no objeto, mas não na lista em memória. Lista de excluídos A opção Lista de excluídos se oferece no tema "Rango de valores" dos objetos de tipo combo box, permitindo associar uma lista de valores excluídos a estes objetos. Se o usuário introduz um valor que pertence a esta lista, sua entrada se rejeita automaticamente (ver Lista de valores excluídos). Nota: a possibilidade de associar uma lista de valores obrigatórios não está disponível para os combo boxes. Em uma interface, se um objeto deve propor uma lista finita de valores obrigatórios, então deve utilizar um objeto de tipo de lista deslocável. - 323 - Menus suspensos hierárquicos e listas hierárquicas Um menu suspenso hierárquico tem um submenu associado a cada um de seus elementos. Este é um exemplo de um menu hierárquico: Da mesma forma, uma lista hierárquica tem uma sublista associada a cada elemento na lista. Este é um exemplo de uma lista hierárquica: Nota: Nos formulários, os menus hierárquicos estão limitados a dois níveis. No entanto, os objetos de tipo lista hierárquica não estão limitadas. É possível expandir ou contrair um elemento hierárquico fazendo clique nos ícones triangulares. É possível controlar se um elemento em uma lista hierárquica é modificável pelo usuário. Se um elemento em uma lista hierárquica é editável, o usuário pode editá-lo utilizando a combinação Alt+clique (Windows) / Opção+clique (Mac OS), ou com um longo clique no texto do elemento. Se você preenche uma lista hierárquica utilizando uma lista criada no editor de listas, a propriedade “modificável” dos elementos da lista está definida pela opção Elemento modificável do editor de listas. Para maiores informações, consulte o parágrafo Definir propriedades de lista. Os menus suspensos hierárquicos e as listas hierárquicas são controladas com a ajuda de comandos de linguagem de listas hierárquicas. O princípio consiste em atribuir a referência da lista hierárquica à variável associada ao objeto no editor de formulários. Para maior informação, consulte a seção Listas Hierárquicas do Manual de Linguagem 4D. Também pode associar referências de listas hierárquicas as listas de seleção de objetos de formulários (fontes, valores obrigatórios e valores excluídos) com os comandos OBJECT SET LIST BY REFERENCE ou [#cmd id="237"/]. - 324 - Menu Imagem suspenso Uso Um menu imagem suspenso mostra um array de imagens bidimensional. Um menu imagem suspenso pode ser utilizado para substituir um menu imagem. A criação da imagem a ser utilizada com o menu imagem suspenso é similar à criação de uma imagem para um botão de imagem. O conceito é o mesmo que o de uma Grade de botões, exceto que a imagem é utilizada como um menu suspenso em lugar de um objeto de formulário. Para criar um menu pop-up imagem , você deve fazer referência a uma imagem. O exemplo a seguir utiliza a imagem definida para os botões de imagem. Neste caso, lhe permite selecionar a linguagem de interface selecionando-a do menu imagem suspenso. Cada linguagem é representado pela bandeira correspondente: Como com um botão imagem suspenso utiliza uma imagem que está organizada em filas e colunas (ou em uma grade). É possível localizar essa imagem naBiblioteca de imagens, em uma variável imagem ou em um arquivo imagem. A etapa seguinte consiste en adicionar o menu pop-up imagem ao formulário. Nota: A Biblioteca de imagens, inclui características que lhe permitem organizar uma imagem como uma tabela de miniaturas. Também lhe permite visualizar os efeitos dos parâmetros atuais. Quando uma imagem se define como uma tabela de miniaturas, você pode criar diretamente um menu imagem suspenso arrastando o nome da imagem ao formulário enquanto pressiona a tecla Shift. - 325 - Propriedades Várias propriedades específicas permitem configurar os menus imagem suspensos: No tema “Imagem”, defina a fonte da imagem utilizando a lista suspensa “Fonte”. Você pode escolher entre Variável, Biblioteca de imagens, Arquivo de recursos e arquivo. Uma vez definida a fonte da imagem, introduza o nome (se a imagem for uma variável) ou o número (se a imagem vem de uma biblioteca de imagens ou um arquivo de recursos) ou o endereço de acesso (se a imagem vem de um arquivo imagem) da imagem na área “Nome/N°”; neste último caso, o endereço deve ser relativo à pasta Resources do banco (ver o parágrafo Referenciar automaticamente arquivos de imagem). No tema “Recorte”, defina o número de linhas e colunas que compõe a tabela de miniaturas. As opções Margem horizontal e Margem vertical criam uma margem entre a borda do menu e a imagem. Introduza os valores em pixels. Ação Goto Page É possível associar a ação Ir à página a um menu de imagem pop-up. Quando esta ação estiver selecionada, 4D mostra automaticamente a página do formulário que corresponde a posição da imagem selecionada no array de imagem. Elementos são numerados da esquerda para direita, e de cima para baixo, começando com o canto superior esquerda. Por exemplo, se o usuário selecionar o terceiro elemento, 4D mostrará a terceira página do formulário atual (se existir). Se você preferir controlar você mesmo o efeito de um clique, selecione Sem ação. Para mais informação sobre as ações padrão, consulte a seção Ações padrões. Programar Vocô pode administrar menus suspenso (pop-up) de imagens usando método. Do mesmo modo que para as grades de botões, as variáveis associadas a menus imagem suspenso são definidas pelo numero do elemento selecionado no menu imagem suspenso. Se não existir um elemento selecionado, o valor é 0. Os elementos são numerados, linha por linha, da esquerda para direita começando pela linha superior. - 326 - Indicadores Os indicadores de progresso (também chamados "termômetros"), réguas e dials são objetos que mostram valores de forma gráfica. Os três objetos funcionam da mesma forma; a única diferencia é sua aparência. Nos referimos a estes três objetos como indicadores. É possível utilizar os indicadores para mostrar ou definir valores. Por exemplo, se um indicador de progresso recebe um valor por método, ele mostra o valor. Se o usuário modifica manualmente o indicador, o valor dele muda. O valor pode ser utilizado por outro objeto tal como um campo ou um objeto não editável. Indicador de progresso / Dial / Régua Tipos de Indicadores 4D oferece vários tipos de indicadores que consistem nos três tipos principais e suas variantes. Para saber como selecionar um tipo específico de indicador, consulte a seção "Definir os tipos de indicadores" a seguir. Barra de progresso Tipo principal: Barra de progresso A barra de progresso é o indicador de progresso por padrão. Pode mostrar uma barra de progressão horizontal ou vertical. Este parâmetro é determinado pela forma do objeto que seja desenhado. Barber shop Tipo principal: Indicador de progressão (termômetro) (MacOS) (Windows) Este tipo de termômetro mostra uma animação continua. Os termômetros “Barber shop” geralmente são utilizados para indicar ao usuário que o programa está em processo de efetuar uma operação longa. Quando essa variante for selecionada, as opções do tema "Graduação" se ocultam. Quando se executa o formulário, o termômetro não se anima. A animação deve ser manejada passando um valor à variável associada ao termômetro: 1 (ou qualquer valor diferente de 0) = Iniciar animação, 0 = Parar animação. Nota: os termômetros “Barber shop” funcionam apenas com a aparência Sistema ou Impressão. Barra de progresso assincrônico Tipo principal: Indicador de progresso (termômetro) Este indicador circular mostra também uma animação contínua. Este tipo de objeto indica que uma operação, por - 327 - exemplo a procura de conexão de rede, ou um cálculo em andamento. Quando essa variante estiver selecionada, as opções do tema "Graduação" são ocultadas. Quando se executa o formulário, o termômetro não se anima. A animação deve ser manejada passando um valor à variável associada ao termômetro: 1 (ou qualquer valor diferente de 0) = Iniciar animação, 0 = Parar animação Régua Tipo principal: Régua A régua é um objeto de interface padrão usado para definir ou ler um valor usando um cursor localizado em uma régua. Pode atribuir sua variável associada a uma área editável (campo ou variável) para guardar ou modificar o valor atual do objeto. Passo a passo Tipo principal: Régua Botão passo a passo associado à variável vStep. Este objeto padrão permite ao usuário mover-se por valores numéricos, durações (horas) ou datas em passos predefinidos, clicando nos botões em forma de flechas. Pode atribuir a variável associada ao objeto a uma área editável (campo ou variável) para guardar ou modificar o valor atual do objeto. Um botão passo a passo pode ser associado diretamente a uma variável numérica, hora ou data. Para os valores do tipo hora, as propriedades Mínimo, Máximo e Passo representam os segundos. Por exemplo, para definir um passo de 8:00 a 18:00 com passos de 10 minutos: Mínimo = 28 800 (8*60*60) Máximo = 64 800 (18*60*60) Paso = 600 (10*60) Para os valores de tipo data, o valor introduzido na propriedade Passo representa os dias. As propriedades Mínimo e Máximo são ignoradas. Nota: para que o botão passo a passo funcione com uma variável hora ou data, é imperativo definir seu tipo na lista de propriedades E declarar o botão explicitamente com o comando C_TIME o C_DATE. Dial Tipo principal: Dial Este tipo de indicador apresenta os dados na forma de um semicírculo. Definir os tipos de indicadores Os dials, indicadores de progresso e réguas estão disponíveis utilizando o botão da barra de objetos do editor de formulários. Os objetos de tipo "indicador de progressão" (Termômetro) e "Régua" aceitam diferentes variantes. Para os indicadores de progressão, estas variantes são definidas utilizando a propriedade Tipo de indicador do tema "Exibir" da lista de propriedades: - 328 - Para as réguas, estas variantes são definidas através da propriedade Exibir como do tema "Exibir" da Lista de propriedades: Nota: estas variantes podem ser especificadas utilizando o comando OBJECT SET FORMAT. Propriedades de Indicador Além das propriedades padrão de aparência e localização, pode definir outras propriedades específicas para cada indicador: valor mínimo, valor máximo, unidades de graduação, os mínimos passos permitidos pelo indicador como também as opções de visualização. Também pode definir o formato de saída de uma etiqueta do indicador (para maior informação sobre os formatos de saída, consulte a seção GET LIST ITEM PARAMETER). Graduação Estas propriedades específicas são definidas no tema “Graduação” da Lista de propriedades: - 329 - Este tema de propriedades é mostrado para os indicadores de tipo barra de progresso, régua, botão passo a passo e dial. As propriedades disponíveis também dependem do tipo de indicador. Esta é a descrição de cada propriedade: Mínimo e Máximo: valores mínimo e máximo do indicador. No caso de um botão passo a passo numérico, estas propriedades representam os segundos quando o objeto estiver associado a um valor de tipo hora e se estiver associado a um valor de tipo data. Unidade: unidade de visualização das graduações. Passo: intervalo mínimo aceito entre dois valores durante a utilização. No caso de um botão passo a passo numérico, esta propriedade representa os segundos quando o objeto está associado a um valor de tipo hora e dias se está associado a um valor de tipo data. Posição da etiqueta: localização das etiquetas quando são mostradas. Abaixo: mostra as etiquetas à direita ou abaixo do indicador. Acima: mostra as etiquetas a esquerda ou acima do indicador. Etiquetas: mostra /oculta etiquetas. Graduação: mostra/oculta as graduações junto às etiquetas. Método Executar Objeto Quando é selecionado um objeto indicador, há uma propriedade adicional no tema "Ação" da lista de propriedades: Executar método do objeto. Quando esta opção estiver selecionada, o método do objeto será executado com o evento On Data Change quando o usuário mude o valor do indicador. Como padrão, o método é executado depois da modificação. Gestão programada de indicadores A variável associada ao indicador controla a saída. Pode colocar valores no indicador ou utilizar os valores do indicador utilizando métodos. Por exemplo, um método para um campo ou objeto editável podem ser utilizados para controlar um termômetro: vTerm:=[Empregados]Salário Este método atribui o valor do campo Salário à variável vTerm. Este método está associado ao campo Salário. Por outro lado, pode utilizar o indicador para controlar o valor de um campo. O usuário arrasta o indicador para definir o valor. O método: - 330 - [Empregados]Salário:=vTerm O método atribui o valor do termômetro ao campo salário. A medida que o usuário arrasta o indicador, o valor no campo Salário muda. - 331 - Controle de abas Usar Uma aba cria um objeto que permite ao usuário escolher entre um conjunto de telas virtuais que estão entre as abas. Se acessa a cada tela clicando em sua aba. O formulário multipáginas a seguir utiliza abas: O formulário multi-páginas a seguir usa abas. Para navegar de uma tela a outra, o usuário simplesmente clica na aba correspondente. As telas podem representar páginas em um formulário multipáginas ou um objeto que muda quando o usuário clica em uma aba. Se a aba é utilizada como ferramenta de navegação, então o comando FORM GOTO PAGE ou a ação automática Ir à página é utilizada quando o usuário clique em uma aba. Outro uso de uma aba é controlar a informação que é exibida em um subformulário ou em áreas de rolagem agrupadas. Por exemplo, um organizador de contatos poderia ser implementado utilizando uma aba. As abas mostrariam as letras do alfabeto e a ação da aba seria carregar a informação correspondente à letra na qual o usuário clique. Cada guia pode mostrar etiquetas, ou etiquetas e um ícone pequeno. Se você incluir ícones, o ícone aparece à esquerda de cada etiqueta. Este é um exemplo de abas com ícones: Quando se cria uma aba, 4D controla o espaço e a localização das abas. Só se deve fornecer as etiquetas em forma - 332 - de um array aos ícones e às etiquetas em forma de lista hierárquica. Se a aba não é suficientemente grande para mostrar as etiquetas e os ícones, 4D mostra somente os ícones. Se você não pode ajustar todos os ícones, coloque uma seta de deslocamento à direita da última aba disponível. As setas de deslocamento permitem ao usuário mover os ícones para a esquerda ou direita. Em Mac OS, as abas podem ser alinhadas, além da posição padrão (acima), à esquerda, à direita, para baixo (ver o parágrafo “Modificar a orientação (somente Mac OS)” abaixo). Adicionar etiquetas ao controle de abas Existem várias formas de colocar etiquetas em uma aba. Pode associar abas a una lista de valores padrão, acessível utilizando o botão Editar junto à propriedade Valores como padrão no tema “Fonte de dados” da Lista de propriedades. Para maiores informações sobre este ponto, consulte o parágrafo “Listas de valores padrão. Os valores padrões são carregados automaticamente em um array. É possível fazer referência a este array utilizando o nome da variável associada à aba. É possível criar uma lista utilizando o editor de listas e atribuindo a lista à aba como lista de valores, como é mostrado a seguir. Se você preferir, é possível associar um pequeno ícone a cada elemento da lista utilizando o editor de listas. Para maiores informações, consulte o parágrafo Associar um ícone pequeno a um elemento. É possível criar um array texto que contenha os nomes de cada página do formulário. Este código deve ser executado antes que o formulário seja apresentado ao usuário. Por exemplo, é possível colocar o código no método do objeto da aba e executá-lo quando ocorra o evento On Load. ARRAY TEXT(asPaginas;3) asPaginas{1}:="Nome" asPaginas{2}:="Endereço" asPaginas{3}:="Notas" Nota: Da mesma forma é possível armazenar os nomes das páginas em uma lista hierárquica e utilizar o comando Load list para carregar os valores no array. Comando GOTO PAGE Utilize o comando FORM GOTO PAGE no método da aba: FORM GOTO PAGE(arrPages) O comando é executado quando ocorre o evento On Clicked. Limpe o array quando ocorra o evento On Unload. Este é um exemplo de método do objeto: Case of - 333 - :(Form event=On Load) LIST TO ARRAY("Tab Labels";asPaginas) :(Form event=On Clicked) FORM GOTO PAGE(arrPages) :(Form event=On Unload) CLEAR VARIABLE(asPaginas) End case Ação Goto Page É possível associar a ação Ir à página em uma aba. Quando esta ação estiver ativa, 4D mostra automaticamente a página do formulário que corresponde ao número da janela selecionada. Por exemplo, se o usuário clicar na terceira guia, 4D mostrará a terceira página do formulário atual (se existir). Se você prefere controlar você mesmo o efeito de um clique sobre uma guia, selecione Sem ação. Para mais informação sobre as ações padrão, consulte a seção Ações padrões. Modificar a direção (apenas Mac OS) É possível definir a orientação das abas em seus formulários. Esta propriedade está disponível em todas as plataformas mas só pode ser visualizada sob Mac OS, quando a interface da plataforma é “Sistema”. É possível escolher localizar as abas em cima (padrão), esquerda, direita ou abaixo. A orientação das abas é definidas no tema “Aparência” da Lista de propriedades: Quando as abas com uma orientação personalizada são exibidas sob Windows ou com a plataforma “Impressão”, automaticamente retornam à orientação padrão (acima). - 334 - Separador Usos Um separador divide um formulário em duas áreas, permitindo-lhe ao usuário aumentar ou reduzir as áreas movendo o separador. Um separador pode ser horizontal ou vertical. O separador leva em consideração as propriedades de redimensionamento dos objetos, o qual permite personalizar completamente a interface. Um separador pode ou não ser com uma barra de rolagem. O separador geralmente é utilizado em formulários de saída de modo que as colunas possam ser redimensionadas: Estas são algumas das características gerais dos separadores: É possível colocar tantos separadores quanto você quiser em qualquer tipo de formulário e utilizar uma combinação de separadores horizontais e verticais em um mesmo formulário. Um separador pode cruzar um objeto. Este objeto será redimensionado quando o separador se mova. Os limites dos separadores são calculados de modo que os objetos que se movem permaneçam completamente visíveis no formulário ou não passem debaixo ou ao lado de outro separador. Quando a propriedade Movimentador estiver associada a um separador, seu movimento para a direita ou para baixo não encontra limites. Se você redimensionar um formulário utilizando um separador, as novas dimensões do formulário serão salvas enquanto o formulário é exibido. Uma vez que o formulário é fechado, as dimensões iniciais são restauradas. Uma vez inserido, o separador aparece como uma linha. É possível modificar seu estilo de borda para obter uma linha mais fina ou mudar sua cor. Da mesma forma, é possível utilizar um botão invisível como separador com a ação padrão Separador automático (ver Ações padrões) Interação com as propriedades dos objetos vizinhos Em um formulário, os separador interatuam com os objetos que os rodeiam de acordo com as opções de redimensionamento destes objetos. - 335 - Objeto(s) sobre o separador Opções de redimensionamento horizontal ou à direita do dos objetos separador vertical Objeto(s) abaixo do separador horizontal ou à direita do separador vertical (1) Nenhum Aumentar Mover Permanece como está separador no “Impulsor” separador “Impulsor” se movem com o separador (conservam sua posição relativa) até o próximo limite. O limite, quando se movem para baixo ou para direita, é a margem da janela ou outro separador. se movem com o separador (conservam sua posição relativa) indefinidamente. Não se aplicam limites (ver o próximo parágrafo) Mantém sua posição original mas são redimensionados de acordo com a nova posição do separador Se movem com o separador (1) Não é possível arrastar o separador além do lado direito (horizontal) ou inferior (vertical) de um objeto localizado nesta posição. Nota: Um objeto completamente dentro de um retângulo que define o separador se move ao mesmo tempo que o separador. Propriedade Impulsor A propriedade Impulsor está disponível para os objetos separadores no tema “Opções de redimensionamento” da lista de propriedades. Quando um objeto separador tem esta propriedade, todos os objetos situados à direita (separador vertical) ou abaixo (separador horizontal) são movidos ao mesmo tempo que o separador, sem limite. Este é o resultado da rolagem de separador “impulsor”: Quando esta propriedade não se aplica aos separadores, o resultado é o seguinte: Esta propriedad está selecionada como padrão para os novos bancos. Lidar com os separadores usando programação É possível associar um método de objeto a um separador. Este método será chamado pelo evento On Clicked durante toda a rolagem. Uma variável de tipo Inteiro longo está associada a cada separador. Esta variável pode ser utilizada em seus métodos de objeto e/ou formulário. Seu valor indica a posição atual do separador, em pixels, relativo a sua posição inicial. Se o valor for negativo: o separador foi movido para cima ou para a esquerda. Se o valor for positivo: o separador foi movido para baixo ou para a direita, Se o valor for igual a 0: o separador foi movido a sua posição inicial. Da mesma forma é possível mover o separador por programação: você só tem que definir o valor da variável associada. Por exemplo, se um separador vertical está associado à variável separa1 e você executa a seguinte declaração: separa1 := -10, o separador se moverá 10 pixels à esquerda, como se o usuário o fizesse manualmente. A movimentação é efetuada ao final da execução do método de objeto ou de formulário que contenha a instrução. A - 336 - ação Separador automático permite criar separadores personalizados em seus formulários. É possível atribuir esta ação a um objeto de tipo botão invisível. Quando se atribui esta ação padrão a um botão invisível, o botão atua exatamente como um separador. Se, por exemplo, você cola uma imagem no botão invisível, é possível criar uma interface personalizada para seus separadores. Para maiores informações, consulte o parágrafo Botões. - 337 - Área Web As áreas web podem mostrar todo tipo de conteúdo web ao interior de seus formulários: as páginas HTML com conteúdo estático ou dinâmico contém arquivos, imagens, Javascript, Flash, PDF (1)... ou até mesmo documentos MS Office (em Windows, com MS Office instalado). (*) O uso de plugins Web e Java applets não é recomendável nas áreas Web porque pode levar à instabilidade na operação de 4D, particularmente ao nível de gerenciamento de eventos. O motor de renderização da área web depende da plataforma de execução da aplicação e do estado da opção Utilizar Web Kit integrado (ver o parágrafo "Propriedades específicas"). É possível criar áreas web em um mesmo formulário. Várias ações padrão,numerosos comandos de linguagem e eventos de formulário permitem ao desenvolvedor controlar o funcionamento das áreas web. As variáveis específicas permitem trocar informação entre a área e o ambiente 4D. Este parágrafo detalha os princípios relativos ao uso e configuração de objetos do tipo área web no editor de formulários. Para mais informações sobre a gestão programada desses objetos, consulte os comandos Área Web no manual de Linguagem 4D. Note também que o uso de áreas web está sujeito a várias regras no parágrafo Notas sobre uso de áreas Web no manual de Linguagem de 4D. Propriedades específicas Quando um objeto de área de web é selecionado no editor de formulário, a lista de propriedades mostra as seguintes propriedades específicas: - 338 - Menu Contextual Quando é selecionada a propriedade Menu contextual para uma área de web tema "Entrada", o usuário pode acessar um menu contextual padrão na área durante a execução do formulário. O conteúdo do menu está definido pelo motor de renderização da plataforma: WebKit de Apple (renderização do navegador Safari) com Mac OS e ActiveX Web (renderização do navegador Internet Explorer) com Windows. Nota É possível controlar o acesso ao menu contextual através do comando WA SET PREFERENCE. Variáveis associadas Duas variáveis específicas estão automaticamente associadas a cada área de web: “URL” e “Progressão.” Estas variáveis permitem controlar respectivamente o URL mostrado pela área de web e a porcentagem de carregamento da página mostrada na área de web. Por padrão, estas variáveis chamam-se, respectivamente, nomeArea_url e nomeArea_progress. É possível alterar estes nomes se preferir. Estas variáveis são definidas na Lista de propriedades quando uma área de web está selecionada: Para maiores informações sobre o funcionamento destas variáveis, consulte a seção Gestão programada de áreas web no manual de Linguagem 4D. Uso de Web Kit integrado Se utiliza esta opção para eleger entre dois motores de renderização para a área web, em função das especificações de sua aplicação: "Utilizar Web Kit integrado" sem selecionar (por padrão): neste caso, 4D utiliza o "melhor" motor correspondente ao sistema. Em Windows, 4D utiliza automaticamente a versão mais recente do navegador Internet Explorer presente na máquina (IE9, IE10, etc.) Em Mac OS, 4D utiliza a versão atual do Web Kit. Este funcionamento permite ser beneficiado automaticamente dos últimos avances em renderização web, através de HTML 5 ou JavaScript. No embargo, é possível que observe algumas diferenças de renderização entre as implementações de Internet Explorer e de Web Kit. "Utilizar Web kit integrado" selecionado:neste caso, 4D utiliza Web Kit em todas as plataformas. Web Kit é um motor de renderização web de código aberto e multi-plataforma. Também é utilizado pelos navegadores Safari e Google Chrome, entre outros. 4D tem uma versão integrada de Web Kit. O uso do Web Kit integrado significa que a renderização da área web e seu funcionamento em sua aplicação são idênticos, independentemente da plataforma utilizada para executar 4D (no entanto, podem apresentar-se pequenas variações de píxels ou diferenças relacionadas com a implementação da rede). Quando esta opção é escolhida, você já não se beneficia das atualizações automáticas do motor Web efetuadas pelo sistema operativo; no entanto, as novas versões do WebKit são oferecidas via 4D. Notas: Em Windows XP, 4D v13 não suporta o motor WebKit integrado. Neste contexto, o modo estandarte (melhor - 339 - motor) está sempre ativado. Quando o motor Web Kit integrado se utiliza, note os seguintes detalhes: Quando são mostradas páginas utilizando o protocolo HTTPS, a autoridade do certificado não se verifica. Em Windows, os arquivos PDF só podem ser mostrados em uma janela externa. Quando é mostrada uma área web em um novo processo, em particular, uma criada com o comando New process, é necessário definir um tamanho de pilha de pelo menos 256 KB (256*1024) com o propósito de ter certeza de sua correta visualização. Acesso a métodos 4D Nota: esta opção só está disponível quando está ativada a opção Utilizar Web Kit integrado. Quando esta propriedade está selecionada, um objeto JavaScript especial ($4d) é instanciado na área web e permite manipular as chamadas aos métodos projeto de 4D. Para obter mais informação sobre como funciona esta opção, consulte a seção #title id="3212"/] no manual de Linguagem de 4D. Ações Padrões Há quatro ações padrão específicas para a gestão automática de áreas de web: Abrir URL anterior, Abrir URL seguinte, Atualizar URL atual e Parar carregamento de URL. Estas ações podem ser associadas aos botões ou comandos de menus e permite implementar as interfaces de web básicas. Estas ações são descritas em Ações padrões. Eventos e comandos de linguagem As áreas web também podem controlar-se utilizando eventos formulário e comandos de linguagem específicos. Estes sã descritos no capítulo Área Web do manual de Linguagem de 4D. - 340 - Áreas plug-in Uma área de plug-in é uma área de um formulário controlada por um plugin 4D. Quando se abre um banco de dados, 4D cria uma lista interna de plug-ins instalados em seu banco. Uma vez que você tenha inserido uma área Plug-in no formulário, 4D lista os plug-ins disponíveis na janela Lista de propriedades. Por padrão estão disponíveis os plug-ins OLE tools (apenas em Windows) e Report. Nota Alguns plug-ins não podem ser utilizados em formulários ou em janelas externas. Neste caso, não aparecem na lista de plug-ins da Lista de propriedades. Para designar o plug-in a ser utilizado na área, selecione seu nome diretamente na lista Tipo (tema “objetos”): Nota Quando o tipo de objeto é uma área de plug-in, o botão Avançado pode estar disponível nas propriedades da área se o autor do plug-in oferece opções avançadas. Neste caso, é possível clicar neste botão para definir estas opções. Como a caixa de diálogo de opções avançadas é controlada pelo autor do plug-in, a informação sobre estas opções avançadas é de responsabilidade do distribuidor do plug-in. Se você desenhar uma área de plug-in muito pequena, 4D lhe mostrará em forma de botão com o título do nome da variável associada à área. Durante a execução, o usuário clica neste botão para abrir uma janela específica que mostre o plug-in. Instalar plug-ins Para instalar um plug-in em seu ambiente 4D, primeiro deve sair de 4D. Os plug-ins se carregam ao lançar o 4D. Para mais informações, consulte Instalar plugins ou componentes. Usar plug-ins A capacidade de integrar os plug-ins nos formulários permite acessar a possibilidades ilimitadas ao criar aplicações personalizadas. Uma área de plug-in pode realizar uma simples tarefa como mostrar um relógio digital em um formulário, ou uma tarefa complexa tal como oferecer um processador de texto, uma folha de cálculo, ou um editor gráfico. Muitas dessas capacidades já estão disponíveis no ambiente de 4D sob a forma de plug-ins 4D. Por exemplo: 4D Internet Commands, um conjunto de ferramentas que oferece rotinas de rede de baixo nível 4D Write, uma aplicação de processamento de texto, 4D View, uma aplicação avançada de folha de cálculo e gestão de listas. Para maiores informações, consulte a documentação que vem com estes plug-ins. Os manuais de programação desses plug-ins estão disponíveis no Doc Center 4D: 4D Internet Commands, 4D Write - Linguagem e 4D View Linguagem. Nota: O plug-in 4D Chart, utilizado para gerar e mostrar gráficos, também está disponível. No entanto, este plug-in é - 341 - obsoleto desde 4D v13 (ver 4D Chart). Se você está interessado em desenhar seus próprios plug-ins, você pode receber maiores informações sobre a escrita e implementação de plug-ins. 4D oferece um completo kit para lhe ajudar a escrever plug-ins personalizados. Para maiores informações entre em contato com 4D, Inc. (http://www.4d.com). Áreas de plug-in integradas Por padrão, 4D oferece os seguintes tipos de plug-ins: Gráfico: uma área de gráfico pode ser gerada por programação usando os comandos GRAPH e _o_GRAPH TABLE. OLE tools (somente Windows): sob Windows, uma área OLE permite abrir uma janela com os documentos de outras aplicações dentro de seu banco de dados. Este tema é descrito em detalhes no manual OLE_Tools. Nota: Da mesma forma é possível criar uma área OLE diretamente utilizando o comando Insert an OLE Object do menu Objeto.. Report: uma área Report é utilizada para inserir um relatório rápido em um formulário. A área de relatório rápido pode mostrar os dados em forma de tabela, realizar cálculos, etc. Esta área pode ser controlada utilizando sua própria barra de menus ou utilizando os comandos de linguagem de 4D. Para maiores informações, consulte o capítulo Relatórios rápidos. - 342 - Propriedades de objetos ativos Nomes de objeto Controles de entrada de dados e ajuda de entrada Formatos de saída Guardar como Valor ou Referência Arrastar e soltar Ações padrões Efeito espelho (Windows) Multiestilo (área Rich text) Multilinha Barra de rolagem Menu contextual (imagens) Atalho de teclado Memorização da geometria das janelas - 343 - Nomes de objeto Nome de objeto e nome de variável Cada objeto ativo de formulário está associado a um nome de objeto e uma variável. O nome da variável pode ser diferente ao nome do objeto. No mesmo formulário, pode usar várias vezes a mesma variável, mas cada nome de objeto deve ser único. Nota: O tamanho dos nomes dos objetos está limitado a 255 bytes e os nomes das variáveis a 31 caracteres. Na linguagem de 4D, pode referir a um objeto ativo de formulário por meio de seu nome de objeto ou de seu nome de variável (para mais informação consulte Propriedades dos objetos no manual Linguagem de 4D). Para mais informação sobre as regras de nomes das variáveis, consulte a seção Regras para nomear tabelas e campos (as regras são as mesmas) e também a seção Convenções no manual Linguagem de 4D. Variáveis dinâmicas Agora pode deixar 4d criar dinâmicamente, e em função de suas necessidades, as variáveis associadas aos seus objetos de formulário (botões, variáveis editáveis, caixas de seleção, etc.). Para fazer isso, é suficiente deixar vazio o campo "Nome da variável" na Lista de propriedades para o objeto: Para mais informação, consulte a seção Variáveis no manual Linguage de 4D. Usar expressões como nomes de variáveis As variáveis associadas aos objetos de formulário podem conter todo tipo de expressão que devolva um valor e não só o nome da variável. Simplesmente pode introduzir a expressão diretamente na área “Nome de variável” das propriedades do objeto: Toda expressão 4D válida é aceita: expressões simples, fórmulas, funções 4D, nome de método de projeto ou campo utilizando a sintaxe padrão [Tabela]Campo. A expressão é avaliada durante a execução do formulário. Naturalmente neste caso não é possível administrar o valor da variável por programação. As possibilidades oferecidas por este princípio são múltiplas. Por exemplo, isto significa que pode associar um campo numérico a um indcador de progresso com o objetivo de representar os valores em forma gráfica em listas: - 344 - Nota: se o valor introduzido corresponde ao nome de uma variável ou ao nome de um método, 4D considera que você está indicando o método. - 345 - Controles de entrada de dados e ajuda de entrada Com a ajuda da Lista de propriedades, pode definir diferentes propriedades que permitem controlar e facilitar a entrada de dados feitas pelo usuário nos objetos ativos editáveis. Estas propriedades lhe permitem: Definir os atributos relacionados com a seleção e a entrada, Definir um filtro de entrada que controle os caracteres autorizados, Mostrar um texto de exemplo, Mostrar uma lista de valores, Estabelecer lista de valores obrigatórios ou excluídos, Definir os valores máximos e mínimos, ou os valores por padrão, Definir o modo de seleção do objeto, Verificar a ortografia Mostrar mensagens de ajuda. Controles de entrada O atributo Editável indica se os valores podem ser editados pelo usuário no objeto. Este atributo pode ser selecionado no tema “Entrada” da Lista de propriedades para os Objetos de campo e variáveis. Um campo de uma tabela relacionada pode não ser editável se desmarcar a opção Campos relacionados acessíveis no assistente de formulários. Pode fazer que o campo relacionado seja editável selecionando a caixa Editável. Todos os campos são editáveis por padrão. Se deseja fazer que um campo não seja editável em um formulário, pode desmarcar a opção Editável para o objeto. Um objeto não editável só mostra dados. Os dados são controlados por métodos que utilizam o nomeda variável ou do campo. Os eventos de formulário On Clicked, On Double Clicked, On Drag Over, On Drop, On Getting Focus e On Losing Focus podem ser usados com objetos não editáveis. Isso facilita em particular a gestão de menus contextuais personalizados e a criação de interfaces onde pode arrastar e soltar e selecionar variáveis não editáveis. Notas: O conteúdo da Lista de propriedades é contextual. Quando o atributo Editável não está selecionado na Lista de propriedades, as propriedades relacionadas com o controle de entrada de dados (Obligatório, Tabulável, Filtro de entrada, etc.) desaparecem da lista. A propriedade Não editável também pode ser definidas para um campo ao nível do editor de estrutura (ver a seção UNREGISTER CLIENT. Neste caso, a opção Editável não aparece na Lista de propriedades para este campo (ver a continuação). Obrigatório Selecionar a opção Obrigatório faz com que o campo ou o objeto editável seja obrigatório nesse formulário. 4D não aceitará um registro se o campo ou o objeto não contiverem um valor. Nenhum campo ou objeto editável é obrigatório por padrão. Para tornar um campo obrigatório em todos os formulários, selecione o atributo Obrigatório na janela Inspetor do editor de estrutura. Se você quer que um campo ou algum outro objeto editável seja obrigatório em um formulário particular, selecione a opção Obrigatório nas propriedades do objeto. Atributos Editável e Obrigatório e propriedades de campos Os atributos Editável e Obrigatório são similares aos atributos de campo que você pode definir no editor de estrutura. Se você deseja que estes atributos sejam diferentes em um formulário em particular, você pode modificar as propriedades de cada campo na Lista de propriedades, no tema Armazenado em registro, arquivo de dados ou fora do arquivo de dados. Estes atributos não anulam os atributos de campo definidos no editor de estrutura. Se um campo está definido como Não editável no editor de estrutura, não é possível torná-lo editável selecionando o atributo Editável de formulário. Se um campo está definido como Obrigatório no editor de estrutura, não é possível torná-lo não obrigatório desmarcando o atributo Obrigatório do editor de formulários. As caixas de seleção dos atributos Editável e Obrigatório, não necessariamente refletem os atributos definidos no editor de estrutura. - 346 - Tabulável É possível definir o atributo Tabulável para cada campo editável. Quando este atributo está selecionado para um campo, inclui-se na ordem de entrada e estará ativo quando o usuário pressionar a tecla Tab. Por padrão, este atributo está selecionado para todos os campos. Se você o desmarcar, o campo será excluído da ordem de entrada. No entanto, ainda pode ser selecionado com um clique no mouse ou através de um método. Para maiores informações sobre a ordem de entrada, consulte o parágrafo Modificar a ordem de entrada dos dados. Pode ativar o atributo Tabulável para um objeto não editável. Nesse caso, pode selecionar esse objeto usando a tecla Tab mas não poderá introduzir valores. A propriedade Tabulável só é acessível se a propriedade Enfocável está selecionada. Em outras palavras, todo objeto tabulável pode obter o foco. Entretanto, alguns objetos podem ser “enfocáveis” sem serem “tabuláveis” (por exemplo, um objeto pode ser selecionado clicando nele). Neste caso, o objeto não pertence à sequência de entrada de dados. Acessível Esta propriedade é encontrada no tema “Entrada” da Lista de propriedades para os objetos ativos (editáveis ou não) como también para los campos no editables. Quando a propriedade Acessível é selecionada para um objeto, o objeto pode obter o foco (e portanto pode ser ativado pelo teclado por exemplo). É rodeado por uma linha pontilhada cinza quando está selecionada, exceto se a opção "Ocultar retângulo de foco" também tenha sido selecionada (ver a seguinte seção). Caixa de seleção selecionada mas não mostra o foco Caixa de seleção que mostra o foco quando é selecionada Quando a propriedade Enfocável é selecionada para um objeto não editável, o usuário pode selecionar, copiar ou inclusive transportar por arrastar e soltar o conteúdo da área. Ocultar retângulo de foco Durante a execução, um campo ou objeto editável é demarcado por um retângulo de seleção quando tem o foco (através da tecla Tab ou um simples clique). É possível ocultar este retângulo selecionando a opção Ocultar retângulo de foco. Ocultar o retângulo de foco pode ser útil no caso de interfaces específicas. Listas de valores Pode atribuir listas de valores a objetos editáveis dos formulários. Pode utilizar três tipos de listas: listas de valores simples, listas de valores obrigatórios e listas de valores excluídos. As listas simples são definidas no tema “Fontes de dados” da Lista de propriedades. As listas de valores obrigatórios ou excluídos são definidas no tema “Faixa de valores” da Lista de propriedades. - 347 - Antes de associar uma lista de valores, você deve tê-la criado no Editor de listas (ver Listas). Fonte de dados da lista de valores Associar uma lista de valores fonte (tema “Fonte de dados”) a um objeto editável para mostrar uma lista de valores durante a entrada de dados. A lista de valores aparece quando o campo ou objeto editável é selecionado no formulário em execução. Logo, o usuário pode selecionar o valor na lista. Também pode utilizar Menus suspensos/Listas suspensas ou Combo Boxes e associar uma lista de seleção a eles a fim de manipular a entrada e visualização dos valores de um campo ou de uma variável (se a lista de seleção é hierárquica, só o primeiro nível pode ser utilizado). Para isso, basta com introduzir o nome do campo ou da variável na área "Nome da variável" da Lista de propriedades (ver a seção Menus suspensos/Listas suspensas) . O usuário pode sobrescrever a entrada selecionada da lista digitando um novo valor (a menos que a lista também esteja associada como lista de valores obrigatórios). Lista de valores excluídos Uma lista de valores excluídos evita que os usuários introduzam os valores dessa lista. Por exemplo, para um campo em um formulário de entrada utilizado só por operários, você poderia associar uma lista de valores reservados só para gerentes. Lista de valores e campos É possível associar uma lista de valores a um campo a nível da tabela ou do formulário. Se você quer associar a lista a nível da tabela, utilize a janela inspetor no editor de estrutura (ver a seção Armazenado em registro, arquivo de dados ou fora do arquivo de dados). A lista de valores estará associada a este campo em todos os formulários e editores de buscas do banco. Se associar a lista a um campo ao nível do formulário unicamente, ela pode servir como lista de seleção apenas para esse formulário. Note que neste caso, pode gerenciar diretamente a entrada de dados e mostrar no campo utilizando um objeto de tipo Menus suspensos/Listas suspensas ou Combo Boxes. Lista de valores obrigatórios Uma lista de valores obrigatórios (tema “Faixa de valores”) limita as entradas válidas aos valores que contém. Por exemplo, é possível utilizar uma lista de empregos com o fim de restringir as entradas válidas aos empregos aprovados pela gerência. Tornar uma lista obrigatória não faz com que a lista seja mostrada automaticamente ao selecionar o campo. Para mostrar a lista obrigatória, atribua a mesma lista como lista de valores (no tema “Fonte de dados”). Filtros de Entrada Um filtro de entrada controla exatamente o que o usuário pode introduzir durante a entrada de dados. Diferente dos controles de entrada tratados anteriormente nessa seção, os filtros de entrada operam caractere por caractere. Por exemplo, se um código identificador sempre consta de duas letras seguidas por três dígitos, é possível utilizar um filtro de entrada para obrigar o usuário a respeitar esse formato. É possível controlar letras e números particulares. Um filtro de entrada só funciona durante a entrada de dados e não tem efeito durante a visualização dos dados depois que o usuário desmarca o campo. Em geral, os filtros de entrada são utilizados conjuntamente com Formatos de saída. Os filtros de entrada controlam os dados introduzidos e os formatos de saída asseguram a apresentação adequada dos dados depois de sua entrada. Durante a entrada de dados, um filtro de entrada avalia cada caractere digitado. Se o usuário tenta introduzir um caractere inválido (por exemplo, um número em lugar de uma letra), 4D não aceita a entrada do caractere. O caractere inválido permanece igual até que o usuário introduza um caractere válido. Os filtros de entrada também podem ser utilizados para mostrar os caracteres de formato de maneira que o usuário não necessite escrevê-los. Por exemplo, um número telefônico consta de três dígitos correspondentes ao código de área, seguidos por sete dígitos distribuídos em dois grupos de três e quatro dígitos, respectivamente. É possível utilizar um formato de saída para mostrar o código de área entre parênteses e um hífen para separar os dois grupos de dígitos do número telefônico. Utilizando um formato como este, o usuário não tem que introduzir os parênteses ou o hífen. Escolha de um filtro de entrada O filtro de entrada é criado selecionando um dos filtros integrados ou personalizados da lista suspensa Filtro de entrada ou escrevendo-o diretamente na área Filtro de entrada. A lista suspensa Filtro de entrada contém filtros para datas, horas e campos alfa. Na maior parte do tempo, pode usar um dos filtros integrados de 4D, entretanto, também pode criar filtros personalizados (Editor de Filtros e Formatos). Os nomes de filtros personalizados que foram criados são adicionados à lista suspensa Filtros de entrada, precedidos por uma barra vertical (|). - 348 - É possível modificar um filtro de entrada depois de ter selecionado-o. Por exemplo, se você deseja utilizar um filtro que lhe permita a entrada de minúsculas e maiúsculas, porém também necessita permitir a entrada do caractere arroba (@), é possível selecionar o seguinte filtro: &"a-z;0-9; ;,;.;-" e modificá-lo a: &"a-z;0-9; ;,;.;-;@" Os códigos de filtros de entrada geralmente começam com o símbolo ampersand (&). Este caractere indica a 4D que deve interpretar o código que se segue como um filtro de entrada. Se o código começa com um til (~), significa o mesmo que “&” exceto que as letras são convertidas automaticamente para maiúsculas. Geralmente, o caractere “&” vai seguido por “A”, “a”, ou “9”, para indicar que só são permitidas maiúsculas (A), minúsculas e maiúsculas (a), ou só caracteres numéricos (9). Por exemplo, &9 só permite números e &A só permite maiúsculas. O símbolo (#) indica quantos dígitos ou caracteres são permitidos pelo código. Se o código não utiliza o caractere #, o filtro permite quantos dígitos ou caracteres o usuário desejar. Por exemplo, enquanto &9 permite a entrada de muitos dígitos, o código &9## só permite dois dígitos. O ponto de exclamação (!) algumas vezes é utilizado para mudar o caractere que indica na tela quantos caracteres o usuário pode introduzir. Quando não se usa o sinal !, 4D mostra um subtraço para cada dígito ou caractere que o usuário pode digitar. Por exemplo, !?&9## mostra um ponto de interrogação nos lugares onde o usuário pode escrever e só permite dois dígitos. Para maiores informações sobre a criação de filtros de entrada, consulte a seção Códigos de filtros e formatos. Descrição dos filtros de entrada padronizados Essa tabela descreve cada um dos filtros disponíveis na lista Filtro de Entrada: - 349 - Filtro de entrada ~A &9 &A &a &@ ~a## !0&9##/##/## !0&9 Dia: ## Mês: ## Ano: ## !0&9##:## !0&9## Hrs ## Mins ## Segs !0&9Hrs: ## Mins: ## Segs: ## !0&9##-##-#### !_&9(###)!0####### !0&9###-###### !0&9###-##-### ~"A-Z;0-9; ;,;.;-" &"a-z;0-9; ;,;.;-" &"0-9;.;-" Descrição Permite todas as letras e as transforma em maiúsculas. Só permite números. Só permite maiúsculas Só permite letras (minúsculas e maiúsculas) Só permite caracteres alfanuméricos. Não permite caracteres especiais. Só permite duas letras e as converte a maiúsculas. (Por exemplo, para abreviar un estado: CA). Formato padrão para entrada de datas. Mostra zeros em cada posição de entrada e só permite números. Formato personalizado para entrada de datas. Mostra zeros em cada posição e só permite números. Formato de entrada para horas. Mostra zeros em cada posição. Só permite números, separados por "dois pontos" (:). Formato para entrada de horas. Mostra zeros em cada posição. Permite só dois números antes de cada palavra. Formato para entrada de horas. Mostra zeros em cada posição. Só permite dois números depois de cada palavra. Formato de entrada para un número telefônico local. Mostra zeros em cada posição. Só permite números: três antes do hífen e depois quatro. Formato de entrada para un número telefónico de longa distância. Mostra caracteres de subscrito para os três dígitos de código de área e zeros para o número telefônico. Formato de entrada para um número telefônico de longa distância. Mostra zeros em cada posição. Só permite números: três para o código de área antes do primeiro hífen, mais três antes do segundo hífen e finalmente quatro. Formato de entrada para o número de segurança social. Mostra zeros em cada posição. Só permite números. Permite maiúsculas, números, vírgulas, pontos e hífens. Permite letras (minúsculas e maiúsculas), números, espaços, vírgulas, pontos, e hífens. Filtro numérico. Só permite números, o ponto decimal e o hífen (sinal menos). Combinar filtros de entrada e formatos de saída Geralmente, quando se utiliza um filtro de entrada, cria-se um formato de saída. Um filtro de entrada só funciona durante a entrada de dados, não tendo efeito na forma como se apresenta a informação quando o campo não está selecionado. Por exemplo, se você utiliza o filtro de entrada para o número de segurança social (&9###-##-####), deverá selecionar o formato de saída correspondente ao número de segurança social (###-##-####). Sem o formato de saída, só aparecerão no campo os números, sem os hífens. A tabela a seguir mostra alguns filtros de entrada sugeridos e os formatos de saída correspondentes para os tipos de campos mais comuns: Tipo de campo Filtro de entrada Formato de saída Estado Código postal (padrão) Código postal (estendido) Número telefônico ~a## &9##### &9#####-#### &9###-#### &9(###) ###-#### &9 ###-###-#### !0&9##/##/## !0&9 Dia: ## Mês: ## Ano: ## !0&9##:## !0&9## Hrs ## Mins ## Segs !0&9Hrs: ## Mins: ## Segs: ## (Não é necessário) (Não é necessário) #####-#### ###-#### (###) ###-#### ###-###-#### (Qualquer formato de data) Data Hora (Qualquer formato de hora) É possível utilizar os formatos de saída nos formulários de entrada, de saída e em registros rápidos. Para maiores informações sobre os formatos de saída em registros rápidos, consulte o parágrafo Estabelecer formatos de saída de colunas. Texto exemplo 4D mostra textos de exemplo nos campos dos formulários. - 350 - Este texto aparece como marca de água em um campo, oferecendo uma mensagem de ajuda, uma indicação ou um exemplo dos dados a introduzir. Este texto desaparece tão rápido como o usuário introduz um caractere na área: O texto de exemplo se mostra de novo se o conteúdo do campo se apaga. Pode definir um texto exemplo no tema "Entrada" da Lista de propriedades: A opção Texto de exemplo está disponível para os seguintes objetos: variáveis, campos, combo boxes. Um texto de exemplo pode ser mostrado para os seguintes tipos de dados: cadeia (texto ou alfa) data e hora quando a propriedade Vazio e nulo se ativa. Pode utilizar uma referência xliff en ":xliff:resname" como texto de exemplo, por exemplo: :xliff:PH_Lastname Só passe a referência no campo "Texto de exemplo", não é possível combinar uma referência com texto estático. Nota: também pode definir e obter o texto do marcador por programação utilizando os comandos OBJECT SET PLACEHOLDER e OBJECT Get placeholder. Valores máximos e mínimos É possível aplicar restrições à entrada de campos de tipo numérico, data, hora ou objeto editável definindo valores máximos e mínimos nas áreas de entrada correspondentes no tema “Faixa de valores” das propriedades dos objetos. Áreas de entrada dos valores mínimos e Máximos Durante a entrada de dados, se o usuário introduz um valor inferior ao mínimo ou superior ao máximo, mostra-se uma caixa de diálogo de alerta. 4D devolve ao usuário o campo de maneira que se possa entrar um valor correto. Para definir um valor máximo ou mínimo, escreva o valor que quer definir como limite. Utilize o formato de entrada apropriado para o tipo de campo ou objeto editável para o qual se está definindo os limites. Por exemplo, para um campo tipo Data, utilize o formato de entrada de data para definir os valores máximos e mínimos. Os valores definidos estão incluídos. Isso significa que se o usuário introduz o valor definido como mínimo ou como máximo, a entrada é permitida. Somente os valores abaixo do mínimo ou maiores que o máximo não são autorizados. Por exemplo, se o valor máximo é 15, o usuário pode introduzir 15, porém não 16. Também pode utilizar uma lista de valores obtigatórios para criar faixas de valores atípicos. Para mais informação, consulte o parágrafo Lista de valores obrigatórios a continuação e a seção Criar e modificar Listas. Valores padrão É possível atribuir um valor padrão para um campo ou objeto editável. O valor padrão é introduzido quando aparece um novo registro. É possível modificar o valor a menos que o campo ou área de entrada tenha sido definido como não editável. É possível definir o valor padrão no tema “Faixa de valores” da Lista de propriedades. O valor padrão deve corresponder ao tipo de campo para o qual está definido. 4D oferece códigos para gerar valores padrão para datas, horas e números seqüenciais. A data e hora são tomadas do sistema. 4D gera automaticamente qualquer seqüência de números requerida. A tabela a seguir mostra os códigos a se utilizar para gerar automaticamente valores padrão: - 351 - Código Efeito #D #H #N Data atual Hora atual Número de sequência É possível utilizar um número de seqüência para criar um número único para cada registro. Um número de seqüência é um número inteiro gerado para cada novo registro. Os números começam com um (1) e aumentam de um em um (1). Um número de seqüência não se repete mesmo quando um registro é apagado da tabela. Cada tabela tem sua própria seqüência de números. Consulte o comando Sequence number no manual Linguagem de 4D. Listas de valores padrão Se o objeto mostra uma lista de valores (tal como um combo box, uma área de rolagem, um menu suspenso, uma aba, ou uma lista suspensa), é possível especificar uma lista de valores a se utilizar como valores padrão. Esta lista será carregada no objeto antes de ser mostrado no formulário. Para os objetos que aceitam uma lista de valores padrão, a área dos valores padrão é convertida em um botão: Quando você clica neste botão, aparece a caixa de diálogo Valores padrão: Escreva a lista de valores padrão. Cada valor deve aparecer em uma linha diferente. Clique no botão Aceitar para fechar a caixa de diálogo e retornar à janela Lista de propriedades. Quando você introduz valores padrão na caixa de diálogo valores padrão, os valores são carregados automaticamente em um array cujo nome é o nome do objeto. Utilizando a linguagem, é possível manipular o objeto fazendo referência a este array. Notas: Se o objeto é uma lista hierárquica ou uma aba, é possível utilizar uma lista criada no editor de listas para definir os valores padrão. Também é possível definir os valores padrão utilizando um método. Para os objetos que o permitam, é possível atribuir o valor padrão quando o evento On Load é executado no método do objeto ou do formulário. Para os objetos que aceitam listas, é possível definir os valores padrão utilizando o editor de listas e então o comando Load list para criar uma lista hierárquica. Então, é possível trabalhar com a lista e seu conteúdo utilizando os comandos do tema “Listas hierárquicas”. É possível carregar a lista em uma lista hierárquica quando - 352 - ocorrer o evento de formulário On Load ou carregar todas as listas no Método banco de dados On Startup. Configuração do teclado Nota de compatibilidade: esta opção só é levada em conta quando o banco funciona em modo não Unicode. Em modo Unicode, esta propriedade é ignorada. Para mais informação, consulte a documentação de versões anteriores de 4D. Correção ortográfica 4D inclui um utilitário de correção ortográfica integrado e personalizável. A verificação ortográfica pode ser efetuada para os campos e variáveis tipo Alfa e Texto, assim como para os documentos 4D Write. A propriedade Correção Ortográfica (tema "Controles de entrada") ativa a correção ortográfica para o objeto. Nesse caso, a verificação ortográfica é realizada automaticamente durante a entrada de dados. Nota: pode executar o comando SPELL CHECKING para cada objeto a controlar. Processos de verificação Em 4D, a correção ortográfica se aplica continuamente em áreas de texto, com os erros ressaltados diretamente no texto com um sublinhado de pontos: As linhas de pontos em diferentes cores se utilizam com o propósito de determinar o tipo de correção a realizar: Em vermelho os erros de ortografia, Em verde os erros gramaticais (corretor nativo OS X unicamente), Em azul as palavras a substituir (quando a opção Mostrar substituições está ativada, ver mais adiante). O usuário pode então corrigir o texto usando o menu contextual (clique direito na palavra sublinhada) ou utilizar o quadro de diálogo do corretor ortográfico. Menu contextual ou diálogo de correção Para mostrar as opções de correção ortográfica, pode fazer clique direito sobre uma palavra desconhecida e aparecerá um menu contextual que contém os comandos de correção ortográfica: Nota: as opções Menu contextual e Correção ortográfica devem estar selecionadas para o objeto. Pode selecionar a opção Mostrar o diálogo de revisão de ortografia para mostrar um diálogo no que pode introduzir um valor corrigido: - 353 - Este diálogo é uma janela flutuante que continua disponível para todas as janelas da aplicação durante a sessão, até que o usuário a fecha. Funções do corretor Além das sugestões de correções, as seguintes opções e funções são propostas pelo corretor em 4D (via o menu contextual e/ou o diálogo de correção): Aprender: la palabra desconocida se añade al diccionario, ya no será indicada por el corrector ortográfico. En OS X, las palabras aprendidas se conservan permanentemente en /Users/[nombreUsuario]/Library/Spelling (de manera que una palabra aprendida por el sistema de corrección ortográfica también es aprendida para todas las aplicaciones que utilizan el sistema de corrección ortográfica). Con Hunspell, las palabras aprendidas se guardan en un diccionario personalizado Hunspell en el directorio sistema usuario de datos de la aplicación actual, que siempre se cargan junto con el diccionario principal (como en las versiones anteriores). Olvidar (menú contextual): esta opción aparece cuando se selecciona una palabra que se aprendió previamente. Le permite al usuario eliminar esta palabra de la lista de palabras aprendidas de manera que se indica una vez más como un posible error de ortografía. Ignorar: la palabra desconocida no se toca y ya no se subraya, sin embargo, se indica de nuevo si se detecta más adelante. El corrector ortográfico tiene una tabla con las palabras a ignorar para cada documento. Puede borrar esta tabla con la opción Borrar la lista de palabras ignoradas (ver más abajo). Anterior/siguiente (caja de diálogo): la palabra desconocida se ignora, pero queda subrayada y el corrector ortográfico examina la palabra anterior o siguiente desconocida en el texto. Verificar ortografía (menú contextual): por lo general activa o desactiva globalmente la corrección ortográfica en el área para el proceso actual. Remplazar (caja de diálogo): remplaza la palabra del primer campo editable por la palabra del segundo campo editable, en el texto si la selección en el texto corresponde a la palabra del primer campo y pasa al siguiente error. Remplazar siempre (caja de diálogo): igual que Remplazar pero la sustitución se memoriza (ver Substitución de texto más abajo). El submenú Configuración de ortografía ofrece las siguientes funciones: - 354 - Corrección automática: activa o desactiva el modo de corrección automática en el área para el proceso actual. En este modo, las palabras desconocidas se sustituyen automáticamente por la palabra conocida más cercana (excepto cuando la ambigüedad es demasiado grande). Las correcciones se realizan durante la entrada. Por defecto, la corrección automática está desactivada. Sustitución de texto: activa o desactiva la substitución de texto. Este principio consiste en remplazar una palabra por otra. Por ejemplo, puede optar por sustituir la palabra "sr " por " Señor". Para crear pares de palabras "a reemplazar"/"reemplazar por", debe utilizar la caja de diálogo del corrector ortográfico: escriba la palabra a remplazar en el área "Palabra desconocida” y la palabra de remplazo en el área "Reemplazar con", luego haga clic en el botón Reemplazar siempre: Los reemplazos se realizan en toda la aplicación. Con Hunspell, el corrector ortográfico mantiene una tabla de sustituciones global de la aplicación que se guarda en el directorio sistema usuario de la aplicación, para el corrector OS X, la tabla está fusionada con las sustituciones del sistema (opción "Activar la sustitución de texto y de símbolo” en las Preferencias Sistema). El proceso de sustitución difiere en función de si la opción Mostrar sustituciones de texto del submenú Configuración de ortografía está seleccionada o no (ver abajo). Mostrar sustituciones de texto (esta opción sólo aparece si la opción Sustitución de texto está seleccionada): cuando esta opción está seleccionada, el corrector ortográfico subraya las posibles sustituciones en el texto con una línea azul y el usuario debe hacer clic derecho en la palabra para seleccionar el valor de substitución. Cuando esta opción no está seleccionada, se realizan sustituciones de forma automática, sin intervención del usuario. Borrar la lista de palabras ignoradas: borra la lista de las palabras elegidas para ser ignoradas en el documento. Opções adicionais do corretor ortográfico nativo OS X O corretor ortográfico nativo de OS X oferece várias opções de correção: - 355 - Lenguaje automático: identifica automáticamente el lenguaje del diccionario a utilizar en función del contenido del texto. Por defecto, el corrector ortográfico usa el lenguaje de la aplicación 4D, al igual que el corrector ortográfico Hunspell. Verificar la gramática: activa la corrección gramatical del texto. Guiones inteligentes: reemplazar los guiones dobles (--) con guiones largos (—) durante la entrada. Comillas tipográficas: reemplazar comillas rectas con comillas tipográficas adaptadas al lenguaje actual. Gestão de dicionários A correção ortográfica em 4D agora pode usar: Em Windows y OS X, o dicionário open source Hunspell (ver Support of Hunspell dictionaries no manual de Linguagem de 4D) Em OS X, o corretor ortográfico nativo. Por padrão em OS X, 4D v14 utiliza o corretor ortográfico nativo. Pode optar por utilizar o corretor ortográfico Hunspell utilizando o comando [#cmd id="642"/]. Tenha em conta que as funções adicionais são oferecidas pelo corretor nativo OS X (ver abaixo). Por padrão, 4D utiliza o dicionário correspondente à linguagem atual do aplicativo. No entanto, é possível forçar a abertura de um dicionário em um idioma diferente utilizando o comando SPELL SET CURRENT DICTIONARY. 4D lhe permite estabelecer e utilizar dicionários especializados para cada idioma, incluindo listas de palavras personalizadas aceitas pelo corretor ortográfico. Para maiores informações sobre estes dicionários, consulte Apêndice D: Uso de dicionários especializados. Mensagens de ajuda É possível adicionar uma mensagem de ajuda a campos e objetos ativos em seus formulários para ajudar os usuários a trabalhar de forma mais produtiva com seu banco de dados. As mensagens de ajuda aparecem em quadros emergentes. Por exemplo, é possível criar uma mensagem de ajuda para um campo de tipo Data que recorde o usuário incluir uma barra oblíqua (/) como separador entre o dia, o mês e o ano quando introduzir os dados. A mensagem de ajuda aparecerá cada vez que o usuário mova o mouse sobre o campo ou objeto. Nota: Também se pode associar uma mensagem de ajuda com um campo a nível da estrutura do banco de dados. Neste caso, a mensagem de ajuda aparece em todos os formulários onde esteja o campo. Para maiores informações, consulte “Mensagens de ajuda” em Armazenado em registro, arquivo de dados ou fora do arquivo de dados. Se duas mensagens de ajuda são associadas a um mesmo campo a nível de estrutura e a nível de formulário, este último tem maior prioridade. - 356 - É possível associar uma mensagem de ajuda a qualquer objeto ativo em seus formulários, usando a lista Mensagem de ajuda no tema "ajuda" da Lista de propriedades. É possível: Selecione uma mensagem no menu Mensagem de ajuda. A mensagem de ajuda deve ter sido especificada previamente em Dicas de ajuda do editor de 4D. Introduza diretamente uma mensagem de ajuda na área. Isso lhe permite aproveitar a arquitetura XLIFF. É possível introduzir uma referência XLIFF aqui para mostrar uma mensagem na linguagem do aplicativo (para maiores informações sobre XLIFF, consulte Apêndice C: arquitetura XLIFF). Também pode utilizar as referências 4D (ver Usar referências em texto estático). A mensagem selecionada aparecerá como mensagem de ajuda para o campo ou objeto selecionado no formulário. Para apagar a associação da mensagem de ajuda com o objeto selecionado, selecione Nenhum na Lista de propriedades. Nota: Em Mac OS, a visualização de mensagens de ajuda não é suportada em janelas de tipo pop-up. Seleção sempre visível Esta propriedade está disponível para os campos ou variáveis de tipo Alfa ou Texto nos formulários. Essa propriedade conserva a visibilidade da seleção ao interior do objeto depois de perder o foco. Isso facilita a implementação de interfaces que permitam modificar o estilo do texto (ver Multiestilo (área Rich text)). Permitir seletores de cor e de fonte Os comandos OPEN FONT PICKER e OPEN COLOR PICKER mostram as janelas do sistema de seleção de cor e de fonte. Os usuários podem mudar o cor ou a fonte do objeto que tem o foco no formulário diretamente fazendo clique em uma destas janelas. Para que possa controlar as ações usuário, esta função está sujeita ao valor da nova propriedade Autorizar seletor fonte/cor do tema “Texto”: Esta propriedade está disponível para os objetos de formulário de tipo campo, variável e combo box. Por padrão, está desativada para todos os objetos dos formulários. Deve selecionar ela de forma explícita para cada objeto no que deseje que a fonte e/ou cor seja modificável utilizando a janela do seletor de sistema. - 357 - Formatos de saída Os formatos de saída oferecidos por 4D lhe dão muitas opções para a impressão e visualização de dados. Os formatos de saída podem ser aplicados a campos e a variáveis (editáveis e não editáveis). O formato que você utiliza para mostrar o conteúdo de um campo não afetam o valor real salvo por 4D. O formato de saída de um campo pode ser diferente para cada formulário. Por exemplo, você pode querer mostrar um valor sem o símbolo de moeda em um formulário de entrada e com o símbolo de moeda no formulário de saída. Os formatos de saída são definidos no tema “Exibir” da Lista de propriedades Os combo-box permitem mostrar a seleção e a entrada de um formato. O botão [...] oferece acesso à janela de Editor de Filtros e Formatos). O combo box permitem mostrar diferentes formatos de saída, dependendo do tipo de campo ou variável selecionada. Nota: O tipo de uma variável é definido utilizando a propriedade Tipo de variável do tema “Objetos” na Lista de propriedades. Os formatos integrados para o tipo definido sempre são exibidos. Os formatos criados utilizando o editor de Filtros e formato da Caixa de ferramentas aparecem ao começo da lista, precedidos por uma barra vertical "|" (consulte Editor de Filtros e Formatos). Nota: no editor de formulários, pode mostrar o formato de saída para objetos no lugar de suas etiquetas selecionando o comando Mostrar formato no menu Objeto. Formatos de campos de tipo data Os formatos de data controlam a maneira como aparecem as datas quando são exibidas ou impressas. Ao introduzir datas, você introduz as datas com o formato DD/MM/AAAA, sem importar o formato de saída selecionado. A imagem a seguir mostra os formatos de data no menu suspenso formato. Nota: Diferentemente dos formatos numéricos e alfa, os formatos de saída de datas só podem utilizar os formatos integrados de 4D. A tabela a seguir mostra os formatos de saída para dados tipo data e dá um exemplo de cada formato. - 358 - Formato Exemplo Data do sistema curta Data do sistema abreviada (1) Data do sistema comprida Data interna curta especial Data interna comprida Data interna abreviada (1) Data interna curta Data Hora ISO(3) 3/25/99 qui. 25 mar, 1999 quinta 25 março 1999 03/25/99 mas 04/25/2032 (2) 25 março 1999 25 mar 1999 25/03/1999 1999-03-25T00:00:00 (1) Para evitar ambigüidade e conforme a prática atual, os formatos abreviados de data agora são “jun” para junho e “jul” para julho (em vez de “jui” para ambos como era anteriormente). Isto se aplica particularmente a versões em francês de 4D. (2) O ano é mostrado utilizando os dígitos quando está dentro do intervalo (1930;2029) ou quatro dígitos se não estiver. Este é o intervalo padrão, mas é possível modificar utilizando o comando SET DEFAULT CENTURY. (3) O formato ISO Data/Hora corresponde à representação padrão XML para valores tipo data e hora (ISO8601). Este formato está desenhado especialmente para importar e/ou exportar dados em formato XML e em serviços web. Nota Qualquer que seja o formato de saída, se você introduzir um ano com dois dígitos, 4D assume que corresponde ao século 21 se for um valor entre (00;29) e que corresponde ao século 20 se for um valor entre (30;99). Esta é a configuração padrão, mas pode ser modificada utilizando o comando SET DEFAULT CENTURY. Vazio se null Por padrão, uma data nula geralmente é mostrada como “00/00/00.” A opção vazio se null da Lista de propriedades (tema “Mostrar”) permite mostrar uma área vazia se a data for nula ou contém o atributo SQL NULL. Formatos de campos tipo hora Os formatos tipo hora controlam a forma em que são exibidas ou impressas os dados tipo hora. Para introduzir horas, é possível utilizar o formato 24 horas HH:MM:SS ou o formato 12-horas HH:MM:SS AM/PM, sem importar o formato de saída escolhido. Nota Diferentemente dos formatos de saída alfa e numéricos, o formato de saída da hora deve ser selecionado somente no menu de seleção dos formatos. A tabela a seguir mostra os formatos de hora disponíveis assim como alguns exemplos: - 359 - Formato Exemplo para 04:30:25 Comentários HH:MM:SS HH:MM Horas Minutos Segundos Hora Minutos HH:MM AM/PM MM SS Hora expressa como duração desde 00:00:00 04:30:25 04:30 4 horas 30 minutos 25 segundos 4 horas 30 minutos 4:30 a.m. 270:25 270 Minutos 25 Segundos Min Segundos Hora expressa como duração desde 00:00:00 ISO Date Time Corresponde a norma XML de representação dos dados temporais. Está destinada principalmente a ser utilizada na importação/exportação de dados em formato XML. 0000-0000T04:30:25 Formato de hora padrão definido no sistema 04:30:25 Mac OS apenas: formato de hora abreviado definido no sistema. Em Windows, 4•30•25 AM Sistema hora curto Sistema hora comprido abreviado Sistema hora comprido este formato é o mesmo que o formato Sistema hora curto Mac OS apenas: formato de hora comprido definido no sistema. Em Windows, este formato é o mesmo que o formato Sistema hora curto 4:30:25 AM HNEC Vazio se null Por padrão, uma hora nula é mostrada como “00:00:00” (a visualização depende do formato aplicado ao objeto). A opção vazio se null da Lista de propriedades (tema “Mostrar”) permite mostrar uma área vazia se a hora for nula ou contiver o atributo SQL NULL. Formatos de campos numéricos Nota preliminar: os campos numéricos incluem os campos de tipo Inteiro, Inteiro longo, Inteiro 64 bits, Real e flutuante. Os formatos numéricos controlam a forma de distribuição e impressão de dados numéricos. Para a entrada deste tipo de dados, você introduz somente os números (incluindo um ponto decimal ou o sinal de menos se você precisar), sem importar o formato de saída que você tenha escolhido. 4D oferece diferentes formatos numéricos por padrão na Lista de propriedades (tema "Exibir"). Pode selecionar o formato no menu suspenso ou escrever ou modificar o formato nol combo box da Lista de propriedades. Também pode selecionar o nome de um formato personalizado no editor de Filtros e formatos da caixa de ferramentas. Nesse caso, o formato não pode ser modificado nas propriedades do objeto. Pode acessar ao editor clicando no botão [...] à direita do combo box de formatos. Os nomes dos formatos (e filtros) personalizados aparecem ao início das listas de formatos numéricos e alfanuméricos, precedidos de uma barra vertical (|). Criação de um formato numérico personalizado Em cada um dos formatos de saída numéricos, o sinal numeral (#), zero (0), o caractere (^), e asterisco (*) são utilizados como guias. Você pode criar seus próprios formatos numéricos utilizando uma guia para cada digito a ser exibido. Por exemplo, se for mostra três números, você pode utilizar o formato ###. Se o usuário introduzir mais dígitos do que os permitidos pelo formato, 4D mostra <<< no campo para indicar que foram introduzidos mais dígitos que os especificados no formato de saída. Se o usuário introduzir um número negativo, o primeiro caractere à esquerda é o sinal de menos (a menos que tenha sido especificado um formato de saída negativo). Se o formato for ##0, aparece "menos 26" como "–26" e "menos 260" como "<<<" porque o sinal menos ocupa uma guia e somente existem três guias. Nota Sem importar o formato de saída, 4D aceita e armazena o número introduzido no campo. Não se perde informação. Cada caractere guia tem um efeito diferente sobre a fixação de zeros situados ao início ou ao final do número. Um zero inicial é um zero que se coloca antes da parte inteira de um número (na frente do ponto); um zero final é um zero que se coloca atrás do decimal de um número (depois da vírgula). Suponha que você utilize o formato ##0 para mostrar três cifras. Se o usuário não introduz nada no campo, o campo mostra 0. Se o usuário escreve 26, o campo mostra 26. A tabela a seguir explica o efeito de cada guia nos zeros iniciais e finais. - 360 - Guias Efeito sobre os zeros iniciais e finais # 0 ^ * Não mostra nada Mostra 0 Mostra um espaço (1) Mostra un asterisco (1) O caractere (^) gera um espaço equivalente a largura de um dígito na maioria das fontes Separadores Os formatos de saída numéricos (exceto para notações científicas) são baseados automaticamente nos parâmetros sistema regionais. 4D substitui os caracteres “.” E “,” por, respectivamente, os separadores decimal e o separador de milhares definido no sistema operacional. O ponto e vírgula é considerado então como caracteres guias, seguindo o exemplo de 0 ou #. Nota de compatibilidade: nas versões anteriores de 4D, os formatos de visualização numéricos não levam em consideração os parâmetros regionais do sistema. Em bancos de dados convertidos, uma opção de compatibilidade permite controlar este funcionamento (ver Página Compatibilidade). Pontos decimais e outros caracteres de saída Você pode utilizar um ponto decimal no formato. Se quiser que o ponto apareça sem importar se o usuário o escreveu, você deve colocá-lo entre os zeros. Você pode utilizar qualquer outro caractere no formato. Quando se utiliza somente ou na frente de guias, o caractere sempre aparece. Por exemplo, se você utilizar o formato a seguir: $##0 um sinal $ sempre aparece porque está localizado na frente dos caracteres guia. Se os caracteres são localizados entre caracteres guia, aparecem somente se existirem dígitos em ambos os lados. Por exemplo, se você definir o formato ###.##0 Os espaços são tratados como caracteres em formatos de saída numéricos. Formatos para números positivos e negativos e zero Um formato de saída numérico pode ter até três partes que lhe permitem definir formatos de saída para os números negativos, positivos e zero. As três partes estão separadas por ponto e vírgula como indicado a seguir: Positivo;Negativo;Zero Não é necessário especificar as três partes do formato. Se você utilizar somente uma parte, 4D a utiliza para todos os números, colocando um sinal menos na frente dos números negativos. Se você utilizar duas partes, 4D utiliza a primeira parte para os números positivos e zero e a segunda para números negativos. Se você utilizar três partes, a primeira é para números positivos, a segunda para números negativos e a terceira para zero. Nota A terceira parte (zero) não é interpretada e não aceita caracteres de substituição. Se você escrever o formato ###;###;# o valor zero aparecerá como “#”. Em outras palavras, o valor que você introduza é o que aparecerá para o valor zero. Este é um exemplo de um formato numérico que mostra o sinal $ e vírgulas, coloca os números negativos entre parêntesis, e não mostra zeros: $###,##0.00;($###,##0.00); Observe que a presença do segundo ponto e vírgula lhe indica a 4D que não utilize nada para mostrar o zero. O formato a seguir é similar, exceto que a ausência do segundo ponto e vírgula indica a 4D que utilize o formato de números positivos para zero: $###,##0.00;($###,##0.00) Neste caso o formato de saída de zero será $0.00. Notação científica Se você quer mostrar os números em notação científica, utilize o caractere (&) seguido por um número que defina o número de dígitos que você quer mostrar. Por exemplo, o formato: &3 mostra 759.62 como 7.60e+2. O formato de notação científica é o único formato que arredonda automaticamente o número mostrado. Observe no exemplo anterior que o número é arredondado ao valor 7.60e+2 e não trunca a 7.59e+2. Formato hexadecimal - 361 - É possível mostrar um número em hexadecimal utilizando os formatos de saída a seguir: &x: mostra os números em hexadecimal com o formato “0xFFFF”. &$: mostra os números em hexadecimal com o formato “$FFFF”. Notação XML O formato &xml permite fazer com que todo número cumpra com as normas xml. Em particular, o caractere separador sempre será o ponto "." em todos os casos, sem importar a configuração do sistema. Mostrar um número como uma hora É possível mostrar um número como uma hora (com um formato de hora) utilizando “&/” seguido de um dígito. A hora é determinada calculando o número de segundo desde a meia noite que o valor representa. O dígito no formato corresponde a ordem na qual o formato de hora aparece no menu suspenso Formato. Por exemplo, o formato: &/5 corresponde ao quinto formato de hora do menu suspenso, especificamente a hora AM/PM. Um campo numérico com este formato mostraria 25000 como: 6:56 AM. Exemplos A tabela a seguir mostra como os diferentes formatos afetam a visualização dos números. As três colunas, Positivo, Negativo e Zero, indicam como são mostrados os números 1,234.50, –1,234.50 e 0. Formato introduzido Positivo Negativo ### #### ####### #####.## ####0.00 #####0 +#####0;–#####0;0 #####0DB;#####0CR;0 #####0;(#####0) ###,##0 ##,##0.00 ^^^^^^^ ^^^^^^0 ^^^,^^0 ^^,^^0.00 ******* ******0 ***,**0 **,**0.00 $*,**0.00;–$*,**0.00 $^^^^0 $^^^0;–$^^^0 $^^^0 ;($^^^0) $^,^^0.00 ;($^,^^0.00) &2 &5 &xml <<< 1234 1234 1234.5 1234.50 1234 +1234 1234DB 1234 1,234 1,234.50 1234 1234 1,234 1,234.50 ***1234 ***1234 **1,234 *1,234.50 $1,234.50 $ 1234 $1234 $1234 $1,234.50 1.2e+3 1.23450e+3 1234.5 <<< <<<< -1234 -1234.5 -1234.50 -1234 -1234 1234CR (1234) -1,234 -1,234.50 -1234 -1234 -1,234 -1,234.50 **-1234 **-1234 *-1,234 -1,234.50 -$1,234.50 $–1234 –$1234 ($1234) ($1,234.50) -1.2e+3 -1.23450e+3 -1234.5 Zero 0.00 0 0 0 0 0 0.00 0 0 0.00 ******* ******0 ******0 *****0.00 $****0.00 $ 0 $ 0 $ 0 $ 0.00 0.0e+0 0.00000 0 Formatos de campos alfa Os formatos alfa controlam a apresentação dos campos e variáveis alfanuméricas quando são exibidas ou impressas. A imagem a seguir mostra um formato alfa escolhido do menu suspenso. - 362 - Você pode escolher um formato dessa lista, escrever ou modificar o formato no combo Box da lista de propriedades ("Visualização"). O menu suspenso Formato contém formatos para alguns dos campos alfa mais comuns que necessitam formatos: números telefônicos (local e longa distância), números de segurança social e códigos postais. A tabela a seguir mostra os formatos de campos alfa e o tipo de campos onde geralmente são usados. Do mesmo modo pode selecionar um nome de um formato personalizado definido na janela do editor de Filtros e formatos da caixa de ferramentas. Neste caso, o formato não pode ser modificado nas propriedades do objeto. É possível acessar ao editor clicando no botão [...] localizado a direita do combo box de formatos. Os formatos ou filtros personalizados aparecem ao início das listas de formatos numéricos e alfanuméricos, precedidos por uma barra vertical (|). O sinal numeral (#) é a guia para um formato de saída de um campo alfa. É possível incluir os hífens apropriados, espaços e qualquer outro sinal de pontuação que você queira mostrar. Você pode utilizar os sinais de pontuação atuais que quiser e o sinal número para cada caractere a ser exibido. Por exemplo, considere um número de peça com um formato como este: RB-1762-1. O formato alfa seria o seguinte: ##-####-#. Quando o usuário introduzir “RB17621,” o campo mostra: RB-1762-1. O campo, de fato, contém “RB17621.” Se o usuário introduzir mais caracteres dos que o formato permite, 4D mostra os últimos caracteres. Por exemplo, se o formato for: (###) E o usuário introduzir “FELIZ”, o campo “FELIZ,” mostra: (LIZ). O campo, de fato, contém "FELIZ.” 4D aceita e armazena a informação, independente do formato de saída. Não se perde informação. Formatos de campos de tipo booleano Os campos de tipo booleano podem conter um dos dois valores: TRUE ou FALSE. Um campo booleano pode ser exibido como um par de botões de opção ou como uma caixa de seleção. Você pode definir a forma e as etiquetas de um campo booleano nas propriedades do campo. Se você quiser mostrar somente os botões ou caixas de seleção e não o nome do campo, você pode excluir a etiqueta do campo no formulário. Dar formato a um campo booleano como botões A aparência de campos booleanos é definida utilizando a lista suspensa “Mostrar como” no tema “Aparência”. Uma vez que você tenha selecionado o Botão de opção dessa lista, você pode introduzir as etiquetas para cada valor nas áreas Texto se Verdadeiro e Texto se Falso do tema “Mostrar”. - 363 - Os botões são exibidos no editor de formulário um junto ao outro como se mostra na imagem a seguir. Se você utilizar etiquetas com iniciais diferentes, você pode selecionar o botão de opção escrevendo a letra inicial durante a entrada de dados. Por exemplo, você pode pressionar “M” para selecionar Masculino ou “F” para selecionar Feminino quando o campo estiver selecionado. As regras a seguir se aplicam quando o campo é utilizado para o armazenamento de dados: se o primeiro botão estiver selecionado, o campo é verdadeiro, se o segundo botão estiver selecionado, o campo é falso. O campo é falso por padrão. Caixas de seleção Selecione a opção Caixa de seleção da lista “Mostrar como” no tema “Aparência”. Uma vez que você tenha selecionado esta opção, se mostra uma área de entrada “Título” no tema “Objetos”. Esta é a área de entrada na qual se introduz a etiqueta da caixa de seleção. Por padrão, o nome do campo é o nome da etiqueta. As regras a seguir se aplicam quando o campo é utilizado para armazenar informação: se a caixa de seleção estiver selecionada, o campo é verdadeiro; se a caixa de seleção não estiver selecionada, o campo é falso. O campo é falso por padrão. Durante a execução, este campo é exibido como uma caixa de seleção: Você pode dar um formato de caixa de seleção sem etiqueta a um campo booleano introduzindo um espaço na área Título e definindo um estilo de borda transparente. Neste caso, é possível adicionar a etiqueta para a caixa de seleção como um objeto independente. Logo você pode colocar a etiqueta onde quiser, desenhar um retângulo e inserir referências dinâmicas na etiqueta (consulte Usar referências em texto estático). No exemplo a seguir, o campo booleano está sobre o objeto de texto. Formatos Imagem Os formatos de campos tipo imagem controlam a aparência das imagens quando estas são mostradas ou impressas. Durante a entrada de dados, o usuário sempre introduz imagens colando-as desde a área de transferência ou arrastando-as e soltando-as, sem importar o formato de saída. Os formatos de imagem disponíveis estão na lista Formatos de imagens da lista de propriedades. (tema “mostrar”). As opções de truncado e de ajuste não afetam a imagem armazenada. O conteúdo de um campo tipo imagem sempre é salvo. Somente a visualização da imagem em um formulário em particular se vê afetada pelo formato da saída. Redimensionar Os formatos de ajuste fazem que 4D redimensione a imagem para que se ajuste às dimensões da área do campo. Truncado (Centralizado e não centralizado) O formato truncado (centralizado) faz com que 4D centralize a imagem no campo e trunque as bordas que não se ajustam dentro da área do campo. 4D trunca igualmente cada esquina e de cima para baixo. O formato truncado (não centralizado) faz com que 4D localize a parte superior esquerda da imagem na esquina superior esquerda do campo e trunca todas as partes que saiam da borda da área do campo. 4D trunca de direita e parte superior. Nota; Quando o formato de imagem está Truncado (não centralizado), é possível adicionar barras de rolagem a área do campo ou da variável. Para maiores informações, consulte o parágrafo Barra de rolagem. - 364 - Truncado centrado Truncado não centrado Ajustado Quando se utiliza Ajustado (Proporcional), a imagem se reduz proporcionalmente por todos os lados para que se ajuste a área criada para a imagem. A opção de Ajustado centralizado (proporcional) faz o mesmo mas centraliza a imagem na área da imagem. Se a imagem é menor que a área definida no formulário, a imagem não será modificada. Se a imagem é maior que a área definida no formulário, a imagem se reduz proporcionalmente. Como a imagem se reduz proporcionalmente, não aparece distorcida. Se aplicou o formato Imagem proporcional centrada, a imagem se centra na área do campo: Ajustado (proporcional) Ajustado proporcional centrado Sobre o fundo O formato imagem sobre fundo faz com que a imagem seja transparente. Todos os objetos localizados atrás da imagem tais como campos ou variáveis são visíveis através da imagem. Nota: Se você imprimir imagens com o formato Sobre fundo, serão impressas como mapa de bits. Quando um campo tipo imagem está neste formato, o usuário pode mover a imagem dentro do campo imagem arrastando-a. 4D lembra a posição do objeto sobre o fundo. A imagem a seguir mostra um formulário que inclui uma imagem com o formato Sobre fundo. Repetido Quando a área que contém uma imagem com o formato Repetido é aumentada, a imagem não se deforma, mas se repete quantas vezes forem necessárias para preencher a área completamente. - 365 - -> Se o campo se reduz a um tamanho menor que a imagem original, a imagem é truncada (não centralizada). - 366 - Guardar como Valor ou Referência A opção Guardar como valor/referência se encontra no tema "Fontes de dados" para os objetos de tipo campo, variável e menus emergentes/listas deslocadas: Esta opção define, no contexto de um campo ou de uma variável associada a uma lista de valores (enumeração), o tipo de conteúdo a armazenar no campo: Guardar como Valor (opção por padrão): O valor do elemento escolhido na lista pelo usuário se guarda diretamente. Por exemplo, se o usuário seleciona o valor "Blue", este valor é salvo no campo. Este funcionamento é o das versões anteriores de 4D. Guardar como Referência: a referência do elemento da lista de seleção que será guardado no objeto. A referência de um elemento de lista é um valor numérico associado com cada elemento via o parâmetro refElement dos comandos APPEND TO LIST ou SET LIST ITEM, ou no editor de listas: Esta opção permite otimizar o uso de memória: O armazenamento de valores numéricos nos campos utiliza menos espaço que o armazenamento de cadeias de caracteres. Também faz com que seja mais fácil a tradução das aplicações: Pode criar múltiplas listas em diferentes idiomas, mas com as mesmas referências de elementos e carregar a lista em função da linguagem da aplicação. O uso da opção Guardar como Referência exige o cumprimento dos seguintes princípios: Para poder armazenar a referência, o campo ou variável devem ser de tipo numérico (independentemente do tipo de valor mostrado na lista). Referências válidas e únicas devem estar associadas aos elementos da lista. Se ativar esta opção para um objeto pop-up menu/lista deslocada, deve estar associado a um campo (ver Utilizar uma lista de seleção). Esta opção é compatível com as listas de opções definidas na estrutura. Neste caso, só pode ser selecionado uma opção em cada formulário onde se utiliza o campo enumerado. Example Você deseja utilizar um campo "Título" para as pessoas: Sr., Sra., Dr., Monsenhor, etc. Para isso, é criado um campo de tipo inteiro longo chamado "Título". Se define uma lista de opções (chamado "Títulos") que contém todos os títulos possíveis e se associam ao campo. No formulário de entrada, se mostra o campo "Título " duas vezes com a finalidade de ilustrar o mecanismo implementado: Uma vez como um pop -up e outra vez como uma área de entrada. Ambos objetos se associam a mesma lista de opções e os dados se guardam como referência: - 367 - Durante a entrada, pode ser selecionado um valor no menu emergente e se mostra corretamente em ambos objetos: Nota: neste formulário, se mostra a janela "Lista de opções " quando a área de entrada tem o foco. Para não mostrar mais esta janela, pode utilizar um menu deslocado para a entrada (e a visualização) do valor. Menus suspensos/Listas suspensas). Pode configurar o formulário de saída com o mesmo princípio: se seleciona a opção Referência para guardar o campo Título: Durante a execução, o valor se mostra corretamente: - 368 - Arrastar e soltar Diversas propriedades estão disponíveis no tema "Ação" da Lista de propriedades para configurar o arrastar e soltar nos formulários. O número e a ação dessas propriedades dependem do tipo de objeto ao qual se aplicam. Arrastável e soltável Estas propriedades controlam a possibilidad do usuário, de arrastar e soltar o objeto e de se o objeto pode reciber dados que o usuário arraste. Se quer permitir arrastar e soltar um objeto em particular, selecione a propriedade correspondente. Neste caso, toda operação de arrastar e soltar efetuada no objeto durante a execução do formulário desencadeará o evento de formulário correspondente. Após isso deve administrar a ação de arrastar e soltar utilizando um método. Para mais informação, consulte Arrastar e Soltar no manual Linguagem de 4D. Nota: a propriedade Arrastável pode ser atribuída a objetos não editáveis. Este princípio permite ao desenvolvedor programar a resposta ao soltar um objeto em um campo ou uma variável não editável. Arrastar e soltar automático As áreas de texto ativas (campos e variáveis), combo boxes e as áreas de imagens (campos e variáveis) incluem opções adicionais destinadas a gestão de arrastar e soltar automática. O arrastar e soltar automático permite copiar ou excluir diretamente do texto ou das imagens entre as áreas de formulários. Pode ser utilizada na mesma área 4D, entre duas áreas 4D ou entre 4D e outra aplicação por exemplo, WordPad®. Por exemplo, o arrastar e soltar automáticos permite copiar um valor entre dois campos sem utilizar programação: Para ativar o arrastar e soltar automático, deve selecionar as propriedades correspondentes no tema "Ação" da Lista de propriedades para o objeto. Para mais informação, consulte Arrastar e Soltar no manual Linguagem 4D. - 369 - Ações padrões Esta seção descreve todas as ações automáticas que podem ser atribuídas a um botão e a certos objetos ativos dos formulários (ou a comandos de menu, consulte o parágrafo Especificar a ação do menu). Sem ação: use um botão Sem ação para um botão que não realize uma ação automática. Escolha Sem ação quando necessite escrever um método para controlar um botão. Por exemplo, um botão que mostre uma caixa de diálogo de pesquisa personalizada em uma aplicação teria Sem ação como ação automática porque é necessário definir um método para abrir a caixa de diálogo de pesquisa personalizada. Ações aceitar e cancelar: clicar em um botão Aceitar salva o registro e dispara o evento On Saving New Record Event ou On Saving Existing Record Event além de On Validate. . Clicar em um botão Cancelar sai do registro atual sem salvar as alterações. Eliminar registro: clicar em um botão Eliminar registro mostra um alerta pedindo ao usuário confirmar a eliminação. Ao clicar em Sim no alerta, o registro atual é eliminado. Se o usuário estiver utilizando o formulário de entrada para um subregistro, Eliminar registro eliminar o subregistro atual. Uma vez que o usuário clique no botão Eliminar registro, 4D automaticamente volta ao formulário de saída. Nota: Um botão com esta ação é desativado automaticamente quando se adiciona um novo registro. Ações de navegação entre registros: os botões Próximo registro, Registro anterior, Primeiro registro e último registro primeiro aceitam o registro atual e logo tornam o registro especificado como atual. O registro específico que será convertido em registro atual por um destes botões depende da ordem de seleção. Estas ações são apropriadas em subregistros quando o usuário está introduzindo subregistros. Um objeto deste tipo é desativado automáticamente quando sua ação não é apropriada. Por exemplo, se o usuário mostra o primeiro regitro, o botão Registro anterior é desativado. Ações de navegação entre páginas: os botões Primeira página, Última página, Próxima página e Página anterior mostram a página especificada em um formulário multipáginas. Se o formulário tem somente uma página, estes botões são desativados. Um botão deste tipo é desativado automaticamente quando sua ação não é apropriada. Por exemplo, se o usuário mostra a primeira página, o botão Primeira Página é desativado. Modificar subregistro: esta ação pode ser utilizada em três contextos: os list box, os subformulários e os formulários listados mostrados utilizando os comandos MODIFY SELECTION / DISPLAY SELECTION ou no modo Desenho. List box: um botão associado a ação estandarte Modificar subregistro se ativa automaticamente quando pelo menos uma linha de list box de tipo "selection" está selecionada (ver Utilizar ações estandarte). Subformulario: localizado no formulário de um registro pai, este botão está ativo quando o registro do subformulário estiver selecionado. Se o usuário seleciona um subregistro e logo clica no botão Modificar subregistro, o subregistro passa ao modo edição, seja diretamente na lista, ou no formulário detalhado associado (dependendo das propriedades do subformulário). Formulários listados: este botão está ativo quando um registro está selecionado na lista. Quando um usuário clica neste botão, o registro passa ao modo edição. Com as listas mostradas através dos comandos MODIFY SELECTION / DISPLAY SELECTION a modificação é efetuada na lista ou na página detalhada dependendo do valor do parâmetro enterList. Na janela de visualização de registros, a modificação é efetuada na página detalhada (a ação é equivalente a um clique duplo). Adicionar subregistro: esta ação pode ser utilizada em três contextos: os list box, os subformulários e formulários listados suspensos utilizando os comandos MODIFY SELECTION / DISPLAY SELECTION ou na janela de visualização de registros no modo Desenho. List box: um botão associado a ação estandarte Adicionar subregistro se ativa automaticamente quando pelo menos um list box de tipo "selection" está presente no formulário (ver Utilizar ações estandarte). Subformulário: localizado no formulário de um registro pai, este botão está ativado quando um registro do subformulário estiver selecionado.Quando o usuário clicar neste botão, 4D cria um novo registro na tabela ou subtabela relacionada, seja diretamente na lista, ou no formulário detalhado associado (em função das propriedades do subformulário). Formulários listados: este botão está ativado sempre. Quando o usuário clica neste botão , é criado um novo registro vazio, Com as listas suspensas utilizando os comandos MODIFY SELECTION / DISPLAY SELECTION o registro é adicionado na lista o una página detalhada dependendo do valor do parâmetro enterList.. Na janela de visualização de registros, o registro é adicionado à lista. Eliminar subregistro: esta ação pode ser utilizada em três contextos: os list box, os subformulários e formulários listados mostrados utilizando os comandos MODIFY SELECTION/ DISPLAY SELECTION ou na janela de visualização dos registros em modo Desenho. List box: um botão associado a ação estandarte Eliminar subregistro se ativa automaticamente quando - 370 - pelo menos uma linha de list box de tipo "selection" está selecionada no formulário (ver [#title id="3411"/]). Subformulário: localizado no formulário de um registro pai, este botão está ativo quando um subregistro tiver sido selecionado em um subformulário. Formulários listados: este botão está ativo quando pelo meno um registro estiver selecionado na lista. Quando o usuário clica neste botão, aparece uma caixa de diálogo, que permite confirmar ou cancelar a eliminação Para maiores informações sobre a utilização de botões em subformulario, consulte o parágrafo . Separador automático: esta ação automática permite criar separadores personalizados em seus formulários. Esta ação só pode ser atribuída a um botão invisível (ver Botões). Quando se atribui esta ação a um botão invisível, este se comporta como um separador. Colando uma imagem no botão invisível, é possível criar qualquer tipo de interface personalizada para seus separadores. Para maiores informações sobre separadores, consulte Separador.. Desfazer: cancela a última ação efetuada (= ao comando Desfazer do menu Edição). Não se deve confundir Desfazer com Cancelar (= cancela as modificações realizadas a um registro durante sua visualização e retorna ao formulário de saída). Refazer: repete a última ação cancelada (= ao comando Refazer do menu Edição). Cortar: apaga a seleção e a guarda na área de transferência Copiar: guarda uma cópia da seleção na área de transferência Colar: insere o conteúdo da área de transferência onde se encontra o cursor. Excluir: apaga a seleção. Se não existe nada selecionado, apaga a totalidade da área que contém o cursor (somente áreas editáveis). Selecionar tudo: seleciona todos os elementos selecionáveis no contexto. Mostrar área de transferência: abre uma nova janela que mostra o conteúdo atual da área de transferência. Propriedades do banco: mostra a caixa de diálogo padrão de Propriedades do banco. (ver nota na parte inferior). Aplicação: passa ao primeiro plano a janela e a apaga de menus do modo Aplicação de 4D. Sair: mostra uma caixa de diálogo de confirmação “Tem certeza?”, logo sai da aplicação 4D em caso de validação. Caso contrário, a operação é cancelada. Quando esta ação é atribuída a um botão com o qual um método de objeto também está associado, se executa a seguinte seqüência: primeiro, aparece a caixa de diálogo de confirmação. Se for validada, 4D executa o método do objeto. Depois de sua execução, a aplicação se fecha. Nota Mac OS: em Mac OS X, os comandos de menus personalizados associados às ações Propriedades do banco e Sair se localizam automaticamente no menu da aplicação, quando o banco de dados é executado neste ambiente. Este mecanismo simplifica o controle do comando Quit sob Mac OS X Retorno ao modo Desenho: passa ao primeiro plano as janelas e a barra de menus do modo Desenho de 4D. Quando o banco se executa em modo interpretado, esta ação provoca a visualização da janela atual do modo Desenho. Quando o banco se executa em modo compilado, esta ação provoca a visualização da janela de registros da tabela atual (em modo compilado, somente o acesso aos registros é possível). CSM: mostra a janela do Centro de segurança e manutenção. Ir a página: esta ação está disponível apenas para objetos do tipo Abas. Quando essa opção estiver ativa, 4D mostra automaticamente a página do formulário correspondente ao número de aba selecionada. Para mais informação, consulte Ação Goto Page As seguintes ações são utilizadas no contexto de um formulário que contém uma área web (para maiores informações sobre este tipo de objeto, consulte o parágrafo Área Web). Abrir URL anterior: provoca a abertura da URL anterior entre a seqüência de navegação efetuada pelo usuário na área web. Se não existe uma URL anterior, ou seja, se o usuário só mostrou uma página na área, o botão ou o comando de menu associado se desativa. Abrir próxima URL: provoca a abertura da URL seguinte entre a seqüência de navegação efetuada pelo usuário na área web. Se não existe uma URL seguinte, ou seja, se o usuário não retrocedeu uma página na seqüência, o botão ou o comando de menu associado se desativa. Atualizar URL atual: recarrega o conteúdo atual da área web. Parar carga URL: para a carga da página e/ou os objetos presentes na URL atual na área web. - 371 - Efeito espelho (Windows) A opção Efeito espelho (windows) (no tema "Imagem" da lista de propriedades) pode ser aplicada a qualquer objeto ativo que utilize imagens: Esta opção faz com que a imagem associada com o objeto seja invertida quando apareça em uma aplicação em modo "direita - esqueda" em Windows. Está disponível para campos e variáveis de tipo Imagem, Botões Imagem e Menus suspensos (pop up) de imagem, Botões 3D, caixas de seleção 3D e Botões de opção 3D, Botões opção imagem, assim como em imagens estáticas. Esta opção é detalhada em Usar imagens estáticas. - 372 - Multiestilo (área Rich text) Visão Geral 4D permite o uso das áreas de texto enriquecido com variações de estilo individuais. Por exemplo, agora é possível ter palavras em negrito e cursiva ou coloridas dentro de uma área de texto: Esta função se aplica aos campos e variáveis do tipo Alfa e texto, e também as listbox. Tem suporte para formulários página, lista, tanto para visualização quanto para impressão. Nota: não pode ser utilizada áreas de texto enriquecido nos seguintes contextos: filtros de entrada, relatórios rápidos e editor de etiquetas. As opções específicas na Lista de propriedades configuram o funcionamento das áreas de texto enriquecido. Os atributos disponíveis são fonte, tamanho, estilo, cor do texto e (apenas em Windows) cor de fundo. Para modificar os atributos de estilo em uma área de texto enriquecido, há duas possibilidades diferentes: Durante a execução, utilize um menu pop up automático (a disponibilidade desse menu se configura na lista de propriedades) Por programação, usando o comando ST SET ATTRIBUTES. Nas áreas de texto enriquecido, os atributos de estilo são armazenados como etiquetas HTML de tipo <SPAN>. Quando são mostradas na área texto, estas etiquetas são interpretadas por 4D. Isto significa que o desenvolvedor pode especificar e modificar os atributos de estilo em um texto por programação. Os atributos <SPAN>; suportados por 4D estão descritos a seguir. O comando ST Get plain text recupera o texto plano sem etiquetas de estilo. Para una descrição dos comandos que manipulam as áreas de texto enriquecido e as etiquetas <span> suportadas, consulte o capítulo no manual de Linguagem de 4D. Propriedades de texto enriquecido As propriedades de gestão de texto enriquecido estão disponíveis para as variáveis editáveis, os capos e as células de listbox de tipo alfa ou texto. Multiestilo Esta opção (tema "Texto") ativa a possibilidade de utilizar estilos específicos na área selecionada. Quando esta opção estiver ativa, 4D interpreta as possíveis etiquetas HTML <SPAN> presentes na área. Por padrão, esta opção não está selecionada. Guardar com etiquetas de estilo padrão Esta opção só aparece quando Multiestilo estiver selecionado. Também se encontra no tema "Texto". Quando esta opção estiver selecionada, a área armazenará as etiquetas de estilo com o texto, inclusive se não tiver feito nenhuma modificação. Neste caso, as etiquetas correspondem ao estilo padrão. Quando esta opção não estiver selecionada, só se guardam as etiquetas de estilo modificadas. Por exemplo, este é um texto que inclui uma modificação de estilo: - 373 - Se a opção "Guardar as etiquetas padrão " não estiver selecionada, a área só guarda a modificação.O conteúdo armazenado é então: Que <SPAN STYLE="font-size:13.5pt">bonito</SPAN> dia! Se a opção estiver selecionada, a área guarda toda a informação de formato. Uma primeira etiqueta genérica descreve o estilo por padrão assim que cada variação é objeto de um par de etiquetas adicionadas. O conteúdo armazenado na área é portanto: <SPAN STYLE="font-family:'Arial';font-size:9pt;text-align:left;fontweight:normal;font-style:normal;text-decoration:none;color:#000000;backgroundcolor:#FFFFFF">Que <SPAN STYLE="font-size:13.5pt">bonito</SPAN> dia!</SPAN> Menu contextual Esta opção (tema "Entrada") só aparece quando a opção Multiestilo foi selecionada. A opção Menu contextual ativa para o usuário a possibilidade de chamar durante a entrada de dados a um menu emergente com um clique direito na área. Este menu pop-up oferece os seguintes comandos: comandos padrão de edição de texto (cortar, copiar, colar) Fontes...: mostra a caixa de diálogo sistema de gestão de fontes Fontes recentes: mostra os nomes das últimas fontes selecionadas durante a sessão. A lista pode armazenar até 10 fontes (mais além disso, a última fonte utilizada substitui a mais antiga). Por padrão, a lista estará vazia e a opção não será mostrada. Pode administrar esta lista utilizando os comandos SET RECENT FONTS e FONT LIST. comandos de modificação de estilo suportados: fonte, tamanho, cor, estilo e cor de fundo: Quando o usuário modifica um atributo de estilo através deste menu emergente, 4D gera o evento de formulário On After Edit. - 374 - Notas: Também é possível modificar os estilos através do comando ST SET ATTRIBUTES. Leve em consideração que neste caso, não se gera nenhum evento formulário. O estilo "tachado" não é compatível com Mac OS. Entretanto, a etiqueta correspondente pode ser utilizada por programação. Processamento de texto enriquecido Copiar-colar e arrastar-soltar Os atributos de estilo suportados (fonte, tamanho, estilo e cor) são conservados em caso de arrastar-soltar ou copiarcolar texto com estilo entre: diferentes áreas de texto enriquecido em 4D (variáveis/campos texto e list boxes), uma área 4D Write e uma área de texto enriquecido 4D, um texto externo com estilo e uma área de texto enriquecido 4D. Nos outros casos, os estilos se manterão dependendo do contexto. Mouseover São propostas duas novas funções automáticas quando o mouse se move sobre uma área multi estilo: Quando se move sobre uma seleção de texto, o cursor se converte em uma flecha: Quando se move sobre um URL, aparece uma mensagem de ajuda que contém o endereço: Nota: pode inserir links URL usando o comando ST INSERT URL. - 375 - Multilinha As propriedades específicas do tema "Controle de entrada" permitem controlar dois parâmetros relacionados com a visualização e impressão das áreas de texto (campos e variáveis) nos formulários: Visualização de palavras localizadas no extremo da linha nas áreas de uma linha apenas. Inserção automática de retornos de linha nass áreas de texto Nota: os retornos de carro não podem ser usados em objetos de tipo Alfa. Multilinha Esta propriedad está disponível para as variáveis e campos de tipo alfa e texto, editáveis e não editáveis. Pode ter três valores diferentes: Sim, Não, Automática. Multilinha = Automático Nas áreas de uma linha só, as palavras localizadas no final de linhas são truncadas e não há retornos de linha. Nas áreas de várias linhas, 4D realiza os retornos de linha automáticos: Multilinha = Não Nas áreas de uma só linha, as palavras localizadas ao final de linhas são truncadas e não há retorno de linha. Não há retornos de linha: o texto é mostrado sempre com uma só linha. Se o campo ou a variável Alfa ou Texto contém retornos de carro, o texto situado atrás do primeiro retorno de carro é eliminado logo que a área seja modificada: Multilinha = Sim Aol selecionar este valor, aparece uma opção adicional Ajuste de linha. Deve estabelecer um valor para esta opção. Ajuste de linha Esta propriedade só está disponível quando a opção Multilinha estiver em Sim. Essa propriedade pode ter três valores: Sim, Não e Automático. Nota: para que estas propriedades sejam consideradas corretamente, os objetos de texto não deven ter Barra de - 376 - rolagem. Ajuste de linha= Automático Nas áreas de uma só linha, o texto é mostrado até o primeiro retorno de carro ou até que a última palavra se possa mostrar completa. 4D insere os retornos de linha, é possível deslocar o conteúdo da área pressionando a tecla flecha para baixo. Nas áreas de várias linhas, 4D realiza os retornos de línea automaticamente: Ajuste de linha = Sim Nas áreas de uma só linha, o texto é mostrado até a última palabva que se possa mostrar por completo. 4D insere os retornos de linha, é possível deslocar o conteúdo da área pressionando a tecla flecha para baixo.. Nas áreas de várias linhas, 4D realiza os retornos de línea automaticamente: Ajuste de linha = Não 4D não faz nenhum retorno de linha automático e a última palavra que se pode mostrar pode estar truncada. Nas áreas tipo texto, se suportam os retornos de carro: - 377 - - 378 - Barra de rolagem Pode associar barras de rolagem a vários tipos de objetosObjetos de campo e variáveis de tipo Texto ou Imagem,listas hierárquicas, list boxes e subformulários. Essas propriedades podem ser administradas usando a Lista de propriedades ou por programação com a ajuda do comando SET SCROLLBAR VISIBLE. As propriedades Barra de rolagem horizontal e Barra de rolagem vertical são ativadas no tema “Aparência” da Lista de propriedades. Para os objetos de tipo imagem, as listas hierárquicas e list boxes, estas propriedades se definem via um menu e suportam o modo automático. Para os objetos de tipo Texto e os subformulários, estas propriedades se definem utilizando as caixas de seleção. Nota: Se um campo ou objeto de tipo texto não tem barra de rolagem, o usuário pode navegar através do conteúdo utilizando as teclas de movimento (setas). Barras de rolagem para imagens Os objetos de tipo imagem, lista hierárquica e list box podem ter barras de deslocamento em modo automático. Nota: os objetos imagem podem ter barras de deslocamento quando o formato de visualização da imagem é "Truncado (não centrado)." Para obter mais informação sobre os formatos de visualização das imagens, consulte o parágrafo "Formatos imagem" na seção [#title id="985"/]. Neste caso, as propriedades Barra de rolagem horizontal e Barra de rolagem vertical se definem com a ajuda de um menu de três opções: Sim: a barra de rolagem está sempre visível, inclusive quando não é necessário (em outras palavras, quando o tamanho da imagem é menor que a moldura). Não: a barra de rolagem nunca está visível. Automática: a barra de rolagem aparece automaticamente quando é necessário (em outras palavras, quando o tamanho da imagem é maior que a moldura). Teclas de deslocamento Quando um objeto de tipo Imagem tem uma barra de deslocamento, o usuário dispõe automaticamente de comandos de deslocamento no teclado. As seguintes teclas são suportadas: - 379 - Tecla(s) Ação Teclas de flecha Alt + Teclas de flecha Re Pág / Av Pág Maius + Re Pág / Av Pág Inicio Fin Maius + Inicio Maius + Fim Roda do mouse Maius + Roda do mouse Deslocamento no endereço da flecha (= clique no cursor de deslocamento) Deslocamento pixel por pixel na direção da flecha Deslocamento vertical página por página (relacionado com a altura da área) Deslocamento horizontal página por página (relacionado com a largura da área) Visualização do limite superior da imagem Visualização do limite inferior da imagem Visualização do limite esquerdo da imagem Visualização do limite direito da imagem Deslocamento vertical (disponível em 4D v12) Deslocamento horizontal (disponível em 4D v12) Note que a partir de 4D v13.2, o deslocamento de imagens dispara o Form event On Picture Scroll. - 380 - Menu contextual (imagens) É possível associar um menu contextual automático às variáveis e campos de tipo Imagem. Para fazer isso, simplesmente selecione a opção Menu contextual no tema “Texto e imagem” da Lista de propriedades: Uma vez selecionada esta opção, a área terá um menu contextual quando o formulário for executado em modo Desenho ou em modo Aplicativo. O usuário dispõe dos comandos de edição e visualização ao clicar na imagem com o botão direito do mouse: O menu também pode ser utilizado para modificar o formato de visualização da imagem: são oferecidas as opções Truncado não centrado, Ajustado e Ajustado centrado (prop). Além dos comandos de edição padrão (Cortar, Copiar, Colar e Apagar), o menu também contém o comando Importar..., que permite importar uma imagem salva em um arquivo, como também o comando Salvar como..., que permite salvar a imagem no disco. Estes dois comandos aproveitam a gestão nativa de imagens: permitem respectivamente abrir e salvar imagens em qualquer formato nativo suportado por 4D. A modificação do formato de visualização utilizando este menu é temporária; não é salva com o registro. Para maiores informações sobre os formatos de visualização de imagens, consulte o parágrafo GET LIST ITEM PARAMETER. Se a variável ou o campo imagem não é editável, somente os comandos Copiar, Salvar... e os comandos de formato estão disponíveis. Nota: a propriedade Menu contextual também pode estar disponível para os campos e as variáveis de tipo Texto. Neste caso, depende da propriedade Multiestilo (ver Multiestilo (área Rich text)). - 381 - Atalho de teclado Pode criar um atalho de teclado a Botões e Caixas de seleção. O usuário pode ativar o botão ou selecionar a caixa de selecão utilizando o teclado no lugar do mouse. Pode configurar esta opção clicando no botão [...] localizado na propriedade Atalhos do tema “Controles de entrada” da Lista de propriedades: Aparece a seguinte caixa de diálogo: Escreva o atalho de teclado. Por exemplo, se você quer utilizar Ctrl+H, mantenha pressionada a tecla Ctrl e pressione H. A letra h aparecerá então na área tecla associada e a caixa de seleção debaixo da tecla Ctrl será marcada. Não é necessário utilizar modificadores. Você pode utilizar qualquer tecla apenas como atalho, ainda que não é recomendável na maioria dos casos. Se você desejar, pode modificar manualmente a seleção de teclas modificadoras selecionando ou deselecionando qualquer das caixas de seleção das teclas modificadoras. Para começar novamente, clique em Excluir. Quando terminar, clique em Aceitar. A lista de propriedades indica o atalho de teclado que foi atribuído ao objeto. Se mais adiante você quiser mudar o atalho, simplesmente abra a caixa de diálogo Atalhos e escreva a combinação de teclas a ser utilizada. Nota: também pode associar um atalho para um comando de menu personalizado. Se houver conflito entre dois atalhos, o objeto ativo tem a propriedade. Para mais informação sobre atalhos associados a menus, consulte Definir as propriedades dos menus. - 382 - Memorização da geometria das janelas 4D v14 inclui novas funções automáticas de memorização da aparência precisa das janelas quando se fecham (sua "geometria”), permitindo aos usuários encontrar seu entorno de trabalho no mesmo estado que o deixaram. Estas funções automáticas interessam as coordenadas das janelas, a posição dos diferentes objetos que contém, assim como o estado atual de certos objetos, tais como Controle de abas. Nota: As novas funções automáticas só se suportam se os formulários voltam a se abrir com o mesmo tamanho que tinham ao ser fechados. Consequentemente, que tem base principalmente no uso do comando Open form window com o parâmetro *. Opção de formulário Guardar Geometria Para ativar o mecanismo de memorização automática, deve selecionar a opção Guardar Geometria que se encontra nas Propriedades de formulário: Quando se ativa esta opção, vários parâmetros do formulário são salvos automaticamente por 4D quando a janela se fecha, independentemente da forma em que se modificaram durante a sessão: a página atual, a posição, o tamanho e a visibilidade de cada objeto do formulário (incluindo o tamanho e a visibilidade das colunas de list box). Nota: esta opção não leva em conta os objetos gerados mediante o comando [#cmd id="1111"/]. Para que o usuário recupere seu entorno quando utiliza este comando, o desenvolvedor deve repetir a sequência de criação, definição e posicionamento dos objetos. Quando esta opção está selecionada, a opção Guardar valor também está disponível para alguns objetos (ver o seguinte parágrafo). Opção Guardar Valor A opção Guardar valor se encontra na seção "Objetos" da Lista de propriedades: - 383 - Esta opção está disponível quando: Opção de formulário Guardar Geometria está selecionada para o formulário, o objeto selecionado contribui a geometria global do formulário. Por exemplo, esta opção está disponível para as caixas de seleção, já que seu valor pode ser utilizado para ocultar ou mostrar áreas adicionais na janela (ver exemplos mais à frente). Aqui está a lista de objetos cujo "valor" pode ser memorizado: Objeto Valor guardado Botão de rádio Botão de rádio 3D Caixa de seleção Caixa de seleção 3D Guias Pop-up/Lista deslocável Menu imagem deslocável Valor da variável associada (1, 0, True ou False para botões de acordo a seu tipo) Valor da variável associada (0, 1) Valor da variável associada (0, 1, 2) Valor da variável associada (0, 1) Número de guia selecionada Número de linha selecionada Número de linha selecionada Armazenamento e uso de informação 4D v14 conserva as coordenadas das janelas quando se fecham, assim como seu estado maximizado sob Windows quando foram gerados utilizando a instrução Open form window (nomeFormulário; *). Esta informação, assim como a que pode ser salva opcionalmente (geometria e valor) se salva em formato JSON na pasta do usuário atual da máquina, ao momento de fechar a janela. Graças a este princípio, inclusive quando se utiliza a conta "Usuário por padrão", cada usuário que se conecta com sua própria máquina pode manter seu próprio entorno. Esta informação só se utiliza se o formulário se torna a abrir com as mesmas dimensões e que quando se fechou. Este princípio implica seja a que instrução Open form window(*) se utilizou ou que o desenvolvedor estabeleceu um sistema personalizado para salvar as coordenadas. A informação salva se restaura e volta a ser aplicada na seguinte ordem: o tamanho e a posição das janelas se restauram quando o comando Open form window se executa a página atual se restaura antes de chamar ao evento On Load a posição, tamanho e visibilidade de cada objeto se restauram depois do evento On Load. As propriedades dos objetos de sub-formulários se salvam e voltam a ser aplicados automaticamente da mesma forma. Atenção: a informação salva sob as opções "Memorizar geometria " e " Memorizar valor" se reinicializam cada vez que se modificam os objetos do formulário em modo Desenho (redimensionar, deslocar, adicionar, eliminar ou mudar de nome). Portanto, é recomendado não utilizar esta funcionalidade da interface para salvar valores recorrentes, tais como as preferências do usuário. Exemplos Memorização de separadores Você deseja salvar as posições relativas dos separadores do formulário. Neste caso, basta com marcar a opção Guardar geometria. Quando se abre o formulário, é visto como este: - 384 - O usuário muda o tamanho da janela e move os separadores. Os objetos se redimensionam de acordo a suas próprias propriedades. Logo o usuário fecha a janela. Ao reabrir ela, os objetos conservam sua nova aparência: Memorização de uma área retrátil Em um formulário, foi colocado uma ou várias áreas alcançáveis administradas utilizando caixas de seleção 3D. Cada caixa mostra um triângulo apontando a direita quando a área está contraída e apontando para baixo quando está estendida. Há várias formas de configurar estas áreas (movimento ou visibilidade dos objetos, utilizando diferentes páginas de formulário, etc.), e em todos os casos, o tamanho da janela pode variar. Para que o estado das áreas alcançáveis se conserve entre duas sessões, deve: selecionar a opção Guardar geometria para o formulário para que a página atual, posições e estados de visibilidade dos objetos se conservem, selecione a opção Guardar valor para a caixa de seleção de objetos 3D para que o valor da variável associada se conserve (0 ou 1 para estado contraído ou expandido). Memorizar Bordas Em um formulário, você colocou as bordas com a ação padrão "Ir a página": - 385 - Neste caso, para que o mecanismo de memorização funcione corretamente, deve selecionar a opção Memorizar geometria para o formulário e Memorizar valor para o objeto borda: - 386 - List boxes Visão Geral Propriedades específicas dos list Box Propriedades específicas de colunas de list box Propriedades específicas dos títulos de list box Specific properties of List box footers Criar e usar list box hierárquicas Utilizar ações estandarte Visualização de campos em list boxes Visualização do resultado de uma petição SQL em um list box - 387 - Visão Geral Os List box são objetos ativos complexos que permitem mostrar e introduzir dados em forma de colunas sincronizadas. Estes objetos tem as mesmas características básicas das “áreas de rolagem agrupadas”, assim como novas possibilidades estendidas (entrada de valores, classificação de colunas, aparência personalizada, rolagem de colunas, etc.). Um objeto tipo List Box pode ser definido completamente utilizando o editor de formulários de 4D e também pode ser controlado por programação. Este parágrafo detalhas as novas características relacionadas com a criação e definição de objetos tipo List Box no editor de formulários. Para maiores informações sobre o controle programado destes objetos, consulte o capítulo List Box do manual de Linguagem 4D. Tipo Seleção e tipo Array Existem dois tipos de list boxes: os list box de tipo seleção e os list Box de tipo array. List Box de tipo seleção: o número de linhas está baseado na seleção atual ou em uma seleção temporária. Cada coluna está associada a um campo (por exemplo [Empregados]Nome) ou uma expressão 4D. A expressão pode ser baseada em um ou mais campos (por exemplo [Empregados]Nome+“ ”[Empregados]Nome) ou a uma fórmula (por exemplo Cadeia(Milisegundos)). A expressão também pode ser um método de projeto, uma variável ou um elemento de array. No caso de uma list Box baseada na seleção atual, qualquer modificação efetuada do lado do banco se reflete automaticamente na list Box e vice versa. A seleção atual é portanto sempre a mesma nos dois lugares. List box de tipo array: o número de linhas está baseado no número de elementos do array. Cada coluna do list box está associada com um array 4D. Por padrão, 4D atribui o nome “ColunaX” a cada variável de coluna e a cada array associado. É possível mudar o nome nas propriedades da coluna. Com este tipo de list Box, a gestão dos valores introduzidos ou mostrados nos list box são efetuados através da linguagem de 4D. Você também pode associar uma lista de seleção a uma coluna para controlar a entrada de dados (ver o parágrafo Propriedades específicas de colunas de list box). Não é possível combinar em um mesmo list Box colunas associadas a campos (ou expressões) e colunas associadas com arrays no mesmo list Box. Descrição Um list box contém uma ou mais colunas cujo conteúdo é sincronizado automaticamente. Por padrão, quando se cria uma list box, esta contém apenas uma coluna. É possível modificar o número de colunas (adicionar, duplicar ou apagar - 388 - uma coluna) utilizando o menu contextual (clique na coluna ou no cabeçalho de uma coluna) ou nas propriedades do list Box. O número de colunas é, em teoria, ilimitado (depende dos recursos do computador). Um list Box está composto de três partes distintas: o objeto list box em seu conjunto, as colunas os títulose os pés de colunas. No editor de formulários, esta partes podem ser selecionadas separadamente. Cada uma dispõe do seu próprio nome de objeto e de variável assim como de propriedades específicas. Por exemplo, o número de colunas ou a cor alternada de cada linha é definida nas propriedades do objeto list Box, a largura de cada coluna é definida nas propriedades da coluna e a fonte do título é definida nas propriedades do título. Nota: Nos list Box de tipo seleção, as colunas não tem um nome de variável. Um list box de tipo array pode ser visualizado em modo padrão ou em modo hierárquico. Os list boxes mostrados em modo hierárquico utilizam os mecanismos específicos, descritos a seguir. Utilizando list boxes Durante a execução, os list box permitem mostrar e introduzir dados em forma de listas. Para passar de uma célula a modo edição (se a entrada estiver autorizada para a coluna), simplesmente clique duas vezes no valor que a contém: Nota: para maior informação, consulte o parágrafo Gestão de entrada no manual de Linguagem de 4D. É possível introduzir e mostrar o texto em várias linhas dentro de uma célula de list Box. Para adicionar um retorno à linha: em Windows, pressione as teclas Ctrl+Enter, em Mac Os, pressione as teclas Opção+Enter. Note que a altura das linhas não se redimensionam automaticamente. É possível ordenar valores de colunas por meio de um clique em um título (ordenação padrão). A ordenação é alfanumérica e alternativamente ascendente/descendente com cliques múltiplos. Todas as colunas se sincronizam automaticamente. Nota: para maior informação, consulte o parágrafo Gestão de ordenações no manual de Linguagem de 4D. Também é possível redimensionar cada coluna: O usuário pode modificar a ordem das linhas e colunas utilizando o mouse (se esta ação estiver autorizada): - 389 - Nota: Nos list box de tipo seleção, não é possível mudar a ordem das linhas movendo-as com o mouse. O usuário pode selecionar uma ou várias linhas utilizando os atalhos padrões: Shift+clique para uma seleção contínua e Ctrl+clique (Windows) ou Comando + clique (Mac OS) para uma seleção não adjacente. Todas estas características podem ser controladas utilizando as propriedades do list Box, das colunas, dos cabeçalhos e dos pés, as quais são detalhadas nos parágrafos a seguir. Nota: as características específicas dos list boxes utilizados em modo hierárquico são descritas na seção Criar e usar list box hierárquicas] Imprimir list boxes Os list boxes podem ser impressos em forma modo "pré-visualização" (impressão de uma imagem da área do list box) ou em modo "avançado" (impressão dinâmica de tamanho variável). Para mais informação, consulte Imprimir list boxes no Manual de Linguagem de 4D. - 390 - Propriedades específicas dos list Box Quando se seleciona um objeto List Box do editor de formulários, a lista de propriedades mostra as seguintes propriedades específicas. Note que as propriedades especificas adicionais estão disponíveis quando seleciona uma coluna de list box (ver Propriedades específicas de colunas de list box), um título de coluna (ver Propriedades específicas dos títulos de list box) ou um rodapé de coluna (ver Specific properties of List box footers). Tema Objetos Este tema inclui a propriedade Fonte de dados que é utilizada para especificar o tipo de list box: Selecione a opção Seleção atual se você quiser utilizar expressões, campos ou métodos cujos valores serão avaliados para cada registro da seleção atual de uma tabela. Selecione a opção Seleção temporária se você quiser utilizar expressões, campos ou métodos cujos valores serão avaliados para cada registro de uma seleção temporária. Selecione a opção arrays se você quiser utilizar elementos do array como linhas do list Box. A opção arrays é necessária se você quiser recuperar o resultado de uma consulta SQL em um list Box (ver o parágrafo Visualização do resultado de uma petição SQL em um list box). Tema Fonte de dados Este tema aparece somente para os list box de tipo seleção. Contém a propriedade tabela principal para os list Box de tipo seleção atual ou seleção temporária para os list Box de tipo seleção temporária. Tabela principal: permite especificar a tabela cuja seleção atual será utilizada. Esta tabela e sua seleção atual serão a referência para os campos associados com as colunas do list Box (referências de campos ou expressões que contém campos). Inclusive se algumas colunas contem campos de outras tabelas, o número de linhas mostradas será definido pela tabela principal. O menu associado a esta propriedade mostra todas as tabelas do banco, sem importar se o formulário está relacionado a uma tabela (formulário tabela) ou não (formulário projeto). Por padrão, a propriedade mostra a primeira tabela do banco. Para maiores informações sobre o comportamento desta propriedade, consulte o parágrafo Visualização de campos em list boxes. Seleção temporária: permite especificar a seleção temporária a ser utilizada. Você deve introduzir o nome de uma seleção temporária válida. A seleção temporária pode ser processo ou interprocesso. O conteúdo do listbox será baseado nesta seleção. A seleção temporária escolhida deve existir e ser validada no momento da visualização do list Box, caso contrário o list Box será mostrado vazio. Se você deixar vazia a área do nome, o list Box será mostrado vazio. Nota As seleções temporárias são listas ordenadas de registros. São utilizadas para conservar em memória a ordem e o registro atual de uma seleção. Para maiores informações, consulte Seleções temporárias no manual de Linguagem de 4D. Tema List Box Este tema agrupa as propriedades fundamentais do objeto. Número de colunas: número de colunas mostradas no list box (1 por padrão). É possível modificar o número de - 391 - colunas (adicionar, duplicar ou apagar uma coluna) utilizando o menu contextual (clique em uma coluna ou em um título de coluna): Número de colunas bloqueadas: número de colunas que devem ser mostradas permanentemente na parte esquerda do list box, inclusive se o usuário se desloca pelas colunas horizontalmente. Uma coluna bloqueada pode redimensionar-se, editar-se, etc. como toda coluna. Só sua posição no list box está bloqueada (não se desloca). Isto pode ser útil, por exemplo, para mostrar os "títulos" das linhas em um array de grande tamanho. Esta propriedade define uma "área bloqueada". Se uma coluna bloqueada se apagar por programação, o número de colunas bloqueadas no list box diminui em 1. Da mesma forma, se uma coluna se penetra por programação na área bloqueada, esta coluna se bloqueia automaticamente. Nota: consulte a seção "Colunas bloqueadas e colunas fixas" para uma comparação de duas funcionalidades. Número de colunas fixas: número de colunas que não podem se mover durante a execução. Este valor indica o número de colunas fixas a partir da primeira coluna do list Box. Para evitar toda movimentação de colunas, este valor deve ser igual ao número total de colunas. Esta propriedade leva em consideração as colunas invisíveis. Por padrão, se o modo hierárquico não estiver ativo (Opção List box hierárquico não selecionada) o valor da propriedade é 0, o que significa que todas as colunas podem se mover. Quando o modo hierárquico estiver ativo (list boxes de tipo array unicamente), esta opção sempre é pelo menos 1. Nota: consulte a seção "Colunas bloqueadas e colunas fixas" para uma comparação de duas funcionalidades. Seleção múltipla: esta propriedade é adicionada para os list Box de tipo seleção somente. Permite especificar o conjunto a ser utilizado para controlar os registros selecionados no list Box (quando está selecionada a fonte de dados Arrays, é utilizado um array booleano com o mesmo nome que o list Box). 4D cria um conjunto padrão, chamado ListBoxSetN (N começa em 0 e aumenta em função do número de list boxes no formulário), que pode modificar se for necessário (por ser um conjunto processo ou inter processo). O conjunto é automaticamente mantido por 4D. Se o usuário seleciona uma ou mais linhas no list Box, o conjunto se atualiza imediatamente. Se você quiser selecionar uma ou mais linhas por programação, aplique os comandos do tema “Conjuntos” a este conjunto. Notas O estado ressaltado das linhas do list Box e dos registros da tabela são totalmente independentes. Se a propriedade “Seleção múltipla” não contém um nome, não será possível realizar seleções no list Box. Array linhas ocultas (list box de tipo array unicamente): permite ocultar uma ou várias linhas no listbox. Deve introduzir o nome de um array de tipo Booleano. O array deve ter o mesmo número de elementos que o listbox. Cada elemento do array representa o estado mostrado/oculto da linha correspondente no list box: Para ocultar a linha, passe True, Para mostrar a linha, passe False. Se não foi definido um array ou se o array está vazio, todas as linhas do list box são visíveis. Por padrão, as linhas adicionadas são visíveis. Ocultar as linhas afeta unicamente a visualização do listbox. As linhas ocultas estão presentes nos arrays e podem ser manipuladas por programação. Os comandos da linguagem, especialmente Get number of listbox rows ou GET LISTBOX CELL POSITION, não levam em conta o estado oculto/mostrado das linhas. Por exemplo, em um list box de 10 linhas onde 9 linhas estão ocultas, Get number of listbox rows devolve 10. Desde o ponto de vista do usuário, a presença de linhas ocultas em um list box não é visível. Só as linhas visíveis são selecionáveis (por exemplo via o comando Select All). Modo de seleção: permite definir o modo de seleção das linhas no list box. Há três modos disponíveis: Nenhum: não pode ser selecionada nenhuma linha e não é possível introduzir dados. A seleção e gestão de dados pode ser realizada unicamente por programação. O clique ou o duplo clique na lista não tem nenhum efeito (inclusive se a opção Editável está selecionada para as colunas) porém podem ser gerados os eventos On Clicked e On Double Clicked. Neste modo, o desenvolvedor tem controle total das seleções (utilizando o conjunto ressaltado) e da entrada de dados (utilizando o comando EDIT ITEM). Não são gerados os eventos de formulário On Selection Change e On Before Data Entry. Por outra lado, o evento On After Edit pode ser gerado quando os dados são introduzidos pelo usuário por meio do comando EDIT ITEM. Linha única: uma só linha pode ser selecionada por vez. Multilinhas: várias linhas (adjacentes ou não) utilizando atalhos padrão: Shift+clique para uma seleção contínua e Ctrl+clique (Windows) ou Comando+clique (Mac OS) para uma seleção descontínua. Clique duas vezes em uma fila (para list box tipo “seleção” unicamente): define a ação que será levada a cabo quando um usuário faça clique duplo sobre uma fila no listbox. As seguintes opções estão disponíveis: Não fazer nada (por padrão): fazer clique duplo em uma linha não desencadeia nenhuma ação automática. Modificar Registro: clique duplo em uma linha mostra o registro correspondente no formulário detalhado definido para o list box (ver o parágrafo " Formulário Detalhado" mais adiante). O registro está aberto em - 392 - modo leitura e escritura podendo ser modificado. Mostrar registro: idêntica a ação anterior, exceto que o registro é aberto em modo de só leitura de maneira que não possa ser modificado. Nota: Ao fazer duplo clique em uma linha vazia não passa nada. Independentemente da ação selecionada escolhida, é gerado o evento de formulário On Double clicked. Para as duas últimas ações, o evento de formulário On Open Detail também é gerado. On Close Detail logo é gerado quando é mostrado um registro no formulário detalhado associado ao list box antes de ser fechado (sem importar se o registro foi modificado ou não). Formulário detalhado (list box de tipo seleção unicamente): especifica o formulário a utilizar para modificar ou mostrar os registros individuais do list box. O formulário definido é mostrado: quando utilize as ações estandarte Adicionar Sub registro e Editar Sub registro aplicadas ao list box (ver Utilizar ações estandarte), quando clica duas vezes em uma linha e a propriedade Clique Duplo em linha está definida para "Editar registro" ou "Mostrar Registro" (ver a seção “Clique duplo em uma fila” acima). Colunas bloqueadas e colunas estáticas As colunas bloqueadas e as colunas estáticas são duas funcionalidades separadas e independentes nos list box: as colunas bloqueadas sempre se mostram à esquerda do list box, não se deslocam horizontalmente. as colunas estáticas não se podem mover por arrastar e soltar ao interior do list box. Nota: pode definir as colunas estáticas e as colunas bloqueadas por programação, ver o capítulo List Box no manual de Linguagem de 4D. Estas propriedades interajam da seguinte forma: Se define unicamente colunas estáticas, não se podem mover. Se define colunas bloqueadas, mas não estáticas, pode mudar sua posição livremente na área bloqueada. No entanto, uma coluna bloqueada não se pode mover fora desta área bloqueada. Se define um mesmo número de colunas bloqueadas como de colunas estáticas, não poderá mover as colunas na área bloqueada. - 393 - Pode definir uma combinação de colunas bloqueadas e estáticas de acordo a suas necessidades. Por exemplo, se define três colunas bloqueadas e uma coluna estática, o usuário pode intercambiar as duas colunas mais à direita dentro da área bloqueada (já que só a primeira coluna é estática). Temas cabeçalhos e rodapés Estes temas administram a visualização e a altura dos cabeçalhos e dos pés de colunas do list box. Tenha em conta que as áreas de cabeçalhos e de rodapés não são editáveis durante seu uso. Seus conteúdos sempre se calculam. Mostrar cabeçalhos e Mostrar rodapés: permite mostrar ou ocultar os cabeçalhos ou os rodapés das colunas. Não há outras opções disponíveis em cada tema a menos que esta propriedade esteja selecionada. Uma vez a área se mostre no list box, pode selecionar fazendo clique nela para entrar a suas propriedades específicas na Lista de propriedades (ver Propriedades específicas dos títulos de list box e Specific properties of List box footers). Você dispõe de uma área de cabeçalho e de uma área de rodapé por coluna, configuradas por separado. Invisível por padrão: Como para todos os objetos de formulário, esta opção facilita a gestão dinâmica da visualização do objeto utilizando o comando OBJECT SET VISIBLE. O comando OBJECT SET VISIBLE não tem nenhum efeito se a opção "Mostrar cabeçalhos" ou "Mostrar rodapés" correspondente não está selecionada na lista de propriedades. Altura: permite definir a altura da linha de cabeçalho e da linha de rodapé do list box. Pode definir a unidade (linhas ou píxels) para o valor da altura. Para obter mais informação ao respeito, consulte o parágrafo Altura em píxels ou linhas a continuação. Por padrão, a altura dos cabeçalhos e dos rodapés é de uma linha. Atenção: a altura mínima em píxels dos cabeçalhos depende do sistema. Se passa um valor muito pequeno, será substituído pelo tamanho mínimo definido no sistema para os cabeçalhos. Não há um tamanho mínimo para os rodapés e as linhas. Nota de compatibilidade: em Windows 7 e Windows Vista, a altura mínima dos cabeçalhos é de 24 píxels. Os cabeçalhos de menor altura definidos em suas bases convertidas se redimensionarão automaticamente. Neste - 394 - caso, poderia ser necessário retomar seus formulários. Também pode definir dinamicamente a altura da linha dos cabeçalhos e dos rodapés utilizando os comandos LISTBOX SET HEADERS HEIGHT e LISTBOX SET FOOTERS HEIGHT. Altura em píxels ou linhas Pode se definir a altura dos cabeçalhos, rodapés e linhas em unidades de píxels ou de linhas de texto. Na lista de propriedades, a eleição da unidade se realiza utilizando o botão associado ao campo "Altura". Também pode inserir uma "L" (de linha) ou uma "P" (de píxels) diretamente na área de valor, (por exemplo, "17 P") e a etiqueta do botão se atualiza em consequência. Pode inclusive utilizar os dois tipos de unidades em um mesmo list box: Quando se utiliza a unidade "píxels", o valor da altura se aplica diretamente à linha que se trate, independentemente do tamanho das fontes contidas nas colunas. Se a fonte é muito grande, o texto se trunca. Além disso, as imagens se truncam ou redimensionam em função de seu formato. Quando se utiliza a unidade "Linha", a altura se calcula tendo em conta o tamanho da fonte da linha em questão. Se mais de um tamanho se ajusta, 4D utiliza o mais grande. Por exemplo, se a linha contém "Verdana de 18", "Ginebra, 12 e "Arial 9", 4D utiliza "Verdana 18" para determinar a altura da linha (por exemplo, 25 píxels). Esta altura se multiplica pelo número de linhas definidas. Nota: este cálculo não leva em conta o tamanho das imagens nem dos estilos aplicados as fontes. Conversão das unidades: quando se passa de uma unidade a outra, 4D realiza automaticamente a conversão e mostra o resultado na Lista de Propriedades. Por exemplo, se a fonte utilizada é "Lucida Grande 24", a altura "1 linha" se converte em "30 píxels" e a altura "60 píxels" se converte em "2 linhas". Note que a conversão de um lado a outro pode dar lugar a um resultado final diferente do valor de partida devido aos cálculos realizados automaticamente por 4D. Isto se ilustra nas seguintes sequências: (fonte Arial 18): 52 píxels-> 2 linhas -> 40 píxeles (fonte Arial 12): 3 píxels-> 0.4 linha arredondada a 1 linha -> 19 píxels Tema de Quadriculação Este tema reúne todas as propriedades relacionadas com a grade mostrada no list box objeto. Linhas horizontais: mostra ou oculta as linhas horizontais do list box (mostradas por padrão). Cor de linhas horizontais: define a cor das linhas horizontais no list box (cinza por padrão). Linhas verticais: mostra ou oculta as linhas verticais do list box (mostradas por padrão). Cor de linhas verticais: define a cor das linhas verticais do list box (cinza por padrão). Tema Hierárquico Este tema sólo está disponível para os list boxes cuja fonte de dados é Arrays. Suas opções configuram a visualização hierárquica do list box. Lembre que estas propriedades se modificam automaticamente quando se define a hierarquia utilizando o menu emergente do objeto list box (ver Criar e usar list box hierárquicas). List box hierárquico: se utiliza para especificar que o list box devem ser mostrado em forma hierárquica. Variável 1 ... 10: estas opções adicionais aparecem quando a opção List box hierárquico está selecionada. Cada vez que se introduz um valor em um campo, se agrega uma nova fila. Podem ser especificadas até 10 variáveis. Estas variáveis definem os níveis hierárquicos que se mostrarão na primeira coluna. A primeira variável sempre corresponde ao nome da variável da primeira coluna do list box (os dois valores são linkados automaticamente). Esta primeira variável é sempre visível e editável. Por exemplo: país. - 395 - A segunda variável é sempre visível e editável, especifica o segundo nível hierárquico. Por exemplo: regiões. Começando com o terceiro campo, cada variável depende da qual a precede. Por exemplo: departamentos, cidades, etc. Podem ser especificados um máximo de dez níveis hierárquicos. Se elimina um valor, toda a hierarquia se move um nível. A última variável nunca é hierárquica, mesmo que vários valores idênticos existam neste nível. Por exemplo, em referência à configuração ilustrada anteriormente, imagine que arr1 contém os valores A A A B B B, arr2 tem os valores 1 1 1 2 2 2 e arr3 os valores X X Y Y Y Z. Neste caso, A, B, 1 e 2 poderia aparecer em forma contraída, mas não X e Y: +A +1 X X Y +B +2 Y Y Z Este princípio não se aplica quando uma só variável se especifica na hierarquia : neste caso, os valores idênticos podem ser agrupados. Nota: se especifica uma hierarquia baseada nas primeiras colunas de um list box existente, deve então apagar ou ocultar estas colunas (exceto a primeira), do contrário, aparecerão dois vezes na list box. Se define a hierarquia através do menu emergente do editor (ver Criar e usar list box hierárquicas), as colunas desnecessárias são eliminadas automaticamente do list box. Tema de Coordenadas e Dimensões Este tema reúne todas as propriedades relacionadas com as coordenadas, altura e largura do list box. A propriedade Altura de filas é específica: permite definir a altura das linhas do list box. Note que a altura da linha das áreas de cabeçalhos e de rodapés se define separado, nos temas "Cabeçalho e Rodapés. Pode definir uma altura em píxels ou em linhas.Para maior informação sobre a eleição da unidade, consulte o parágrafo "Altura em píxels ou em linhas". Por padrão, a altura das linhas está definida em função da plataforma e o tamanho da fonte. Tema de Fundo e borda Este tema reagrupa as propriedades relativas às cores de fundo das filas bem como com o estilo da borda. Cor de fundo: permite definir a cor de fundo do list box. Esta cor se utiliza para todo o objeto com exceção dos títulos (se são mostrados). Cor de fundo alternativa: permite definir uma cor de fundo diferente para as linhas ímpares do list box. Utilizar uma cor de fundo alternativa facilita a leitura dos arrays. Estilo da borda: permite definir um estilo padrão para a borda do objeto de list box. Tema Texto Este tema junta as propriedades estandarte de definição do texto mostrado no list box: Array de estilos (list box de tipo array) / Estilos (list box de tipo seleção): permite aplicar um estilo de caracteres personalizado a cada linha do list box. Para os list box de tipo array, deve introduzir o nome de um array de tipo Inteiro longo. Cada elemento deste array corresponde a uma fila do list box; o array deve ter o mesmo tamanho que os arrays associados as colunas. Para encher o array (utilizando um método), utilize as constantes do tema “Texto”. Somando as constantes, pode combinar estilos. Para aplicar o estilo definido nas propriedades do list box a uma fila, atribua o valor -255 ao elemento do array correspondente. Para os list box de tipo seleção, deve introduzir uma expressão ou uma variável (exceto para um array). A expressão ou a variável se avaliará para cada linha mostrada. Pode utilizar o editor de fórmulas para definir uma expressão. Para fazer isso, faça clique no botão [...] que aparecer quando seleciona a área. Pode utilizar as constantes do tema Estilos de fonte. O seguinte exemplo utiliza um nome de variável: entre EstiloEmpresa na área Estilos e no método de - 396 - formulário, escreva o seguinte código: EstiloEmpresa:=Choose([Empresas]ID;Bold;Plain;Italic;Underline) Array de cores de fonte (list box de tipo array) / Cores de fonte (list box de tipo seleção): permite aplicar uma cor de fonte personalizada a cada fila do list box. Deve utilizar os valores de cores RGB. Para maior informação consulte a descrição do comando SET RGB COLORS no manual Linguagem de 4D. Para os list box de tipo array, deve introduzir o nome de um array de tipo Inteiro longo. Cada elemento deste array corresponde a uma linha do list box; o array deve ter o mesmo tamanho que os arrays associados as colunas. Pode utilizar as constantes do tema DEFINIR CORES RVA. Para aplicar a cor de fonte definido nas propriedades do list box a uma linha, passe o valor -255 ao elemento do array correspondente. Para os list box de tipo seleção, deve introduzir uma expressão ou uma variável (exceto para um array). A expressão ou variável será avaliada para cada linha mostrada. Pode utilizar o editor de fórmulas para definir uma expressão. Para fazer isso, faça clique no botão [...] que aparece ao selecionar a área. Pode utilizar as constantes do tema DEFINIR CORES RVA. O seguinte exemplo utiliza um nome de variável: introduza CorEmpresa na área Cor de fonte e no método de formulário, escreva o seguinte código: CorEmpresa:=Choose([Empresas]ID;Default background color;Default light shadow color;Default foreground color;Default dark shadow color) Array de cores de fundo (list box de tipo array) / Cores de fundo (list box de tipo seleção): permite aplicar uma cor de fundo personalizado a cada linha do list box. Deve utilizar os valores de cores RGB. Para maior informação, consulte a descrição do comando SET RGB COLORS no manual de Linguagem 4D. Para os list box de tipo array, deve introduzir o nome de um array de tipo inteiro longo. Cada elemento deste array corresponde a uma linha do list box; o array deve ter o mesmo tamanho que os arrays associados as colunas. Pode utilizar as constantes do tema DEFINIR CORES RVA. Para aplicar a cor de fundo definido nas propriedades do list box a uma linha, passe o valor -255 ao elemento do array correspondente. Para os list box de tipo seleção, deve introduzir uma expressão ou uma variável (exceto para um array). A expressão ou variável será avaliada para cada linha mostrada. Pode utilizar o editor de fórmulas para especificar uma expressão. Para fazer isso, faça clique no botão [...] que aparece quando seleciona a área. Pode utilizar as constantes do tema DEFINIR CORES RVA. Alinhamento horizontal: o conteúdo de cada cela se pode alinhar horizontalmente em direção a Direita, Esquerda ou Centro. A opção Por padrão define a alienação em função do tipo de dados que se encontram em cada coluna: os textos e as imagens se alinham à esquerda, os dados numéricos à direita.. Alinhamento vertical: o conteúdo de cada cela se pode alinhar verticalmente em direção Em cima, Centro ou Abaixo. A opção Por padrão define alienação em função do tipo de dados que se encontram em cada coluna: Abaixo para todos os dados exceto imagens, Em cima para os dados de tipo imagem. Note que as propriedades de alienação podem aplicar-se globalmente ao list box ou por separado para cada coluna. Eles também estão disponíveis para as áreas de cabeçalhos e rodapés. Tema de Ação Este tema reúne as propriedades relativas ao comportamento dinâmico do list box. Método do objeto (Editar...): este botão mostra o método do objeto de list box (observe que cada coluna também pode conter um método de objeto). Arrastável e Soltável: ativa as funções arrastar e soltar do list box, permitindo arrastar uma fila do list box para outro list box ou outro objeto 4D e vice-versa. Só as filas do list box podem ser arrastadas e soltas. Não é possível arrastar e soltar as colunas (no entanto, é possível arrastar as colunas para o interior de um mesmo list box). A gestão efetiva de arrastar e soltar nos list box é efetuada com a ajuda de mecanismos padrão de 4D (eventos de formulário On Drop e On Drag Over, comandos DRAG AND DROP PROPERTIES e Drop position). Filas deslocáveis (list box de tipo array unicamente): autoriza o deslocamento de linhas em execução. Esta opção está selecionada por padrão. Esta opção não está disponível para os list boxes de tipo seleção nem para os list box em modo hierárquico (opção List box hierárquico selecionada). Ordenável: permite ordenar os dados das colunas ao se clicar no título. Esta opção está selecionada por padrão. Os arrays de tipo imagem (colunas) não podem ser ordenados utilizando este mecanismo. Nos list boxes baseados nas seleções de registros, só está disponível a função de ordenação padrão: - 397 - quando a fonte de dados é a Seleção atual, com as colunas associadas aos campos (de tipo alfa, numérico, data, hora ou booleano). Nos outros casos (list boxes baseados nas seleções temporais, colunas associadas com as expressões), a função de ordenação padrão não está disponível. A ordenação padrão do list box modifica a ordem da seleção atual no banco de dados. No entanto, os registros selecionados e o registro atual não se alteram. A ordenação padrão sincroniza todas as colunas do list box, incluindo as colunas calculadas. Tema compatibilidade A opção Área de deslocamento apresenta neste tema está desenhada para acompanhar a conversão das antigas "áreas de deslocamento", automaticamente transformadas em list boxes a partir de 4D v13. No entanto, está disponível para todos os list boxes: Quando a opção Área de deslocamento é selecionada por um list box, as seguintes operações específicas se implementam: Se o array (único) do list box têm a propriedade "invisível, o objeto list box também é completamente invisível. Assinalar um valor ao array seleciona a linha correspondente no list box (por exemplo: MeuArray:=5 seleciona a quinta linha do list box). Pelo contrário, fazer clique em uma linha do objeto modifica o valor atual do array. Quando um soltar se realiza desde uma linha do list box em um objeto externo, o comando DRAG AND DROP PROPERTIES executado neste objeto devolve um ponteiro ao array do list box (e não ao list box mesmo). List boxes conectados (compatibilidade) Os list boxes que vem da conversão das antigas áreas de deslocamento agrupadas estão conectados. Os list box conectados funcionam de maneira coordenada: a seleção de uma linha em um list box seleciona esta mesma linha em todos os list box que pertencem ao grupo conectado, o deslocamento vertical de um list box também desloca os list box que pertencem ao mesmo grupo conectado. Nota: os list box convertidos também se agrupam no formulário (função estandarte de 4D). Pode conectar-se e desconectar-se dos list box utilizando os comandos Conectar e Desconectar que se encontram no menu Objeto do editor de formulários: Estes comandos se habilitam contextualmente quando vários list box estão selecionados no formulário. Quando um list box conectado (ou seja, que pertence a um grupo de conexão) está selecionado, uma "marca" específica se mostra em todos os list box que pertencem ao mesmo grupo de conexão: Nota de compatibilidade: estes princípios fazem possível reproduzir o funcionamento das áreas de deslocamento agrupadas. No entanto, lhe recomendamos adaptar os formulários convertidos utilizando as funcionalidades estandarte dos list box. - 398 - Propriedades específicas de colunas de list box É possível selecionar uma coluna de list box no editor de formulários clicando na coluna quando o objeto de list box está selecionado: Pode definir para cada coluna de List box as propriedades padrão (texto, cor de fundo, etc.); estas propriedades tem prioridade sobre as propriedades do objeto List box. Você também tem acesso às propriedades específicas descritas nesta seção. Tema Fonte de dados Nota: o tema Fonte de dados não está disponível para as colunas de list box de objetos de tipo array de objetos. Neste contexto, os conteúdos de cada célula da coluna se baseiam nos atributos que sejam encontrados no elemento correspondente do array de objetos. Para mais informação, consulte List box, Using object arrays in columns (4D View Pro). Expressão: a propriedade Expressão permite definir a expressão 4D para se associar à coluna: É possível introduzir: uma expressão 4D (expressão simples, fórmula ou método 4D). O resultado da expressão será mostrado automaticamente ao se passar para o modo Aplicação. A expressão será avaliada para cada registro da seleção (atual ou temporal) da tabela principal. Se estiver vazia, a coluna não mostrará nenhum resultado. uma variável simples (neste caso, a variável deve ser declarada explicitamente para a compilação). É possível utilizar qualquer tipo de variável exceto BLOBs e arrays. O valor da variável será geralmente calculado no evento On Display Detail. Um campo utilizando a sintaxe padrão [Tabela]Campo (exemplo: [Empregados]Sobrenome). Podem ser utilizados os seguintes tipos de campos: Alfa Texto Numérico Data Hora Imagem Booleano É possível utilizar campos da tabela principal ou de outras tabelas. - 399 - Em todos os casos, é possível definir a expressão com a ajuda do editor de fórmulas de 4D clicando no botão [...] na lista de propriedades: Caso se passe uma expressão, a coluna não será editável inclusive se a opção Editável estiver selecionada. Caso se utilize um campo ou variável, a coluna será editável ou não dependendo da opção Editável (e o atributo “Não modificável” no editor de estrutura). Em modo Desenho, o tipo de fonte de dados é mostrado na primeira linha da coluna. Por exemplo, Campo=[Tabela1]MeuCampo. Se a expressão definida estiver incorreta, a coluna do list box mostrará uma mensagem de erro no modo Aplicação. Pode utilizar campos da tabela principal ou de outras tabelas. Valores por padrão (list box de tipo array): faça clique no botão Edição... para mostrar uma caixa de diálogo de entrada que permite associar uma lista de valores por padrão para a coluna. Estes valores serão acessíveis automaticamente na variável array associada à coluna durante a execução do formulário. Deve introduzir uma lista de valores separados por dois retornos de carro e depois validar a caixa de diálogo. Para maior informação sobre esta caixa de diálogo consulte o parágrafo Valores padrão na seção Controles de entrada de dados e ajuda de entrada. Tipo de dados: este menu permite definir o tipo de expressão ou da variável associada à coluna. Utiliza-se para indicar o formato de saída a ser aplicado e permite atualizar o menu Tipo de saída no tema “Mostrar”. Se um campo é introduzido na área Expressão, não se mostra a propriedade Tipo de dados; utiliza-se o formato de saída correspondente ao tipo de campo. Lista de seleção: esta propriedade pode ser utilizada para associar uma Lista de valores a uma coluna do list box. Se você desenha uma lista, o usuário pode utilizar seus valores (mostrados em um menu suspenso) para modificar os valores da coluna e seu array associado: Note que a entrada por teclado ainda é possível. Se você não quiser que os valores se modifiquem utilizando o menu de seleção suspenso, escolha a lista obrigatória (ver abaixo). Nota: Se a lista designada for hierárquica, só são levados em conta os elementos de primeiro nível. Guardar como Valor/Referência: quando a coluna se associa a uma lista de opções, esta propriedade permite definir o tipo de conteúdo a guardar no campo ou variável da coluna. Para obter mais informação sobre esta opção, consulte [#title id="3416"/]. Tema Coordenadas e dimensões Este tema agrupa as propriedades relacionadas com a largura da coluna do list box. Largura: largura padrão da coluna (em pixels). Este valor é atualizado quando se redimensiona a coluna utilizando o mouse no editor de formulários. Se a propriedade Redimensionável está selecionada, o usuário também pode redimensionar manualmente a coluna. Largura mínima: largura mínima da coluna (em pixels). A largura da coluna não pode ser menor que este valor em caso de redimensionamento da coluna ou do formulário. Largura máxima: largura máxima da coluna (em pixels). A largura da coluna não pode ser maior que este valor em caso de redimensionamento da coluna ou do formulário. Nota: Em caso de redimensionamento do formulário, se a propriedade de redimensionamento horizontal Aumentar estiver atribuída al list box, a coluna mais à direita aumentará além da largura máxima se for necessário. - 400 - Tema Opções de Redimensionamento Este tema só contém a opção Redimensionável (selecionada por padrão). Quando esta opção está selecionada, o usuário pode redimensionar a coluna movendo os lados da área de título. Tema Controles de entrada Este tema agrupa todas as propriedades relacionadas com a entrada de dados à coluna do list box. Editável: autoriza a entrada de dados à coluna (selecionada por padrão). Para modificar o valor de uma célula, o usuário deve fazer um clique duplo no valor. Quando esta propriedade está desmarcada, os menus suspensos associados à coluna por meio da lista (temas “Fonte de dados” e “Faixa de valores”) são desativados. Nota: para maior informação sobre estes mecanismos implementados para a entrada nos list box, consulte o parágrafo Gestão de entrada no manual de Linguagem de 4D. Filtro de entrada: associa um filtro de entrada às células das colunas. Esta propriedade não é acessível se a propriedade Editável não estiver selecionada. Ajuste de linha (colunas de tipo texto unicamente): gerencia a visualização do conteúdo da coluna quando se supera a largura da coluna. Quando se ativa esta opção, o texto da coluna se ajusta automaticamente na linha seguinte quando sua largura é superior ao da coluna, se a altura da coluna o permite. Quando não se marca esta opção, um texto muito longo se trunca e se mostra com uma elipse (...). No seguinte exemplo, a opção Ajuste de linha está selecionada para a coluna esquerda, mas não para a coluna direita: Tenha em conta que, independentemente do valor da opção Ajuste de linha, não muda a altura da linha. Se o texto com saltos de linha não pode ser visualizado em sua totalidade na coluna, se trunca (sem uma elipse). No caso dos list box que mostram só uma única linha, só é mostrada a primeira linha de texto: Tema Faixa de valores Este tema permite designar as listas utilizadas para controlar a entrada à coluna do list box. Lista de obrigatórios: permite designar uma lista onde somente estes valores podem ser inseridos na coluna. Os valores da lista são acessíveis utilizando um menu suspenso associado a cada célula (favor referir-se à propriedade “Lista de valores” no tema Fonte de dados). Diferente da propriedade Lista de valores, quando uma lista obrigatória é definida, não é possível a entrada de dados utilizando o teclado, somente é permitida a seleção de um valor da lista utilizando o menu suspenso. Se várias listas são definidas utilizando as propriedades Lista de valores e Lista de obrigatórios, a propriedade Lista de obrigatórios tem prioridade. Lista de excluídos: permite designar uma lista cujos valores não podem ser introduzidos na coluna. Se um valor excluído é introduzido, o valor não é aceito e uma mensagem de erro aparece. Nota: Se a lista designada é hierárquica, só são levados em conta os elementos de primeiro nível. Tema Mostrar Este tema permite especificar o formato de visualização dos valores da coluna e a propriedade Invisível. O conteúdo deste tema varia de acordo com o tipo de variável definido no tema Objetos. - 401 - Formato tipo: permite associar um formato de visualização aos dados da coluna. Os formatos propostos dependem do tipo de variável (list box de tipo array) ou do tipo de dados/do campo (list box de tipo seleção). Os formatos padrão de 4D que podem ser utilizados são: Alfa, Numérico, Data, Hora, Imagem e Booleano. O tipo de texto não tem formato de visualização específico. Os formatos personalizados existentes também estão disponíveis. Nota: se a list box é mostrada em modo hierárquico, todas as propriedades deste tema são desativadas para a primeira coluna. Os arrays booleanos podem ser mostrados como caixas de seleção ou menus suspensos. Se você escolher a opção Caixa de Seleção, aparecerá a propriedade Título que lhe permite introduzir o título da caixa de seleção. Se você escolher a opção Meu Suspenso, aparecerão as propriedades Texto se verdadeiro e Texto se falso, permitindo-lhe definir as duas etiquetados menu suspenso. As colunas de valores numéricos podem ser mostradas como caixas de seleção de três estados. Esta opção encontra-se na lista suspensa Tipo de saída. Se você selecionar o tipo Caixa de seleção de três estados, serão mostrados os seguintes valores: 0 = caixa não selecionada 1 = caixa selecionada 2 (ou qualquer valor >0) = caixa cheia semi selecionada (terceiro estado). Para a entrada de dados, este estado devolve o valor 2. -1 = caixa invisível, -2 = caixa não selecionada, não editável, -3 = caixa seleccionada, não editável, -4 = caixa semi selecionada, não editável Neste caso, igualmente aparece a propriedade Título, permitindo-lhe introduzir o título da caixa de seleção. A propriedade Invisível, quando está selecionada, permite ocultar a coluna no ambiente Aplicação. No ambiente Desenho, é possível mostrar ou ocultar as colunas invisíveis utilizando o menu contextual associado ao list box. (clique em uma coluna ou em um título de coluna): Tema de fundo e borde Este tema agrupa as propriedades relacionadas com as cores de fundo das células da coluna. Cor de fundo: permite estabelecer a cor de fundo da coluna. Por padrão o valor Automático se seleciona: a coluna utiliza a cor de fundo definido a nível do list box. Cor de fundo alterno: permite estabelecer uma cor de fundo diferente para as filas ímpares da coluna. Por padrão o valor Automático se seleciona: a coluna usa a cor de fundo alterno definido a nível do list box. Array de cores de fundo (list boxs de tipo array)/Cores de fundo (list box de tipo seleção): permite estabelecer uma cor de fundo personalizado para cada célula da coluna. Deve utilizar valores de cores RGB. Para os list box de tipo array, deve introduzir o nome de um array Inteiro longo. Cada elemento deste array corresponde a uma célula da coluna, pelo que o array deve ser do mesmo tamanho que o array associado a coluna. Pode utilizar as constantes do tema "DEFINIR CORES RVA". Se desejar que a célula herde a cor de fundo definido no nível superior (ver Herança), passe o valor -255 ao elemento de array correspondente. Para os list box de tipo seleção, deve introduzir uma expressão ou uma variável (à parte de um tipo de array). A expressão ou a variável se avalia para cada célula mostrada. Pode utilizar o editor de fórmulas para definir uma expressão. Para isso, faça clique no botão [...] que se mostra quando se seleciona a área. Pode utilizar as constantes do tema "DEFINIR CORES RVA". Tema texto Array de estilos (list box de tipo array) / Estilos (list box de tipo de seleção): permite aplicar um estilo de fonte personalizada a cada célula da coluna Para os listboxes de tipo array, deve introduzir o nome de um array de tipo Inteiro longo. Cada elemento deste array corresponde a uma célula da coluna, pelo que o array deve ter o mesmo tamanho que o array - 402 - associado a coluna. Para encher o array (utilizando um método), utilize as constantes do tema "Estilos de fonte". Pode agregar constantes para combinar estilos. Se deseja que a célula herde o estilo definido no nível superior (ver Herança), passe o valor -255 ao elemento do array correspondente. Para os listboxes de tipo seleção, deve escrever uma expressão ou uma variável (exceto um array). A expressão ou a variável é avaliada para cada célula mostrada. Pode utilizar o editor de fórmulas para definir uma expressão. Para isso, faça clique no botão [...] que se mostra quando se seleciona a área. Pode utilizar as constantes do tema "Estilos de fonte". Array cores de fonte (list box de tipo array)/Cor de fonte (list box de tipo seleção): permite aplicar uma cor de fonte personalizado a cada célula da coluna. Deve utilizar os valores de cores RGB. Para os list box de tipo array, deve introduzir o nome de um array de tipo Inteiro longo. Cada elemento deste array corresponde a uma célula da coluna, pelo que o array deve ser do mesmo tamanho que o array associado a coluna. Pode utilizar as constantes do tema "DEFINIR CORES RVA". Se deseja que a célula herde a cor de fonte definido no nível superior (ver Herança), passe o valor -255 ao elemento do array correspondente. Para os list box de tipo seleção, deve escrever uma expressão ou uma variável (exceto um array). A expressão ou a variável é avaliada para cada célula mostrada. Pode utilizar o editor de fórmulas para definir uma expressão. Para isso, faça clique no botão [...] que se mostra quando seleciona a área. Pode utilizar as constantes do tema "DEFINIR CORES RVA". - 403 - Propriedades específicas dos títulos de list box Nota preliminar: para poder acessar as propriedades dos cabeçalhos de um list box, deve selecionar a opção Mostrar cabeçalhos na Lista de propriedades do list box (ver Propriedades específicas dos list Box). Quando os cabeçalhos são mostrados, pode selecionar um cabeçalho de list box no editor de formulários fazendo clic nele quando o objeto list box esteja selecionado: Pode definir para cada título de coluna de list box propriedades padrão de texto; nesse caso, essas propriedades têm prioridade sobre as da coluna ou as da list box. Igualmente pode acessar a lista de propriedades, descritas a seguir. Tema Objetos Este tema contém as propriedades utilizadas para definir o título. Nome do objeto: nome do objeto de título. Nome da variável: nome da variável associada ao objeto de título. Esta variável (numérica) permite manejar por programação a ordem atual da coluna e a visualização da seta de ordem (ver a seção Gestão de objetos List Box no manual Linguagem 4D). Título: etiqueta que aparece no cabeçalho. Tema Imagem Este tema contém a propriedade que permite mostrar uma imagem no cabeçalho da coluna (opcional). Um ícone pode ser visualizado no cabeçalho junto ou no lugar do título da coluna, especialmente no caso de ordenamentos personalizados. Ícone: define a fonte da imagem a ser inserida no cabeçalho. Assim como para os botões de imagem de 4D, é possível utilizar uma imagem proveniente de uma variável, da biblioteca de imagens ou de um arquivo de recursos ou de uma arquivo. Nome/ID: permite designar a imagem a ser utilizada na fonte anteriormente definida. A informação a ser introduzida neste campo depende da fonte selecionada: nome (se a imagem é uma variável), número (se a imagem é da biblioteca de imagens ou de um arquivo de recursos) ou rota de acesso (se a imagem é de um arquivo de imagem); neste último caso, a rota deve ser relativa à pasta Resources do banco de dados (ver o parágrafo Referenciar automaticamente arquivos de imagem). Localização do ícone: posição do ícone no cabeçalho. É possível localizá-lo à Esquerda ou à Direita do cabeçalho. Efeito espelho (Windows): permite reservar a visualização do ícone em modo "direita a esquerda" (ver Efeito espelho (Windows)). Tema Ajuda Cada área de cabeçalho pode ter seu próprio Mensagens de ajuda. - 404 - Specific properties of List box footers List boxes can contain non-enterable "footers" displaying additional information. For data shown in table form, footers are usually used to display calculations such as totals or averages. Preliminary note: To be able to access footer properties for a list box, you must check the Display Footers option in the Property list of the list box (see List box specific properties). If footers are displayed, you can click to select one when the list box object is selected in the Form editor: For each List box column footer, you can set standard text properties: in this case, these properties take priority over those of the column or of the list box. You can also access specific properties which are described in this section. Objects Theme This theme includes properties for defining footers. Object Name and Variable Name: The footer area is a specific object with its own object name (that must be unique in the page) and an associated variable. By default, the variable name is empty and 4D uses dynamic variables. Variable Type: This menu sets the type of variable and updates the options of the Property List. Note that if you use a non-dynamic variable (when you name the variable), you must use the language for typing the variable. Variable Calculation: This option sets the type of calculation to be done in the footer area. There are several types of calculations available as well as the Custom option: Minimum, Maximum, Sum, Count, Average, Standard deviation(*), Variance(*) and Sum squares(*). These calculations are described in the “Automatic calculations” section below. When a calculation is selected, it is applied automatically to all the values found in the list box column. Note that the calculation does not take the shown/hidden state of list box rows into account. If you want to restrict a calculation to only visible rows, you must use a custom calculation. When an automatic calculation has been assigned to a footer areas, a "standard action" shield is then associated with it: Custom: When you select this option, no automatic calculations are performed by 4D and you must assign the value of the variable in this area by programming. Automatic calculations You can associate various automatic calculations with a footer area. The following table shows which calculations can be used according to the type of data found in each column and indicates the type automatically affected by 4D to the footer variable (if it is not typed by the code): - 405 - Numeric Text Date Time Boolean Picture Footer variable type Minimum Maximum Sum Count Average Standard deviation(*) Variance(*) Sum squares(*) X X X X X X X X X X X X X X X X X X X X X X X X X Same as column type Same as column type Same as column type Longint Real Real Real Real (*) Only for array type list boxes. Note: You cannot associate automatic calculations with column footers based on formulas. In this case, you must perform custom calculations. Help Theme Each footer area can have its own Help messages. - 406 - Criar e usar list box hierárquicas 4D v12 permite especificar e usar list box hierárquicos. Um list box hierárquico é um list box no qual o conteúdo da primeira coluna aparece em forma hierárquica. Este tipo de representação se adapta à apresentação de informação que inclui valores repetidos ou valores que dependem hierarquicamente (país, região ou cidade, etc.). Apenas os list box de tipo array podem ser hierárquicos Os list box hierárquicos constituem um modo particular de representar dados, mas não modificam a estrutura dos dados (arrays). Os list box hierárquicos se manejam da mesma maneira como os list box regulares. Para especificar um list box hierárquico, há três possibilidades diferentes: Configurar manualmente elementos hierárquicos utilizando a lista de propriedades no editor de formulários. Gerar visualmente a hierarquia utilizando o menu emergente de gestão dos list box, no editor de formulários. Utilize os comandos LISTBOX SET HIERARCHY e LISTBOX GET HIERARCHY, descritos no manual Linguagem de 4D. Esta seção explica como criar list box hierárquicos no editor de formulários de 4D e os fundamentos de seu funcionamento durante a execução. Para obter mais informação sobre a gestão programada dos list box hierárquicos (seleções, rupturas, utilização dos eventos formulário On Expand e On Collapse, etc...), consulte a seção Gestão de List Boxes Hierárquicas no manual Linguagem de 4D. Gerenciar a hierarquia com a lista de propriedades Pode ativar e configurar o modo hierárquico no tema "Hierarquia" da lista de propriedades. Para obter mais informação, consulte Propriedades específicas dos list Box. Manejar a hierarquia usando o menu contextual Ao clicar na área de colunas de um list box, o menu contextual do editor de formulários contém os comandos Criar hierarquia e Cancelar hierarquia. Criar hierarquia Quando selecionar ao menos uma coluna, além da primeira, de um objeto list box (do tipo array) no editor de formulários, o comando Criar hierarquia está disponível no menu contextual: Ao escolher esse comando, as seguintes ações são realizadas. A opção "List box hierárquico" está selecionada para o objeto na Lista das propriedades. As variáveis das colunas são usadas para definir a hierarquia. Elas substituem as variáveis já especificadas. As colunas selecionadas já não aparecem na list box (exceto pelo título da primeira). Exemplo: dado um list box cujas primeiras colunas contém País, Região, Cidade e População. Quando País, Região E Cidade estão selecionados (veja a imagem acima), se você escolher Criar hierarquia no menu contextual, uma hierarquia de três níveis é criada na primeira coluna, as colunas 2 e 3 são elimina das e a coluna População se converte na segunda: - 407 - Cancelar hierarquia Quando a primeira coluna está selecionada e foi definida como hierárquica, pode utilizar o comando Cancelar hierarquia. Ao escolher esse comando, são efetuadas as seguintes ações: A opção List box hierárquico são desmarcadas para o objeto, Os níveis hierárquicos de 2 a X são eliminados e são transformados em colunas agregadas ao list box. Como funciona Quando se abre pela primeira vez um formulário que contém um list box hierárquico, por padrão, todas as linhas se expanden. Uma linha de ruptura e um "nodo" hierárquico são agreagadas automaticamente ao list box quando os valores se repetem nos arrays. Por exemplo, imagine um list box que contém quatro arrays especificando as cidades, cada cidade é caracterizada pelo seu país, sua região, seu nome e seu número de habitantes: Se esse list box é mostrado em forma hierárquica (os primeiros três arrays incluídos na hierarquia), se obtêm: Os arrays não são ordenados antes da construção da hierarquia. Se, por exemplo, um array contém os dados - 408 - AAABBAACC, a hierarquia obtida será: > A > B > A > C Para expandir ou contrair um "nodo" hierárquico, clique nele. Se pressionar Alt+clique (Windows) ou Opção+clique (Mac OS) no nodo, todos seus sub elementos se expandem ou contrairão também. Gerenciar ordenações Em um list box em modo hierárquico, uma ordenação padrão (efetuada clicando no título de uma coluna do list box) sempre se constrói da seguinte forma: Em primeiro lugar, todos os níveis da coluna hierárquica (primeira coluna) são ordenados automaticamente em ordem ascendente. A ordenação é realizada em ordem ascendente ou descendente (segundo a ação do usuário) nos valores da coluna na que se clicou. Todas as colunas se sincronizam. Durante as ordenações posteriores das colunas não hierárquicas do list box, só o último nível da primeira coluna é ordenado. É possível modificar a ordenação desta coluna clicando em seu título. Dando como ejemplo o list box a seguir, no qual não é definida nenhuma ordenação específica: Se clicar em "População" para ordenar as populações de forma ascendente (ou alternativamente descendente), os dados aparecem assim: - 409 - Como para todos os list box, pode desativar o mecanismo de ordenação padrão desmarcando a propriedade "Ordenável" para o list box e manejando a ordenação por programação. Exibir datas e horas Quando os valores de tipo data ou hora são incluídos em um list box hierárquico, são mostrados em um formato padrão: As datas são mostradas no formato sistema curto (por exemplo, para 30 de maio de 2009, "05/30/09" no sistema americano e "30/05/09" no sistema europeu). As horas também são mostradas no formato sistema curto ("12:15:30" ou "12:15" em função dos parâmetros do sistema). - 410 - Utilizar ações estandarte Pode gerenciar o list box de tipo " seleção" mediante [#title id="964"/] aos botões ou menus. Por exemplo, agora é possível utilizar a ação estandarte Adicionar sub-registro para adicionar um novo registro a uma tabela por meio de um list box. Esta nova funcionalidade facilita a criação de interfaces modernas baseadas em list boxes. Agora pode usar três ações estandarte com listboxes: Adicionar sub-registro, Editar sub-registro e Eliminar subregistro. Adicionar sub-registro Um botão ou um elemento de menu associado a ação estandarte Adicionar sub-registro se ativa de forma automática quando há pelo menos um list box de tipo "seleção" no formulário. Se um formulário contém vários list box, a ação se aplica ao que tem o foco (ou por padrão, ao que esteja no primeiro plano). Quando o usuário faz clique no botão ou seleciona o elemento de menu, aparece um novo registro em branco no formulário detalhado definido para o list box (ver o parágrafo "Formulário Detalhado" em Tema List Box ). O usuário pode introduzir valores, logo validar o registro e aparece automaticamente um novo registro em branco. Isto continua até que o usuário faz clique no botão Cancelar. Se a fonte de dados para o list box é a seleção atual, todos os registros criados se mostram na lista. Editar sub-registro Um botão ou um elemento de menu associado a ação estandarte Eliminar Sub-registro se ativa automaticamente quando há pelo menos uma linha destacada em um list box de tipo "seleção". Quando várias linhas estão destacadas, a ação se aplica a última linha incluída na seleção. Quando o usuário faz clique no botão ou seleciona o elemento de menu, aparece o registro correspondente a linha de list box no formulário detalhado definido para o list box (ver o parágrafo "Formulário Detalhado" em Tema List Box ).). O usuário pode modificar os valores, validar ou cancelar o formulário para voltar ao list box. Eliminar sub-registro Um botão ou um elemento de menu associado a ação estandarte Eliminar sub-registro se ativa automaticamente quando há pelo menos uma linha destacada em um list box de tipo “seleção". Quando várias filas estão destacadas, a ação se aplica a todos os registros. Quando um usuário faz clique no botão ou seleciona o elemento de menu, aparece uma caixa de diálogo de confirmação para que o usuário possa confirmar ou cancelar a eliminação: - 411 - Visualização de campos em list boxes É possível associar às colunas de um list box os campos da tabela principal e/ou de diferentes tabelas. Para maiores informações sobre a tabela principal, consulte o parágrafo Propriedades específicas dos list Box. Entretanto, em todos os casos, o conteúdo do list box estará baseado na seleção atual (ou uma seleção temporal) da tabela principal do list box: Se você utilizar unicamente campos da tabela principal, o conteúdo das linhas do list box será simplesmente modelado sobre os da seleção da tabela principal. Se você utilizar campos que não pertençam à tabela principal, estas tabelas “estrangeiras” devem relacionar-se com a tabela principal por uma relação Muitos para Um, ou do contrário os campos “estrangeiros” serão mostrados vazios. As relações automáticas serão ativadas para cada registro da seleção da tabela principal e o list box mostrará os dados correspondentes nos campos relacionados. Se você utilizar relações manuais, deverá programar a ativação das relações com o fim de mostrar os dados no list box. Se uma inconsistência na definição do list box provocar a visualização das colunas vazias, aparecerá uma mensagem de erro em modo Aplicação em cada coluna incorreta. Utilizaremos um exemplo para explicar os diferentes casos. Dado um banco de dados com duas tabelas: [Empresas] e [Empregados]. A seleção atual da tabela [Empresas] é a seguinte: Nome Enciclopédia internacional Aventuras e viagens Viajar S.A. A seleção atual da tabela [Empregados] é a seguinte:: Nome Sobrenome Empresa Carla Packard Boring Travel Company Andrew Black Tiny Computers Vincent Laughter Boring Travel Company Oliver Dawson Boring Travel Company Sylvia Fairview Tiny Computers Robert Lanzel Big Encyclopedias Arnold Schmitt Boring Travel Company Elizabeth Jones Big Encyclopedias Yolanda Court Tiny Computers Pascal Pratt Tiny Computers O campo [Empresas]Nome está associado à primeira coluna de um list box. Os campos [Empregados]Nome e [Empregados]Sobrenome estão associados às duas colunas seguintes. A fonte de dados do list box é a seleção atual. Caso 1: as duas tabelas estão relacionadas por uma relação automática - 412 - 1) A tabela principal do list box é [Empregados]. O list box mostra a seleção atual da tabela [Empregados] e ativa a relação automática a fim de mostrar o nome da empresa para cada empregado: 2) A tabela principal escolhida para o list box é [Empresas]. O list box mostra a seleção atual da tabela [Empresas]. Como só existem três registros nesta seleção, só são mostradas três linhas no list box. As colunas dos campos [Empregados]Nome e [Empregados]Sobrenome estão vazias: Caso 2: as duas tabelas não estão relacionadas (ou estão relacionadas utilizando uma relação manual) 1) A tabela principal do list box é [Empregados]. O list box mostra a seleção atual da tabela [Empregados]. A coluna do campo [Empresa]Nome está vazia: - 413 - 2) A tabela principal ecolhida para o list box é [Empresas]. O list box mostra a seleção atual da tabela [Empresas]. Como só há três registros nesta seleção, só são mostradas três linhas no list box. As colunas dos campos [Empregados]Nome e [Empregados]Sobrenome estão vazias: Naturalmente, é possível administrar por programação as seleções das diferentes tabelas e desta forma mostrar as colunas associadas aos campos que não pertenecem à tabela principal. - 414 - Visualização do resultado de uma petição SQL em um list box Visualização do resultado de uma petição SQL em um list box É possível por diretamente o resultado de uma petição SQL em um list box de tipo array. Esta função oferece um meio rápido de visualizar o resultado de petições SQL. Só podem ser utilizadas as petições de tipo SELECT. Este mecanismo não pode ser utilizado com uma base SQL externa. Isso funciona de acordo com os seguintes princípios: Crie o list box que receberá os resultados da petição. A fonte de dados do lsit box deve ser Arrays. Execute a petição SQL de tipo SELECT e atribua o resultado à variável associada ao list box. É possível utilizar as palavras chaves Begin SQL/End SQL (ver o manual de Linguagem 4D). Quando o conteúdo de um list box provém de uma petição SQL, as colunas não podem ser ordenadas ou modificadas pelo usuário. Cada nova execução de uma petição SELECT com o list box a reiniciação das colunas (não é possível preencher o mesmo list box progressivamente utilizando várias petições SELECT). Recomenda-se dar ao list box o mesmo número de colunas que as que terá no resultado de petição SQL. Se o número de colunas do list box é inferior ao necessário para a petição SELECT, as colunas são adicionadas automaticamente. Se o número de colunas do list box é superior ao necessário para a petição SELECT,as colunas desnecessárias são ocultas. Nota: As colunas adicionadas automaticamente estão relacionadas com as Variáveis Dinâmicas de tipo array. Esses arrays temporários permanecem enquanto o formulário existir. Uma variável temporária é criada do mesmo modo para cada título. Quando se chama o comando GET LISTBOX ARRAYS, o parâmetro arrVarCols contém ponteiros (apontadores) aos arrays temporários e o parâmetro arrVarTitulos contém os ponteiros às variáveis de títulos temporários. Se uma coluna adicionada é, por exemplo, a quinta coluna, seu nome é sql_column5 e seu título é sql_header5. Em modo interpretado, os arrays existentes utilizados pelo list box podem ser redigitados automaticamente de acordo com os dados enviados pela petição SQL. Exemplo Queremos recuperar todos os campos da tabela PESSOAS e localizar seu conteúdo no list box cujo nome de variável é vlistbox. No método de objeto de um botão (por exemplo), é suficiente escrever: Begin SQL SELECT * FROM PEOPLE INTO <<vlistbox>> End SQL - 415 - Subformulários e widgets Visão Geral Subformulário lista Subformulários em modo página - 416 - Visão Geral Um subformulário é um formulário incluído em outro formulário. Há dois tipos principais de subformulários: os Subformulário lista, geralmente destinados a introduzir, visualizar e modificar dados provenientes de outras tabelas, os Subformulários em modo página, permitem utilizar objetos de interface sofisticada e dedicada, como por exemplo os widgets 4D. Cada tipo de subformulário dispõe de mecanismos e de propriedades particulares. Terminologia Com o objetivo de definir claramente os conceitos implementados com os subformulários, aqui estão algumas definições dos termos usados: Subformulario: formulário destinado a ser incluído em outro formulário, chamado formulário pai. Formulário pai: formulário que contém um ou mais subformulário(s). Contenedor de subformulário: objeto incluído no formulário pai, mostrando uma instância do subformulário. Instância de subformulário: a representação de un subformulário no formulário pai. Este conceito é importante porque é possível mostrar várias instâncias de um mesmo subformulário num formulário pai. Formulário listado: instância de subformulário en lista. Formulário detalhado: formulário de entrada em página associado a um subformulário em lista acessível com duplo clique na lista. Criar e definir um subformulário Se especifica el tipo de formulario seleccionando o no la opción Subformulario lista en el tema "Subformulario" de la lista de Propiedades. La selección o deselección de esta opción provoca la actualización de la Lista de propiedades para que corresponda con el tipo de subformulario elegido. É possível adicionar um subformulário a um formulário de três formas: No assistente de criação de formulários, utilizando a página Subformulário nas opções Avançadas (ver Criar um formulário com o assistente de formulário) No editor de formulários, utilizando a ferramenta Subformulário da barra de objetos, No editor de formulários, arrastando e soltando desde a Página Formulários do Explorador. Nota: um objeto do tipo subformulário (em página) também é criado quando se adiciona um objeto Widget da biblioteca de objetos pré-configurados (ver Usar a biblioteca pré-configurada). É possível combinar estas diferentes técnicas de acordo com suas necessidades. Widgets Os widgets 4D são objetos compostos predefinidos. Utilizáveis com ou sem programação, os widgets dão acesso às funcionalidades padrão e são muito simples de implementar. Os widgets disponíveis em 4D são os seguintes: MissingRef: área de pesquisa de aparência padrão DatePicker: selecionador de data. TimePicker: selecionador de hora. Os widgets 4D são subformulários de tipo página com funções específicas. Pode agrega-los a seus formulários utilizando a ferramenta de criação de subformulários (ver seção anterior) ou utilizando a biblioteca de objetos integrada de 4D (ver Usar a biblioteca pré-configurada). O uso de widgets é descrito em detalhe em um outro manual, 4D Widgets - 417 - Subformulário lista Um subformulário lista é um formulário de outra tabela que é mostrado em um formulário de entrada. Um subformulário permite introduzir, ver e modificar dados em outras tabelas. Os subformulários geralmente são utilizados em bancos de dados nas quais foram estabelecidas relações Um para Muitos. Um subformulário lista mostra os registros da tabela Muitos relacionada por uma relação automática de tipo Um a Muitos. É possível ter vários subformulários de diferentes tabelas no mesmo formulário. No entanto, não é possível localizar dois formulários que pertençam à mesma tabela na mesma página do formulário. Por exemplo, um banco de dados de gestão de contatos pode utilizar um subformulário para mostrar todos os números telefônicos de um contato particular. Ainda que os números telefônicos apareçam na tela Contatos, a informação é salva, na verdade, em uma tabela relacionada. Utilizando uma relação Um para Muitos, este desenho de banco de dados facilita o armazenamento de um número ilimitado de números telefônicos por contato. As relações automáticas permitem a entrada de dados diretamente na tabela Muitos relacionada sem programação. Ainda que os subformulários geralmente se associem a tabelas Muitos, um subformulário pode mostrar os registros de qualquer outra tabela do banco de dados. É possível criar um subformulário utilizando o assistente de criação de formulários durante a criação de um novo formulário, ou ao adicionar um novo subformulário ao formulário existente utilizando o editor de formulários. Deve-se criar de antemão o formulário listado que você quer utilizar como subformulário. Os subformulários podem ser utilizados para a entrada de dados de duas formas: o usuário pode introduzir dados diretamente no subformulário ou introduzí-los em um formulário de entrada associado. Nesta configuração, o formulário utilizado como subformulário é chamado formulário listado. O formulário de entrada é chamado formulário detalhado. - 418 - É possível permitir ao usuário introduzir dados no formulário detalhado e/ou no formulário listado: Criar um subformulário lista Para definir um formulário lista, deve criar e configurar o subformulário a utilizar num formulário pai. Para mais informação sobre os formulários lista, consulte o capítulo Formulários de saída e relatórios. No formulário pai, crie um objeto de tipo subformulário utilizando a ferramenta Subformulário da barra de objetos (variação do último botão). Nota: pode igualmente efetuar um arrastar e soltar desde a Página Formulários do Explorador. Na Lista de propriedades (tema “Subformulário”), tenha certeza de selecionar a opção Subformulário lista e selecione a tabela fonte no menu Fonte assim como também o Formulário listado a utilizar. No formulário pai, pode redimensionar e reposicionar o conteúdo do subformulário como queira. - 419 - Propriedades de subformulários lista É possível definir várias propriedades especificas relativas aos subformulários. Estas propriedades se referem à largura do subformulário como também às ações autorizadas aos usuários (modos de seleção e entrada). Nome de Variável e Tipode Variável Estas propriedades são destinadas principalmente ao uso com os subformulários em página. Consulte a seção Subformulários em modo página. Fonte Essa propriedade permite definir o tipo de fonte para o subformulário. Para os subformulários lista, escolha a tabela a qual pertence o subformulário. Associar um formulário detalhado a um subformulário Essa opção permite associar um formulário detalhado a um subformulário lista. O formulário detalhado pode ser utilizado para introduzir ou visualizar subregistros. Geralmente contém mais informação que o subformulário. - 420 - Naturalmente, o formulário detalhado deve pertencer à mesma tabela que o subformulário. Geralmente você utiliza um formulário de saída como formulário listado e um formulário de entrada como formulário detalhado. Se você não especifica o formulário a ser utilizado para a página de entrada, 4D utiliza automaticamente o formato de entrada por padrão da tabela. Dependendo da configuração do subformulário, o usuário pode mostrar o formulário detalhado fazendo um clique duplo em um subregistro ou utilizando os comandos para adicionar e modificar os subregistros. Nota: Pode associar um formulário detalhado a um subformulário lista pressionando a tecla Shifte arrastando o formulário detalhado desde o Explorador ao subformulário. Largura automática É possível redimensionar a área do subformulário no formulário como preferir, assim como qualquer outro objeto do formulário. Além disso, é possível deixar que 4D defina automaticamente a largura do subformulário de maneira que sejam mostrados todos os campos que ele contém. Para fazer isso, marque a opção Largura automática nas propriedades do objeto. Nota: Quando você cria uma área de subformulário arrastando um formulário diretamente do Explorador, 4D define automaticamente a largura do subformulário. Modo de seleção Os subformulários podem ter três modos de seleção: Nenhum, Simples e Múltiplo. Nenhum Os registros não podem ser selecionados se este modo está selecionado. Um clique na lista não tem efeito, a menos que a opção Editável em lista esteja selecionada. As teclas de navegação só fazem com que a lista se mova; não se gera o evento de formulário On Selection Change. Simples Neste modo só pode ser selecionado um registro por vez. Um clique em um registro o seleciona e o converte no registro atual. A combinação Ctrl+clique (Windows) ou Comando+clique (Mac OS) em um registro altera seu estado (entre selecionado ou não). As teclas de seta Para cima e Para Baixo selecionam o registro anterior/seguinte da lista. As outras teclas de navegação movem a lista. O evento de formulário On Selection Change é gerado cada vez que o registro atual se altera. Múltiplo Vários registros podem ser selecionados simultaneamente neste modo. Os subregistros selecionados são devolvidos pelo comando GET HIGHLIGHTED RECORDS. Ao se clicar no registro, o registro atual é selecionado porém não modificado. A combinação de teclas Ctrl+clique (Windows) ou Comando+clique (Mac OS) em um registro altera seu estado (selecionado ou não). As combinações Ctrl+clique (Windows) ou Comando+clique (Mac OS) e Shift+clique lhe permitem fazer seleções múltiplas. As teclas de seta Acima e para Abaixo selecionam o registro anterior/seguinte da lista. As outras teclas de navegação movem a lista. O evento de formulário On Selection Change é gerado cada vez que o registro atual se altera. As outras teclas de navegação rolam a lista. O evento de formulário On Selection Change é gerado cada vez que muda o registro selecionado. Editável em lista Quando um subformulário é Editável em lista, o usuário pode modificar os dados dos subregistros diretamente na lista, sem ter que utilizar o formulário detalhado associado. Para fazer isso, simplesmente clique duas vezes no campo a se modificar para passar ao modo edição (assegure-se de deixa tempo suficiente entre os dois cliques para não gerar um clique duplo). Por padrão, este modo é ativado para todos os subformulários em lista. - 421 - Quando esta opção não estiver selecionada, a entrada passa obrigatoriamente pelo formulário detalhado associado. Ação em caso de clique duplo É possível definir os parâmetros de funcionamento dos subformulários em resposta a um clique duplo do usuário. Em bancos de dados criados com uma versão anterior de 4D, é possível definir a resposta em caso de clique duplo em uma linha vazia (opção de compatibilidade). Clique duplo em uma fila: ação a se realizar em caso de um clique duplo em um registro de subformulário. As seguintes opções estão disponíveis: Não fazer nada: ignorar o clique duplo. Modificar registro: alterar o registro de subformulário para modo edição. A modificação é realizada diretamente na lista se a opção “Editável em lista” está selecionada. De outra forma, se realizará em modo página, no formulário detalhado associado ao subformulário. Mostrar registro: mostra os dados do registro em modo página no formulário detalhado associado com o subformulário (somente leitura). Clique duplo em uma fila vazia: ação a realizar em caso de um clique duplo em uma linha vazia de um subformulário. As opções a seguir estão disponíveis: Não fazer nada: ignorar o clique duplo. Adicionar registro: criar um novo registro no subformulário e passar para o modo edição. O registro será criado diretamente na lista se a opção “Editável em lista” estiver selecionada. Do contrário, será criado em modo página, no formulário detalhado associado com o subformulário. Autorizar a eliminação Por padrão, o usuário pode apagar subregistros em um subformulário listado com a ajuda da tecla Del ou Backspace. Como esta possibilidade pode afetar o funcionamento padrão da interface de algumas aplicações (baseada por exemplo nos botões), é possível evitá-la utilizando a opção Autorizar a eliminação. Quando esta opção não estiver selecionada, o usuário não pode apagar os subregistros utilizando as teclas de supressão do teclado. Acessível O objeto subformulário pode ter a propriedade Acessível (tema “Entrada”). Quando um subformulário tem o foco, o usuário pode controlá-lo com a ajuda das teclas de navegação, utilizando o comando de menu Selecionar tudo (se a seleção tiver múltiplas linhas), etc. Quando um subformulário recebe ou perde o foco, o método de formulário do formulário principal é chamado com os eventos On getting focus ou On losing focus. Neste caso, o comando OBJECT Get pointer (ou o comando Focus object) retorna um ponteiro à tabela do subformulário. Como para todos os objetos acessíveis, a propriedade Ocultar retângulo de foco pode ser utilizada para não mostrar - 422 - o foco graficamente. Impressão Como podem existir vários registros que a área de subformulário não pode manter, 4D oferece 3 opções (tema “Impressão”) para controlar a impressão dos registros de subformulários: Variável (opção padrão) Se você selecionar esta opção, 4D estende ou reduz a área do subformulário para imprimir todos os subregistros. Fixo (truncamento) Se você selecionar esta opção, 4D só imprime os subregistros que aparecem na área do subformulário. O formulário só se imprime uma vez e se ignoram os registros não impressos. Fixo (múltiplos registros) Se você selecionar esta opção, o tamanho inicial da área do subformulário se conserva, mas 4D imprime o formulário várias vezes com a finalidade de imprimir todos os registros. Notas Não é possível colocar objetos aos lados de um subformulário de tamanho variável. Os objetos localizados aos lados do subformulário se repetirão para cada linha do subformulário. Não é possível imprimir mais de um subformulário da mesma tabela na mesma página do formulário. Para maiores informações sobre a impressão de objetos de tamanho variável, consulte o parágrafo Imprimir áreas de tamanho variável. Adicionar botões para a gestão de subregistros É possível adicionar os botões personalizados para controlar a entrada de dados em um subformulário. Qualquer tipo de botão: padrão, invertido ou invisível, pode ser utilizado. É possível definir a ação destes botões por programação (ver a seção Entrada de Dados) ou através das Ações padrões. 4D oferece três ações padrão para responder as necessidades básicas para a gestão de subregistros: Editar subregistro, Eliminar subregistro e Adicionar subregistro. Quando o formulário inclui vários subformulários, a ação se aplica ao formulário que tem o foco. Para maiores informações sobre a adição destes botões e suas ações automáticas associadas, consulte o parágrafoBotões e Ações padrões. - 423 - Subformulários em modo página Neste caso, o subformulário pode mostrar os dados do subregistro atual ou qualquer tipo de valor pertinente em função do contexto (variáveis, imagens, etc.). Uma das principais vantagens de se usar subformulários página é que incluem funcionalidades avançadas e podem interatuar diretamente com o formulário pai (widgets). Os subformulários página têm suas próprias propriedades e eventos específicos, os quais podem ser admiistrados por programação. Nota: é possível gerar componentes com funcionalidades adicionais através de subformulários. Para mais informações, consulte Desenvolver e instalar componentes 4D. Criar subformulários em modo página Para ativar o modo página, simplesmente deselecione Subformulário lista na Lista de propriedades para o objeto subformulário. Neste caso, as propriedades relativas a configuração dos subformulários em lista (Modo de seleção, Clique duplo em linha, etc.) não são mais mostrados: O subformulário em página utiliza formulário de entrada designado pela propriedade “formulário detalhado”. Diferente de um subformulário em modo lista, o formulário utilizado pode vir da mesma tabela que o formulário pai. Também é possível utilizar um formulário projeto. Em execução, um subformulário em modo página tem as mesmas características de visualização padrão de um formulário de entrada. Os mecanismos dos formulários de saída (relacionados particularmente com a gestão de marcadores) não são ativados. Propriedades dos subformulários em modo página Os subformulários em página se manejan utilizando as propriedades específicas que facilitam sua integração e interação com o formulário pai. Nome variável Uma variável pode estar associadas a um objeto subformulário. Por padrão esta variável se chama "Subformulário" como o próprio objeto. Tem um tipo (ver o próximo parágrafo) e pode ser representado como uma variável padrão no formulário pai. Sua modificação dispara os eventos de formulário e permite sincronizar os valores do formulário pai e do subformulário: O evento formulário On Data Change permite indicar ao contenedor do subformulário que o valor da variável foi modificada no subformulário. O evento formulário On bound variable change indica ao subformulário (método formulário do formulário) que a variável foi modificada no formulário pai. - 424 - Tipo variável Utilize esta propriedade para definir o tipo da variável associada ao objeto subformulário. Por padrão, se utiliza o tipo Alfa. O tipo da variável determina a natureza dos valores trocados entre o formulário pai e o subformulário através da variável associada. Pode definir o tipo "Nenhum" e neste caso, 4D digita automaticamente a variável durante a execução (ver "Variáveis dinâmicas" na seção Variáveis do manual Linguagem). Fonte Esta propriedade permite selecionar diferentes tipos de fontes: <Nenhum>: selecione este tipo de fonte se deseja utilizar um formulário projeto ou um formulário de componente como subformulário. Estes subformulários se utilizam em modo página unicamente: a opção "Subformulário lista" debe ser desmarcado para que funcionem. Para que um formulário de componente apareça na lista "formulário detalhado" deve ter sido publicado no componente (ver o parágrafo Publicar um subformulário (component)). Nome de tabela: escolha esse tipo tipo de fonte se deseja utilizar um formulário da tabela. Método objeto e eventos Um objeto subformulário pode ter um método objeto que permita controlar seu funcionamento, em particular, quando se desencadeiam os eventos. Para obter uma descrição dos eventos administrados pelo subformulário em página, consulte a documentação do comando Form event. Lembre que a interação entre o conteúdo do objeto subformulário e o formulário pai deve ser manejada através de mecanismos específicos (ver o parágrafo Programação avançada entre formulários). Gerenciar a variável associada A variável associada ao subformulário permite vincular os dois contextos (formulário e subformulário) para dar os toques finais a interfaces sofisticadas. Por exemplo, imagine um subformulário que representa un relógio dinâmico, inserido em um formulário pai que contém uma variável editável de tipo hora: Ambos objetos (variável hora e contenedor do subformulário) têm o mesmo nome de variável. Neste caso, ao abrir o formulário pai, 4D sincroniza ambos os valores de forma automática. Se o valor da variável se define em vários lugares, 4D utiliza o valor que foi carregado por último. Se aplica a seguinte ordem de carga: 1-Métodos objeto do subformulário 2-Método formulário do subformulário 3-Métodos objeto do formulário pai 4-Método formulário del formulário pai Quando se executa o formulário pai, a sincronização das variáveis deve ser efetuada pelo desenvolvedor utilizando os eventos formulário adequados. Dois tipos de interações podem ocorrer: do formulário ao subformulário e vice-versa. Atualizar conteúdo de subformulários Caso 1: O valor da variável do formulário pai se modifica e esta modificação deve repercutir no subformulário. Em nosso exemplo, a hora ParisTime passa a 12:15:00, seja porque o usuário introduziu esta hora ou porque foi atualizada dinamicamente (através do comando Current time por exemplo). Neste caso, deve utilizar o evento formulário On bound variable change. Este evento deve ser selecionado nas propriedades do subformulário, se gera no método de formulário dol subformulário. - 425 - Se gera evento de formulário On bound variable change: Tão logo quanto se atribua um valor à variável do formulário pai, mesmo se o mesmo valor é reatribuído, Se o subformulário pertence à página de formulário atual ou à página 0. Lembre que, como no exemplo anterior, é preferível utilizar o comando OBJECT Get pointer que devolve um ponteiro ao contenedor subformulário ao invés de sua variável, já que é possível inserir vários subformulários no mesmo formulário pai (por exemplo, uma janela que mostra diferentes zonas horárias tem vários relógios). Neste caso, só um ponteiro permite saber que contenedor de subformulário está na origen do evento. Atualizar conteúdos formulário pai Caso 2: O conteúdo do subformulário é modificado e esta modificação deve ser passada no formulário pai. Em nosso exemplo, imagine que a interface do subformulário permite ao usuário mover "manualmente" os ponteiros do relógio. Neste caso, desde o subformulário, deve atribuir o valor do objeto à variável do contenedor do subformulário pai. Como no exemplo anterior, recomendamos que utilize o comando OBJECT Get pointer com o seletor Object subform container que devolve um ponteiro ao contenedor do subformulário. Atribuir o valor da variável gera o evento formulário On Data Change no método do objeto contenedor do subformulário pai, o que permite realizar qualquier tipo de ação. O evento deve ser selecionado nas propriedades do contenedor de subformulário. Nota: se mover "manualmente" os ponteiros do relógio, isso também gera o evento formulário On Data Change no método do objeto da variável valorReloj no subformulário. Programação avançada entre formulários A comunicação entre o formulário pai e as instâncias dos subformulários pode necessitar mais do que o intercâmbio de um valor através da variável associada. Na verdade, é possível que deseje atualizar as variáveis nos subformulários em função das ações efetuadas no formulário pai e vice-versa. Se usarmos o exemplo anterior do subformulário de tipo "relógio dinâmico", poderíamos querer definir uma ou mais horas de alarme para cada relógio. - 426 - 4D implementou os seguintes mecanismos para responder a estas necessidades: Uso do parâmetro "subformulário" com o comando OBJECT Get name para especificar o objeto de subformulário e o comando OBJECT Get pointer. Chamada do objeto contenedor desde o subformulário utilizando o comando CALL SUBFORM CONTAINER, Execução de un método no contexto do subformulário através do comando EXECUTE METHOD IN SUBFORM. Comandos Object get pointer e Object get name Além do seletor Object subform container, o comando OBJECT Get pointer aceita um parâmetro que indica em qual subformulário buscar o objeto cujo nome é especificado no segundo parâmetro. Esta sintaxe só pode ser utilizada quando se passa o seletor Object named. Por exemplo, a seguinte ordem: $ptr:=OBJECT Get pointer(Object named;"MeuBotao";"MeuSubForm") ... recupera um ponteiro à variável "MeuBotao" que se encontra no objeto subformulário "MeuSubForm". Esta sintaxe permite acessar desde o formulário pai a todo objeto que se encontra num subformulário. Também considere o comando OBJECT Get name que permite recuperar o nome do objeto que tem o foco. Comando CALL SUBFORM CONTAINER O comando CALL SUBFORM CONTAINER permite a uma instância de subformulário enviar um evento ao objeto contenedor do subformulário, o qual pode ser processado no contexto do formulário pai. O evento é recibido no método do objeto contenedor. Pode estar na origem de qualquer evento detectado pelo subformulário (clique, arrastar e soltar, etc.) O código do evento é livre (por exemplo, 20 000 ou -100). Pode utilizar um código que corresponde a um evento existente (por exemplo, 3 para On Validate) ou utilizar um código personalizado. No primeiro caso, só se pode utilizar os eventos que foram selecionados na lista de propriedades para os contenedores de subformulário. No segundo caso, o código não deve corresponder a qualquer evento formulário existente. É recomendado usar um valor negativo para ter certeza de que este código não será utilizado por 4D en futuras versões. Para obter mais informação, consulte a descrição do comando CALL SUBFORM CONTAINER. Comando EXECUTE METHOD IN SUBFORM O comando EXECUTE METHOD IN SUBFORM permite a un formulário ou a um de seus objetos solicitar a execução de um método no contexto da instância do subformulário, o que lhe dá acesso às variáveis, objetos, etc. del subfformulário. Este método também pode receber parâmetros. Este mecanismo é ilustrado no seguinte diagrama: Para obter mais informação, consulte a descrição do comando EXECUTE METHOD IN SUBFORM. Comando GOTO OBJECT O comando GOTO AREA busca o objeto de destino no formulário pai, mesmo se for executado desde um subformulário. - 427 - Formulários de saída e relatórios Visão Geral Utilizar os formulários de saída Formulários de relatórios impressão Usar linhas de controle de saída Um exemplo de relatório Imprimir áreas de tamanho variável Criar documentos de fusão de correio Criar etiquetas - 428 - Visão Geral Os formulários de saída são utilizados com dois objetivos: listar registros em tela e imprimir relatórios. Em muitos casos, é possível criar um relatório muito mais rápido utilizando o editor de relatórios rápidos. Além disso, o editor de formulários lhe oferece um maior controle sobre a aparência final do seu relatório. Para maiores informações, consulte o capítulo Relatórios rápidos. Nota: Somente os formulários de tabela podem ser utilizados como formulários de saída. Os formulários de projeto estão desenhados para serem utilizados como formulários detalhados. Formulários de saída para listar registros Um formulário de saída contém várias áreas, com diferentes propriedades: Área de cabeçalho: contém o título do relatório, os títulos das colunas e os botões ou objetos de controle do formulário, Área de detalhe: contém o corpo do relatório, Área de pé de página: contém botões ou cálculos globais baseados em todos os registros do relatório, Área de ruptura: contém o texto ou as imagens que aparecem depois da lista de registros e os cálculos globais baseados em todos os registros ou nos sub-grupos de registros. Quando se cria um formulário listado com a ajuda do assistente de criação de formulários, o assistente cria automaticamente estas áreas. Localiza o título do formulário (nome da tabela), os nomes dos campos da mesma forma que os botões de controle na área do cabeçalho1. Os campos que você selecionar são localizados em uma linha na área de detalhe. Uma área de quebra pequena é criada, mas o assistente de criação de formulários não coloca nada nela. Quando se abre o formulário no editor de formulários, é possível modificar o tamanho de cada uma destas áreas, modificar o conteúdo das áreas, adicionar objetos à área de quebra e criar áreas adicionais para cálculos globais. As áreas do formulário que funcionam como Cabeçalho, Detalhe, Quebra e Pé de página são controladas por linhas de controle de saída. É possível alterar o tamanho de cada área, arrastando as linhas de controle de saída verticalmente. A imagem a seguir mostra um formulário de saída criado utilizando a página padrão do assistente de criação de formulários (modelo XP). Nota: É possível escolher entre ocultar/exibir os marcadores e suas etiquetas no editor de formulários. Para maiores informações, consulte “Exibir/Ocultar elementos no editor de formulários em Editor de formulários. As linhas horizontais dividem o relatório em áreas de cabeçalho, de detalhe, de quebra e de pé de página. Mesmo assim, a área entre as linhas de cabeçalho e detalhe é a área de detalhe e a área de pé de página se estende desde a parte superior da linha de quebra (etiqueta B0) até a linha de pé de página. Os tamanhos de cada área são ajustados arrastando verticalmente os marcadores de cabeçalho, detalhe, quebra, ou pé de página ou suas etiquetas. Quando o formulário é utilizado, ele é visto desta forma: - 429 - A área de detalhe é expandida dinamicamente quando a janela é redimensionada, enquanto que as áreas de cabeçalho e pé de página são de tamanho fixo. Em um formulário que lista registros na tela, as áreas de cabeçalho e pé de página podem incluir objetos que podem ser clicados e objetos não editáveis como botões, botões de opção, listas hierárquicas, etc. Para maiores informações, consulte o parágrafo a seguir que faz referência às linhas de controle de saída. Em um relatório impresso, uma área de cabeçalho contém geralmente a data, hora, um título atual e os títulos das colunas. Os registros aparecem na área detalhe. Um total calculado poderia aparecer na área de quebra. A área de pé de página contém o número de página. A imagem a seguir identifica as diferentes áreas que aparecem em um relatório impresso. Um relatório pode ter áreas de quebra adicionais para subtotais e outros cálculos, também poderia ter áreas de cabeçalho adicionais que apareçam no corpo do relatório. As áreas de cabeçalho adicionais são utilizadas para identificar subgrupos. Para ver um exemplo de um relatório com várias áreas de cabeçalho e quebra, consulte a seção “Criar linhas de controle adicionais” Usar linhas de controle de saída. - 430 - Utilizar os formulários de saída Funções normais Um formulário de saída lista os registros. Ainda que todos os formulários possam ser usados como formulários de saída, a maioria de formulários de saída tem as seguintes características: Cada linha é um registro. Cada coluna é um campo ou uma variável Cada coluna tem uma etiqueta na parte superior da janela. O tamanho das colunas pode ser alterado utilizando os separadores entre cada área de título. O cabeçalho e/ou o pé de página de um formulário podem ter botões, menus suspensos, etc. Movimentar-se na lista Um formulário de saída tem as barras de rolagem horizontal e vertical padrão. É possível navegar na lista de registros clicando em uma das setas, na barra de rolagem vertical ou arrastando o quadro de rolagem. Também é possível usar as teclas Page Up e Page Down (para se movimentar pela lista de registros por telas) ou as teclas Home e End (para ir diretamente ao início ou ao final da lista). Se o formulário de saída tem mais campos dos que possam ser exibidos na tela, é possível movimentar-se horizontalmente utilizando a barra de rolagem localizada na parte inferior da janela. Redimensionar as colunas É possível redimensionar as colunas dos formulários de saída (exceto se esta possibilidade tiver sido eliminada no editor de formulários). Para fazer isto, coloque o cursor sobre o título da coluna; o cursor se transforma para indicar que a coluna é redimensionável. Depois de clicar e mover a esquina da coluna para reduzi-la ou aumentá-la: Selecionar registros Se seleciona um registro clicando sobre ele. É possível selecionar um, dois ou mais registros adjacentes ou vários registros não adjacentes. Depois de efetuar uma seleção, é possível realizar operações como exibi-los como um subconjunto ou excluí-los Para selecionar um registro, clique em um registro do formulário de saída ou pressione as teclas up ou down. O primeiro registro que você clicou é selecionado. Se você utilizar as setas direcionais do teclado, o primeiro e último registro da lista são selecionados. Para selecionar vários registros adjacentes, clique no primeiro registro a ser selecionado, mantenha pressionada a tecla Shift e clique no último registro a ser selecionado (ou pressione as teclas up ou down). São selecionados todos os registros entre os dois que você selecionou. Para selecionar vários registro não adjacentes, clique no primeiro registro a ser selecionado, mantenha pressionada a tecla Ctrl (Windows) ou Comando (Mac) e clique em outro registro. Os registros que forem clicados serão selecionados. Para selecionar todos os registros da seleção atual no formulário de saída, selecione Selecionar tudo no menu Edição ou use o atalho padrão Ctrl + A (Windows) ou Comando + A (Mac OS). Todos os registros exibidos no formulário de saída são selecionados. Para selecionar todos os registros da tabela selecione Exibir todos no menu Registros. Adicionar e modificar registros É possível adicionar e modificar registros diretamente em um formulário de saída. O formulário de saída é usado especialmente para modificar um pequeno grupo de registros adjacentes já que na janela aparecem vários registros simultaneamente. É possível introduzir ou modificar dados em campos da tabela atual unicamente. Não é possível introduzir ou modificar dados em variáveis, campos de outras tabelas ou sub-formulários. - 431 - No formulário de saída, é possível: selecionar e editar campos clicando neles (você deve fazer um clique duplo se o registro não tiver sido selecionado), Passar de um campo a outro e de um registro a outro, com as teclas Tab, Enter ou Return Adicionar um novo registro, utilizando o comando Registros > Novo registro As alterações são salvas ao pressionar as teclas Tab, Enter ou Retorno, ou clicando em outro campo. Gestão de linhas vazias Em modo listado, 4D exibe, se necessário, linhas vazias debaixo dos últimos registros visualizados, de modo que se encha a janela completamente: Quando se mostra a janela, o evento de formulário On Display Detail é gerado para cada linha vazia da lista. Neste caso, não existe um registro atual:Record number retorna -1 e Selected record number não retorna um valor significativo. O comandoDisplayed line number permite conhecer o número de linha que está sendo exibido atualmente. Personalizar formulários de saída Um formulário listado criado utilizando o assistente de criação de formulários funciona bem para exibir uma lista de registros. Se for necessário, é possível fazer a seguintes modificações: substituir os campos por variáveis e adicionar métodos, utilizar as opções de interface, aparência, atributos de fonte, borda ou cor para modificar objetos individuais no formulário, alterar a largura dos campos e das variáveis, mover as linhas de controle de saída, adicionar uma imagem personalizada na área de cabeçalho, adicionar as variáveis nas áreas de cabeçalho ou pé de página. A imagem a seguir é um formulário de saída personalizado utilizado para o controle de pessoal: - 432 - Os botões de controle foram localizados na área de pé de página e uma imagem personalizada foi localizada na área de cabeçalho. A área de cabeçalho também inclui uma lista suspensa que lhe permite selecionar a empresa cujos empregados você deseja visualizar, Assim se vê o desenho deste formulário no editor de métodos: As linhas de controle podem se mover, por exemplo, para adaptar o tamanho da imagem inserida na área de cabeçalho. Exibir várias linhas por registro É possível que você queira exibir campos em mais de uma linha. 4D permite utilizar várias linhas para cada registro. Para isso, basta aumentar o tamanho de área de detalhe do formulário de modo que seja possível ter várias linhas na área. Quando se utiliza várias linhas para um só registro, os elementos gráficos como linhas e caixas podem ser úteis para separar campos e registros. Este é um exemplo de um formulário de saída de um banco de dados de gestão de mensagens telefônicos a qual utiliza duas linhas por registro: Cor de realce do sistema Nas versões de 4D anteriores a versão 2004, os registros selecionados em listas eram exibidos utilizando “inverter vídeo”: a cor de cada pixel da seleção era invertido (por exemplo, o branco se tornava negro, o vermelho se tornava - 433 - verde e vice-versa). Este princípio inclui o fundo e o texto de objetos: A partir da versão 2004, para uma melhor conformidade da interface, 4D utiliza os parâmetros de seleção do sistema operacional em novos formulários: É possível se beneficiar desta nova interface nos bancos de dados convertidos graças a opção Cor de realce do sistema. Esta opção só está disponível para formulários de saída em bancos de dados convertidos: Quando esta opção está selecionada, 4D desativa a inversão de vídeo e utiliza a cor de contraste do sistema para representar os elementos selecionados. Tenha cuidado, para uma representação conforme as normas de interface, esta opção deve estar acompanhada dos parâmetros adequados de texto e de fundo para os objetos localizados na área de detalhe do formulário: - opção Automática para a cor de texto de cada objeto, - opção Transparente para a cor de fundo de cada objeto, - opção Automática para a cor do retângulo localizado debaixo da área de detalhe do formulário. Visibilidade dos objetos A propriedade Visível está disponível para todos os objetos no editor de formulários quando o tipo de formulário é listado. Esta propriedade aceita 3 valores: Sempre visível Se o registro estiver selecionado Se o registro não estiver selecionado. Esta propriedade é utilizada somente durante o desenho dos objetos localizados no corpo de um formulário listado. Esta propriedade indica a 4D se desenhar sobre o objeto ou não em função do estado selecionado/não selecionado do registro que está sendo processado. Esta propriedade lhe permite representar uma seleção de registros utilizando atributos visuais diferentes das cores: 4D não leva em consideração esta propriedade se o objeto foi ocultado utilizando o comando OBJECT SET VISIBLE; neste caso, o objeto permanece invisível sem importar ou não se o registro está selecionado. Se são exibidas linhas vazias depois dos últimos registros (consulte o parágrafo “Gestão de linhas vazias”), 4D desenha em cada linha vazia os objetos com a propriedade Sempre visível ou Se registro não selecionado. - 434 - Formulários de relatórios impressão Em 4D, é possível criar um relatório utilizando um formulário com a ajuda do editor de relatórios rápidos(ver Relatórios rápidos). Utilizar um formulário para criar um relatório tem muitas vantagens: é possível utilizar elementos gráficos nos formulários, controlar com precisão a localização de cada parte do relatório, utilizar os métodos de objeto para efetuar cálculos e utilizar os cabeçalhos. Os relatórios de formulários também podem ser personalizados por cada usuário com a ajuda do editor de formulários de usuário (ver Formulários de usuário). É possível utilizar um formulário para criar relatórios que: requerem um formato sem colunas, exibam sub-formulários, contenham imagens importadas, necessitem elementos gráficos particulares, tais como linhas finas. Os relatórios impressos, diferentemente dos formulários listados de tela, podem utilizar a área de quebra situada ao final do relatório. Os relatórios impressos utilizam a área de pé de página para os elementos que devem aparecer ao final de cada página. Tipos de relatórios Relatórios em coluna impressos As listas que exibem colunas de informação são comuns em relatórios impressos. É possível publicar listas de números de telefone, preços, resultados, especificações ou partes. Ao criar um relatório em coluna utilizando o assistente de formulários selecione o tipo Formulários de impressão listado. Como as listas que são desenhadas para exibir registros em tela, uma lista impressa apresenta colunas de informação, que podem incluir títulos de colunas sobre cada coluna e podem utilizar elementos gráficos para melhorar ou deixar o relatório mais claro. A área de quebra, que é impressa somente uma vez ao final do relatório, é utilizada para calcular totais. Para maiores informações sobre a utilização de métodos para calcular totais, consulte a seção “Exemplo de Relatório". Relatórios de um registro por página Pode ser necessário imprimir um registro por página. Por exemplo, pode estar sendo usado um banco de faturamento com a finalidade de imprimir uma cópia de cada fatura para seus arquivos. Também pode imprimir uma lista de correio onde apenas certos campos sejam modifiados por página (ver Criar documentos de fusão de correio). Sempre que necessite criar um relatório deste tipo, selecione Formulário de impressão detalhado como tipo de formulário no assistente de criação de formulários. Coloque o cabeçalho (H) na parte superior da página e organize abaixo dos campos e outros elementos do relatório. Se seu formulário exibe registros em um sub-formulário, verifique que o sub-formulário está definido para imprimir um marco fixo de modo que os registros não se estendam a mais páginas. Para maiores informações sobre impressão com marco fixo, consulte a seção Imprimir áreas de tamanho variável. Arraste as linhas de controle de detalhe (D), quebra (B0) e pé de página (F) ao final da página para assegurar que somente se imprima um registro por página. Utilizar os sub-formularios Provavelmente você esteja muito familiarizado com as faturas. Um fatura típica contém um nome e um endereço de faturamento, um endereço de envio, uma série de artigos ou de serviços comprados e um total. Um banco de faturamento inclui um formulário de saída para imprimir as faturas em página completa. Por exemplo, uma fatura tem informação de duas tabelas: uma tabela [Ordens] que fornece a informação do cliente (endereços de faturamento e entrega) e uma tabela [Linhas de artigos] que fornece a informação sobre os artigos. O total da ordem é - 435 - calculado e salvo na tabela [Ordens]. O formulário para uma fatura é criado na tabela [Ordens] e utiliza uma área de sub-formulário para as linhas de artigos. A área de sub-formulário pode se estender durante a impressão para imprimir todas as linhas de artigos, inclusive se a fatura necessita uma segunda página. Para maiores informações, consulte a seção Imprimir áreas de tamanho variável. A área de detalhe ocupa a maior parte de uma página. Uma única fatura é impressa para cada ordem, mas a área da linha de artigos contém quantas linhas quantas forem necessárias. Relatórios com um campo tipo texto Muitos bancos de dados permitem ao usuário introduzir notas ou descrições em um campo de tipo texto. O campo tipo texto pode ser impresso como uma área de tamanho variável na área de Detalhe. Os campos tipo texto podem ser estendidos durante a impressão para imprimir toda a informação. Para maiores informações sobre a impressão de campos tipo texto, consulte a seção Imprimir áreas de tamanho variável. Etiquetas personalizadas Se quiser criar etiquetas de correio personalizadas, é possível desenhar um formulário de saída personalizado. O desenho pode utilizar os elementos gráficos, as fontes e variáveis disponíveis. Nota: Freqüentemente é mais rápido e fácil criar etiquetas de correio utilizando o Editor etiquetas integrado. A criação de formulários de saída utilizados para a impressão de etiquetas é detalhada no parágrafoUtilizar o comando PRINT LABEL. Relatório com quebras 4D pode imprimir relatório com Quebras e Quebras de cabeçalhos. Uma quebra é criada ao ordenar os registros. Imagine que você quer imprimir um relatório de sua coleção de discos, classificados por artistas. Provavelmente você tem vários discos do mesmo artista. Ao ordenar os registros por artistas, você obtém vários grupos de registros diferentes. A “Quebra” ocorre depois de que se imprime o último registro de cada grupo. Assim se vê o relatório visualizado em tela: - 436 - 4D dispõe de diferentes funções que permitem apresentar a informação de forma atrativa. Este é o formulário no ambiente Desenho: Nota: Para gerar um relatório que utilize níveis de quebra e de cabeçalhos, primeiro inicie o processo de quebras. Para maiores informações sobre os métodos que permitem inicializar o processo de quebras, consulte o parágrafo “Iniciar o processo de quebras". Uma quebra de cabeçalho é impressa uma vez antes do grupo de registros ao que se refere e uma quebra é impressa uma vez depois do grupo de registros ao que se refere. Na imagem da página anterior, a quebra se chama “quebra nível 1” e o cabeçalho de quebra se chama "Cabeçalho de quebra nível 1", porque a quebra ocorre como resultado do primeiro campo ordenado. É possível utilizar até nove níveis de quebra. Se você utiliza a rotina Subtotal para iniciar o processo de quebras, deve ordenar um campo mais o número de quebras que utilize. Neste caso, se você utiliza um nível de quebra, deve ordenar dois campos. Se utilizar três níveis de quebra, deve ordenar quatro campos, etc. No formulário do relatório, os níveis de quebra e as quebras de cabeçalho adicionais devem corresponder às áreas adicionais. Pode criar essas áreas adicionando linhas de controle de saída. Para conhecer como adicionar linhas de controle de saída, consulte Usar linhas de controle de saída. Esta seção explica como criar relatório com quebras. Na seção Um exemplo de relatório há um exemplo completo. Inicializar o processo de quebras Para permitir a 4D imprimir as áreas de cabeçalhos de quebras, calcular subtotais, etc., primeiro você deve inicializar o processo de quebra no formulário do relatório. Inicialize o processo de quebras: - 437 - Colocando a função Subtotal em um método de objeto associado a um objeto do formulário ou no método do formulário, executando a função BREAK LEVEL e ACCUMULATE antes de imprimir o relatório. Se você utilizar a função Subtotal, deve também ordenar os registros em um campo maior que o número de níveis de quebra que utilize. Por exemplo, se você utilizar dois níveis de quebra em seu relatório, deve ordenar em 3 campos. Para maiores informações sobre a inicialização do processo de quebra, consulte o Manual de linguagem de 4D. Relatórios com subtotais Esta seção descreve em detalhes com a ordenação influencia nos relatórios e explica como utilizar áreas de quebra adicionais para criar subtotais. A imagem a seguir mostra um relatório que calcula subtotais para cada cliente e um total ao final do relatório. Estes registros foram ordenados por cliente e por produto. Depois de que os registros de cada cliente foram impressos, são calculados e se imprime o subtotal para o cliente. Depois de que foram impressos os registros para todo o relatório, se calcula e se imprime o total. Como se pode ver na imagem anterior, os subtotais são calculados e impressos depois dos registros de cada cliente. 4D sabe quando realizar o cálculo e imprimir o subtotal porque recebeu a instrução de fazê-lo quando se modifique o valor do primeiro campo de critério de ordenação (quando haja quebra). O subtotal do cliente é calculado no que chamamos quebra de nível 1 porque está baseado em uma mudança do valor do primeiro campo de nível de critério de ordenação (neste caso, o campo Cliente). O grande total é calculado na quebra de nível 0. Uma quebra de nível 0 inclui todos os registros e ocorre no final do relatório. A imagem a seguir apresenta outro exemplo de cálculos em um nível de quebra com os mesmos registros, mas com uma ordem de classificação diferente para criar quebras diferentes. Esta vez os registros foram ordenados por produto e cliente. Os subtotais são calculados quando se modifica o valor do campo Produtos. Essa é entretando uma quebra de nível 1, mas a quebra é em um campo diferente. Níveis de quebra adicionais É possível realizar cálculos adicionais adicionando outro nível de ordenação e outro nível de quebra. A imagem a seguir mostra os registros de vendas por cliente, produto e vendedor. Os cálculos resumidos mostram dois conjuntos de subtotais: um subtotal para cada cliente e dentro de cada cliente, subtotais por cada produto. Por último, este relatório calcula um total para toda a empresa. Estes são exemplos de cálculos realizados em níveis de quebra 2, 1 e 0. - 438 - Os cálculos de subtotais são realizados somente para os grupos de registros anteriores a quebra. Por exemplo, um subtotal é calculado para cada produto vendido a cada cliente. O subtotal para o cliente é calculado para todos os produtos vendidos a esse cliente. Nota: para mais informação sobre a adição de níveis de quebra, consulte o parágrafo "Criar linhaas de controle adicionais" em Usar linhas de controle de saída. Relatórios resumo É possível criar um relatório que imprima somente informação resumida. Um informe assim exibe somente os subtotais e totais com os textos adicionais correspondentes. A imagem a seguir mostra um relatório com informação resumida. Neste relatório, os registros são ordenados por cliente, produto e data e os cálculos são realizados nas quebras criadas pela ordem de classificação. As áreas detalhadas dos registros não são impressas, os registros são utilizados somente para proporcionar os valores para os cálculos. Note que 4D vai do primeiro ao último registro durante a impressão do relatório de modo que possa efetuar os cálculos. Você cria esta classe de relatório localizando a linha de controle de detalhe sobre a linha de controle de cabeçalho, sem deixar espaço para imprimir detalhes. Você pode pedir a 4D que efetue cálculos adicionais em uma lista incluindo subtotais, médias, valores máximos e mínimos, totais de página a imprimir em um pé de página e médias ponderadas. Estes cálculos e outros, utilizam as funções estatísticas de 4D (ver Funções estatísticas). - 439 - Usar linhas de controle de saída As áreas do formulário que funcionam como Cabeçalho, Detalhe, Quebra e Pé de página são controladas por linhas de controle de saída no Editor de formulários. É possível alterar o tamanho de cada área, arrastando as linhas de controle de saída verticalmente. Qualquer objeto colocado nessas áreas é mostrado ou impresso na localidade apropriada. Linhas de controle de saída e áreas Esse é o funcionamento das áreas de formulário durante a visualização do formulário em modo Aplicação ou através das funções integradas do modo Desenho: Área de cabeçalho: a área de cabeçalho é exibida na parte superior de cada tela e é impressa na parte superior de cada página de um relatório. A área de cabeçalho é definida como a área sobre a linha de controle do cabeçalho (H). É possível aumentar ou reduzir a área de cabeçalho arrastando a linha de controle de cabeçalho verticalmente. É possível utilizar a área de cabeçalho para os nomes de colunas, instruções, informação adicional, ou inclusive uma imagem com o logotipo da empresa ou um modelo de decoração. Da mesma forma, é possível colocar e utilizar os objetos ativos na área de cabeçalho dos formulários de saída exibidos como sub-formulários, na janela de visualização de registros ou utilizando os comandos DISPLAY SELECTION e MODIFY SELECTION. Todos os objetos ativos podem ser inseridos, incluindo: botões, botões 3D, botões invertidos, botões imagem, combo boxes, menus pop-up/listas suspensas, menus pop-up imagem, menus pop-up hierárquicos, áreas suspensas, listas hierárquicas, list boxes, botões de opção, botões de opção 3D, botões imagem de opção, caixas de seleção, caixas de seleção 3D, termômetro, régua, dials. As Ações padrões tais como Adicionar sub-registro, Cancelar (listas suspensas utilizando DISPLAY SELECTION e MODIFY SELECTION) ou separador automático podem ser atribuídas aos botões inseridos. Os eventos a seguir se aplicam a objetos ativos inseridos na área de cabeçalho: On Load, On Clicked, On Header, On Printing Footer, On Double Clicked, On Drop, On Drag Over, On Unload. Lembre-se que o método de formulário é chamado com o evento On Header depois de chamar aos métodos de objeto da área. Área de detalhe: a área de detalhe é exibida na tela e é impressa para cada um dos registros de um relatório. A área de detalhe é definida como a área entre a linha de controle do cabeçalho e linha de controle de detalhe (D). É possível aumentar ou reduzir esta área arrastando verticalmente o marcador de controle de detalhe. Todo elemento nesta área é exibido ou impresso para cada um dos registros. Na maioria das vezes você localiza campos ou variáveis na área de detalhe com o objetivo se mostrar ou imprimir os dados de cada registro, mas também é possível colocar outros elementos na área de detalhe. - 440 - Áreas de quebra: as áreas de quebra são exibidas uma vez ao final da lista de registros e são impressas uma vez depois que os registros tenham sido impressos no relatório. No relatório anterior, a área de quebra é definida como a área entre a linha de controle de talhe e a linha de controle de quebra (B0). É possível haver outras áreas de quebra em um relatório. É possível aumentar ou reduzir a área de quebra arrastando verticalmente o marcador de controle de quebra. É possível utilizar uma área de quebra para exibir informação que não faz parte dos registros (instruções, data atual, hora atual, etc.) ou para exibir uma linha ou outro elemento gráfico que marque o final da tela de visualização. Em um relatório impresso, é possível utilizar uma área de quebra para calcular e imprimir totais e outros cálculos globais. Área de pé de página: a área de pé de página é exibida em tela debaixo da lista de registros, sempre se imprime na parte inferior de cada página de um relatório. A área de pé de página é definida como a área entre a linha de controle de quebra (B0) e a linha de controle de pé de página (F). É possível aumentar ou reduzir esta área arrastando verticalmente o marcador de controle de pé de página. É possível utilizar a área de pé de página para imprimir gráficos, números de página, data atual ou qualquer texto que você deseje na parte inferior de cada página de um relatório. Para formulários de saída desenhados para serem utilizados em tela, a área de pé de página geralmente contém botões que dão ao usuário opções tais como fazer uma pesquisa, imprimir registros, o excluir o relatório atual. Todos os objetos ativos são aceitos. Em todo formulário utilizado como formulário de saída, bem seja visualização em tela ou impressão, as linhas de controle de saída tem efeito e as áreas são visualizadas ou impressas nos lugares designados. As linhas de controle de saída também têm efeito quando um formulário é utilizado como formulário listado em uma área de sub-formulário. As linhas de controle de saída não tem efeito quando um formulário é utilizado como formulário de entrada. Os métodos que estão associados aos objetos situados nestas áreas são executados quando as áreas são impressas ou exibidas, se os eventos de formulário apropriados tiverem sido selecionados. Por exemplo, um método de objeto localizado na área de cabeçalho é executado quando se gera o evento On Header. É possível criar linhas adicionais de controle para definir áreas de quebra e áreas de cabeçalho adicionais para um relatório. Estas áreas adicionais lhe permitem imprimir subtotais e outros cálculos em um relatório e exibir outra informação de maneira efetiva. As linhas de controle adicionais são descritas na seção Criar linhas de controle adicionais. Mover as linhas de controle de saída O tamanho das áreas de cabeçalho, detalhe, quebra e pé de página são ajustados movendo os marcadores de controle de saída. As linhas de controle de saída aparecem como linhas que atravessam o formulário. Cada linha de controle tem um marcador e uma etiqueta que é exibida na régua. O marcador de controle é o triângulo na régua e a etiqueta é a letra ou as letras junto ao marcador. É possível mover uma linha de controle arrastando seu marcador ou sua etiqueta. Por padrão, as etiquetas das linhas de controle sempre são exibidas; entretanto é possível ocultá-las (consulte o parágrafo "Mostrar/ocultar elementos no editor de formulários em Editor de formulários ). Quando estão ocultas, é possível exibilas temporariamente clicando nos marcadores de controle. As etiquetas indicam o nome e a localização de cada marcador com respeito ao formulário de origem. Quando se move um marcador, a etiqueta indica a nova localização do marcador em tempo real. As etiquetas lhe permitem mover as linhas de controle inclusive quando as réguas estão ocultas. A imagem a seguir identifica os marcadores de controle e as etiquetas: - 441 - Para mover uma linha de controle, arraste verticalmente o marcador ou a etiqueta de controle correspondente. Se você manter a tecla Shift pressionada enquanto arrasta um marcador, todas as linhas de controle abaixo desse marcador de controle são movidas. Por exemplo, para arrastar todas as linhas de controle de uma vez, mantenha pressionada a tecla Shift e arraste o marcador de cabeçalho. Para mover todas as linhas de controle exceto as linhas de controle de cabeçalho, mantenha pressionada a tecla Shift e arraste o marcador de detalhe. Se você deseja mover os objetos situados abaixo do marcador de controle ou aumentar os objetos situados acima do marcador de controle ao mesmo tempo em que os move, selecione cada objeto a ser modificado antes de efetuar a movimentação. As linhas de controle não podem ser arrastadas em desordem. Por exemplo, se você tenta arrastar uma linha de controle de pé de página mais acima de uma linha de controle de quebra, a operação arrastar automaticamente é detida quando o marcador de pé de página alcança o marcador de quebra. Teste sobrepor marcadores e linhas de controle. Colocar um marcador sobre outro reduz sua área a nada, eliminando-o do relatório. Por exemplo, se você não tem nada que imprimir na área de quebra é possível arrastar o marcador de quebra sobre o marcador de detalhe. Ao fazer isto, você evita que 4D crie espaço para uma área de quebra. Desta forma o relatório pode utilizar todo o espaço disponível na página. Da mesma forma, se você não deseja imprimir detalhes, arraste o marcador detalhe sobre o marcador de cabeçalho. Se não necessita um cabeçalho, arraste o marcador de cabeçalho a parte superior do formulário (ponto 0). Atenção: Os objetos ativos (campos ou variáveis) localizados no detalhe dos formulários não devem ultrapassar a áreas de cabeçalho ou de pé de página, do contrário não serão exibidos quando o formulário seja executado. Criar linhas de controle adicionais Os exemplos de relatórios desta seção utilizam níveis de quebra e quebras de cabeçalhos. Para criar as áreas correspondentes a estes níveis, é necessário criar linhas de controle adicionais. O editor de formulários sempre começa com as linhas de controle originais, etiquetadas H, D, B0 e F. B0 significa “Quebra de nível “0”. O nível zero reúne todos os registros. As linhas de controle de quebra adicionais são designadas com números. Uma linha de controle etiquetada B1 significa “Quebra de nível 1”. Uma quebra de nível 1 ocorre depois da impressão dos registros agrupados pelo primeiro campo de ordenação. Etiqueta Descrição Imprime depois dos grupos criados por: B1 Quebra de nível 1 Primeiro campo de ordenação B2 Quebra de nível 2 Segundo campo de ordenação B3 Quebra de nível 3 Terceiro campo de ordenação H significa “Cabeçalho”, o qual é impresso na parte superior de cada página. As linhas de controle adicionais de cabeçalhos estão associadas com quebras. H1 significa “Cabeçalho de nível 1”. Um cabeçalho de nível 1 é impresso justo antes do grupo de registros criado pelo primeiro campo de ordenação. Etiqueta Descrição Imprime antes dos grupos criados por: H1 H2 H3 Primeiro campo de ordenação Segundo campo de ordenação Terceiro campo de ordenação Cabeçalho de nível 1 Cabeçalho de nível 2 Cabeçalho de nível 3 As linhas de controle adicionais são criadas mantendo pressionada a tecla Alt (Windows) ou Opção (Mac OS) enquanto se clica no marcador de controle apropriado. Utilize uma linha de controle de quebra para criar uma área de quebra ao nível correspondente. Utilize uma linha de controle de cabeçalho de quebra para criar uma área de cabeçalho de quebra ao nível correspondente. Se utilizar a função Subtotal para inicializar o processo de quebras, você deve criar uma área de quebra para cada nível de quebra gerado pela ordenação, menos um. Se não necessita imprimir nada em uma das áreas de quebra, pode reduzir seu tamanho a nada colocando seu marcador sobre outra linha de controle. Se tiver mais níveis de ordenação que áreas de quebra, a última área de quebra se repetirá durante a impressão. A imagem a seguir mostra as linhas de controle adicionais. - 442 - Eliminar linhas de controle Para eliminar as linhas de controle das áreas de cabeçalho e de quebra que tenha criado, mantenha pressionada a tecla Ctrl (Windows) ou Comando (Mac OS) e depois clique em quebra, cabeçalho de quebra ou etiqueta da linha de controle a apagar. 4D apaga a linha de controle, se é necessário, renumera as linhas restantes, Não pode apagar as linhas de controle originais H, D, B0 e F. - 443 - Um exemplo de relatório Esta seção descreve um exemplo de relatório e mostra como o relatório final está relacionado ao formulário tal como está definido no editor de formulários e aos métodos que controlam a impressão. A imagem a seguir mostra um relatório final. Neste exemplo, a página cabeçalho contém a data, a hora e o título do relatório. Os cabeçalhos de quebra contêm o nome do cliente e os cabeçalhos de coluna a informação apresentada durante a primeira quebra. As áreas de detalhe contêm os dados extraídos diretamente dos registros. As áreas de quebra de nível 2 contêm subtotais de produtos vendidos a cada cliente. As áreas de quebra de nível 1 contêm subtotais para cada cliente e a área de quebra de nível 0 contêm o total de vendas. O pé de página contém o número de página. O relatório está ordenado em um nível mais que os níveis de quebra. Neste relatório, os campos de classificação são Cliente, Produto e Data. O formulário de relatório A imagem a seguir representa o formulário utilizado para o relatório tal como aparece no editor de formulários. - 444 - Cada linha de controle no formulário define o limite inferior de sua área.. Tudo o que esteja localizado no formulário é impresso no lugar adequado do relatório. A área de cabeçalho contém os elementos que serão impressos na parte superior de cada página, a área de detalhe contém os elementos que serão impressos para cada registro, etc. A tabela a seguir mostra o que significa cada uma destas linhas de controle. Etiqueta Significado H H1 H2 D B2 B1 B0 F Área de cabeçalho Área de cabeçalho de nível 1 Área de cabeçalho de nível 2 Área de detalhe Área de quebra de nível 2 Área de quebra de nível 1 Área de quebra de nível 0 Área de pé de página Efeito Impresso uma vez na parte superior de cada página Impresso uma vez antes de cada quebra de nível 1 Impresso uma vez antes de cada quebra de nível 2 Impresso uma vez para cada registro na seleção Impresso uma vez en cada quebra de nível 2 (quando o valor no segundo campo ordenado é alterado) Impresso uma vez en cada quebra de nível 1 (quando o valor no primeiro campo ordenado é alterado) Impresso uma vez ao final do relatório Impresso uma vez al final de cada página Os métodos de objeto de relatório Os objetos não editáveis localizados nas áreas de cabeçalho, quebra e pé de página são controlados pelos métodos de objeto. Esta seção descreve os métodos utilizados para imprimir valores nestas áreas. Nota: O código a seguir só pode ser utilizado em métodos de objeto e de formulário. Não é possível ser utilizado em métodos de projeto. A data é extraída do sistema por uma variável, chamada vData, a qual está associada ao seguinte método: vData:=Current date A hora é extraída do sistema por uma variável, chamada vHora, a que está associado o seguinte método: vHora:=Current time O subtotal de vendas para a área de quebra de nível 2 é calculado e exibido em um objeto chamado vVendasProd associado ao seguinte método: - 445 - vVendasProd:=Subtotal(Vendas) O subtotal de vendas para a área de quebra de nível 1 é calculado e exibido em um objeto chamado vVendasClient associado ao seguinte método: vVendasClient:=Subtotal(Vendas) O total de vendas para a área de quebra de nível 0 é calculado e exibido em um objeto chamado vVendas: vVendas:=Subtotal(Vendas) Note que ainda que os três objetos utilizem o mesmo cálculo, os resultados são diferentes porque estão localizados em diferentes áreas de quebra, são executados em momentos diferentes e os cálculos são realizados para diferentes grupos de registros. Para maiores explicações sobre os níveis de quebra, consulte a seção Formulários de relatórios impressão. vNumPag:="Página "+String(FORM Get current page) A função FORM Get current page devolve o número de página. - 446 - Imprimir áreas de tamanho variável É possível utilizar sub-formulários, campos tipo imagem e texto em um relatório. Estes objetos com um marco fixo são impressos dentro dos limites do objeto definidos durante a criação do formulário. Os objetos com marco variável se expandem se necessário, durante a impressão para incluir todos os conteúdos do objeto. Não é possível localizar mais de um objeto com um marco variável lado a lado em um formulário. É possível localizar objetos de marco não variável se o objeto de marco variável é pelo menos uma linha mais longo que o objeto do lado e todos os objetos estão alinhados na parte superior. Do contrário, durante a impressão, os conteúdos dos outros campos se repetirão para cada parte horizontal do objeto de marco variável. Não é possível colocar objetos de um lado ou do outros de um sub-formulário de marco variável. Só é possível colocar os objetos de marco variável nas áreas de detalhe. Imprimir áreas de sub-formulário Geralmente se usa um formulário de saída para imprimir os registros de um sub-formulário. Para definir as opções de impressão de um sub-formulário, exiba as propriedades do sub-formulário na Lista de propriedades e exiba o tema “Impressão”. Como podem existir mais registros do que os que podem ser ajustados na área de sub-formulário, 4D oferece as três opções a seguir para controlar a impressão de registros de sub-formulários: Variável 4D expande ou contrai a área do sub-formulário para imprimir todos os registros. Fixo (truncado) 4D imprime somente os registros que se ajustam na área do sub-formulário. O formulário é impresso somente uma vez e os registros não impressos são ignorados. Fixo (múltiplos registros) o marco permanece do mesmo tamanho, mas 4D imprime o formulário várias vezes para incluir todos os registros. Nota: Não é possível localizar objetos em qualquer lado de um sub-formulário de marco variável. Os objetos localizados aos lados do sub-formulário se repetirão para cada linha do sub-formulário. Para maiores informações sobre as opções de sub-formulários, consulte o parágrafo Subformulário lista. Imprimir campos de tipo imagem As imagens podem ser impressas com marcos fixos ou variáveis se o seu formato de saída permitir. Só os formatos de saída seguintes permitem configurar a propriedade de impressão em tamanho variável: Truncado (centralizado) Imagem de fundo Truncado (não centralizado) Para maiores informações sobre estes formatos de imagem, consulte a seção Formatos de saída. Para definir uma opção de impressão para um campo tipo imagem, exiba as propriedades do campo tipo imagem na Lista de propriedades e exiba o tema “Impressão”. Selecione ou não a opção Marco de impressão variável de acordo com suas necessidades específicas: Se selecionar esta opção, a imagem será impressa a uma altura que leva em consideração o tamanho. O marco da imagem será estendido, se necessário, durante a impressão para mostrar a totalidade de imagem. Se não marcar esta opção, a imagem será impressa a uma altura fixa (definida no formulário) Imprimir campos de tipo texto Os campos de tipo texto podem ser impressos com marco de tipo variável ou fixo. As opções de impressão dos campos de tipo texto são selecionadas da mesma maneira que as dos campos de tipo imagem. No editor de formulários, exiba as propriedades dos campos tipo texto na Lista de propriedades. No tema “Impressão” selecione ou não a opção Marco de Impressão variável de acordo com suas necessidades específicas: - 447 - Se marcar esta opção, o texto será impresso a uma altura que leve em consideração seu tamanho. O campo tipo texto será estendido automaticamente durante a impressão de modo que se imprima todo o texto contido. Se não marcar esta opção, o texto será impresso a uma altura fixa (definida no formulário). - 448 - Criar documentos de fusão de correio É possível controlar as tarefas de fusão de correio utilizando um formulário de saída que integre os campos, as etiquetas de campos ou tabelas ou variáveis em uma área de texto estática. É possível criar documentos idênticos exceto pelos nomes, os endereços e todo cálculo que você quiser realizar. Os documentos de fusão de correios são muito úteis para anunciar uma oferta especial ou informar a seus clientes sobre o desenvolvimento de um negócio (como mudança de endereços ou uma alteração importante de pessoal). Outro uso típico da fusão de correios é para informar aos clientes que ainda não realizaram seus pagamentos a tempo. É possível criar uma variável e um método para calcular a quantidade exata. Quando for criar um formulário para fazer a fusão de correios, utilize a opção Formulário de impressão detalhado na lista suspensa de tipos de formulário do assistente de criação de formulários. No editor de formulário, crie uma área de texto que contenha o texto estático e os campos, as variáveis ou as etiquetas de campos ou tabelas que serão alteradas para cada registro. Logo insira os campos ou variáveis na área de texto. Durante a impressão, os valores dos campos ou variáveis são inseridos no texto. A imagem a seguir mostra os campos e as variáveis integradas na área de texto... Para criar um formulário de saída para a fusão de correios, especifique um formulário de tipo "impressão detalhado". Na ãrea Detalhe, adicione uma ou mais áreas de texto estático. Na área de texto,escreva o texto que deseja em sua carta, colocando os nomes das variáveis e dos campos entre os sinais de menor que (<) e maior que (>). É possível utilizar um campo de qualquer tabela do banco. Para os campos da tabela atual não é necessário especificar o nome da tabela; podem ser introduzidos como: <campo>. Os campos de outras tabelas devem especificar o nome da tabela assim: <[nome da tabela] campo>. Quando se imprime o formulário, a informação do campo para cada registro substitui o elemento <campo> na área de texto. Para inserir as etiquetas de tabelas, introduza: <?[Nome da tabela]> ou <?[N]> onde N é o número de ordem de criação da tabela. Para inserir as etiquetas de campos, escreva: <?[Nome da tabela]Nome do campo> ou <?[X]Y> onde X é o número de ordem de criação da tabela e Y é o número de ordem de criação do campo ou <?Y> para inserir um campo da tabela atual. Para maiores informações, consulte [#title id="669"/]. O valor de cada variável deve ser atribuído por um método de objeto ou de formulário. É possível especificar a maneiro como será mostrado um campo ou variável inserindo um ponto e vírgula seguida por - 449 - um formato de saída (ver GET LIST ITEM PARAMETER) depois do nome do campo ou variável. Por exemplo, o documento de fusão de correios mostrado anteriormente, inclui um formato de saída para a variável vTotal. A variável <vTotal;$###,##0.00> calcula a quantidade da bonificação da pessoa e o exibe em um formato adequado. 4D proporciona um atalho para inserir campos em uma área de texto. O atalho lhe permite escolher o campo de uma lista suspensa. Para fazer isso, clique com a ferramenta texto para localizar o cursor onde você deseja localizar o campo, e localize o cursor na área de texto e mantenha pressionada a tecla Alt (Windows) ou Opção (Mac OS) enquanto pressiona o botão do mouse. 4D exibe um menu pop-up que contém os campos da tabela atual a partir do qual é possível selecionar o campo que você deseja. Para escolher um campo de outra tabela do banco de dados, mantenha pressionadas as teclas Shift + Alt (Windows) ou Shift+Comando (Mac OS) enquanto mantém pressionado o botão do mouse. 4D exibe um menu hierárquico das tabelas e campos do banco de dados. É possível escolher a tabela e campos do banco de dados. É possível escolher a tabela e o campo que você desejar. 4D insere <Campo> ou <[tabela]campo> na área de texto no ponto de inserção. Quando se imprime a carta, aparecem os valores dos campos e as variáveis integradas na carta para cada registro. - 450 - Criar etiquetas É possível gerar etiquetas com o Editor etiquetas com um formulário personalizado. Se utilizar um formulário, você tem mais opções de personalização. Em particular, é possível utilizar o editor de formulários para inserir variáveis em suas etiquetas. Uma vez criado um formulário de etiquetas no editor de formulário de 4D, é possível utilizá-lo de duas maneiras: Utilizando o comando PRINT LABEL A instrução PRINT LABEL (tabela) causa a impressão da seleção atual da tabela no formulário listado atual. Neste caso, 4D utiliza os marcadores (altura e largura) deste formulário para definir o formato de etiquetas. Utilizando o editor de etiquetas. Esta operação lhe permite se beneficiar das funções avançadas do editor de formulário e dos parâmetros de configuração do editor de etiquetas. O editor de etiquetas leva em consideração somente a posição absoluta dos objetos presentes no formulário e das possíveis margens definidas. A posição dos marcadores é ignorada. Utilizar o comando PRINT LABEL Para criar um formulário de etiquetas e imprimir utilizando o comando PRINT LABEL: 1. Defina a largura das etiquetas arrastando o marcador de largura situado na régua horizontal do editor de formulários. O marcador de largura determina quantas etiquetas o comando PRINT LABEL imprimirá na largura da página. A localização da largura deve corresponder a largura das etiquetas. Assegure-se de levar em consideração as margens esquerda e direita de suas etiquetas. É possível determinar estas margens calculando o espaço entre cada etiqueta e dividindo este número em dois. Nota: É possível alterar as unidades da régua no formulário para facilitar a localização adequada do marcador de largura da etiqueta. Para alterar as unidades da régua, escolha Definir unidades... no menu Formulário. 2. Insira e defina os objetos que constituem cada etiqueta. As etiquetas podem conter campos e objetos ativos (com os quais os métodos podem ser associados), assim como também objetos gráficos e texto estático. Um sub-formulário não pode ser impresso em uma etiqueta. - 451 - Esta etiqueta contém variáveis (objetos ativos) cujos valores são calculados por métodos de objeto. Por exemplo, o método da variável NomeCompleto concatena o nome e sobrenome de cada pessoa e coloca um espaço entre os dois: NomeCompleto:=[Clientes]Nome+" "+[Clientes]Sobrenome 3. Localize os objetos no formulário com respeito ao marcador de largura. Os elementos da etiqueta devem ser localizados a esquerda do marcador de largura. Devem ser centralizados entre a borda esquerda do formulário e o marcador para que o espaço a cada lado da etiqueta seja o mesmo. 4. Defina as linhas de controle de modo que a linha de controle de cabeçalho esteja sobre a etiqueta e as linhas de controle de detalhe, quebra e pé de página abaixo da etiqueta. A linha de controle de detalhe deve ser definida a altura da etiqueta. Para centralizar o texto dentro da etiqueta, centralize os elementos do formulário entre a linha de controle de cabeçalho e a linha de controle de detalhe. Quando imprimir as etiquetas, tudo o que estiver entre as linhas de controle de cabeçalho e de detalhe aparece nas etiquetas . 5. Salve o formulário e imprima a seleção utilizando o comando PRINT LABEL. Utilizar o editor de etiquetas Para criar um formulário de etiquetas e imprimir utilizando o editor de etiquetas: 1. No formulário, insira e defina os objetos que constituem cada etiqueta. 2. Localize cada elemento na etiqueta de acordo aos seguintes princípios: as margens esquerda e superior de cada etiqueta são determinadas pela posição dos elementos com relação às coordenadas (0,0) do formulário. As margens direita e inferior de cada etiqueta são determinadas pelos valores margem horizontal e margem vertical definidas na lista de propriedades do formulário. - 452 - 3. Selecione a tabela do formulário de etiquetas na janela Lista de tabelas para torná-lo o formulário de saída atual para a tabela. Se a janela lista de tabelas não está sendo exibida, escolha o comando Lista de tabelas no menu Registros. 4. Escolha o comando Etiquetas no menu Utilidades. Aparece o editor de etiquetas. 5. Escolha o formulário de etiquetas que foi designado da lista suspensa “Formulário a usar”. 4D utilizará este formulário para imprimir as etiquetas. 6. Realize outras alterações no editor de etiquetas, tais como a definição das margens das etiquetas ou especificar a fonte do texto. Para maiores informações sobre o editor de etiquetas, consulte Editor etiquetas. 7. Clique no botão Imprimir. 4D imprime a seleção atual de registros em seu formulário de etiquetas. - 453 - Formulários de usuário Visão Geral de formulários de usuário (Modo Aplicação) O editor de formulários de usuário Visualização e edição de objetos Ordem de entrada dos dados Utilizar uma biblioteca de objetos - 454 - Visão Geral de formulários de usuário (Modo Aplicação) Em 4D, o desenvolvedor pode permitir aos usuários modificar certos formulários do banco de dados, por exemplo, para criar relatórios personalizados, adicionar um logotipo específico ou mais em geral para adaptar os formulários a suas necessidades específicas.Uma vez salvo, o “formulário de usuário” é substituído pelo formulário original no computador do usuário e pode ser utilizado como qualquer outro formulário de 4D. As possibilidades de modificação se referem principalmente aos aspectos gráficos. Por exemplo, o usuário não pode adicionar métodos de objeto, variáveis ou campos. Entretanto, pode alterar a ordem de entrada ou adicionar objetos ativos em uma biblioteca de objetos. As possibilidades são definidas de antemão pelo desenvolvedor no editor de formulários do ambiente Desenho. Os mecanismos para estabelecer este sistema por parte do desenvolvedor (Ambiente Desenho) são descritos na seção Formulários de usuário do Manual de Linguagem. Este capítulo descreve o funcionamento do editor de formulários de usuário em modo Aplicação. - 455 - O editor de formulários de usuário O editor de formulários de usuário aparece para um formulário quando é executado o comando EDIT FORM, se a propriedade Modificável pelo usuário foi selecionada para o formulário (ver o parágrafo Propriedades de formulário). Em geral, este editor é chamado a partir da configuração do banco ou por um comando de personalização. A janela do editor aparece desta maneira: Este editor utiliza a interface do editor de formulários padrão de 4D, em particular, o conceitos das duas barras integradas (ferramentas e objetos). Mesmo assim, tem suas próprias funções específicas. Quando se exibe o editor, só é possível acessar ao menu Edição da barra de menus. Ainda assim, é possível exibir uma Lista de propriedades simplificada assim como também um menu contextual. Os mecanismos de seleção e de movimentação de objetos (quando permitido) são idênticos aos do editor de formulários padrão de 4D. Para uma descrição do editor de formulário de 4D, consulte Editor de formulários. Barra de ferramentas A barra de ferramentas contém os seguintes elementos: Versão anterior: Retorna à última versão guardada do formulário. Quando faz clique neste botão, aparece uma caixa de diálogo de alerta que lhe permite cancelar ou confirmar a operação. Guardar: Guarda as modificações realizadas no formulário de usuário. Configurar página e Imprimir: este dois comandos permitem configurar e iniciar a impressão do formulário de usuário. - 456 - Visualizar: permite selecionar os elementos a serem visualizados e ocultados no editor usando um menu suspenso: Página 0: exibe ou oculta os objetos da página 0 na página atual do formulário. Esta opção lhe permite distinguir entre os objetos na página atual do formulário e os da página 0. Em um formulário multipáginas, a página 0 contém os objetos exibidos em todas as páginas. Papel: exibe ou oculta as bordas da página de impressão como linhas cinza. Esta opção pode não ter um efeito aparente quando a opção Limites (ver adiante) estiver selecionada. Se o tamanho do formulário é inferior ao tamanho da página de impressão, as bordas da página são exibidas fora da área de visualização do formulário e, portanto não aparecem. Réguas: exibe ou oculta as réguas da janela do editor de formulários. Marcadores: exibe ou oculta as linhas de controle de saída e os marcadores associados que exibem os limites das diferentes áreas do formulário (cabeçalho, corpo, pé de página). Os marcadores são utilizados principalmente em formulários de saída. Limites: exibe ou oculta os limites do formulário. Ao selecionar esta opção, o formulário é exibido no editor com suas dimensões finais. Biblioteca: permite carregar a biblioteca de objetos que pode ser utilizada com o formulário (se existir) (ver o parágrafo Criar e usar objetos de biblioteca personalizados). Seta de seleção: permite selecionar, mover e redimensionar os objetos do formulário. Ordem de entrada: passa ao modo “Ordem de entrada”, onde é possível ver e alterar a ordem de entrada atual do formulário (ver Modificar a ordem de entrada dos dados) Movimentação: passa ao modo “Movimentação” onde é possível alcançar rapidamente qualquer parte do formulário utilizando arrastar e soltar na janela. O cursor se torna uma mão. Este modo de movimentação é particularmente útil quando se faz zoom no formulário. Zoom: permite modificar o percentual de visualização do formulário (100% por padrão ). É possível passar ao modo “Zoom” clicando na lupa ou clicando diretamente na barra que desejar. Quando se clica neste botão, o cursor se torna uma lupa . Para aumentar a porcentagem de zoom um nível, clique dentro do formulário. Para reduzir a porcentagem de zoom um nível, pressione Shift (o cursor se transforma em ) e clique no formulário. Alinhar: este botão está associado a um menu que permite alinhas objetos no formulário. Para que este menu esteja ativo, deve ser selecionado pelo menos dois objetos no formulário. Distribuir: este botão está associado a um menu que lhe permite distribuir objetos no formulário. Para que este menu esteja ativo, deve ser selecionado pelo menos três objetos no formulário. Plano: este botão está associado a um menu que permite alterar o plano dos objetos no formulário. Mostrar páginas: esta área permite passar de uma página do formulário a outra. Para fazer isto, clique nos botões seta ou clique na área central e escolha a página a ser exibida no menu que aparece. Não é possível adicionar página no editor de formulário de usuário. Barra de objetos A barra de objetos do editor de formulário de usuário lhe permite adicionar vários objetos gráficos ao formulário: Texto (este objeto deve ser selecionado para modificar os conteúdos dos objetos de texto estático), Área de grupo, Retângulo, Linha, Retângulo arredondado, Oval, Matriz. Para criar um objeto no formulário, selecione o botão correspondente e logo localize o objeto no formulário. - 457 - Visualização e edição de objetos O usuário pode ver e editar as propriedades dos objetos presentes no formulário utilizando uma Lista de propriedades simplificada. Para exibir a lista, simplesmente faça um clique duplo no objeto ou escolha o Comando Lista de propriedades no menu contextual do editor (clique direito). Somente as propriedades modificáveis pelo usuário são exibidas na Lista de propriedades. Para os objetos gráficos adicionados pelo usuário utilizando a barra de objetos, estão disponíveis todas as propriedades associadas ao tipo de objeto. Para os objetos do formulário original, todas as condições devem ser cumpridas para que uma propriedade seja editável no editor de formulário de usuário: a propriedade deve pertencer a um conjunto de propriedades que podem ser declaradas editáveis para o objeto ou o formulário. Por exemplo, as propriedades relacionadas com a gestão de eventos de formulário ou arrastar e soltar nunca são modificáveis pelo usuário. No editor de formulário do ambiente Desenho, os temas de propriedades modificáveis são representados por um ícone de cadeado na Lista de propriedades (ver Propriedades de formulário). O tema de propriedades deve ter sido declarado explicitamente como modificável pelo desenvolvedor para o objeto ou o formulário. Para isto, o desenvolvedor deve ter clicado no cadeado na lista de propriedades no ambiente Desenho para desbloqueá-lo : As propriedades desbloqueadas se tornam acessíveis ao usuário no editor de formulário de usuário: - 458 - Este princípio funciona da mesma forma para outras ações possíveis no formulário usuário: por exemplo, se o tema “Coordenadas e dimensões” está desbloqueado, o usuário poderia mover o objeto utilizando o mouse ou o teclado. Comandos do menu edição Somente o menu Edição está ativo quando a janela do editor de formulários usuário é exibida em modo Desenho. Quando utilizar interfaces personalizadas no ambiente Aplicação, o menu Edição é acessível se os comando que ele contém são controlados utilizando ações padrões. Todos os comandos de edição (Cortar, Copiar, Colar, Limpar, Selecionar tudo) funcionam sem restrições com os objetos adicionados pelo usuário. Por outro lado, por razões de consistência, o usuário nunca está autorizado a excluir um objeto do formulário original. O uso do comandos Cortar, Limpar ou das teclas Del ou Backspace faz com que apareça uma caixa de diálogo de alerta informando ao usuário que esta ação não é permitida. Menu Contextual Vários comandos são acessíveis através do menu contextual do editor de formulários de usuário. Não é possível controlar os conteúdos deste menu. Clicar fora dos objetos Quando o usuário clica fora dos objetos, os comandos globais de visualização, e edição do edito de formulário estão disponíveis: lista de propriedades, ativar a grade magnética e exibir: Ativar a grade magnética: a grade magnética lhe oferece uma ajuda visual para o alinhamento e distribuição dos objetos no formulário. A grade magnética funciona desta forma: quando você arrasta e solta um objeto no formulário, 4D indica as localizações possíveis para este objeto baseado nos alinhamentos relativos a outros objetos do formulário: horizontalmente, quando as bordas ou centros dos objetos coincidem, verticalmente, quando as bordas dos objetos coincidem. Neste momento, 4D coloca o objeto na localização e mostra uma linha vermelha indicando o alinhamento que se leva em consideração: Alinhamento com as bordas superiores - 459 - Alinhamento com os centros No que se diz respeito a distribuição de objetos, 4D propõe uma distância baseada nos padrões de interface. Como para o alinhamento magnético, as linhas vermelhas indicam as diferenças notáveis uma vez que elas são alcançadas. Nota: É possível ativar ou desativar manualmente a grade magnética quando um objeto está selecionado pressionando a tecla Ctrl (Windows) ou Control (Mac OS). Exibir: este menu tem os mesmos elementos que o botão Exibir na barra de ferramentas do editor (ver O editor de formulários de usuário). Clicar em um objeto Quando o usuário clica em um objeto, os comandos gráficos estão disponíveis (cor, alinhamento, etc.). O acesso a estes comandos pode ser restringido para os objetos que pertencem ao formulário original, dependendo do tipo de objeto no qual o usuário clique como também dos parâmetros definidos pelo desenvolvedor no editor de formulários. Cor: exibe duas palhetas que lhe permitem modificar as cores do primeiro plano e do fundo do objeto. Alinhar: permite acessar aos comandos de alinhamento e de distribuição de objetos. Os comandos de alinhamento só estão ativos se ao menos dois objetos “móveis” estão selecionados. Os comandos de distribuição só estão ativos se ao menos três objetos “móveis” estão selecionados. Estilo da borda: permite modificar o estilo de borda dos objetos selecionados. Estes são exemplos dos estilos disponíveis: Nenhum Plano Pontilhado Elevado Profundo Duplo Tamanho automático: esta opção permite redimensionar os objetos de texto e as imagens para obter uma visualização ótima levando em consideração as características gráficas atuais (tamanho da fonte, estilo, etc.) ou exibi-los em seu tamanho original (imagens). É possível obter o mesmo resultado pressionando Ctrl (Windows) ou Comando (Mac OS) + clique no canto inferior direito do objeto. Nível: utilizado para alterar o plano dos objetos. Selecionar objetos similares: permite selecionar todos os objetos do mesmo tipo que o objeto selecionado. - 460 - Ordem de entrada dos dados A ordem de entrada dos dados é a ordem na qual os campos, sub-formulários e outros objetos ativos são selecionados à medida que se pressiona a tecla Tab em um formulário. Nota: Para maiores informações sobre a ordem de entrada de dados padrão nos formulários, consulte o parágrafo Modificar a ordem de entrada dos dados. Em alguns casos, pode ser necessário modificar a ordem de entrada dos dados de um formulário, por exemplo, ao adicionar um ou mais objetos e querer incluí-los em uma ordem mais lógica. Visualizar e modificar a ordem de entrada Para ver a ordem de entrada atual de um formulário, clique no botão Ordem de entrada na barra de ferramentas do editor de formulários de usuário: A ordem de entrada atual aparece desta forma: Para alterar a ordem de entrada, localize o ponteiro sobre um objeto, enquanto mantém pressionado o botão do mouse, arraste o ponteiro até o objeto que deseja que siga na ordem de entrada, 4D ajusta a ordem de entrada como corresponde. Quando estiver satisfeito com a ordem de entrada, clique no botão Ordem de entrada da barra de ferramentas. Definir o primeiro objeto da ordem de entrada de dados Todos os objetos editáveis formam parte da ordem de entrada de dados. Para definir o primeiro objeto da ordem de entrada, o modo Ordem de entrada deve estar desativado. Para definir o primeiro objeto da ordem de entrada: 1 - Selecione o objeto que deseja definir como primeiro objeto da ordem de entrada e passe-o ao fundo. É possível utilizar o comando Nível > Enviar ao fundo no menu contextual ou o comando correspondente do botão da barra de ferramentas do editor - 461 - O objeto será localizado temporariamente ao fundo do formulário. 2 – Selecione o objeto que deseja definir como primeiro objeto da ordem de entrada e passe-o ao fundo.Clique no botão Ordem de entrada da barra de ferramentas . O objeto selecionado é convertido no primeiro objeto da ordem de entrada e o que era o primeiro objeto da ordem de entrada passa a ser o segundo. Depois é possível definir objeto por objeto a seqüência da ordem de entrada que quiser. 3 – Quando tenha terminado de definir a ordem de entrada, clique novamente no botão Ordem de entrada da barra de ferramentas 4D volta ao modo de funcionamento normal do editor de formulário. O objeto que você selecionou para ser o primeiro na ordem de entrada volta a sua localização anterior (já não está ao fundo do formulário). Utilizar um grupo de entrada de dados Enquanto você altera a ordem de entrada de dados, é possível selecionar um grupo de objetos em um formulário com a finalidade de que a ordem de entrada padrão aplique aos objetos do grupo. Isto lhe permite definir facilmente a ordem de entrada dos dados em formulários nos quais os campos estão organizados em grupos ou colunas. Para criar um grupo de entrada: Clique no botão Ordem de entrada da barra de ferramentas . Desenhe um retângulo de seleção ao redor dos objetos que deseja agrupar para a entrada de dados. Ao liberar o botão do mouse, os objetos no retângulo ou tocados pelo retângulo seguem a ordem de entrada padrão. A ordem de entrada de dados para os objetos restantes é ajustada como seja necessário. Restabelecer a ordem de entrada padrão É possível restabelecer a ordem de entrada padrão a qualquer momento. 1. Clique no botão Ordem de entrada da barra de ferramentas . 2. Desenhe um retângulo de seleção ao redor de todos os objetos do formulário. Ao liberar o botão do mouse, 4D restabelece a ordem de entrada padrão para todos os objetos dentro do retângulo ou tocados pelo retângulo. - 462 - Utilizar uma biblioteca de objetos É possível utilizar uma biblioteca de objetos com cada formulário de usuário que está sendo modificado. Uma biblioteca de objetos é um arquivo externo criado por 4D no ambiente Desenho. O qual permite armazenar todo tipo de objetos que podem ser utilizados em formulários: botões, textos, imagens, listas hierárquicas, etc. As bibliotecas se constituem e utilizam por um simples arrastar e soltar ou copiar e colar a partir dos formulários 4D. De alguma forma são como áreas de transferência permanentes. Para maiores informações sobre bibliotecas de objetos, consulte o parágrafo Criar e usar objetos de biblioteca personalizados. Os objetos são armazenados com todas suas propriedades e ações automáticas. No editor de formulário de usuário não é possível utilizar objetos com métodos de objeto associados. Só os objetos que não tenham métodos de objeto associados serão visíveis na biblioteca, a partir do editor de formulários de usuário. O desenvolvedor designa a biblioteca associada ao formulário utilizando o último parâmetro do comando EDIT FORM o qual visualiza o formulário usuário. Para abrir a biblioteca, o usuário deve clicar no ícone correspondente na barra de ferramentas do editor: É mostrada a janela da biblioteca: Nota: Uma biblioteca de objetos pode ter até 32.000 elementos. O usuário pode adicionar objetos ao formulário arrastando e soltando ou copiando e colando desde a biblioteca. Todas as propriedades dos objetos inseridos da biblioteca são automaticamente acessíveis aos usuários (coordenadas, dimensões, aparência, etc.). Cada biblioteca de objetos tem um menu contextual que permite acessar aos comandos de edição básicos. No editor de formulários de usuário, só está disponível o comando Copiar. Além disso, não é possível para o usuário excluir, renomear ou adicionar objetos na biblioteca. - 463 - Editar Métodos Visão geral Gestão de métodos Definir as propriedades dos métodos de projeto Janela do editor de métodos Escrever um método Criar e utilizar macros Procurar e substituir nos métodos Executar métodos - 464 - Visão geral É possível associar um método a um objeto 4D para especificar a ação do objeto. Um método é uma série de instruções que realizam automaticamente uma ação. Por exemplo, é possível usar os métodos para: reforçar as regras do seu banco de dados durante a entrada de dados, calcular os valores para os campos e as variáveis, administrar os elementos da interface tais como os combobox, as listas hierárquicas e as guias, administrar ações de arrastar e soltar, atribuir ações a comandos de menus personalizados, criar e controlar múltiplos processos, administrar transações, administrar relatórios personalizados, regular o acesso de um banco multi-usuário. É possível criar cinco tipos diferentes de métodos: Métodos de objeto: associados a objetos individuais do formulário. Métodos de formulário: associados a formulários individuais Triggers: os triggers são executados quando eventos específicos intervem em nível do motor do banco de dados. Métodos de banco de dados: os métodos do banco de dados são executados automaticamente quando ocorrem certos eventos relacionados com a sessão de trabalho. Métodos de projeto: os métodos de projeto podem ser chamados por outros métodos do banco, pelos usuários, pelo servidor Web, ou por elementos de um menu personalizado. Para maiores informações sobre métodos de banco de dados, consulte o capítulo Métodos do Manual de linguagem 4D. de cada comando. Este capítulo oferece informação sobre a utilização do editor de métodos de 4D para criar e modificar métodos. Para maiores informações sobre a linguagem de programação de 4D, consulte Apresentação da linguagem Manual de linguagem 4D, o qual oferece informações detalhadas sobre os comandos de programação e a sintaxe. - 465 - Gestão de métodos Criar ou abrir métodos Os métodos são criados utilizando o editor de métodos. Este editor permite criar, testar e modificar qualquer tipo de método. Esta seção descreve os diferentes modos de criação e abertura de métodos (métodos de objeto, métodos de projeto, triggers e métodos de formulário). Lembre-se que em todas as aplicações já são criados métodos de bancos vazios; você só deve abri-los a partir do Explorador. Nota 4D Server: O bloqueio de um objeto ocorre quando dois ou mais usuários tentam modificar o mesmo método ao mesmo tempo. Se um usuário abre um método no ambiente Desenho, o método é bloqueado. Os outros usuários não podem modificar este método até que o primeiro usuário o libere fechando a janela. Entretanto, é possível abrir o método em modo somente leitura com a finalidade de ler ou copiar certos elementos do método. Criar ou abrir um método objeto Os métodos de objeto são criados para um objeto de um formulário. Para começar, você deve ir ao editor de formulários, com um formulário em tela. Para criar ou abrir um método de objeto no editor de formulários: No editor de formulários, mantenha pressinada a tecla Alt (Windows) ou a tecla Opção (Mac OS) e clique no objeto Ou Selecione o objeto e logo escolha o comando Método de Objeto do menu Objeto. Ou Clique com o botão direito no objeto e escolha Método do objeto no menu contextual. Ou Na lista de propriedades, clique no botão Editar... Aparece uma janela do Janela do editor de métodos, a janela estará vazia se você acaba de criar o método. Criar ou abrir um método projeto É possível criar ou abrir um método de projeto de várias formas. Para criar um método de projeto a partir do menu Arquivo: 1 - Escolha Novo > Método... no menu Arquivo ou utilizando o botão Novo da barra de ferramentas de 4D. 4D exibe a caixa de diálogo Novo método. 2 - Introduza um nome de método. Os nomes de métodos podem ter até 31 caracteres, incluindo letras, números, espaços e o caractere traço inferior (ver Convenções en el manual de Lenguaje de 4D).. 3 – (Opcional) Selecione uma pasta para armazenar o método. Se você selecionar um nome de pasta, o método será localizado nesta pasta. As pastas podem ser utilizadas para organizar os objetos de sua aplicação e são administrados na páginaPágina Início do Explorador. Por padrão, o método é criado no Nível superior, ou seja, fora das pastas. 4 – Clique no botão OK. 4D abre uma janela vazia do editor de métodos onde você pode começar a escrever um novo método. Para criar um método de projeto a partir do Explorador: 1 – Vá à página Current form table do Explorador. 2 – Selecione o elemento Métodos de projeto. 3 – Clique no botão mais baixo da lista. Aparece a caixa de diálogo onde é possível colocar nome ao método e atribui-lo a uma pasta. 4 – Introduza o nome do método e clique em OK. Para abrir um método de projeto a partir do menu Arquivo: - 466 - Escolha Abrir > Método... no menu Arquivo. Aparece a página Página Início do Explorador (ver abaixo). Para abrir um método de projeto a partir do Explorador: 1 – Vá a página Página Início do Explorador. 2 – Distribua o elemento Métodos de Projeto, logo selecione o nome do método a ser aberto. 3 – Faça um duplo clique no nome do método a ser aberto. Ou Selecione o comando Modificar método... no menu contextual, clique com o botão direito no nome do método a ser aberto. O método abre em uma janela do editor. Para abrir um método de projeto a partir do editor de menus: No Editor de menus, clique na área “Nome do método” de um elemento da barra de menus atual Esta área contém o nome do método associado ao elemento selecionado (caso não exista). Clique no botão de edição a direita do menu “Nome do método” O método é exibido em uma nova janela do editor de métodos. Para abrir um método de projeto a partir de uma janela do a del Janela do editor de métodos: 1 – No editor de métodos, selecione o nome do método de projeto a ser aberto. 2 – Escolha Editar método no menu contextual do editor ou pressione Ctrl + K (Windows) ou Comando + K (Mac OS). Ou 1 – Pressione a combinação Alt + clique duplo (Windows) ou Opção + clique duplo (Mac OS) diretamente no nome do método de projeto (seu nome não deve ter espaços). O método é exibido em uma nova janela do editor de métodos. Se 4D não pode identificar o método, é exibida a página Página Início do Explorador. Criar ou abrir um trigger É possível criar um trigger utilizando um atalho no Editor de estrutura ou diretamente no Explorador. Para criar ou abrir um trigger a partir da janela do Editor de estrutura: 1 – Mantenha pressionada a tecla Alt (Windows) ou a tecla Opção (Mac OS) e faça um clique duplo no título da tabela na janela do editor de estrutura. Ou Na janela do editor que exibe a Propriedades de Tabela, clique no botão Editar... Aparece uma janela Janela do editor de métodos, vazia se você acaba de criar o trigger: Para criar ou abrir um trigger a partir do Explorador: 1 – Exiba a Current form tableda janela do Explorador e exiba o elemento “Triggers”. 2 – Selecione a tabela que lhe interessa e clique no botão situado mais abaixo da lista. Ou Faça um clique duplo na tabela que lhe interessa. Aparece o trigger em uma janela do Janela do editor de métodos. Criar ou abrir um método formulário Os métodos de formulários podem ser abertos a partir da Current form table do Explorador ou a partir do Editor de formulários.. Para criar ou abrir um método de formulário a partir do Explorador: 1 – Vá a página Current form tabledo Explorador. 2 – Expanda o elemento “Métodos de formulário de projeto” ou “Métodos de formulários de tabela”, dependendo do tipo de formulário que você queira abrir o método. 3 – (Somente formulários de tabela): exibe a tabela a qual pertence o formulário. 4 – Selecione o formulário no qual que você deseja abrir o método. 5 – Clique no botão localizado mais abaixo da lista. Ou Faça um duplo clique no nome do formulário. - 467 - O método de formulário aparece em uma janela do Janela do editor de métodos. Nota: Também é possível criar ou abrir um método de formulário a partir da Página Formulários do Explorador: clique com o botão direito no nome do formulário e escolha Modificar método do formulário... no menu contextual. Para criar ou abrir um método de formulário a partir do editor de formulários: 1 – Escolha o comando Método de formulário no menu Formulário. Ou Clique com o botão direito em uma área vazia no formulário e escolha Método do formulário no menu contextual. Ou Na Lista de propriedades, clique no botão Editar... localizado junto a linha Método de formulário. O método de formulário aparece em uma janela do Janela do editor de métodos. Excluir métodos É possível excluir a qualquer momento um trigger, método de formulário ou de projeto utilizando o Explorador. Também é possível excluir um método de objeto usando o editor de formulários. Não é possível excluir métodos de banco de dados. Para desativar este tipo de método, apague todas as instruções no método ou as passe como comentários utilizando o símbolo “//’” (utilizado para diferenciar os comentários do código executável). Para maiores informações sobre comentários em métodos, consulte o parágrafo . Excluir um método de projeto, um método de formulário ou um trigger. Para excluir um método de formulário, um método de projeto ou um trigger utilizando o Explorador: 1 - No explorador, vá até Current form table. Tenha certeza que a página Métodos esteja bem, porque certas opções de exclusão são irreversíveis. 2 – Na janela do Explorador expanda o tipo de método que corresponda ao método que você deseja excluir (Métodos de formulário projeto, Métodos de formulários tabela, Triggers ou Métodos de projeto). 3 – Selecione o nome da tabela ou do formulário ao qual o método que você quer excluir esteja associado. Ou Selecione o nome do método de projeto que você deseja excluir. 4D exibe o método no editor de métodos. 4 – Clique no botão excluir localizado na parte inferior da janela do Explorador. Nota Para excluir um método de projeto, também é possível clicar com o botão direito no nome do método de projeto ou escolher Excluir método no menu contextual. Se você excluir um método de formulário ou um trigger, 4D mostra uma mensagem de alerta lhe pedindo para confirmar a operação. Esta eliminação será definitiva. Se você excluir um método de projeto, 4D efetua a operação diretamente. Entretanto, essa exclusão não é definitiva (desde que não se esvazie a lixeira). Para maiores informações, consulte o parágrafo Página Lixeira). Excluir métodos de objeto É possível excluir métodos de objeto utilizando o editor de formulários. Em alguns casos, excluir os métodos de objeto desnecessários pode fazer com que a execução de banco de dados seja mais rápida. Para excluir um método 1. Vá ao formulário que contém o(s) método(s) que você quer excluir. 2. Selecione o(s) objeto(s) que estão associado(s) aos métodos de objeto que você quer excluir. 3. Escolha o comando Excluir método do objeto do menu Objeto. 4D exclui os métodos de objeto dos objetos selecionados. Nota: Se você excluir um método de objeto por equivocação, selecione Desfazer no menu Edição. Importar e exportar métodos É possível importar e exportar métodos de banco, triggers, projeto, e objeto, em forma de arquivos. Essas funções são acessíveis através dos comandos do menu Método da Janela do editor de métodos. Quando selecionar o comando Exportar método... aparece uma caixa de diálogo padrão de salvar arquivos, permitindo que corrija o nome, localização e formato do arquivo a ser exportado(ver mais adiante). Do mesmo modo que a impressão, a exportação não considera o estado contraído das estruturas de código, a totalidade do código é exportada. Quando selecionar o comando Importar método... aparece uma caixa de diálogo padrão de abrir archivos, permitindo escolher o arquivo a ser importado. - 468 - A importação substitui o texto selecionado no método. Para substituir um método existente por um método importado, selecione todo o conteúdo do método antes de realizar a importação. A função importar/exportar é multiplataforma: um método exportado em Mac OS pode ser importardo em Windows e vice-versa; 4D se encarrega da conversão de caracteres quando seja necessário. Formatos de arquivo dos Métodos 4D pode exportar e importar os métodos em dois formatos: Método 4D (extensão “.c4d” sob Windows): neste formato, os métodos são exportados em forma codificada. Os nomes dos objetos são transformados em referências (tokenized). Este formato é utilizado particularmente para fazer um intercâmbio de métodos entre aplicações 4D e plug-ins em diferentes linguagens. Mas não é possível visualizá-los em um editor de texto. Texto (extensão “.txt” ): neste formato, os métodos são exportados somente em formato texto. Neste caso, os métodos são perfeitamentes legíveis utilizando um editor de texto padrão. Entretanto, é necessário que as linguagens das aplicações 4D utilizadas para exportar e importar sejam idênticos. Nota: Como padrão, desde 4D v15, todas as versões de 4D partilham a mesma linguagem e as mesmas configurações de entrada para números reais e datas, o que facilita partilhamento de código entre desenvolvedores usando copiar/colar ou exportando métodos. Ainda é possível usar configurações locais (como nas versões prévias de 4D) marcando a opção Use regional system settings nas preferências de 4D (veja Página Métodos). - 469 - Definir as propriedades dos métodos de projeto Depois de criar um método de projeto, é possível renomeá-lo e modificar suas propriedades. As propriedades dos métodos de projeto definem principalmente as condições de acesso e de segurança: acesso dos usuários como também acesso para o servidores integrados ou os serviços. Os outros tipos de métodos não têm propriedades específicas. Suas propriedades estão relacionadas aos objetos aos que estão associados. Para modificar as propriedades de um método de projeto: 1 – No WA SET URL FILTERS, selecione o comando Propriedades do método... no menu Método. Ou No Página Métodos, do Explorador, faça clique direito no método projeto e selecione Propriedades do método... no menu contextual ou no menu de opções. Aparece a caixa de diálogo Propriedades do método Nota: A função de modificação global permite modificar uma propriedade de todos ou parte dos métodos de banco de dados (ver Alteração global de atributos de métodos). Nome É possível alterar o nome de um método de projeto na área "Nome" da janela de propriedades dos métodos ou desde o Explorador. O novo nome deve respeitar as regras dos nomes de 4D (ver Convenções no manual Linguagem de 4D). Se já existe um método com o mesmo nome, 4D mostra uma mensagem que indica que o nome do método já foi usado. Se é necessário, 4D ordena novamente a lista de métodos. Atenção: mudar o nome de um método já usado no banco pode invalidar os métodos e fórmulas que usam o antigo nome e há o risco de afetar o funcionamento da aplicação. Pode renomear o método manualmente mas se recomenda usar a função para renomear os métodos projeto, descrita na seção Renomear. Com esta função, pode atualizar automaticamente o nome onde se chama o método no modo Desenho. Com 4D Server, o nome do método é mudado no servidor quando termina de editar o nome. O nome do método é alterado no servidor quando se termina de editar o nome. Se mais de um usuário estiver modificando o nome do método ao mesmo tempo, o nome final do método será o nome especificado pelo último usuário ao terminar de editar o - 470 - nome. É recomendável definir um proprietário para o método de modo que somente certos usuários possam alterar o nome do método. Nota: os métodos de banco de dados não podem ser renomeados, o mesmo acontece com os triggers, métodos de formulário e métodos de objeto, os quais estão atados a objetos e pegam os nomes dos objetos relacionados. Privilégios de acesso e de proprietário É possível controlar o acesso aos métodos definindo os privilégios de acesso e proprietário para grupos de usuários. Somente um grupo pode atribuído para cada privilégio utilizando a lista suspensa de Acesso e Proprietário da caixa de diálogo Propriedades do método. Para maiores informações sobre a criação de um sistema de senhas de acesso com usuários e grupos, consulte a seção Usuários e grupos. A lista suspensa Acesso define o grupo que pode executar o método. Se um usuário que não está no grupo tenta executar o método, 4D mostra uma mensagem indicando que seus privilégios de acesso não lhe permitem executar o método. A lista suspensa Proprietário controle que grupo pode editar o método no ambiente Desenho. Se um usuário que não está no grupo tenta editar o método no ambiente Desenho, 4D mostra uma mensagem indicando que o usuário não tem o privilégio de acesso para editar o método. Os usuários que aparecem em ambos os grupos podem utilizar ou modificar o formulário sem restrições. Atributos Os atributos permitem controlar a utilização e as chamadas do método projeto em diferentes contextos. Note que os atributos podem ser definidos globalmente para uma seleção de métodos projeto utilizando o Explorador (ver a seguinte seção). Invisível Se você não quer que os usuários possam executar um método de projeto utilizando o comando Método... do menu Executar, é possível tornar o método Invisível na caixa de diálogo Propriedades do método. Um método invisível não aparece na caixa de diálogo de execução de métodos (ver o parágrafo A partir da caixa de diálogo de execução de métodos). Um método de projeto invisível segue estando disponível para os programadores do banco de dados, permanece listado na página Current form table e na lista de rotinas do editor de métodos. Disponível através de 4DACTION, 4DMETHOD e 4DSCRIPT Esta opção permite reforçar a segurança do servidor Web de 4D: quando não está selecionada, o método de projeto não pode ser executado através de uma solicitação HTTP que contenha a URL especial 4DACTION de chamada de métodos (assim como o antigo URL 4DMETHOD) nem as etiquetas especiales 4DSCRIPT, 4DTEXT e 4DHTML (como también las antiguas etiquetas 4DVAR y 4DHTMLVAR). Para maiores informações, consulte Ações URL e Formulário e Etiquetas HTML 4D no Manual de linguagem de 4D. No Explorador os métodos de projeto disponíveis tem um ícone específico: . Por razões de segurança, esta opção não está selecionada por padrão. Deve indicar individualmente os métodos que podem ser executados através dos URLs e as etiquetas especiais. Oferecido como serviço Web Este atributo lhe permite publicar o método atual como um Serviço Web através de uma solicitação SOAP. Para maiores informações, consulte o parágrafo Publicar ou utilizar serviços Web. Quando esta opção está selecionada, a opção Publicado em WSDL está ativada. Os métodos de projeto oferecidos como Serviço web tem um ícone específico: . Nota: não é possível publicar um método como serviço web se seu nome inclui caracteres que não cumpram com a nomenclatura XML (por exemplo os espaços). Se o nome do método não cumpre com a nomenclatura, 4D não atribui a propriedade. Publicado em WSDL Este atributo está ativo apenas se o atributo "Oferecido como serviço web" estiver selecionado. Ele permite incluir o método atual no arquivo WSDL da aplicação 4D. Para maiores informações sobre este ponto, consulte o parágrafo Geração de WSDL. No Explorador, os métodos de projeto que são oferecidos como um serviço Web e publicados em WSDL tem um ícone - 471 - específico: . Compartilhado entre componentes e banco principal Este atributo é utilizado em caso de uso de componentes. Ao selecionar esta opcão, você indica que o método estará disponível para os componentes se a aplicação é utilizada como banco principal. Caso contrário, quando a aplicação é utilizada como componente, o método estará disponível para os bancos principais. Para maiores informações sobre componentes, consulte o capítulo Desenvolver e instalar componentes 4D. Disponível via SQL Quando selecionada, esta opção autoriza o motor SQL de 4D executar o método de projeto. Por padrão, esta opção não está selecionada, o que significa que, a menos que seja autorizado explicitamente, os métodos de projeto 4D estão protegidos e não podem ser chamados pelo motor SQL de 4D. Esta propriedade aplica a todas as pesquisas SQL internas e externas, executadas através do driver ODBC, o código SQL inserido nas etiquetas Begin SQL/End SQL ou o comando QUERY BY SQL . Notas: Inclusive se um método tem o atributo “Disponible vía SQL”, os acessos definidos no nível das Preferências e propriedades do método são levados em consideração para a execução do método. A função ODBC SQLProcedure retorna únicamente os métodos de projeto que tem o atributo “Disponível via SQL” selecionados. Para maiores informações sobre o uso do motor SQL de 4D, consulte Princípios para Integração 4D e motor SQL de 4D no Manual de referência SQL de 4D. Executar no servidor Este atributo só é levado em consideração para uma aplicação 4D em modo cliente/servidor. Quando esta opção estiver selecionada, o método de projeto sempre é executado no servidor, sem importar como é chamado. Para maiores informações sobre esta opção, consulte a seção Executar no atributo servidor do Manual de Referencia de 4D Server. Disponível via as chamadas 4D Mobile Esta opção configura a disponibilidade e o alcance da ação para o método como parte de um link 4D Mobile com um servidor Wakanda. Para obter mais informação sobre esta opção, consulte Configuração da base de dados 4D no manual 4D Mobile. Alteração global de atributos de métodos A caixa de diálogo "Atributos dos métodos", permite modificar um atributo de método projeto (Invisível, Oferecido como serviço web, etc) para todos ou alguns dos métodos de projeto do banco de dados em somente uma operação. Esta função é especialmente útil para modificar os atributos de um grande número de métodos de projeto. Da mesma forma é possível utilizar durante o desenvolvimento para aplicar atributos comuns a grupos homogêneos de métodos. Para modificar globalmente os atributos de métodos: 1. No Página Métodos do Explorador 4D, desloque o menu de opções e selecione o comando Mudança global de atributos... Aparece a caixa de diálogo “Atributos de métodos”: - 472 - 2 - Na área “Nome de método(s) a alterar”, introduza uma cadeia de caracteres que lhe permite designar os métodos que você quer modificar globalmente. A cadeia de caracteres é utilizada como critério de pesquisa dos nomes de métodos. Utilize o caractere @ para ajudar a definir os grupos de métodos: 1. para designar os métodos cujos nomes comecem por..., digite @ ao final da cadeia. Por exemplo: web@. para designar os métodos cujos nomes contém..., digite @ no meio da cadeia. Por exemplo: web@write. para designar os métodos cujos nomes terminam em..., digite @ ao início da cadeia. Por exemplo: @write. para designar todos os métodos, digite @ na área. Notas: A pesquisa não leva em consideração diferença entre maiúsculas e minúsculas. É possível introduzir vários caracteres @ na cadeia, por exemplo dtro_@web@pro.@ 3- Na área “Atributo a alterar”, escolha um atributo da lista suspensa, logo clique no botão de opção Verdadeiro ou Falso correspondente ao valor aplicado. Nota: Se o atributo “Publicado en WSDL” é definido como Verdadeiro, só será aplicado aos métodos de projeto que contenham o atributo “Oferecido como Serviço Web”. 4 - Clique em Aplicar. A modificação é aplicada instantaneamente a todos os métodos de projeto atribuídos pela cadeia de caracteres introduzida. - 473 - Janela do editor de métodos Por padrão, uma janela do editor de métodos tem várias áreas: uma caixa de ferramentas, uma área de edição, uma área de listas, uma barra de estado, e uma área de inserção de pontos de quebra. Pode personalizar a área de edição dos métodos, por exemplo, adicionando listas ou ocultando os números das linhas. Barra de ferramentas Cada janela do editor de métodos contém uma barra de ferramentas que lhe permite acessar instantaneamente as principais funções relativas a execução e edição de métodos. este botão provoca a execução do método. Utilizando o menu associado ao botão, é possível selecionar o tipo de execução. Somente Executar o método: os métodos de projeto e os métodos de banco podem ser executados utilizando este botão. Para maiores informações sobre estes comandos, consulte o parágrafo Executar métodos. ao clicar no ícone buscar aparece a caixa de diálogo Buscar, permitindo efetuar uma pesquisa no método atual. O combo Box Buscar associado pode ser utilizado para iniciar uma pesquisa padrão diretamente: para fazer isto, introduza a cadeia de caracteres a ser buscada e pressione Enter ou Retorno de carro. Intro ou Retorno de carro.O combo box também lista as últimas pesquisas efetuadas; para voltar a fazer uma pesquisa, selecione-a no menu do combo box. Para maiores informações, consulte o parágrafo Procurar e substituir nos métodos. este botão mostra um menu que lista todas os comandos macros Macros disponíveis. Para maiores informações, consulte o parágrafo Criar e utilizar macros. Estes botões permitem expandir e contrair todas as estruturas de Expandir tudo / Contrair tudo programação do método. Para maiores informações, consulte o parágrafo Escrever um método. este botão permite mostrar ou ocultar as listas na janela. Para maiores Mostrar ou ocultar listas informações, consulte a seção “Área de listas”. este botão mostra a caixa de diálogo Propriedades do método Propriedades do método (métodos de projeto somente). Para maiores informações, consulte o parágrafo Definir as propriedades dos métodos de projeto. este botão mostra um menu que lista os últimos 20 elementos copiados Últimos valores da área de em uma janela. Se você selecionar um elemento, o elemento é copiado transferência no lugar onde está localizado o cursor. estes 9 ícones representam as 9 áreas de transferência disponíveis no editor de métodos. Um ícone branco contém um número que indica que uma área de transferência contém dados, um ícone laranja indica uma Área de transferência área de transferência vazia. Pode utilizar estas áreas de transferência fazendo clique nos ícones ou utilizando as combinações de teclas. Para maior informação, consulte Escrever um método. este ícone indica que o método está bloqueado por outro usuário. Clicar Bloqueio (4D Server unicamente) no cadeado permite recarregar o método (e portanto mostrar as alterações efetuadas por outro usuário.) Área de edição A área de edição contém o texto do método. Você introduz e modifica o texto do método nesta área . O editor cria automaticamente as identações no texto e colore os elementos de sintaxe para fazer mais clara a estrutura do método. É possível personalizar a visualização desta área. Toda personalização se passa automaticamente em todas as janelas - 474 - do editor. fonte e tamanho de fonte: a fonte dos caracteres utilizada na área de edição e seu tamanho são definidas na Página Métodos das Preferências de 4D. Também pode mudar o tamaño da fonte utilizando o submenu Ver> do menu Método: os comandos Aumentar a fonte e Reduzir a fonte permitem variar o tamanho da fonte por pontos. estilo e cor dos elementos de sintaxe: pode atribuir uma cor e/ou um estilo específico a cada tipo de elemento da linguagem 4D e SQL. Para fazer isso, clique com o botão direito em um elemento da linguagem (variável, palavra clave, etc.) e escolha uma opção do menu Estilo. A modificação se aplica a todos os elementos do mesmo tipo na janela atual como também em todas as janelas do editor. Também pode definir estas opções na Página Métodos das Preferências de 4D. espaços: pode mostrar os espaços entre palavras utilizando pontos (.) em lugar de "espaços em branco". Para fazer isso, escolha Ver > Espaços no menu Método (uma marca de seleção indica se mostram os espaços). Esta função aplica a todos os elementos do código (nomes de comandos, variáveis, comentários, etc.) largura das indentações de código: pode definir esta opção na Página Métodos das Preferências de 4D. cores da interface: permite modificar as diferentes cores utilizados na interface da área de edição (sublinhado, fundo, etc.) utilizando as opções definidas na Página Métodos das Preferências de 4D. Para mais informação sobre a entrada de código nesta área, consulte a seção Escrever um método. Área de listas A área de listas permite mostrar uma ou várias listas de elementos necessárias para escrever os métodos (comandos, constantes, formulários, etc.). É possível escolher o número e conteúdo das listas publicadas na janela. Mostrar as listas Por padrão, o editor de métodos exibe quatro listas. É possível aumentar ou reduzir a largura de cada lista arrastando suas partes. Da mesma forma é possível ajustar o tamanho da área das listas em relação a área de edição arrastando a linha de separação entre as duas zonas: Você deve fazer um clique duplo em um elemento de uma lista para inseri-lo na área de edição, onde está localizado o cursos. Para modificar o conteúdo de uma lista, clique em uma área de título da lista: aparece um menu suspenso, que lhe permite escolher o tipo de elemento a ser exibido. Para adicionar ou excluir uma lista, clique na área de título de uma das listas e escolha o comando correspondente no menu suspenso (ver a seguir) Note que pelo menos uma lista deve estar suspensa na janela do editor. O comando Excluir esta lista está desativado ao clicar na última lista. Se você quiser ocultar todas as listas, deve clicar no botão , ou ocultá-las automaticamente nas Preferências do banco de dados (ver a seguir). Também é possível ocultar em todas as janelas desmarcando a opção Ver>Listas no menu Método (uma marca de seleção indica se as listas são mostradas) ou desmarcando a opção Mostras as listas na Página Métodos nas - 475 - Preferências 4D, aba Opções. Os métodos abertos devem ser fechados e abertos novamente para que se considerem as modificações efetuadas nas Preferências. Pode guardar os parâmetros definidos na janela do editor de métodos em forma de modelo. Para maior informação, consulte Salvar como modelo. Descrição dos tipos de listas É possível exibir diferentes listas de lementos na área de listas da janela do editor de métodos. Tabelas e campos: nomes das tabelas e campos do banco em forma de lista hierárquica. Quando se insere um nome de campo no método fazendo clique duplo no seu nome, 4D o insere respeitando a sintaxe e adiciona o nome da tabela. Tabela (submenu): nomes de campos da tabela selecionada utilizando o submenu. Tabela atual: nomes de campos da tabela atual (disponível nos triggers, os métodos de formulário e os métodos de objeto). Formulários de projeto: nomes dos formulários de projeto do banco. Ao fazer um clique duplo em um nome de formulário de projeto, 4D o insere respeitando a sintaxe: o nome do formulário é inserido entre aspas. Formulários de tabela: nomes de tabelas e de formulários tabelas do banco em forma de lista hierárquica. Quando você inserir um nome de formulario no método ao fazer um clique duplo em seu nome, 4D o insere respeitando a sintaxe: o nome do formulário é inserido entre aspas e está precedido do nome da tabela e um ponto e vírgula. Por exemplo: [Tabela];"Formulario". Métodos: nomes dos métodos de projeto do banco Todas as pastas: nomes das pastas e sub-pastas de objetos definidos no banco em forma de lista hierárquica. As pastas permitem organizar os objetos de maneira personalizada. As pastas são administradas a partir da Página Início do Explorador. Pastas (submenu): conteúdo da pasta selecionada utilizando o submenu. Macros: nomes de macros definidas para o banco (ver Criar e utilizar macros). Comandos: comando da linguagem 4D em ordem alfabética. Comandos por temas: comandos por tema da linguagem de 4D classificados por tema em forma de lista hierárquica. Barras de menus: nomes e números de barras de menus criadas no editor de barras de manus de 4D (ver el capítulo Menus e barras de menus). Constantes: contantes de 4D e dos possíveis plug-ins, classificados por tema em forma de lista hierárquica. Listas: nomes das listas. Imagens: nome e números de imagens armazenadas na Biblioteca de imagens de 4D. Comandos de todos os plug-ins: comandos dos plug-ins instalados no banco, classificados por temas em forma de lista hierárquica. Comandos do plug-in (submenu): comandos de um plug-in específico selecionado utilizando o submenu. Por padrão, estão disponíveis os seguintes plug-ins: 4D Internet Commands: este plug-in adiciona funções de Internet adicionais a 4D, em particular para a gestão de e-mails. Ver 4D Chart: 4D Chart é um editor de gráficos integrado de 4D. Ver 4D Chart Language. 4D Chart Language OLE_Tools (Somente Windows): OLE_Tools é oferecido com a versão Windows de 4D, é um plug-in para o controle de áreas OLE. Ver OLE Tools. Palavras chaves SQL: conjunto de palavras chaves reconhecidas pelo analizador sintático SQL de 4D. Esta lista inclui os comandos (por exemplo SELECT), as cláusulas (WHERE) como também as funções (ABS). Funções SQL: funções SQL de 4D. Nota: exceto o elemento Macros, todas as listas estão em ordem alfabético. Área de pontos de interrupção Esta área, localizada à esquerda da área de edição, permite visualizar os números de linhas e inserir diretamente os pontos de interrupção junto a instruções específicas. Os pontos de interrupção são úteis durante a fase de depuração de um método. Eles param a execução de seu código em lugares específicos e mostram o depurador. Para inserir um ponto de interrupção, clique na área de pontos de interrupção no lugar onde você quiser localizá-lo e escolha o comando Comutar ponto de interrupção no menu contextual do editor. Um ponto vermelho indica a presença de um ponto de interrupção. É possível visualizar a localização de todos os pontos de interrupção presentes no banco de dados no Explorador de Execução. Para desativar temporariamente um ponto de interrupção ou modificar suas propriedades, pressione a tecla Alt - 476 - (Windows) ou a Opção (Mac OS) enquanto clica no ponto de interrupção ou selecione Modificar ponto de interrupção... no menu contextual do editor.. Aparece a caixa de diálogo de Propriedades do ponto de interrupção. Para uma descrição completa dos pontos de interrupção, consulte Ponto de Interrupção no Manual de linguagem 4D. Para excluir um ponto de interrupção, clique no ponto vermelho ou escolha novamente o comando Comutar ponto de interrupção no menu contextual. Mostrar/Ocultar números de linhas Você pode exibir números de linha em cada janela do editor de métodos. A exibição de números de linha pode ser ativada ou desativada por padrão usando a opção Mostrar números de linhas no Página Métodos do 4D Preferências. Também é possível alterar esta exibição separadamente para cada janela do editor utilizando o método Mostrar/Ocultar números de linha do menu Modo. A exibição de números de linha melhora a navegação na janela. O comando Ir para a linha nº... do menu Método permite que você aproveite essa exibição (consulte "Ir para a linha nº" de Procurar e substituir nos métodos). Barra de estado A barra de status no canto inferior direito do editor exibe a posição do cursor o tempo todo: Ln: número da linha Col: número da coluna, ou seja, o nível entre a hierarquia de estruturas de programação. O primeiro nível é 0. O número de colunas é útil em caso de depuração, já que esta informação pode ser fornecida pelo intérprete no caso de erro no código. Ch: localização do caracter na linha. Salvar como modelo É possível salvar os parâmetros definidos na janela do editor de métodos em forma de “modelo”. Uma vez salvo o modelo, os parâmetros definidos serão utilizados em cada nova janela do editor de formulário que é aberto. Os parâmetros a seguir são salvos no modelo: Tamanho relativo da área de edição e das listas Número de listas Localização e conteúdos de cada lista Largura relativa de cada lista Para salvar uma janela do editor de métodos como modelo, escolha o comando Salvar como modelo no menu Método. O modelo é salvo imediatamente (não aparece nenhuma caixa de diálogo) com as preferências da aplicação 4D. Se já existir um modelo, ele é substituído. - 477 - Escrever um método O editor de métodos de 4D funciona como um editor de texto. Geralmente, o processo de escrever um método é uma combinação entre a escrita do texto, a seleção de componentes e o arrastar elementos a partir do Explorador e outras janelas. Também é possível utilizar vários tipos de funções para acelerar a criação de métodos. É possível movimentar-se pelo conteúdo dos métodos, os quais podem incluir até 32.000 linhas de código ou 2 Gb de texto. O editor de métodos de 4D realiza uma primeira verificação da sintaxe dos métodos. São realizadas verificações adicionais durante a execução do método. Nota sobre linguagem de comandos e constantes Em anteriores versões de 4D v15, a versão francesa do programa oferecia uma linguagem de programação em francês, enquanto todas as outras versões (Inglês, Alemão, etc.) continha uma linguagem "universal", em Inglês. Por exemplo, o comando No. 53 foi nomeado STOCKER ENREGISTREMENT em francês e SAVE RECORD em todas as outras línguas. Configurações locais também eram utilizadas para a entrada de números reais e datas. Este foi modificada a partir de 4D v15: por padrão, editor de 4D método usa o modo internacional "English-US", independentemente da linguagem 4D do aplicativo ou as configurações do sistema local e comando No. 53 agora é chamado SAVE RECORD na versão francesa de 4D. Listas, janelas com digitação antecipada, ajuda on-line, etc., exibem os nomes dos comandos e constantes em Inglês. Para obter mais informações sobre essa configuração, consulte Introdução a linguagem 4D Ainda é possível restaurar o modo anterior, com base nas configurações locais, utilizando a opção "Usar configurações do sistema regional de preferências"(see Página Métodos). Claro que, independentemente da configuração utilizada, os princípios para o código escrito descritos nesta seção permanecem os mesmos. 4D v15 Mode (default): Local mode: Escrever e editar texto 4D utiliza as técnicas de edição de texto padrão para escrever e editar no editor de métodos. A medida que você escreve, aparecem os caracteres no lugar onde está localizado o cursor. Você termina cada linha pressionando a tecla Retorno de carro (Mac OS) ou Enter (Windows). Nota: a tecla Enter do teclado numérico se comporta diferente da tecla Enter do teclado numérico. Use a tecla Enter do teclado numérico para forçar a 4D a verificar a sintaxe da linha de código, sem passar a linha seguinte. O editor de métodos utiliza convenções de visualização padrões (estilo, cor) para os nomes dos comandos, os comandos de plug-ins, os métodos, etc. É possível modificar estas convenções (ver Janela do editor de métodos). A - 478 - medida que escreve, quando valida sua entrada, 4D avalia o texto da linha e aplica o formato de saída apropriado. 4D também indenta cada linha em seu nível apropriado com relação à linha anterior quando se utilizam estruturas de programação (por exemplo, If, End if). Quando você pressiona a tecla Retorno/Enter, 4D avalia o texto da linha e aplica o formato de saída apropriado. 4D também indenta cada linha em seu nível apropriado com relação à linha anterior quando se utilizam estruturas de programação (por exemplo, If, End If). É possível utilizar as teclas de setas para se mover rapidamente de uma linha a outra. O uso das setas para se mover por várias linhas é mais rápido que clicar porque o editor retarda a verificação da sintaxe das linhas. Em Windows, o editor de código inclui um IME (Input Method Editor) permitindo facilitar a edição do código nos sistemas japonês ou chinês. O editor de métodos inclui vários atalho de navegação listados em “Navigational Keyboard Shortcuts”. Adicionar elementos ao método através de arrastar e soltar 4D lhe permite utilizar arrastar e soltar durante a escrita de métodos. É possível arrastar e soltar elementos a partir do Explorador, dentro de um método, ou entre dois métodos. Desde o Explorador, pode arrastar e soltar: nomes de tabelas, campos, formulários e métodos de projeto a partir da página Início, nomes de tabelas e campos a partir da página Tabelas, nomes de tabelas e formulários a partir da página Formulários, nomes de métodos de projeto e de formulários a partir da página Métodos, constantes a partir da página Constantes, comandos 4D a partir da página Comandos, Ao arrastar e soltar um componente, 4D sempre utiliza a sintaxe apropriada para o componente. Por exemplo, se você arrasta o nome do campo “Nome” da tabela [Empregados], aparece no editor de métodos como “[Empregados]Nome. Da mesma forma, se você arrastar o nome do formulário “Entrada” da tabela Empregados, aparece no editor de métodos como “[Empregados]; “Entrada”. Quando você insere um comando arrastando-o a partir do Página Comandos do Explorador, aparece com sua sintaxes, ou seja cada um de seus parâmetros, no editor de métodos. Utilize a sintaxe que você necessita para adaptá-la ao seu uso. Esta característica lhe lembra os parâmetros que o comando espera. Arrastar e soltar dentro de um método ou entre dois métodos diferentes: No editor de métodos, o mecanismo de arrastar e soltar é ativado assim que se realiza uma seleção de texto. Por padrão, o mecanismo de arrastar e soltar move a seleção de texto. Para copiar esta seleção, mantenha pressionada a tecla Ctrl (Windows) ou Opção (Mac OS) durante a operação. Múltiplas instruções Agora pode escrever uma única instrução em várias linhas, terminando cada linha da instrução com o caractere "\". 4D considerará todas as linhas de uma só vez. Por exemplo, as duas instruções baixo são equivalentes Mudar para Maiúscula/minúscula Vários comandos permitem modificar automaticamente a caixa dos caracteres selecionados. Esses comandos são acessíveis através do submenu Maiúscula/minúscula no menu Método, ou no menu contextual do editor: MAIÚSCULAS/ minúsculas: passa os caracteres selecionados a maiúsculas ou minúsculas. cameLlúsculas / CameLlúsculas: passa os caracteres selecionados a "camellúsculas". Isso consiste em passar a maiúsculas cada primeira letra de um grupo de palavras. Este tipo de notação é utilizado com frequência para a nomenclatura de variáveis. dataContrato e DataCompra são exemplos das dois variantes da escritura em camellúsculas. Quando aplica um desses comandos a uma seleção de texto, os espaços e caracteres "_" são apagados e a primeira letra da cada palavra passa a maiúsculas. Inverter expressão A função Inverter expressão permite reverter os argumentos de uma expressão atribuindo um valor. Por exemplo, variável1:=variável2 - 479 - se converte em variável2:=variável1 Esta função é extremamente útil para reverter um conjunto de tarefas utilizadas para ler ou definir propriedades, ou para corrigir erros de entrada. Para utilizar esta função, selecione a ou as linhas a serem modificadas, logo selecione o comando Inverter expressão no menu Método ou no menu contextual da área. Dentro da seleção, só serão modificadas as linhas que atribuem um valor. Copiar-colar múltiplos e numeração da área de transferência Além da operação padrão de copiar e colar, a área de transferência 4D oferece duas funções adicionais que lhe permitem trabalhar com o conteúdo da área de transferência: O programa conserva em memória as últimas 10 ações de “copiar” ou “colar” realizadas no editor de métodos durante a sessão atual. Cada um dos diferentes conteúdos salvos podem ser reutilizados a qualquer momento. Para fazer isto, utilize o comando Histórico da área de transferência do menu contextual do editor de métodos ou o botão “Últimos valores da área de transferência” da barra de ferramentas: São exibidos os primeiros caracteres dos elementos copiados ou cortados. A seleção de um elemento provoca a inserção na localização atual do cursor. Nove pranchetas numeradas adicionais estão disponíveis e podem ser utilizados diretamente utilizando as combinações de teclas ou os botões da barra de ferramentas do editor: Copiar o texto selecionado em uma prancheta Windows Ctrl+Alt+clique em um ícone de Mac OS pranchetas Ctrl+Alt+número da prancheta Cmd+Opção+clique em um ícone de pranchetas Cmd+Opção+número das pranchetas Colar o conteúdo de uma prancheta na localização do cursor Ctrl+clique em um ícone da prancheta Ctrl+número da prancheta Cmd+clique em um ícone de prancheta Cmd+número da prancheta Note que deve utilizar as teclas do teclado numérico ou utilizar as combinações necessárias para acessar as teclas numeradas do teclado alfanumérico. Mover linhas Pode mover diretamente a linha onde está o cursor sem ter que selecionar a linha, usando os comandos Mover para cima, e Mover para baixo, no menu Método. Também pode usar a combinação Alt/Opção + Flecha para cima ou Flecha para baixo. Barras de mudança Barras de cores permitem visualizar instantaneamente as linhas de código que modificadas desde a abertura do método: As barras de mudança mudam de cor para indicar se as modificações são guardadas ou não: amarelo: a linha foi modificada e o método não foi guardado ainda. verde: a linha foi modificada e o método foi salvado. Função autocompletar O editor de métodos tem uma função de “autocompletar”. 4D sugere automaticamente comandos baseado nos primeiros caracteres escritos. No exemplo a seguir, a entrada da string “cop” faz com que apareça um triângulo azul que indica que várias sugestões estão disponíveis: Nota: Quando os caracteres escritos correspondem a somente um valor possível, este valor sugerido aparece em cinza - 480 - (e é inserido ao pressionar a tecla Tab): ---> Se há várias sugestões disponíveis, 4D as mostra em uma lista suspensa quando se pulsa a tecla Tab: A lista está em ordem alfabética. Escolha o valor fazendo duplo clique nele, usando as teclas de teclado e logo pressione Enter, Retorno de carro ou Tab para inserir o valor selecionado. Por padrão, também pode inserir um valor sugerido pressionando um dos seguintes delimitadores ( ; : = < [ { depois de selecionar um valor: o valor se insere a continuação, pronto para a entrada. + ( key --> Nota: pode desabilitar o uso de delimitadores para insertar valores sugeridos na Página Métodos das preferências usuário. Pode pressionar a tecla Esc para fechar a lista suspensa ou pode seguir escrevendo enquanto está aberta. Os valores sugeridos na lista pop-up e são atualizados em função dos caracteres adicionais introduzidos. Se os caracteres introduzidos correspondem a diferentes tipos de objetos, a lista os mostra em seu estilo atual. Os seguintes tipos de objetos podem ser mostrados: Comandos 4D Comandos SQL Métodos usuário Nomes de tabela Nomes de campo Constantes Variável local, processo ou interprocesso, declarada no método Comandos de plug-in Palavras chave 4D Palavras chave SQL Macros (que aparecem entre < >) Nota: por razões práticas, pode desativar l visualização automática da lista de sugestões para as constantes, variáveis locais e interprocessos e/ou as tabelas. Estas opções se encontram na Página Métodos das preferências de usuário. Selecionar texto Selecionar bloco A função Selecionar bloco permite seleccionar o “bloco pai” so código que contém o cursor. O bloco pai pode estar definido por: aspas parêntesis uma estrutura lógica (If/Else/End if, While/End while, Repeat/Until Case of/End case), ou, colchetes. Se um bloco de texto já estiver selecionado, a função seleciona o nível de bloco pai superior e assim sucessivamente, até que todo o método esteja selecionado. Ao pressionar Ctrl+Shift+B (Windows) ou Comando+Shift+B (Mac OS) permite reverter esta operação e deselecionar o último bloco pai selecionado. - 481 - Nota Se o ponto de inserção está localizado em uma estrutura de tipo If ou Else o bloco anexo será o que contenha, respectivamente a instrução If ou Else Clique duplo Poder dar um duplo clique para selecionar "palavras" individuais. Quando o nome de um elemento de referência (comando, constante, método, etc.) contém espaços, pode selecionar o nome completo (incluindo os espaços) usando a combinação Alt/opção + clique duplo. Atalhos de teclado de navegação Diferentes atalhos de teclado para navegar o código estão disponíveis no editor de métodos de 4D. Nota: em Mac OS, substitua a tecla Ctrl (Windows) pela tecla Comando. Atalho Ação Cria e aumenta a seleção, caractere por caractere, para a direita, ou reduz a seleção, caractere por caractere, para a esquerda [Shift]+[flecha Reduz a seleção, caractere por caractere, para a direita ou cria e aumenta a seleção, esquerda] caractere por caractere, para a esquerda [Shift]+[flecha abaixo] Cria e aumenta uma seleção, linha por linha, de cima pra baixo [Shift]+[flecha acima] Cria e aumenta uma seleção, linha por linha, de baixo pra cima [Ctrl]+[Shift]+[flecha Cria e aumenta a seleção, palavra por palavra, para a direita direita] [Ctrl]+[Shift]+[flecha Reduz a seleção, palavra por palavra, para a direita ou cria e aumenta a seleção, palavra por esquerda] palavra, para a esquerda [Ctrl]+[flecha direita] Move o ponto de inserção, palavra por palavra, de esquerda a direita [Ctrl]+[flecha Move o ponto de inserção de inserção, palavra por palavra de direita a esquerda esquerda] [Home] Localiza o ponto de inserção ao começo da linha [End] Localiza o ponto de inserção ao final da linha [Ctrl]+[Home] Localiza o ponto de inserção ao princípio do método [Ctrl]+End Localiza o ponto de inserção ao final do método [Shift]+[Home] Seleciona todos os caracteres na linha que estão a esquerda do cursor [Shift]+[End] Seleciona todos os caracteres na linha que estão localizados a direita do cursor Movimenta os conteúdos do método, página por página, de baixo para cima (não modifica o [PgUp] ponto de inserção) Movimenta os conteúdos do método, página por página, de cima para baixo (não modifica o [PgDn] ponto de inserção) [Shift]+[flecha direita] Verificar e corregir erros de sintaxe 4D verifica automaticamente a sintaxe do método para ver se está correta. Ao introduzir um texto ou selecionar um componente que não está correto sintaticamente, 4D especifica o erro na área de sintaxe e indica a expressão incorreta, . Quando passa o mouse sobre os símbolo, uma mensagem de ajuda mostra a causa do erro: Ao introduzir código, é possível verificar imediatamente a sintaxe da linha atual (sem passar à linha seguinte) pressionando a tecla Enter do teclado numérico. 4D verifica a linha, a formata, indica os erros e localiza o cursor ao final da linha. Quando uma linha de um método é marcada por não respeitar a sintaxe, verifique e modifique a entrada. Se a linha é correta, 4D volta ao estilo padrão. A validação de um método inteiro é efetuada automaticamente quando se fecha a janela. Também é possível forçar a validação pressionando a tecla Enter. No momento da validação, 4D efetua uma verificação sintáxica ao nível das linhas (sintaxe dos comandos) e/ou da estrutura das instruções (If, End id, etc.). 4D também verifica a correspondência dos elementos de fechamento do código, tais como parênteses ou aspas. Quando digita um caractere de fechamento, 4D indica o elemento de fechamento correspondente desses elemento, marcando os caracteres de início e fim com retângulos cinzas: Nota: esses elementos são mostrados quando se clica no código. Pode moficar sua aparência ou ocultar os elementos usando a opção "Correspondência dos parênteses" em Página Métodos das Preferências de 4D. O editor de métodos só pode verificar os erros de sintexe evidentes (erros de digitação ou similares). Não verifica os erros que ocorrem durante a execução. Os erros de execução são interceptados por 4D quando o método é executado. 4D oferece um depurador (ver Depurador) para controlar e corrigir estes erros. O compilador representa uma valiosa - 482 - ajuda para detectar erros. Para maiores informações sobre o compilador, consulte o capítulo Compilação. Usar as dicas de ajuda O editor de métodos fornece diferentes informações contextuais através de mensagens de ajuda, que aparecem quando o mouse passa sobre um objeto. Erros: Quando o ponteiro do mouse passa sobre o símbolo que indica um erro no código, uma mensagem de ajuda mostra a causa do erro (veja a seção "Verificar a sintaxe e corrigir os erros."). Tipos de Documentação de comando 4D: quando você passa o mouse sobre um comando 4D, uma mensagem de ajuda dá a sintaxe de comando e uma breve descrição de como ele funciona. Tipos de variáveis: Quando localiza o cursor sobre uma variável, uma mensagem de ajuda mostra seu tipo (caso tenha sido explicitamente definida no método). Métodos de projeto: quando o cursor está localizado sobre um método projeto, é exibida uma mensagem de ajuda: ou os comentários especificados no Explorador, caso haja algum(ver Usar os comentários). ou as primeiras linhas do método, se incluírem comentários (linhas que começam por //). É uma prática comum inserir documentação do método assim como também seus parâmetros em forma de comentários ao início do método. Pode obter essa informação diretamente, apenas tenha certeza de primeiro eliminar os comentários no Explorador. Comentários ao início de um método: Mensagem de ajuda em outro método: Ver a documentação de um comando A qualquer momento é possível ver a documentação HTML de um comando da lnguagem 4D: selecione completamente o nome do comando ou coloque o cursor sobre o nome e pressione a tecla F1. A documentação completa do comando é mostrada em uma nova janela de seu navegador. 4D procura a documentação do comando online (no website de 4D Doc Center) ou localmente, dependendo dos parâmetros definidos nas Preferências da aplicação (ver Localização da documentação). Comentar/Não comentar Os comentarios são linhas de instruções inativas. Estas linhas não são interpretadas pelo programa (4D não aplica nenhum estilo específico dentro dos comentários) e não são executados quando o método é chamado. Para criar um comentario, só é necessário inserir o caracteres "//" ao início da linha. O comprimento dos comentários está limitado ao tamanho máximo de uma linha, 32.000 caracteres. O comando Comentar/Não comentar é utilizado para marcar um grupo de linhas de código selecionadas como comentários ou caso contrário para suprimir o caractere comentário de uma seleção. Para usar esse comando, selecione o código a marcar como comentário e logo selecione o comando Comentar/Não comentar: - 483 - --> Quando a seleção contém somente código ativo, é aplicado o comando Comentar. Quando a seleção inclui código ativo e linhas de comentário, é adicionado um par de caracteres de comentário adicional (//) ; desta forma, conservam seu status inicial de comentário se a linha for “não comentada” posteriormente. Quando a seleção contém somente linhas comentadas, o comando Não comentar é aplicado. Nota: O comando Comentar/Não comentar só funciona com linhas inteiras, não é possível utilizar para comentar uma parte de uma linha. Uso de sequências de escape O editor de métodos lhe permite utilizar sequências de escape (também chamadas caracteres de escape). Uma sequência de escape é uma sequência de caracteres que permite substituir um caractere “especial”. A sequência começa pelo caractere barra invertida \, seguido de um caractere. Por exemplo, \t é uma sequência de escape para o caractere Tab. As sequências de escape facilitam a entrada de caracteres especiais: o exemplo anterior (\t) substitui a entrada Character(Tab). Em 4D, é possível utilizar as seguintes sequências de escape: Sequência de escape Caractere substituído \n \t \r \\ \" LF (Retornar linha) HT (Tab) CR ((Retorno de carro) \ (Barra invertida) " (Aspas) Nota: É possível utilizar indiferentemente caracteres em maiúsculas ou minúsculas nas sequências de escape. No exemplo a seguir, o caractere Retorno de carro (sequência de escape \r) é inserido em uma linha de instrução para obter a caixa de diálogo que é exibida a seguir: ALERT("A operação foi exitosa.\rPode se desconectar.") Atenção: O caractere \ (barra invertida) é utilizado como separador dos endereços de acesso sob Windows. Em geral, 4D interpretará corretamente os caminhos de acesso Windows substituindo a barra invertida simples \ por uma barra invertida dupla \\. Por exemplo, C:\Pasta será convertido em C:\\Pasta. Entretanto, se você escrever “C:\MeusDocumentos\Novo”, 4D mostrará “C:\\MeusDocumentos\Novo”. Neste caso, a segunda barra invertida \ é interpretada incorretamente como \N (sequência de escape existente). Portanto você deve introduzir uma barra invertida dupla \\ quando quiser ter uma barra invertida em frente a um caractere utilizado em uma das sequências de escape reconhecidas por 4D. - 484 - Facilitar a leitura do código Várias funções no editor de métodos facilitam a leitura do código e a navegação entre as linhas de instrução. Expandir/Contrair O código 4D localizado no interior de loops e condições pode ser expandido ou contraído, para facilitar a leitura de métodos. Código expandido: Código contraído: Se colocar o cursor sobre o botão de expandir [...], aparece uma mensagem de ajuda, que mostra as primeiras linhas do código oculto. Uma parte do código contraído pode ser selecionado, copiado, colado ou eliminado. Todas as linhas incluídas nessa parte serão copiadas, coladas ou excluídas, respectivamente. Ao colar uma parte do código, esta parte será expandida automaticamente. Há várias maneiras de expandir e contrair o código: Clique nos ícones expandir/contrair ([+] e [-] em Windows) ou no botão de abertura [...] Utilize os comandos do submenu Método>Contrair/Expandir: Contrair a seleção / Expandir a seleção: contrai ou expande todas as estruturas de código na seleção de texto. Contrair o nível atual / Expandir o nível atual: contrai ou expande a estrutura do código no nível onde se encontre o cursor. Estes comandos também estão disponíveis no menu contextual do editor. Contrair tudo / Expandir tudo: contrai ou expande todos os loops e as condições de um método. Esses comandos também estão disponíveis na barra de ferramentas do editor: . Inicio de bloco e fim de bloco Dois comandos facilitam a navegação dentro das estruturas de código (por exemplo, If...Else... End if): Início de bloco: coloca o cursor no início da estrutura atual, logo antes da palavra chave inicial. Fim de bloco: coloca o cursor no final da estrutura atual, logo depois da palavra chave final. Estes comandos estão localizados no menu Método, além do menu contextual. Você também pode utilizar os seguintes atalhos: Windows: Ctrl + flecha para cima ou Ctrl + Flecha para baixo, Mac OS: Comando + flecha para cima ou Comando + para baixo. Usar marcas 4D permite-lhe associar marcas com algumas linhas em seus métodos. Assim, você pode navegar rapidamente no código de uma marca para outra, usando os comandos específicos. A marca se move com sua linha original se linhas adicionais são inseridas no método. As marcas são salvas com os métodos. As marcas são manejadas usando o sub-menu Marcas do menu método: - 485 - Marcar/Desmarcar associa uma marca com a linha atual (onde se encontra o cursor) se não tiver uma marca atual ou eliminar marcaexistente. Esta função também está disponível utilizando o comando Marcar/Desmarcar do menu contextual do editor ou usando os atalhos de teclado Ctrl+F3 (Windows) ou Comando+F3 (Mac OS). Remover todas: elimina todos as marcas da janela do primeiro plano. Ir à próxima / Ir à anterior: permite navegar entre as marcas na janela. A seleção de um desses comandos coloca o cursor no primeiro caractere da linha associada a marca. Também pode utilizar os atalhos de teclado F3 (ir ao seguinte) ou Shift+F3 (ir ao anterior). Nota: pode utilizar marcas como marcadores das linhas que contém um elemento encontrado por uma busca. Neste caso, 4D adiciona automaticamente os marcadores. Para obter mais informação, consulte Procurar e substituir nos métodos. - 486 - Criar e utilizar macros É possível utilizar os comandos macros em seus métodos, o que lhe economiza muito tempo durante a entrada de métodos. O que é uma macro? Um comando macro é uma parte de código 4D acessível permanentemente que pode ser inserida em qualquer parte de seus métodos, sem importar o tipo de banco de dados aberto. Os macros comandos podem conter qualquer tipo de texto, comandos e constantes 4D, assim como etiquetas especiais as quais são substituídas no momento da inserção da macro pelos valores derivados do contexto do método. Por exemplo, um macro comando pode conter a etiqueta <nome_método/>; no momento da inserção do macro, esta etiqueta será substituída pelo nome do método de projeto atual. Os comandos macros são salvos em um ou mais arquivos em formato XML (texto). Podem ser colocados em uma lista do ; também podem ser chamados com a ajuda do menu contextual ou utilizando a função de autocompletar. Os comandos macros de 4D são escritos em formato XML. É possível utilizar o arquivo de macro comandos como está ou modificá-lo. Localização de macros 4D carrega as macros de uma pasta chamada “Macros v2.” As macros devem estar em forma de um ou vários arquivos XML localizados nesta pasta. A pasta “Macros v2” pode estar localizada: Na pasta 4D ativa da máquina. As macros depois são compartilhadas por todos os bancos. Nota A localização da pasta ativa 4D varia em função do sistema operacional. Para maiores informações, consulte a descrição do comando Get 4D folder no Manual de linguagem 4D. Junto ao arquivo de estrutura do banco. As macros são carregadas somente para esta estrutura. Para os componentes: na pasta Components do banco. As macros só são carregadas se o componente estiver instalado. Estas três localizações podem ser utilizadas simultaneamente: é possível instalar uma pasta “Macros v2” em cada localização. As macros serão carregadas na seguinte ordem: pasta 4D, arquivo de estrutura, componente 1... componente X: Macros padrões 4D oferece um conjunto de macros padrões que correspondem particularmente a lista de palavras chaves nas versões anteriores de 4D. Estas macros são incluídas no arquivo “Macros.xml”, localizado na pasta “Macros v2” craida na pasta 4D ativa da máquina durante a primeira inicialização de 4D. É possível modificar este arquivo ou o conteúdo da pasta posteriormente (ver o parágrafo a seguir). No caso em que se apresentem problemas com este arquivo, você pode exclui-lo e 4D o criará novamente no próximo lançamento. Adicionar macros personalizadas É possível adicionar macros personalizadas ao arquivo “Macros.xml” utilizando um editor de texto padrão ou por programação. Também é possível adicionar arquivos XML de macros personalizadas nesta pasta. Em modo local, o arquivo de macros pode ser aberto enquanto você utiliza 4D. A lista de comandos macro disponíveis é atualizada em cada evento de ativação 4D. Por exemplo, é possível trazer o editor de texto ao primeiro plano, modificar o arquivo de macros, logo regressar ao métodos: a nova macro está disponível no editor de métodos. As macros vazias ou equivocadas não são exibidas. Verificar a sintaxe de macros personalizadas - 487 - Os arquivo de comandos macro de 4D devem cumprir com a norma XML. Isto significa particularmente que as linhas de declaração XML <?xml version="1.0" ...?> e de declaração de documento < !DOCTYPE macros SYSTEM "http://www.4d.com/dtd/v11/macros.dtd"> são obrigatórias ao começo de um arquivo de macro para que seja carregado. São suportados os diferentes tipos de codificação XML. Entretanto, é recomendável utilizar a codificação compatível Mac/PC (UTF-8). 4D oferece um DTD que pode ser utilizado para validar os arquivos de macros. Este arquivo é encontrado na seguinte localização: Windows: 4D Developer/Resources/DTD/macros.dtd Mac OS: 4D Developer.app:Contents:Resources:DTD:macros.dtd Se um arquivo de macros não contém as linhas de declaração ou não pode ser validado, não é carregado. Sintaxe das macros 4D Os comandos macros 4D são construídos com a ajuda de etiquetas personalizadas XML chamadas “elementos”. Algumas etiquetas indicam o início e o final da definição (etiquetas duplas do tipo <tag> </tag>), outras são substituídas pelos valores do contexto de inserção (<tag/>). Conforme as especificações XML, algumas etiquetas de elementos podem incluir atributos. Ao menos que você indique o contrário, estes atributos são opcionais e se utiliza um valor padrão quando são omitidos. A sintaxe dos elementos com atributos é a seguinte: etiquetas duplas: <etiqueta atributo="valor"> </macro> etiquetas simples: <etiqueta atributo="valor"/> Se o elemento aceita vários atributos, é possível agrupá-los na mesma linha de comando, separados por um espaço: <etiqueta atributo1="valor" atributo2="valor" atributo3="valor"... > Esta é a lista de etiquetas e seu modo de utilização: - 488 - Etiquetas de elementos <macros> </macros> <macro> </macro> Descrição Início e fim do arquivo macro (etiqueta obrigatória). Início e fim da definição de uma macro e seus atributos. Atributos: - nome ** da macro tal como aparece nos menus e nas listas do editor de métodos (atributo obrigatório). - type_ahead_text: cadeia de caracteres ** a ser introduzida para chamar a macro utilizando a função de digitação preditiva*. - in_menu: booleano que indica se a macro pode ser chamada utilizando o menu contextual*. Valores = “true” (padrão) ou “false”. - type_ahead: booleano que indica se a macro pode ser chamada utilizando a função de autocompletar*. Valores = “true” (padrão) ou “false”. - method_event: utilizado para disparar a chamada automática da macro em função da fase atual de manipulação de cada método (criação, fechamento, etc.). Valores = “on_load”: a macro é disparada ao abrir cada método. “on_save”: a macro é disparada ao salvar cada método, “on_close”: a macro é disparada ao fecha cada método. "on_save" e "on_close" podem ser utilizados em conjunto, em outras palavras, ambos os eventos são gerados caso se feche um método modificado. Por outro lado, “on_create” e “on_load” nunca são gerados de maneira consecutiva. Este atributo pode ser utilizado, por exemplo, para pré-formatar os métodos no momento de sua criação (os comentários na área de cabeçalho) ou gravar a informação tal como a data e hora no momento de fechá-los. - version: permite ativar o novo modo de suporte de seleções de texto para a macro (ver “Sobre a etiqueta <method>”). Para ativar este novo modo, entre o valor "2". Se omitir este atributo ou entra versão="1", se conserva o modo anterior. - in_toolbar: Booleano que indica se a macro deve ser apresentada no menu do botão Macro da barra de ferramentas. Valores= "true" (por padrão) ou "false". Etiqueta substituída pelo texto selecionado no momento da chamada à macro. A seleção pode <selection/> estar vazia Início e fim do código que deve ser inserido no método. Um retorno de carro será adicionado <text> </text> antes e depois do código. Início e fim do nome do método de projeto e de seu parâmetro (opcional). O método é executado <method> quando a macro é chamada. Pode passar um parâmetro no formato ("param1;param2;..."). Este </method> parâmetro será recebido no método utilizando as variáveis $1, $2, etc.. Para informação adicional sobre esta etiqueta, consulte a seção “Sobre a etiqueta <method>”. <caret/> Localização do ponto de inserção no código depois de inserida a macro. <user_4D/> Etiqueta substituída pelo nome do usuário 4D atual. <user_os/> Etiqueta substituída pelo nome do usuário do sistema atual.. <method_name/> Etiqueta substituída pelo nome do método de projeto atual. <method_path/> Etiqueta substituída pela via de acesso completa do método projeto atual. <date/> Etiqueta substituída pela data atual. Atributo: - format: formato 4D utilizado para mostrar a data. Se não existe um formato definido, o formato padrão é utilizado. Valores = número de formato 4D (0 a 8). <time/> Etiqueta substituída pela hora atual. Atributo: - format: formato 4D utilizado para mostrar a hora. Se não existe um formato definido, é utilizado o formato padrão. Valores = número de formato 4D (0 a 6). <clipboard/> Etiqueta substituída pelo conteúdo da área de transferência Atributo: - index: Área de transferência a ser colada. Valores = número de área de transferência (0 a 9). *As macros podem ser chamados utilizando o menu contextual do editor de métodos ou utilizando a função de autocompletar (ver o parágrafo a seguir). ** Se você quer manter-se nas especificações da linguagem XML, não deve utilizar caracteres externos (caracteres acentuados, aspas, etc.). Este é um exemplo de definição de macro: - 489 - Conteúdo da macro Comentários <?xml version=”1.0”...?> <!DOCTYPE macros SYSTEM> <macros> <macro name="RecordLoop"> <text> For($i;1;Records in selection(<Selection/>)) SAVE RECORD(<Selection/>) NEXT RECORD(<Selection/>) End for </text> </macro> </macros> Declaração XML Declaração de documento Início de arquivo XML de macros Início da definição e nome da macro Início do código da macro A etiqueta <Selection/> será substituída pelo código selecionado no método 4D no momento da inserção da macro (por exemplo, um nome de tabela) Fim do código da macro Fim da definição da macro Fim do arquivo XML de macros Sobre a etiqueta <method> A etiqueta <method> permite gerar e utilizar os comandos macros que executam os métodos de projeto de 4D. Este princípio permite aos desenvolvedores criar funções sofisticadas que podem ser distribuídas via os comandos macros associados aos componentes. Por exemplo, a macro a seguir provocará a execução do método MeuMétodo com o nome do método atual como parâmetro: <method>MeuMetodo("<method_name/>")</method> O código do método chamado é executado em um novo processo. Este processo é terminado uma vez que o método é executado. Nota: O processo de estrutura permanece congelado até que se termine a execução do método chamado. Você deve se assegurar que a execução seja rápida e de que não haja risco de bloquear a aplicação. Se isto ocorrer, utilize a combinação Ctrl+F8 (Windows) ou Comando+F8 (Mac OS) para terminar o processo. Chamar macros Por padrão, as macros podem ser chamadas utilizando o menu contextual ou a barra de ferramentas do editor de métodos, a função de digitação preditiva, ou uma lista específica ao final da janela do editor de métodos. Note que é possível restringir para cada macro a possibilidade de chamada utilizando o menu contextual e/ou a função de digitação preditiva. Menu contextual e barra de ferramentas Por padrão, todas as macros podem ser chamadas através do menu contextual do editor de métodos (utilizando o comando hierárquico Inserir macro) ou o botão “Macros” da barra de ferramentas. O atributo in_menu da etiqueta <macro> é utilizado para definir se a macro aparecerá ou não neste menu. No menu contextual, os macros são exibidos na ordem do arquivo “Macros.xml” e os arquivos XML adicionais. Portanto é possível alterar a ordem modificando estes arquivos. Autocompletar Por padrão, todas as macros são acessível utilizando a função de autocompletar (consulte Escrever um método). O atributo type_ahead da etiqueta <macro> permite excluir uma macro deste tipo de operação. Nota: Se a macro contém a etiqueta <selection/>, não aparecerá na janela de autocompletar. Lista do editor de métodos É possível mostrar suas macros em uma lista do editor de métodos (consulte [#title id="3256"/]). Simplesmente faça um duplo clique no nome de uma macro na lista para chamá-la. Não é possível excluir uma macro específica desta lista. Notas de compatibilidade - 490 - Notas de compatibilidade O suporte das macro pode mudar de uma versão de 4D para outra. Para manter a compatibilidade entre as diferentes versões, preservando sua personalização, 4D não elimina as versões anteriores. Se deseja usar as funcionalidades mais recentes disponíveis, deve realizar adaptações. Variáveis de Seleção de texto para métodos Nas versões de 4D anteriores a v11, o programa mantinha automaticamente um conjunto de variáveis processo para a manipulação de texto nos métodos ao utilizar a etiqueta <method>: as variáveis de entrada (_textSel, _blobSel, _selLen, _textMethod, _blobMethod, _methodLen) para recuperar texto e variáveis de saída (_textReplace, _blobReplace, _action) para inserir texto. Por motivos de compatibilidade, este mecanismo ainda é suportado por 4D, mas desde a versão 11 se tornou obsoleto pelas seguintes razões: o uso de variáveis BLOB para a gestão de textos de tamanho superior a 32.000 caracteres já não é necessário, a gestão de variáveis é incompatível com a arquitetura v11 dos componentes na qual os espaços de execução das variáveis são particionados. Um componente versão 11 não pode acessar os textos dos métodos do banco local e vice-versa utilizando as variáveis pré-definidas. Portanto, é recomendável administras as seleções de texto através dos comandos GET MACRO PARAMETER e SET MACRO PARAMETER. Estes comandos podem ser utilizados para superar a partição dos espaços de execução banco local/componentes e autoriza a criação de componentes dedicados a gestão de macros. Para ativar este novo modo para uma macro, você deve declarar o atributo Version com o valor 2 no elemento Macro. Neste caso, 4D não administra mais as variáveis pré-definidas _textSel, _textReplace, etc. e são utilizados os comandos GET MACRO PARAMETER e SET MACRO PARAMETER. Este atributo deve ser declarado desta forma: <macro name="MyMacro" version="2"> --- Texto de la macro --</macro> Se você não passar este atributo, o modo anterior é conservado. Incompatibilidades relacionadas com a norma XML A partir de 4D v11, as normas de sintaxe devem ser seguidas estritamentes para que os arquivos de macros respeitem o padrão XML. Caso contrário, podem ser produzidas incompatibilidades no código das macros criadas com códigos anteriores, evitando a carga dos arquivos XML. A seguir, você encontra as principais fontes de mau funcionamento. Os comentarios de tipo “//meu comentário”, permitidos nos elementos <macro> nas versões anteriores de 4D, não são compatíveis com a sintaxe XML. As linhas de comentários devem respeitar a forma padrão “<!—meu comentário -->”. Os símbolos <> utilizados particularmente para os nomes dos objetos interprocesso devem ser codificados. Por exemplo, a variável <> params deve ser escrita como &lt;>params. A etiqueta de declaração inicial <macros> podia ser omitida nas versões anteriores de 4D. Agora é obrigatória, caso contrário, o arquivo não será carregado. Atualizar o arquivo Macros.xml Na versão 12 de 4D, há novos comando de macro disponíveis para facilitar o uso dos comandos SQL. Como pode personalizar o arquivo "Macros.xml", a instalação de uma nova versão de 4D não substitui automaticamente a versão existente do arquivo. para usar os novos comando de macro SQL de 4D v12, é necessário: apagar o arquivo "Macros.xml" na pasta "Macros v2" (se já não o tiver modificado), depois lançar 4D para criar o novo arquivo de forma automática. adicionar manualmente as novas macros no arquivo "Macros.xml" da pasta "Macros v2" (se já tiver personalizado o conteúdo). O novo arquivo modelo de macros é encontrado na pasta da aplicação 4D: 4D\Resources\en.lproj ou 4D\Resources\ fr.lproj. - 491 - Procurar e substituir nos métodos O editor de métodos tem funções de pesquisa e substituição que se aplicam a janela atual. A área de pesquisa localizada na barra de ferramentas de cada janela de método permite efetuar pesquisa simples ou chamar a caixa de diálogo de pesquisa (ver o parágrafo Janela do editor de métodos). Os comandos Procurar/Substituir em métodos estão localizados no submenu Procurar do menu Edição de 4D: Nota: os comandos de buscar encontrados acima do submenu Procurar não são específicos do editor de métodos, mas podem ser usados para procurar um valor entre todos os métodos. Para maiores informações sobre este comando, consulte Procurar e substituir no ambiente Desenho. Procurar A seleção do comando Procurar… do menu Edição provoca a visualização da seguinte caixa de diálogo: A pesquisa definida nesta caixa de diálogo será efetuado no método localizado em primeiro plano. A área “Buscar:”: permite introduzir a cadeia de caracteres a ser buscada. Esta área é um combo box que guarda em memória as últimas 15 cadeias de caracteres buscadas ou substituídas durante a sessão. Se você selecionar o texto antes de escolher o comando Buscar..., o texto selecionado aparecerá nesta área. Você pode então utilizar o texto ou substituí-lo por outro. A opção Palavra completa é utilizada para limitar a pesquisa às ocorrências exatas da palavra que você busca. Quando esta opção está selecionada, a pesquisa da palavra “cliente” não encontrará “clientes” ou “meucliente”. - 492 - Por padrão, a opção não está selecionada, portanto, a pesquisa de “var” encontrará “minhaVar”, “variação”, etc. Atenção, diferentemente da opção Nome completo da caixa de diálogo de pesquisa, a opção Palavra completa não leva em condideração nomes de objetos. Por exemplo, com esta opção, a pesquisa de “Minha” em um método encontrará a variável “Minha variável”. Este não é o caso de uma busca global utilizando a opção Nome completo, onde o mesmo resultado não será encontrado no contexto do exemplo anterior já que o nome completo (da variável encontrada previamente) é “Minha variável” e portanto não corresponde exatamente a cadeia introduzida (“Minha”). A opção Maiúscula/Minúscula permite levar em consideração se os caracteres estão em minúsculas ou maiúsculas na área de pesquisa. Por exemplo, a pesquisa de “MinhaVar” não encontrará “minhaVar”. Os botões de opção Anterior/Próximo permitem definir o sentido da pesquisa: até o final do método atual, começando desde a localização inicial do cursor. O botão Ok permite iniciar a pesquisa. 4D começa a pesquisa desde o ponto de inserção atual e continua até o final do método. O primeiro elemento correspondente aos critérios definidos é selecionado na janela do editor de métodos. Logo é possível continuar a pesquisa utilizando os comandos Buscar próximo e Buscar anterior do menu Edição. Procurar mesmo O comando Procurar mesmo permite buscar uma cadeia de caracteres idêntica a selecionada. Este comando só está ativo se você selecionou pelo menos um caractere no editor de métodos. A pesquisa efetuada é do tipo “Procurar próximo” no método atual. Marcar todos O comando Marcar todos está ativo quando uma busca foi definida na caixa de diálogo de busca ou na de buscar e substituir. Quando seleciona este comando, 4D põe uma marca em cada linha que contenha um elemento correspondente ao criterio de busca "atual". Isso facilita visualizar os resultados da pesquisa. Para mais informação sobre marcas, consulte "Utilizar marcas" Escrever um método. Substituir O comando Substituir exibe a seguinte caixa de diálogo: A área “Buscar:” é utilizada para definir a cadeia de caracteres ou a expressão a ser buscada. Como na caixa de diálogo Pesquisar, esta área é um combo box que guarda as últimas 15 cadeias de caracteres buscadas. Se você selecionar o texto antes de escolher o comando Substituir, o texto selecionado aparecerá nesta área. A área “Substituir por”: permite definir a cadeia de caracteres de substituição. Esta área também é um combo box que armazena as 15 últimas cadeias de caracteres buscadas ou substituídas. A opção Palavra completa permite buscar/substituir somente as cadeias de caracteres que correspondam exatamente à cadeia introduzida. Neste caso, por exemplo, a pesquisa de “cliente” não encontrará as cadeias “clientes” ou “meucliente”, etc. A opção Maiúscula/Minúscula permite buscar/substituir somente cadeias de caracteres escritas como se escreveu a cadeia de caracteres introduzida. Por exemplo, a pesquisa de “MinhaVar” não encontrará “minhaVar”. Assim como na caixa de diálogo Buscar, os botões de opção Anterior e Próximo permitem definir o sentido da pesquisa: para o inídio ou final do método atual, começando desde a localização incial do cursor. O botão Substituir permite iniciar a pesquisa e substituir a primeira ocorrência encontrada. 4D começa a pesquisa desde o ponto de inserção atual e continua até o final do método. Logo é possível continuar buscando/substituindo utilizando os comandos Substituir próximo e Substituir anterior do menu Edição. - 493 - O botão Todos permite substituir diretamente todas as ocorrências correspondentes ao critério de pesquisa no método aberto Ir à definição O comando Ir á definição permite abrir d