Anda di halaman 1dari 581

Programando com o Centura Team Developer 2000

Caro Leitor, este livro foi originalmente lançado em junho de 2000. Seu conteúdo
refere-se ao então Centura Team Developer versão 2.0, chamado na época de
Centura Team Developer 2000, daí vem a sigla CTD2000.

Em diversos pontos do livro, onde for citado o endereço www.centuraexplorer.com,


deve ser considerado http://appstartup.blogspot.com.br, nele, há uma área específica
para tratar deste livro e dos arquivos que são citados nos exemplos.

Este livro está sendo disponibilizado agora, em maio de 2013, em formato PDF para
livre utilização por qualquer pessoa que tiver necessidade de estudar Centura Team
Developer 2000. A base desta ferramenta de programação está neste livro, portanto
pode ser utilizado como fonte de estudo mesmo para versões mais recentes do Team
Developer.

Contatos com o autor podem serfeitos através do e-mail lairton@live.com ou através


do blog App StartUp no url http://appstartup.blogspot.com.br

Bom estudo!

Lairton Nogueira de Almeida Júnior


Programando com o Centura Team Developer 2000

Para

Christiane,
Netinho e
Marcelinha

Página 2
Programando com o Centura Team Developer 2000

Página 3
Programando com o Centura Team Developer 2000

Agradecimentos

São tantas as pessoas que de forma direta ou indireta ajudaram na confecção deste livro, eu não
conseguiria citar todos os nomes aqui, mas eu não posso deixar de agradecer a algumas
pessoas ....

Ao sr. Agenor Correia, muito obrigado por ter me mostrado este caminho e pelo seu
investimento em mim. Obrigado por ter acendido a chama.

Pelas oportunidades eu gostaria de agradecer ao Jorge Correia, Eduardo Aguiar, José Luna,
Petrúcio Barros, ao Francinaldo e ao Ryan Bahard . Vocês poderão observar muito do nosso
dia-a-dia de trabalho neste projeto.

Ao pessoal da Centura. Muito obrigado ao Joubert Stape e a Ana Paula, a ajuda de vocês tem
sido muito importante enriquecendo em muito o conteúdo deste livro. Um abraço também ao
pessoal da Centura Software Corporation, Jeremy Shaw, Raghavan Gurumurthy, Cezary
Hajlasz e a Charity Silkebakken pela colaboração.

Ao Krause Correia, meu grande amigo pessoal e profissional, muito obrigado pelas sugestões,
pelo apoio junto ao conteúdo deste trabalho, principalmente no que diz respeito aos relatórios,
pelas noites em que ficamos até muito tarde debatendo os assuntos do livro.

Eu gostaria de agradecer também aos clientes das ferramentas da Centura, pois me forçaram a
buscar soluções para as suas necessidades, provendo conteúdo para este livro. E a todos os
meus alunos que são realmente a base deste livro. As experiências que tivemos nos
treinamentos serviram de estrutura principal deste trabalho que agora poderá dar-lhes todas as
informações sobre o Centura, num único local.

Eu gostaria de agradecer especialmente a:

Meus pais e irmãos: Lairton, Célia, Fábio, Leandro, Érico, André e ao Danilo. Muito
Obrigados.

Meus amigos: Jones Melo, Cristovão, Roberto Galvão, Urbano Chagas pela força que me
transmitiram.

A todos os colegas de trabalho por ler os pedaços do livro, pelas sugestões e perguntas que me
fizeram cada vez mais ver o que o livro deveria ter, aos poucos o seu conteúdo foi
modificando-se de acordo com as necessidades de vocês.

Sra. Ana Claudia, muito obrigado pelas suas sugestões, pela paciência em ler este livro todo
várias vezes, pelo apoio e pelo incentivo a cada passo do caminho, desde o ínicio até sua
conclusão.

E principalmente a Deus, por ter dado saúde, condições de aprendizado e essa vontade interior
de transmitir conhecimento às pessoas. Obrigado por me ajudar a conhecer as pessoas certas
nas horas certas e por permitir que tudo isso esteja acontecendo desse jeito.

Me ajudaram muito a manter o espírito do livro as audições de "Dawn of a new Century" do


Secret Garden, "Dance of the Angel" do Slava Gaigoayan, "Luzia" do Paco de Lucía, "The
Página 4
Programando com o Centura Team Developer 2000

Music of The Grand Canyon" do Nicholas Gunn e do "Key in G" do Kenny G e na sua fase
final de conclusão o "Na Pressão" do Lenine que retratam a trilha sonora deste livro.

Página 5
Programando com o Centura Team Developer 2000

Uma olhada rápida ...

Programando com o Centura Team Developer 2000


Elementos do SQLWindows/32
Parte I

Capítulo 1 - Apresentação do Centura SQLWindows/32


Capítulo 2 - A Linguagem SAL
Capítulo 3 - O acesso ao SQL
Capítulo 4 - Programação Baseada em Eventos
Capítulo 5 - Programando com o SQLWindows/32

Obtendo mais do SQLWindows/32 com a tecnologia QuickObjects


Parte II

Capítulo 6 - Utilizando os QuickObjects


Capítulo 7 - Explorando os QuickObjects
Capítulo 8 - Programação Orientada a Objetos
Capítulo 9 - Ampliando o desenvolvimento com o CDK
Capítulo 10 - Criando seus próprios QuickObjects

Concluindo o desenvolvimento de aplicações


Parte III

Capítulo 11 - Relatórios com o Report Builder


Capítulo 12 - Distribuição do produto final
Capítulo 13 - Traduzindo aplicações com o Object Nationalizer
Capítulo 14 - Gerenciamento de equipes com o Team Object Manager

Sua aplicação Centura falando com o mundo


Parte IV

Capítulo 15 - Desenvolvimento de componentes COM no SQLWindows


Capítulo 16 - Desenvolvendo aplicações para Web

Guia de Referência Completo


Parte V

Apêndice A - Guia de referência das funções SAL


Apêndice B - Guia de referência das funções SQL
Apêndice C - Guia de referência das mensagens SAM
Apêndice D - Guia de referência das funções do Report Builder
Apêndice E - Classes e funções da Biblioteca VisualToolchest
Apêndice F - Guia de Instalação do Centura Team Developer 2000

Página 6
Programando com o Centura Team Developer 2000

Apresentação

Para um melhor aproveitamento do conteúdo apresentado neste livro, recomendamos que o


leitor siga a ordem em que os capítulos estão apresentados. Todos os aspectos do Centura
Team Developer são abordados ao longo dos vinte e dois capítulos, portanto, ignorar a
seqüência pode fazer com que o leitor encontre alguma dificuldade na utilização de alguns
conceitos que foram explicados em capítulos anteriores.

Programando com o Centura Team Developer 2000 está dividido em cinco partes:

Parte I - Elementos do SQLWindows/32

Nos capítulos 1, 2 e 3, o SQLWindows/32 é detalhadamente explicado. É apresentado todo o


ambiente de programação, a parte teórica referente aos conceitos da linguagem e a explanação
de todos os seus objetos, alguns conceitos sobre bancos de dados SQL e sua utilização junto ao
SQLWindows/32.

Os conceitos de programação baseada a eventos são transmitidos ao leitor no capítulo 4. No


capítulo 5 estão os exemplos de programação, exercitando os conceitos introduzidos
inicialmente.

A primeira parte é de importância vital para a correta compreensão e utilização do restante do


livro.

Parte II - Obtendo mais do SQLWindows com a tecnologia QuickObjects

O SQLWindows/16 na sua versão 5 trouxe aos desenvolvedores a tecnologia dos


QuickObjects, os capítulos 6 e 7 tratam, de forma minuciosa, todos os seus conceitos e
utilização.

O capítulo 8 apresenta os conceitos da programação orientada a objetos, dirigida ao


SQLWindows/32. A leitura deste capítulo é indicada, mesmo aos leitores que já possuem
conhecimento das técnicas de programação orientada a objetos, uma vez que, nele são
relacionadas as terminologias da OOP aos componentes do SQLWindows/32.

Uma grande ferramenta presente no Centura Team Developer que auxilia o desenvolvimento
de aplicações em SQLWindows/32 é o CDK. O capítulo 9 explica o modo como o CDK
funciona e os benefícios que pode trazer aos desenvolvedores Centura.

Os exemplos vistos no capítulo nove são estendidos no capítulo 10, onde o ciclo é fechado com
a criação de QuickObjects personalizados pelo programador.

Esta é a parte onde alguns dos conceitos mais avançados do SQLWindows/32 são abordados,
como os QuickObjects, a tecnologia de orientação a objetos e a geração de código.

Parte III - Concluindo o desenvolvimento de aplicações

O ciclo de desenvolvimento de aplicações é concluído nesta parte, em que são apresentados os


refinamentos da sua aplicação.

Página 7
Programando com o Centura Team Developer 2000

No capítulo 11 é visto a geração dos relatórios com o Report Builder e a sua interação com o
SQLWindows/32. A interface do usuário do Report Builder e a interface com programas
externos é abordada de forma detalhada.

As diversas formas de distribuição do produto final incluindo a geração de executáveis,


dynalibs e dlls são abordadas no capítulo 12. Para a geração de dlls você precisa ter instalado o
Microsoft Visual C++ e o Object Compiler.

O capítulo 13 é dedicado ao Object Nationalizer, onde vemos o quanto é simples traduzir as


aplicações feitas em SQLWindows para diversos idiomas.

Para encerrar a terceira parte,, o capítulo 14 apresenta o Team Object Manager, que facilita o
gerenciamento de projetos e equipes de desenvolvimento.

Parte IV - Sua aplicação Centura falando com o mundo

Podemos seguramente afirmar que esta parte é a mais atraente de todo o livro, por envolver as
tecnologias mais faladas atualmente.

No capítulo 15 a integração do SQLWindows/32 com a tecnologia de componentes COM


rodando no MTS é detalhadamente explicada com instruções passo-a-passo para que você
construa uma aplicação COM+ rapidamente.

Coloque sua aplicação desenvolvida em SQLWindows/32 na Internet através das extensões


para a web da Centura (CWE). Você precisará já ter devidamente instalado, e configurado, um
servidor de Web que esteja disponível para utilização juntos aos exemplos do capítulo 16.

Parte V - Guia de referência completo.

Esta deverá ser a parte mais utilizada pelo leitor, pois, aqui foram agrupados os capítulos que
servirão de referência ao desenvolvedor, na sua utilização diária. Estão descritas
detalhadamente todas as funções e mensagens da linguagem do SQLWindows/32.

Nos apêndices A e B estão todas as funções SAL e SQL. As mensagens SAM são explicadas
no apêndice C, enquanto as funções disponíveis no Report Builder estão presentes no apêndice
D.

A descrição de todas as classes e funções que compõem a biblioteca Visual ToolChest, é


encontrada no Apêndice E.

O apêndice F contém as explicações de como instalar o Centura Team Developer. Essas


instruções devem ser seguidas fielmente, pois, a escolha dos componentes a serem instalados é
dirigida aos exemplos demonstrados no livro.

Página 8
Programando com o Centura Team Developer 2000

O propósito deste livro

Apresentar ao desenvolvedor o conjunto de ferramentas que compõe o Centura Team


Developer 2000, explicando os conceitos da linguagem SQLWindows, seus comandos, funções
e objetos. Explorar a tecnologia dos QuickObjects e a geração de código com o CDK. Mostrar
a geração de relatórios através do Report Builder. Demonstrar como é feito o gerenciamento
de projetos e equipes de desenvolvedores com o Team Objetct Manager.

E por fim, pretendemos, deixar o desenvolvedor familiarizado com o ambiente, pronto para
começar a desenvolver projetos, utilizando a força total do pacote de ferramentas de que o
Centura Team Developer 2000 é composto.

Aos programadores que já possuem alguma experiência com versões anteriores do


SQLWindows, este livro faz a ponte entre o Gupta SQLWindows e o Centura
SQLWindows/32. Usuários do Team Windows, Edit Windows e Report Windows, poderão
conhecer suas novas versões, a evolução dos produtos. Os novos conceitos e novos recursos da
ferramenta, como por exemplo as extensões para web e o suporte aos componentes COM
também devem ser de grande valia aos desenvolvedores já familiarizados com o Centura Team
Developer.

A quem se destina

Analistas de sistemas, programadores, estudantes e profissionais, mesmo de outras áreas, que


desejam desenvolver aplicações para os ambientes Windows95 ou para a Internet.

Pré-requisitos

Este livro assume que o leitor tenha conhecimentos em :

Utilização do Microsoft Windows95, Windows98 ou WindowsNT, sua interface e conceitos.


A utilização do mouse.
Alguma linguagem de programação como Basic, Clipper, Cobol ou C.
Bancos de dados relacionais
Linguagem SQL
E-mail, Internet e redes locais.

Página 9
Programando com o Centura Team Developer 2000

A Organização

No decorrer do livro algumas convenções tipográficas e notações são utilizadas, a saber:

Notação Explicação
você O desenvolvedor ( programador ). Você que está lendo este livro e
construindo uma aplicação.
usuário A pessoa ( usuário final ) que utilizará o aplicativo que você ( o
desenvolvedor ) está construindo.
aplicação A tela ou conjunto de telas que você está desenvolvendo.
palavras em Negrito será utilizado para destacar os termos próprios do CTD, como
negrito por exemplo:
- nomes dos menus que você deve selecionar - File | New...
- comandos e funções do SQLWindows, quando citados no decorrer
de alguma explicação ou instrução - Call SalQuit( )
- os tipos de objetos do SQLWindows - data field, form window.
palavras em itálico Os nomes das variáveis definidas pelo programador - sNome,
nCodigo, bOk
palavras escritas A representação do código fonte do programa, listagens ou trechos de
assim programas, são sempre mostrados com a fonte alterada para Courier
New tamanho 8.
On SAM_Create
Call SalCenterWindow ( hWndForm )
nomes de arquivos Os nomes dos arquivos citados em letras maiúsculas são arquivos que
escritos em letras devem ser considerados exatamente como está escrito. Por exemplo:
MAIÚSCULAS SQL.INI
QCKDVC.APL
Alt+4 Seqüência de teclas de atalho onde você deve manter pressionada a
tecla à esquerda do sinal +, para então pressionar a tecla indicada à
direita. Por exemplo:
Alt+4 - pressione a tecla Alt, mantenha pressionada enquanto
pressiona a tecla 4.
TRUE Constantes lógicas definidas internamente pelo próprio
FALSE SQLWindows/32.
A constante TRUE possui valor 1 e significa sucesso numa operação.
A constante FALSE possui valor 0 e significa falha em determinada
operação.
Obs: Alguma observação importante que você necessita saber.
Atenção: Uma informação vital. Extremamente importante. Seu
desconhecimento pode causar um resultado indesejado.

Página 10
Programando com o Centura Team Developer 2000

INDICE

Página 11
Programando com o Centura Team Developer 2000

Página 12
Programando com o Centura Team Developer 2000

Capítulo 1
Apresentação do Centura SQLWindows/32

Neste capítulo você é apresentado ao ambiente de desenvolvimento do Centura Team


Developer, o SQLWindows/32. Nele são mostrados os componentes do ambiente de
desenvolvimento, entre os quais o Outline, o Customizer, o Attribute Inspector, a paleta de
Controles, o ActiveX Explorer, as barras de ferramentas e todos os menus do
SQLWindows/32.

É de fundamental importância que o programador esteja familiarizado com este ambiente,


isso o ajudará no trabalho com a ferramenta.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Ambiente de Desenvolvimento

Apresentamos o ambiente de desenvolvimento do Centura Team Developer, onde o programador constrói a


aplicação. No Centura Team Developer o ambiente de desenvolvimento é chamado de Centura
SQLWindows/32, no qual o programador define suas classes, organiza as telas da aplicação, os seus objetos,
codifica a aplicação e monta a estrutura do banco de dados.

O Ambiente de desenvolvimento, Centura SQLWindows/32.

O Centura SQLWindows/32 é dividido em duas partes, conforme ilustrado acima :

Quadro esquerdo – Onde é realizada a navegação pela aplicação, listando os nomes de


todos os seus componentes, porém, nenhuma codificação da aplicação pode ser aqui
efetuada. Sua principal função é mostrar, de forma organizada, o conteúdo da sua
aplicação. O item que for selecionado neste quadro é mostrado em detalhes no quadro
direito.

Quadro direito – Local em que é escrito o programa, o código fonte. O quadro direito
sempre mostra os detalhes do item que estiver selecionado no quadro esquerdo, para tanto,
possui uma barra de pastas localizadas na sua parte inferior. O nível de detalhes mostrados
depende da pasta selecionada.

Para cada pasta selecionada, um nível de detalhes do item especificado no quadro esquerdo é visualizado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Na próxima figura você pode observar a pasta Layout sendo utilizada.

O objeto sendo visualizado através da pasta Layout.

Utilizando as pastas localizadas no quadro direito do Centura SQLWindows/32, você pode acessar
rapidamente os diversos locais de um programa fonte.

Observe que a figura abaixo mostra o mesmo componente, porém, visto através da pasta
Variables, que apresenta apenas as variáveis deste objeto. Na imagem que se segue,
nenhuma variável foi definida, mas quando o for, será nesta área do programa fonte.

O mesmo objeto, porém, sendo mostrado através da pasta Variables.

A próxima figura mostra a visualização do mesmo objeto, contudo, visto através da pasta
Parameters, que apresenta ao programador apenas os parâmetros que o objeto selecionado
no quadro esquerdo possui. Na imagem abaixo nenhum parâmetro foi definido.

Página PAGE 582


Programando com o Centura Team Developer 2000

Os parâmetros do objeto sendo visualizados pela pasta Parameters.

A próxima figura mostra a visualização do mesmo objeto, porém, visto através da pasta
Actions, que apresenta ao programador as ações do objeto selecionado no quadro esquerdo.
Na imagem abaixo nenhuma ação foi codificada para este objeto.

As ações do objeto sendo visualizadas pela pasta Actions.

A próxima figura mostra a visualização do mesmo objeto, porém, visto através da pasta
Components, que apresenta ao programador todos os componentes do objeto selecionado
no quadro esquerdo.

Página PAGE 582


Programando com o Centura Team Developer 2000

O conteúdo do objeto sendo visualizado pela pasta Components.

A próxima figura mostra a visualização do mesmo objeto, porém, visto através da pasta
Outline, que apresenta ao programador todo o código fonte do objeto selecionado no
quadro esquerdo, o código fonte engloba o conteúdo de todas as outras pastas mostradas no
quadro direito.

Todo o código fonte do objeto sendo visualizado pela pasta Outline.

A próxima figura mostra a visualização da descrição do objeto, porém, visto através da


pasta Description. A descrição do objeto é qualquer comentário feito a respeito de algum
objeto. Na imagem abaixo nenhuma descrição foi feita.

Página PAGE 582


Programando com o Centura Team Developer 2000

A descrição do objeto sendo visualizada através da pasta Description.

Explore cada elemento destas pastas. Quanto mais familiarizado com elas você estiver,
maior será sua facilidade de locomoção através do Centura SQLWindows/32, ajudando a
melhorar sua produtividade.

Estas pastas localizadas na parte inferior do quadro direito podem variar de acordo com o
item escolhido no quadro esquerdo. Observe na próxima figura que algumas das pastas
mostradas acima desapareceram para dar lugar a novas pastas relativas ao item escolhido
no quadro esquerdo, que neste caso é o item Application1.

As constantes da aplicação estão sendo visualizadas através da pasta Constants.

Além das pastas que permitem que sejam visualizadas partes da sua aplicação, contamos
ainda com os menus de contexto, que podem ser acionados em praticamente todos os
pontos do programa. Esses menus possuem um item chamado Open View que permite um
maior nível de detalhe na visão de parte do código fonte.

Página PAGE 582


Programando com o Centura Team Developer 2000

Outline

O Outline é o código fonte propriamente dito. Nele ficam armazenadas as instruções da linguagem SAL (a
linguagem de programação do Centura Team Developer). O Outline do Centura SQLWindows/32 é uma
poderosa maneira de se organizar o código fonte, pois, permite que cada item tenha o seu lugar apropriado,
impossibilitando a utilização de um objeto num local não adequado para ele. A definição de variável tem seu
local específico, assim como a definição das funções, classes e todos os demais elementos que compõem o
programa SQLWindows.

Observe que cada linha do programa é iniciada pelo símbolo que nos faz lembrar um diamante. Este
diamante assume duas características, cheio e vazio, ou preto e branco. O diamante cheio (ou preto) indica
que existem linhas de código subordinadas à linha visualizada. Clique duas vezes no diamante cheio para que
as linhas subordinadas sejam expandidas, e então visualizadas. Uma linha iniciada por um diamante vazio,
indica que não há linhas subordinadas.

O clique duplo numa linha iniciada por um diamante cheio irá expandir as linhas subordinadas, caso estas
estejam comprimidas. Se linhas já estiverem expandidas, um clique duplo tem efeito contrário, ou seja, faz
com que a seção toda seja comprimida.

Os diamantes servem para informar se a linha de código possui linhas subordinadas.

Você pode também utilizar algumas teclas de atalho:

Tecla Função
+ expande um nível do outline ( equivalente a um clique duplo numa linha comprimida ).
* expande todos os níveis do outline, a partir da linha selecionada.
- comprime toda a linha ( equivalente a um clique duplo numa linha expandida ).
/ comprime todos os níveis do outline inteiro.

Página PAGE 582


Programando com o Centura Team Developer 2000

À primeira vista, o Outline contém as seguintes seções principais :

Libraries

Seção Libraries.

Nesta seção, são definidos os nomes dos arquivos referentes às bibliotecas que o aplicativo
fará uso. O Centura SQLWindows/32 diferencia o fonte através de cores, para indicar o
fonte incluído e o fonte normal. Essas cores podem ser configuradas pelo programador,
mediante o menu Tools | Preferences.

A figura acima ilustra a definição de várias bibliotecas numa aplicação. Observe que a
primeira biblioteca utilizada é identificada pela palavra chave Dynalib, enquanto que as
demais são identificadas pela palavra File Include. Esses dois tipos de bibliotecas são
explicadas abaixo:

Outros programas fontes em Centura

Na figura acima, são demonstrados através das linhas de código subordinadas à seção
Libraries e iniciadas pela palavra chave File Include, correspondentes a bibliotecas
SQLWindows em formato não compilado.

A partir do momento em que essa biblioteca é incluída, todo o conteúdo desse arquivo
passa a estar ‘visível’ no arquivo ‘hospedeiro’, assim como todos os objetos, funções e até
mesmo as bibliotecas que lá foram inseridas. Você pode construir suas funções, janelas,
classes genéricas, elaborando assim, suas próprias bibliotecas.

As bibliotecas não compiladas normalmente possuem a extensão *.APL mas podem ter
extensão *.APP.

Arquivos fonte Centura já compilados, as Dynalibs

Página PAGE 582


Programando com o Centura Team Developer 2000

Também na figura acima, são representados pelas linhas de código subordinadas à seção
Libraries e iniciadas pela palavra chave Dynalib, correspondentes a bibliotecas
SQLWindows em formato compilado.

No caso das Dynalibs, apenas estarão disponíveis no arquivo ‘hospedeiro’ os objetos top
level ( janelas ) e as funções globais. Uma das grandes vantagens na utilização das
Dynalibs se dá no momento da compilação, na carga do programa e na atualização, uma
vez que a Dynalib já está compilada. Isso trás um ganho de performance durante o
desenvolvimento da aplicação.

As bibliotecas compiladas possuem a extensão *.APD.

Consulte o Capítulo 12 – Distribuição do Produto Final, para saber todos os detalhes


sobre as Dynalibs.

Global Declarations

Seções subordinadas à Global Declarations.

Na seção Global Declarations ficam todas as declarações que serão visualizadas por toda a aplicação. As
seções subordinadas à Global Declarations são :

Windows Defaults

Aqui ficam todas as definições das características iniciais dos objetos visuais. Características como estilo,
cor, tipo e tamanho da fonte, e cor do fundo, são definidas nesta seção.

Formats

Onde são definidos os formatos para os campos, os quais podem ser :


Página PAGE 582
Programando com o Centura Team Developer 2000

Date/Time – formatos para campos de data e hora.


Input – define a forma como será feita a entrada dos dados.
Number - formatos para campos numéricos.

External Functions

O SQLWindows/32 suporta a utilização de qualquer função definida por outro fornecedor de software. A
definição dessas funções vindas de DLLs, ou de outros programas executáveis, é feita na seção External
Functions. Funções escritas em outras linguagens e disponibilizadas em DLLs devem ser declaradas
conforme o exemplo abaixo, onde a função SWinFindWindow do próprio SQLWindows/32 é definida :

Declaração de uma função externa.

Observe que o valor do item Export Ordinal pode ser sempre 0 (zero). Na seção Returns deve ser definido o
tipo do valor que a função retorna. Assim como na seção Parameters deve ser definido o tipo de cada um dos
parâmetros que a função precisa para funcionar corretamente.

Constants

Página PAGE 582


Programando com o Centura Team Developer 2000

Declaração de algumas constantes.

As constantes do programa devem ser definidas na seção Constants, e podem ser:


 System
 User
 Enumerations

As constantes System e User podem ser dos tipos de dados Boolean, Date/Time, Number ou String, e você
deve utilizar essas seções para melhor administrar suas constantes.

Enumerations são coleções de constantes numéricas que são utilizadas em servidores COM.

O SQLWindows automaticamente cria uma GUID a cada Enumeration definida.

Como padrão, cada Enumeration possui um valor que inicia em 0 (zero), sendo incrementado de 1 (um) a
cada elemento. O valor do incremento pode ser alterado, bem como duplicado.

Resources

Os recursos visuais da aplicação definidos nesta seção passam a fazer parte do executável final gerado pelo
Centura SQLWindows/32. Ou seja, cursores, figuras tipo bitmap e ícones são incluídos no executável,
facilitando a distribuição do aplicativo.

Variables

Declaração de algumas variáveis.


Página PAGE 582
Programando com o Centura Team Developer 2000

Na seção Variables são definidas as variáveis que serão visíveis em toda a aplicação. As
variáveis podem ser dos tipos de dado Boolean, Date/Time, File Handle, Long String,
Number, Session Handle, Sql Handle, String, Window Handle e dos tipos definidos pelo
programador.

Você verá como trabalhar com tipos de dados definidos pelo programador no capítulo 5.

Internal Functions

Funções internas são funções escritas na própria linguagem SAL. As funções definidas na seção Internal
Functions são visíveis em todo o aplicativo, por todos os módulos (funções, objetos, classes etc.).
Posteriormente, também é possível fazer a geração de DLLs das funções internas, utilizando o Centura
Object Compiler.

Named Menus

Named Menus são definições de estruturas de menus que serão posteriormente utilizadas na aplicação. Os
menus definidos na seção Named Menus são visíveis em todo o aplicativo e podem ser usados, a qualquer
momento, por qualquer módulo da aplicação.

Class Definitions

Na seção Class Definitions são definidas todas as Classes Definidas pelo Usuário. Para cada objeto visual
existe uma classe correspondente. Basicamente, os tipos das classes disponíveis são:

ActiveX Class Background Text Class Check Box Class


Child Table Class CoClass Column Class
COM Proxy Class Combo Box Class Custom Control Class
Data Field Class Dialog Box Class Form Window Class
Frame Class Functional Class General Window Class
Group Box Class Horizontal Scroll Bar Class Interface
Line Class List Box Class MDI Window Class
Multiline Field Class Option Button Class Picture Class
Pushbutton Class Radio Button Class Table Window Class
Vertical Scroll Bar Class

Applications Actions

Nesta seção são codificadas as ações mais genéricas para a aplicação. Por exemplo, o
início e término da aplicação e o tratamento de erros genéricos.

O Customizer

Página PAGE 582


Programando com o Centura Team Developer 2000

Customizer, mostrando as propriedades de um form window e de uma child table.

O Customizer é o componente que permite ao desenvolvedor visualizar e alterar todas as


características dos objetos da aplicação. Cada objeto possui suas próprias características,
algumas podem ser alteradas através do customizer. Características como o nome do
objeto, seu título, cor, tipo e tamanho da fonte, informações sobre o tipo de dado
armazenado no objeto, máscara de formatação e de entrada de dados, entre outras.

É possível ter acesso ao customizer de duas formas :

Através do Outline. Basta clicar uma vez, com o botão esquerdo do mouse, no ícone
localizado à esquerda de cada um dos objetos. O objeto que não dispor esse ícone
não possui características passíveis de alteração pelo Customizer.

Através da Visualização dos Objetos. Estando em Preview Mode, basta clicar duas
vezes sobre o objeto desejado para que o customizer seja mostrado.

É importante observar que, mesmo quando o programa está sendo executado, Run-Time
Mode, é possível visualizar as características dos objetos. Obviamente, não é permitido
alterar nenhuma característica em Run-Time.
Página PAGE 582
Programando com o Centura Team Developer 2000

O Attribute Inspector

O Attribute Inspector possui praticamente as mesmas características apresentadas no


customizer, com uma diferença básica: o Attribute Inspector permanece ativo até que você
o desative. O customizer permanece ativo apenas enquanto você visualiza as características
do objeto, com isso, você pode selecionar vários objetos sem que seja necessário ativar
novamente o Attribute Inspector. Com o Attribute Inspector você pode visualizar as
mesmas propriedades acessíveis pelo Customizer.

Observe as propriedades de um form window sendo visualizadas através do Attribute


Inspector:

Attribute Inspector mostrando as propriedades de um form window.


Para acionar o Attribute Inspector pressione, simultaneamente, as teclas Alt 3.

Você precisa decidir se vai utilizar o Customizer ou o Attribute Inspector, pois, os dois não podem ser
utilizados simultaneamente. Essa opção deve ser configurada através do menu Tools | Preferences,
acionando a pasta Presentation.

Na janela de configuração Preferences você escolhe entre utilizar o Customizer ou o Attribute Inspector.

Página PAGE 582


Programando com o Centura Team Developer 2000

A Paleta de Controles

Todos os objetos visuais tipo child do Centura SQLWindows/32, os quais estão disponíveis para que o
desenvolvedor utilize em sua aplicação, encontram-se agrupados na Paleta de Controles. Sempre que um dos
botões da Paleta de Controles é selecionado, os nomes das suas subclasses (se existir) são mostrados no
listbox localizado na parte inferior da Paleta de Controles.

A Paleta de Controles pode ser acionada de três maneiras diferentes:


 pressionando simultaneamente as teclas Alt 4.
 acionando o menu Tools | Controls .
 clicando no ícone Controls localizado na própria barra de ferramentas do SQLWindows.

O ícone Controls.

A Paleta de Controles é bastante flexível, permitindo ao desenvolvedor configurá-la da


forma que for mais agradável. Isso torna o desenvolvimento extremamente confortável.

A Paleta de Controles possui três grupos de botões, cada grupo representa um tipo de
objeto que está disponível para o programador. Os três tipos são:

 No primeiro grupo de botões existe um botão para cada tipo de Objeto Child nativo
do SQLWindows.
 No segundo grupo de botões estão os objetos tipo Custom Controls. Existe um
botão genérico para os Custom Controls, um botão que ativa os componentes do
SQLWindows para construção de aplicativos de bancos de dados e um terceiro
botão que aciona o componente para construção de gráficos de negócios.
 Inicialmente o terceiro grupo mostra apenas dois botões, o primeiro serve para
incluir na aplicação um controle ActiveX genérico. O segundo botão representa o
Controle ActiveX do Report Builder.

Controles disponíveis no Centura SQLWindows/32.

O segundo e terceiro grupo de botões da barra de Controles podem ser personalizados pelo
programador, basta arrastar e soltar um objeto no local desejado da barra de Controles.

A próxima figura ilustra a personalização do grupo de objetos ActiveX da Paleta de


Controles.
Página PAGE 582
Programando com o Centura Team Developer 2000

Arraste um controle ActiveX muito utilizado para o grupo dos controles ActiveX na
Paleta de Controles.

Cada ícone mostrado na Paleta de Controles representa um tipo de objeto no Centura


SQLWindows/32. Quando um tipo de objeto é escolhido, as diversas classes desse objeto
são mostradas numa lista na própria Paleta de Controles. Então, basta escolher uma das
classes e clicar na janela de layout, para que um objeto do tipo e classe escolhidos seja
inserido na aplicação.

As próximas figuras ilustram a inclusão de um objeto da Paleta de Controles na aplicação.

1 O objeto escolhido na paleta Controls é o pushbutton.

2 Movimente o mouse para o local onde você deseja colocar o objeto. Observe que o
ponteiro do mouse assume a forma do objeto escolhido na paleta Controls.

Página PAGE 582


Programando com o Centura Team Developer 2000

3 Quando encontrar a localização ideal, clique uma vez com o botão esquerdo do
mouse. Dessa forma, o objeto é “colocado” na sua aplicação. Automaticamente o
ponteiro do mouse volta à sua aparência normal e o cursor de edição de texto é
posicionado no objeto que foi inserido na aplicação.

No caso do objeto escolhido neste exemplo, que é um pushbutton, o texto que você
escrever será o título do objeto.

4 Após dar um título ao objeto, e teclando-se ENTER, o objeto assume a aparência


mostrada abaixo. Os pequenos quadrados posicionados ao redor do objeto indicam
que o objeto está selecionado.

5 Estando selecionado, é possível modificar suas características através do Attribute


Inspector.

Página PAGE 582


Programando com o Centura Team Developer 2000

6 Enquanto um objeto está selecionado, é possível utilizar o mouse para alterar suas
dimensões.

Clique num dos quadrados que envolve o objeto e arraste para o tamanho desejado.

O objeto pode ser excluído de duas formas:

 Selecione o objeto e pressione a tecla Delete.


 Selecione o objeto, clique com o botão direito do mouse para acionar o menu de
contexto. Acione o item de menu chamado Delete.

Exclusão de um objeto.

O Assistente de Código

A principal função do Assistente de Código do Centura SQLWindows/32 é fazer com que


o programador digite o mínimo possível durante o desenvolvimento da aplicação. Saber
utilizar o Assistente de Código é de extrema importância para obter maior produtividade no
desenvolvimento.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Assistente de Código é um objeto que é sempre mostrado por cima de todas as outras
janelas do Centura SQLWindows/32, podendo ser posicionado em qualquer local da tela e
ter suas dimensões alteradas.

O Assistente de Código pode ser acionado de três maneiras diferentes:


 pressionando simultaneamente as teclas Alt 3.
 acionando o menu Tools | Coding Assistant .
 clicando no ícone Coding Assistant localizado na própria barra de ferramentas do SQLWindows.

O ícone Coding Assistant.

O Assistente de Código é sensitivo à posição do cursor no outline, ou seja, dependendo do


local onde o cursor estiver posicionado no outline, o Assistente de Código mostra os
possíveis valores que podem ser a esse adicionados.

Além disso, o Assistente de Código agrupa as informações por categorias, conforme


mostrado abaixo:

O Assistente de Código classifica as informações possíveis de serem adicionadas ao outline, podendo ser:
 Comandos SAL
 Mensagens
 Funções SAL
 Funções do Usuário
 Funções do Objeto
 Funções definidas em Objetos do Usuário
 Variáveis
 Variáveis do Sistema
 Constantes
 Nomes dos Objetos da Aplicação
 Resources
 Parâmetros
 Classes Base

Página PAGE 582


Programando com o Centura Team Developer 2000

A grande utilidade do Assistente de Código é melhorar a produtividade no


desenvolvimento, evitando erros de digitação, pois, não há como escrever o nome de uma
função errado, errar a quantidade e tipos de dados dos parâmetros, usar uma variável não
definida ou não permitida naquele local; uma vez que, o programador não as escreve
efetivamente, elas são mostradas no Assistente de Código e, com um clique, são
automaticamente transportadas para o código fonte. Caso o programador precise fazer
referência a um determinado objeto, não é necessário saber exatamente o seu nome, basta
escolhê-lo no Assistente de Código.

As próximas figuras ilustram a escrita de código utilizando-se o Assistente de Código.

1 O Assistente de Código é sensitivo. Baseia-se no item selecionado do outline.

2 Observe a figura abaixo, como o item do outline que está selecionado é a seção
Application Actions, o Assistente de Código relaciona os eventos que podem ser
adicionados a essa seção.

Clique duas vezes no item “On SAM_AppStartup” e observe que ele é


automaticamente inserido no outline.

3 Neste momento, o item do outline que está selecionado é o evento


“SAM_AppStartup” (que acabou de ser inserido) . A partir desse ponto pode ser
inserido no outline dois tipos de elementos, um comando ou outro evento. Por esse
motivo o Assistente de Código mostra dois listboxes. No listbox superior estão os
elementos que podem ser adicionados no mesmo nível do item selecionado no
outline, enquanto que no listbox inferior estão os elementos que podem ser

Página PAGE 582


Programando com o Centura Team Developer 2000

adicionados no interior da seção selecionada no outline.

Neste exemplo vamos adicionar um elemento no interior da seção selecionada no


outline, portanto, clique duas vezes no item chamado “Call”, mostrado no listbox
inferior.

4 O comando “Call” foi inserido no outline e o cursor de edição de texto foi


posicionado automaticamente no final da mesma linha do comando inserido. Neste
momento você pode digitar o restante do comando diretamente no outline, ou pode
continuar utilizando as facilidades oferecidas pelo Assistente de Código .

5 No combobox localizado na parte superior do Assistente de Código, selecione o


item “Sal Functions”. Isso fará com que todas as funções do SQLWindows sejam
disponibilizadas para que você possa escolher uma que será incluída no seu
programa fonte.

Página PAGE 582


Programando com o Centura Team Developer 2000

6 Logo abaixo do combobox onde você escolheu “Sal Functions” está um datafield
que trabalha em conjunto com a lista das funções. Comece a digitar o nome da
função desejada, que a mesma será localizada na lista das funções. Neste exemplo
utilizaremos a função chamada SalCreateWindow, que serve para fazer com que
um determinado form window seja criado na aplicação. Inicie a digitação do nome
da função e observe que a cada letra digitada o Assistente de Código localiza a
função que mais se pareça com o texto digitado. Digite apenas “SalCr”, pois isso é
o suficiente para que o Assistente de Código selecione a função correta, conforme
mostrado na figura abaixo. Neste momento você pode teclar ENTER para que a
função seja inserida no outline.

7 Quando o Assistente de Código insere uma função no outline, seus eventuais


parâmetros são selecionados (conforme a figura abaixo). A função utilizada neste
exemplo possui dois parâmetros, os seus tipos de dados são mostrados no outline.

Isso facilita a escrita do programa, pois, você já sabe (sem que seja necessário
consultar a documentação online) que tipos de variáveis/objetos devem ser
utilizados.

8 Clique duas vezes no primeiro parâmetro, “Template”. Um tipo de dado Template


refere-se a um nome de objeto. Neste caso é o nome do objeto a ser criado.

Em seguida selecione “Windows Names” no Assistente de Código para que sejam


mostrados os nomes de todos os objetos.

Página PAGE 582


Programando com o Centura Team Developer 2000

9 Clicando duas vezes no nome do objeto desejado, o Assistente de Código moverá o


nome escolhido para a região selecionada no outline.

10 Clique duas vezes no nome “Window Handle” que indica o tipo de dado do
próximo parâmetro da função SalCreateWindow.

Depois selecione “System Variables” nas categorias do Assistente de Código. Isso


fará com que sejam mostradas as variáveis do SQLWindows.

11 Selecione “hWndNULL” no Assistente de Código, clicando duas vezes para que


seja transportada para o outline na posição correta.

Página PAGE 582


Programando com o Centura Team Developer 2000

12 Dessa forma, uma linha de comando no outline do SQLWindows foi montada.


Pressione ENTER para encerrar a digitação da linha e para que o Assistente de
Código identifique a posição do outline que está selecionada, mostrando os itens
que podem ser adicionados.

É deste modo que escrevemos programas em linguagem SAL no outline do SQLWindows.


Você pode escrever seus programas sem utilizar o Assistente de Código, porém, é bem
mais prático utilizá-lo na escrita do código SAL.

Você pode ativar/desativar o Assistente de Código pressionando as teclas Alt 2


simultaneamente.

O Database Explorer

Página PAGE 582


Programando com o Centura Team Developer 2000

Database Explorer.

A partir do próprio ambiente de desenvolvimento do Centura SQLWindows/32 é possível criar tabelas,


visões e índices, fazer consultas e gerar relatórios, sem que seja necessário nenhum conhecimento de SQL.
Através da interface amigável do Database Explorer se pode realizar todas essas tarefas típicas de
desenvolvimento de sistemas e ainda incluir , alterar e excluir dados nas tabelas.

Assim como todas as ferramentas do Centura Team Developer, o Database Explorer


trabalha com todos os tipos de bancos de dados padrões de mercado, de forma
transparente.

ActiveX Explorer

Para que você possa analisar o conteúdo dos servidores ActiveX (*.dll, *.exe, *.olb, *.ocx e *.tlb), instalados
em sua máquina, o SQLWindows/32 oferece uma ferramenta chamada ActiveX Explorer que, através de suas
janelas, proporciona uma visão clara e simples das CoClasses, interfaces, enumerators e eventos, além de
uma documentação dos métodos informando os tipos de dado dos seus parâmetros e dos valores de retorno.

Você pode acionar o ActiveX Explorer através do menu Tools | ActiveX Explorer.

O ActiveX Explorer.

As duas figuras acima ilustram a utilização do ActiveX Explorer.

 A primeira figura mostra a seleção de um servidor ActiveX sendo feita.


 A segunda figura mostra os componentes desse servidor, onde cada elemento
possui um checkbox ao seu lado esquerdo. O programador deve selecionar os
elementos que deseja utilizar, pois o ActiveX Explorer irá gerar o código SAL
equivalente, numa APL separada, aos elementos escolhidos do servidor ActiveX.

Obs : O ActiveX Explorer gera uma APL para o servidor Activex escolhido pelo
programador. Se o programador escolher na primeira janela do ActiveX Explorer uma
APL (previamente gerada), ao invés de escolher um servidor, o ActiveX Explorer
automaticamente lê a APL escolhida, localiza o servidor ActiveX correspondente e carrega
as informações deste.

Barras de ferramentas

As barras de ferramentas do SQLWindows são mostradas abaixo. As ações dos seus botões
são sempre encontradas em algum item de menu.

Página PAGE 582


Programando com o Centura Team Developer 2000

As barras de ferramentas podem ser personalizadas com relação ao seu conteúdo, tamanho
e localização.

Para configurar as barras de ferramentas acione o menu Tools | Toolbars.

As duas figuras mostradas abaixo ilustram as janelas de configurações das barras de


ferramentas.

Configuração das barras que estarão visíveis e do conteúdo de cada barra de


ferramentas.

Explorando os menus

Os menus do SQLWindows/32 são mostrados abaixo, seguidos das descrições de cada


item. Alguns dos recursos podem não estar disponíveis, dependendo da forma como o
produto é instalado.

O Menu File

Menu Descrição
New... Inicia uma nova aplicação do Centura SQLWindows/32. É aberta a
Página PAGE 582
Programando com o Centura Team Developer 2000

caixa de diálogo Template, para que seja escolhido um modelo de


aplicação ou para que seja incluído um modelo novo, definido pelo
programador.
Se você não escolher nenhum modelo e clicar no botão cancel, a
caixa de diálogo Template é encerrada e nenhuma aplicação é criada.
Open... Ativa a caixa de diálogo que permite escolher e abrir uma aplicação
existente no SQLWindows/32. Através desta caixa de diálogo pode-
se optar entre os diversos tipos de aplicações ( apl, app ou apt ).
Você pode ter apenas uma aplicação aberta por vez numa instância
do SQLWindows/32, mas pode ter diversas instâncias do
SQLWindows32 abertas simultaneamente, cada uma com uma
aplicação.
Save Salva a aplicação com o nome atual. Se for um nova aplicação, ainda
sem nome, a caixa de diálogo Save As é mostrada, permitindo que
você escolha um local e o nome para que a sua aplicação seja
gravada. Se você não informar um nome e clicar no botão Cancel, a
aplicação não será gravada.
Save As... Salva uma cópia da aplicação atual com um novo nome, solicitado na
caixa de diálogo Save As.
Page Setting... Permite acesso às configurações de impressão do Outline: Tipo e
tamanho da fonte, títulos do cabeçalho e rodapé, e margens. O outline
é impresso exatamente da forma como está apresentado na tela, os
itens subordinados são impressos apenas se a seção estiver
expandida.
Print Imprime o Outline de acordo com as configurações feitas no item
anterior.
Exit Fecha o Centura SQLWindows/32. Se existir alguma alteração feita
na aplicação, e que ainda não foi gravada, o SQLWindows/32
perguntará se você deseja gravar as alterações antes de sair.

O Menu Edit

Nome Descrição
Undo, Cut, Copy, Paste e De acordo com suas funções padrão do Windows.
Delete
Insert line Insere uma linha no Outline a partir do local selecionado.
Comment Items Marca como comentário o item selecionado. Todas as
linhas subordinadas ao item selecionado serão também
comentadas. No SQLWindows/32 uma linha comentada é
iniciada pelo símbolo de exclamação ( ! ).
Uncomment Items Tira a marca de comentário do item selecionado.
Outline | Expand One Expande o outline um nível a partir do nível selecionado.
Level Você também pode expandir um nível, clicando duas
vezes num diamante cheio que não esteja expandido.
Outline | Collapse Comprime o outline a partir do nível selecionado. Você
também pode comprimir uma seção do outline, clicando
duas vezes num diamante cheio que já esteja expandido.
Outline | Expand All Expande o outline inteiro. Isso pode demandar tempo.
Levels
Outline | Collapse Outline Comprime o outline inteiro. Apenas os objetos top level
estarão visíveis.
Outline | Promote Promove o item selecionado um nível, na hierarquia do
outline.

Página PAGE 582


Programando com o Centura Team Developer 2000

Outline | Demote Rebaixa o item selecionado um nível, na hierarquia do


outline.
Outline | Move Up Move o item selecionado uma linha para cima no outline.
Outline | Move Down Move o item selecionado uma linha para baixo no outline.
Find Mostra a janela Find para que você especifique o texto
que deseja procurar no outline.
Find Again Repete a última busca realizada no outline.
Replace Mostra a janela Replace para que você especifique o texto
que deseja procurar e o texto que irá substituí-lo, quando
for encontrado.
Properties... Se algum objeto estiver selecionado no quadro esquerdo
do SQLWindows/32, o customizer é acionado, mostrando
as propriedades do objeto selecionado. Porém, se o
primeiro item da árvore de objetos mostrada no quadro
esquerdo do SQLWindows/32 estiver selecionado, a caixa
de diálogo chamada Properties é ativada, mostrando as
estatísticas e as configurações de run-time da aplicação.

O Menu Project

Nome Descrição
Check Out... Ativa o Team Object Manager para extrair algum
componente do repositório.
Check In... Ativa o Team Object Manager para incluir o componente
atual no repositório.
Compile Compila a aplicação. Para cancelar a compilação clique
no botão Cancel que é mostrado na caixa de diálogo
durante o processo de compilação.
Next Error Visualiza o próximo erro de compilação, quando a
aplicação é compilada e mais de um erro é detectado.
Previous Error Visualiza o erro de compilação anterior, quando a
aplicação é compilada e mais de um erro é detectado.
Execute Executa a aplicação atual. Se a aplicação não estiver
compilada o SQLWindows/32 automaticamente compila
a aplicação. Se durante a compilação, nenhum erro for
detectado a aplicação é executada.
Register Server Instala no registro do Window o servidor COM que
estiver atualmente aberto no SQLWindows.
Un-Register Server Remove do registro do Window o servidor COM que
estiver atualmente aberto no SQLWindows.
Regenerate GUIDs...
Build Settings... Mostra a caixa de diálogo chamada Build Settings, onde é
configurado o modo como a aplicação será gerada. Você
pode especificar que a aplicação será gerada como um
executável normal, uma dynalib, uma biblioteca,
configuara as opções para uso do Object Compiler para a
geração de uma dll, indica o tipo de servidor COM
(Local, In-Proc ou MTS) a ser gerado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Lembre-se, para que a aplicação gerada possa ser


utilizada pelo Object Nationalizer, o check box Enable
Resource Editing deve estar marcado.
Build Efetivamente gera o executável, dynalib, a dll ou o
servidor COM, conforme as configurações feitas no menu
Build Settings.

O Menu Component

Nome Descrição
New Mostra um menu onde você pode escolher um
componente a ser adicionado a sua aplicação. Os itens do
novo menu que aparecerá dependem de qual item está
selecionado no outline. Por exemplo, se o item Classes
estiver selecionado no quadro esquerdo do
SQLWindows/32, este menu de contexto mostrará os
nomes de todas as classes possíveis de serem incluídas à
aplicação neste momento.
Wizards ... Ativa os Assistentes do SQLWindows/32. Os assistentes
aqui disponibilizados dependem da forma como o
Centura foi instalado.
ActiveX Wizard ... Ativa o assistente para controles ActiveX.
QuickObject Editor ... Permite que você relacione uma classe a uma caixa de
diálogo que será ativada em tempo de desenvolvimento a
partir de uma instância da classe. Essa caixa de diálogo
normalmente é utilizada para configurar as propriedades
do objeto, propriedades estas que serão utilizadas em
tempo de execução.
Para explorar mais este recurso consulte o Capítulo 10 -
Criando seus próprios QuickObjects.
Menu Editor ... Ativa o Assistente de Definições de Menus, para que você
possa construir seus menus através de uma interface
gráfica.
Go To Item Carrega numa nova instância do SQLWindows/32 à
biblioteca selecionada. As bibliotecas que foram incluídas
à aplicação, através da seção Libraries, são mostradas no
outline numa cor diferente do restante do código. A
qualquer momento essa biblioteca destacada pode ser
acionada numa nova instância do SQLWindows/32, basta
clicar com o botão direito do mouse numa parte do código
da biblioteca, e escolher o item Go To Item no menu de
contexto.
Show Item Information Mostra o nome da biblioteca ao qual o fonte selecionado
pertence. As bibliotecas que foram incluídas à aplicação,
através da seção Libraries, são mostradas no outline
numa cor diferente do restante do código. Para saber a
que biblioteca pertence o código selecionado, clique com
o botão direito do mouse numa parte do código da
biblioteca, e escolha o item Show Item Information no
Página PAGE 582
Programando com o Centura Team Developer 2000

menu de contexto.
Refresh Libraries Inclui novamente todas as bibliotecas definidas na seção
Libraries do outline. Faça isso para atualizar o seu
programa com a versão mais recente das bibliotecas.
Merge Libraries Incorpora no programa atual todas as bibliotecas que
foram definidas na seção Libraries do outline. Uma vez
incluídas, não é possível desfazer essa ação. Todo o
código passa a ser uma única aplicação.
Large Icons Seleciona automaticamente a tab Components, localizada
na parte inferior do quadro direito do SQLWindows/32, e
mostra os componentes no formato de ícones grandes.
Small Icons Seleciona automaticamente a tab Components, localizada
na parte inferior do quadro direito do SQLWindows/32, e
mostra os componentes no formato de ícones pequenos.
List Seleciona automaticamente a tab Components, localizada
na parte inferior do quadro direito do SQLWindows/32, e
mostra os componentes no formato de lista.
Details Seleciona automaticamente a tab Components, localizada
na parte inferior do quadro direito do SQLWindows/32, e
mostra os componentes em detalhes.

O Menu Layout

Nome Descrição
Preview Window Mostra a janela como ela aparecerá ao usuário em tempo
de execução. A janela é mostrada "fora" do quadro direito
do ambiente do SQLWindows/32. Neste momento você
pode clicar num elemento visual mostrado na janela e
observar que o elemento clicado é selecionado no outline,
dessa forma a localização dos itens no outline é facilitada.
Bring to Front Traz para cima o item selecionado.
Send to Back Envia para baixo o item selecionado.
Align to Grid Alinha os objetos selecionados à grade.
Align Edges Opções para se configurar o alinhamento dos objetos
visuais.
Space Evenly Opções para se configurar o espaço entre os objetos
visuais.
Make Same Size Opções para se configurar o tamanho dos objetos visuais.
Grid Liga / Desliga a utilização da grade.
Tab Order Configura a ordem de tabulação dos objetos visuais.
Show Sample Text Quando você ativa este item, o SQLWindows/32 mostra
nos data fields, combo box, colunas da table window e
nos multiline fields, textos demonstrando os dados nos
objetos. Isso é muito útil para que você saiba o tamanho
necessário para cada objeto.
Show Design Scroll Bars Mostra as barras de rolagem em tempo de design, nas
laterais dos objetos form window e table window.
Show Hidden Windows Faz com que os objetos configurados como invisíveis

Página PAGE 582


Programando com o Centura Team Developer 2000

possam ser visualizados. Essa configuração só é válida


em tempo de design. Quando a aplicação é executada, os
objetos invisíveis não são mostrados.

O Menu Debug

Nome Descrição
Go Quando em modo de design executa a aplicação, quando
em modo de run-time retorna ao modo de design.
Stop Interrompe a execução da aplicação saindo do modo de
execução, retornando ao SQLWindows/32.
Continue Continua a execução da aplicação quando em debug-
mode.
Break Interrompe a execução da aplicação na linha que está
sendo executada, e permite entrar em modo de depuração
da aplicação.
Step Into Executa a próxima linha de comando e retorna o controle
ao SQLWindows/32. Se o comando for uma função, a
primeira linha desta função é selecionada, e você pode
continuar acompanhando passo-a-passo a execução da
função. No caso de funções do próprio SQLWindows/32,
e funções externas, o procedimento é semelhante ao
descrito no item Step Over.
Step Over Executa a próxima linha de comando e retorna o controle
ao SQLWindows/32. Se o comando for uma função, o
SQLWindows/32 executa todos os comandos no seu
interior, e posiciona na linha imediatamente posterior.
Breakpoints | Toggle Se a linha atual do outline for um breakpoint, ao ser
acionado este item a linha deixará de ser um breakpoint, e
se a linha não for um breakpoint passará a ser. Quando o
SQLWindows/32 está executando a aplicação, ele pára a
execução entrando em modo de depuração assim que
encontrar uma linha marcada como breakpoint.
Breakpoints | Clear All Desmarca todas as linhas do outline que estiverem
marcadas como breakpoint.
Breakpoints | Disable All Desabilita todos os breakpoints configurados.
Breakpoints | Enable All Habilita todos os breakpoints que foram anteriormente
desabilitados.
No Animate Não mostra as linhas de código durante a execução.
Slow Animate Mostra as linhas de código, destacando-as, durante a
execução em modo lento. O Intervalo de segundos é
configurado na caixa de diálogo Preferences.
Fast Animate Mostra as linhas de código, destacando-as, durante a
execução em modo rápido.
Playback Permite que você depure um servidor COM da mesma
forma que uma aplicação normal.
Playback rewind Permite que você depure um servidor COM da mesma
forma que uma aplicação normal.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Menu Database

O menu Database só é mostrado quando o Database Explorer , que é acionado através do


menu Tools | Database Explorer, está sendo utilizado.

Nome Descrição
Open Database Explorer Executa o Database Explorer.
New Permite a criação de nova Tabela, Índice, Store
Procedure, Store Procedure Package ou Banco de Dados.
SQL Script Ativa o SQLTalk.
Table Comandos para edição, manutenção e filtro nos dados da
tabela selecionada.
Stored Procedure Ativa o editor de stored procedures. Este item depende
muito do tipo de banco de dados aberto no Database
Explorer.
Query Comandos para a criação de uma nova consulta ou
abertura de uma consulta já existente.
Add to list Adiciona um novo Banco de Dados à relação já existente.
Disconnect Desconecta do banco de dados.
View System Tables Visualiza as tabelas do sistema. (Catálogo)
Close Database Explorer Encerra a execução do Database Explorer.

O Menu Tools

Nome Descrição
Users Tools... Mostra uma caixa de diálogo que lhe permite configurar
as ferramentas mostradas no menu Tools. Você pode
personalizar a barra de menu Tools adicionando itens de
menu.
ToolBars... Permite que você escolha quais barras de ferramentas do
SQLWindows estarão visíveis ou não. Você pode também
criar suas próprias barras de ferramentas personalizando
os botões de cada uma. Por exemplo, você pode montar
uma barra de ferramentas nova pessoal, com os comandos
do SQLWindows mais utilizados por você.
Preferences... Ativa a janela de Propriedades do Centura
SQLWindows/32, onde é possível configurar o path
default, o intervalo de tempo utilizado no Debug Slow
Animate, os valores para o Grid, os tipos e cores das
fontes utilizadas no SQLWindows/32 para representar
comentários no programa fonte e itens incluídos,
configura o assistente de código, customizer e attribute
inspector.
Output Visualiza a janela de Output, onde são mostrados os erros
e avisos ocorridos na compilação.
Coding Assistant Visualiza o Assistente de Código.
Attribute Inspector Visualiza o Inspetor dos Atributos.

Página PAGE 582


Programando com o Centura Team Developer 2000

Controls Visualiza a Paleta de Controles.


Variables Em modo de Debug, mostra a janela de variáveis.
Call Stack Em modo de Debug, mostra a janela com a seqüência de
objetos e eventos executados.
Messages Em modo de Debug, mostra a janela com a pilha de
mensagens em execução.
Expressions Em modo de Debug, mostra uma janela onde é possível
avaliar o conteúdo dos objetos, das variáveis e os valores
retornados pelas funções.
Database Explorer Inicia o Database Explorer.
ActiveX Explorer Inicia o ActiveX Explorer.
Report Builder Executa o gerador de relatórios Report Builder. Consulte
o Capítulo 11 – O Report Builder, para saber mais
sobre esta ferramenta.
Team Object Manager Executa o gerenciador de projetos Team Object Manager.
Browse All Classes Executa o browser gráfico das classes, mostrando a
hierarquia e estrutura das classes, graficamente.
Diff / Merge Tool Executa o aplicativo Diff/Merge que identifica diferenças
entre dois programas fontes.
SQLTalk Executa o SQLTalk. Consulte o Capítulo 3 - Acesso ao
SQL, para saber mais sobre o SQLTalk.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 2
A Linguagem SAL
Neste capítulo apresentamos a linguagem de programação e todos os componentes utilizados
no SQLWindows/32. Você ficará familiarizado com a maneira como a linguagem está
estruturada, suas regras, os tipos de dados, os objetos, os menus, enfim, todos os elementos da
linguagem SQLWindows.

Serão mostrados detalhadamente todos os objetos e os tipos de menus do SQLWindows/32,


com suas respectivas características, para total aproveitamento do desenvolvedor.

Página PAGE 582


Programando com o Centura Team Developer 2000

A Linguagem SAL

Toda a programação em Centura SQLWindows/32 é feita através da linguagem SAL (Scalable Application
Language), uma linguagem amadurecida, poderosa e de fácil entendimento. Um programa fonte em
linguagem SAL é composto de comandos e funções SAL e de comandos SQL.

O programa fonte

Um programa Centura SQLWindows/32 pode ter as seguintes extensões padrões :

APL – Tipo de arquivo que identifica Bibliotecas, utilizado para armazenar objetos, classes
e rotinas genéricas que serão aproveitadas em diversas aplicações desenvolvidas,
utilizando-se o SQLWindows/32.
APP – Tipo de arquivo que identifica Aplicações em formato binário, um formato
proprietário. Uma aplicação que esteja gravada neste formato só pode ser visualizada
através do próprio SQLWindows/32.
APT – Tipo de arquivo que identifica Aplicações em formato texto padrão. Uma aplicação
que esteja gravada neste formato pode ser visualizada através do SQLWindows/32 e
também através de um editor de textos padrão TXT, embora não seja recomendada
qualquer alteração no fonte, mediante uma interface diferente da disponibilizada no
SQLWindows/32.
APD - Tipo de arquivo que identifica Aplicações compiladas em Dynalibs. Dynalibs são
utilizadas para o compartilhamento de funções, janelas e suas funções, e objetos
child. Este formato é proprietário, sua utilização é reservada a aplicações
desenvolvidas em Centura SQLWindows/32.
APC - Tipo de arquivo que identifica Aplicações compiladas com o Centura Object Compiler.
O resultado desta compilação é uma DLL com todas as funções internas. Essa DLL é
padrão e pode ser utilizada por qualquer outra linguagem feita para ambiente Windows.

Os Comandos da Linguagem SAL

A linguagem SAL oferece aos desenvolvedores os comandos Break, Call, Else, If, Loop, Return, Select Case,
Set, While, que são explicados em detalhes abaixo.

Break

Este comando é utilizado para encerrar o processamento dos comandos Loop, While e
Select Case. O fluxo de execução do programa é passado para o bloco de comandos
imediatamente seguinte.

Call

O comando Call é utilizado para chamar uma função.

If Else Else If

O comando If é usado para executar uma operação dependendo de alguma condição. Ele possui a seguinte
sintaxe :

If < expressão1 >


...........
Else If < expressão2 >
...........
Else

Página PAGE 582


Programando com o Centura Team Developer 2000

...........

O SQLWindows/32 avalia a primeira expressão no If, se for obtido um valor TRUE (


Verdadeiro ), então, o código subordinado ao comando If é executado. No caso da
expressão retornar FALSE, o Centura SQLWindows/32 procura pelo próximo Else ou Else
If, se existirem. Else If é utilizado quando se faz necessário testar mais de uma condição.
Se a expressão presente no Else If retornar TRUE, o SQLWindows/32 executa o código
subordinado ao comando Else If. Se a Expressão retornar FALSE, o Centura continua a
procurar por mais algum comando Else If. Caso não encontre nenhum Else If, e sim um
comando Else, o Centura então executa o código subordinado ao comando Else. Se não for
encontrado comando Else, ele simplesmente continua a execução do programa.

O SQLWindows/32 utiliza a hierarquia presente no Outline para determinar o bloco de


comandos subordinados que será executado. Isso elimina a necessidade de utilizar os
delimitadores BEGIN ... END presentes em outras linguagens.

Alguns exemplos :
If nCodigo = 999
.............
Else If nCodigo = 888
............
Else
............
Set sNome = ‘José’

A utilização do operador de igualdade (=) não se faz obrigatória em alguns casos. Similar a linguagem C, ao
ser avaliada uma expressão, e esta retornar um valor 0 (zero), o Centura SQLWindows/32 interpreta como
FALSE. Qualquer valor diferente de zero é interpretado como um valor TRUE. Observe o próximo exemplo:

Set nValor = 3
If nValor
[ este código é executado, pois 3 é diferente de FALSE ]
If nValor = TRUE
[ este código não é executado, pois 3 é diferente de TRUE ]

No primeiro If o comando subordinado é executado, pois, nenhuma comparação direta com


a constante TRUE é efetuada. No segundo If a comparação é feita, o código não é
executado, uma vez que, nValor é diferente de TRUE.

Obs.: Podem ser feitas avaliações de variáveis sem a utilização de operadores, como no
exemplo acima, apenas com variáveis ou expressões que retornem um tipo de dado Lógico.
Ao deixar de utilizar o sinal de igualdade (=) em expressões ou variáveis que retornem
outros tipos de dados, o entendimento do código ficará comprometido, dificultando a sua
leitura e depuração.

Return

O comando Return pode ser utilizado para finalizar o processamento de uma função ou
mensagem e retornar um status para o ponto da aplicação de onde foi chamado. Return
pode ser utilizado em qualquer ponto do código.

Select Case

Página PAGE 582


Programando com o Centura Team Developer 2000

O comando Select Case é outro comando de avaliação de condições na linguagem do


Centura SQLWindows/32. A estrutura If ... Else é normalmente utilizada quando existem
dois possíveis resultados. Algumas vezes a estrutura If ... Else é utilizada para mais que
dois resultados, mas o comando Select Case se mostra mais conveniente nesses casos. A
sintaxe do comando Select Case é a seguinte :
Select Case < expressão >
Case < valor >
..........
Break
Case < valor >
..........
Break
Default
..........
Break

O tipo de dado retornado pela expressão avaliada pelo Select Case deve ser numérico
inteiro. Não pode ser avaliada uma expressão de outro tipo de dado como data/hora, string
ou número com decimais. O valor utilizado em cada comando Case deve ser um valor ou
uma expressão numérica inteira. Quando for necessário avaliar expressões de algum tipo
de dado diferente de número inteiro, deve ser utilizado o comando If ... Else. O Centura
SQLWindows/32 avalia a expressão inteira e localiza o primeiro Case que satisfaça a
condição da expressão. Quando encontra, executa o código subordinado ao Case
encontrado e continua a procurar por mais algum Case que satisfaça a condição. O código
subordinado à cláusula Default é executado quando o SQLWindows/32 não encontra
nenhum Case que satisfaça a condição. A cláusula Default não é obrigatória, mas quando
utilizada deve ser a última do comando Select Case.

O comando Break é usado para informar ao Centura que encerre a execução do bloco de
comandos. Ao encontrar um Break num comando Case, o SQLWindows/32 encerra a
execução de todo o bloco do comando Case. Se um Break for omitido num bloco Case, o
Centura irá continuar executando o conteúdo de todos os outros Cases que satisfaçam a
condição, até o fim.

A omissão do comando Break, quando utilizado corretamente, pode trazer benefícios.


Observe o exemplo:

Considere que ERRO_INSERT, ERRO_UPDATE e ERRO_DELETE são constantes


numéricas inteiras.
Select Case ( nErro )
Case ERRO_INSERT
Call SalMessageBox( "Registro já existe.", "Case", MB_Ok )
Break
Case ERRO_UPDATE
Case ERRO_DELETE
Call SalMessageBox( "Registro não foi encontrado.", "Case", MB_Ok )
Break
Default
Call SalMessageBox( "Erro desconhecido", "Case", MB_Ok )
Break

Nesse exemplo o tratamento de erro para os comandos de UPDATE e DELETE é o


mesmo; o erro de INSERT possui sua própria crítica de erro. Ao invés de repetir todo o
bloco de código para as críticas de erro do UPDATE/DELETE, eles são colocados um
acima do outro. Já que não existe nenhum Break no Case ERRO_UPDATE, a execução
Página PAGE 582
Programando com o Centura Team Developer 2000

prossegue ao próximo Case e termina quando o Centura SQLWindows/32 encontrar o


Break subordinado ao Case ERRO_DELETE.

Set

O comando Set é usado para associar um valor a algum objeto ou variável. O valor
associado pode ser um valor ou uma expressão :

Set < variavel / objeto > = < valor / expressão >

Alguns exemplos :
Set sNome = “José”
Set nValor = nValor1 * nValor2
Set sCidadeEstado = sCidade || “ – “ || sEstado

While e Loop

Os comandos While e Loop são duas estruturas de laço do Centura


While < expressão >
...
Break

Loop [ nome_loop ]
...
Break [ nome_loop ]

Página PAGE 582


Programando com o Centura Team Developer 2000

Todo o código subordinado ao comando While ou ao comando Loop são parte do laço.
O While é um laço onde a condição é avaliada antes deste ser executado pela primeira vez.
A expressão precisa ser avaliada e deve ser TRUE ( diferente de zero ). O laço continua até
que uma destas duas condições se satisfaçam:
 A expressão seja avaliada FALSE.
 Um comando Break seja encontrado.

O Loop é um laço mais “flexível”. O código no laço é executado pelo menos uma vez e
termina quando o Centura encontrar um comando Break. Caso o Centura não encontre um
comando Break, o programa fatalmente irá travar, e um resultado não desejado poderá
ocorrer.

Pode ser utilizado o comando Loop e While para montar laços “aninhados” ( nested loops
). Nesse caso, torna-se extremamente útil “nomear” os laços. Observe o código :
Loop LoopExterno
.........
If Condicao
Break LoopExterno
Loop LoopInterno
.........
If Condicao
Break LoopInterno
Else If Condicao
Break LoopExterno

Página PAGE 582


Programando com o Centura Team Developer 2000

Operadores Matemáticos

O Centura suporta os operadores matemáticos que são padrão entre a maioria das linguagens, conforme a
tabela abaixo :

Operado Descrição
r
+ Adição
- Subtração
* Multiplicação
/ Divisão
= Igualdade
!= Não igual a
> Maior que
< Menor que
>= Maior que ou
Igual a
<= Menor que ou
Igual a
** Exponenciação
AND AND lógico
OR OR lógico
NOT Negação
& Bitwise AND
| Bitwise OR
|| Concatenação

Nota
Entende-se pelo termo bitwise a comparação bit-a-bit de posicionamento idêntico em duas expressões
numéricas.

Variáveis

Um data type refere-se ao tipo de informação que um campo ou uma variável pode
armazenar. Isto é muito importante, pois, determina o montante de Memória de Acesso
Randômico ( RAM ) que será reservado para isso. O Centura SQLWindows/32 suporta os
tipos de dados definidos SQL de acordo com o padrão ANSI 92. Isso permite a
compatibilidade com uma variedade de outros produtos, incluindo servidores de bancos de
dados e outras ferramentas de desenvolvimento.

Uma variável significa um local da memória que armazenará um determinado pedaço de


informação. Algumas considerações sobre as variáveis devem ser observadas: o tipo de
dado que pode ser armazenado numa variável e o escopo da variável - escopo refere-se a
acessibilidade que geralmente é Local ou Global.

Página PAGE 582


Programando com o Centura Team Developer 2000

Uma variável local é visível apenas na função, objeto, ou janela que a mesma foi definida.
Normalmente não pode ser acessada de fora do local definido. Uma variável local
geralmente desaparece quando o objeto que a criou é fechado. Isso também libera a
memória que havia sido ocupada.
Uma variável global tem um alcance maior do que a variável local ( alcance em toda a aplicação e não apenas
no form onde foi definida ), mas há dois pontos fracos. O primeiro é que a memória ocupada pela variável
não é liberada, mesmo se a variável não estiver sendo utilizada, enquanto a aplicação estiver sendo
executada. O segundo é bem mais grave, uma variável global pode ser acessada de qualquer local da
aplicação e ter seu valor alterado sem controle.

Tipos de Dados

A tabela abaixo apresenta os tipos de dados suportados pelo Centura SQLWindows/32.

Tipo de dado Descrição


Boolean Deverá ser usado apenas quando for importante identificar um dos dois
estados ( on/off, yes/no, verdadeiro ou falso ).
Date/Time Um valor que inclui uma Data e a Hora em seu formato.
File Handle Usado para identificar um arquivo.
Long String Uma cadeia de caracteres maior que 254 bytes.
Number Um número.
Session Handle Usado para identificar uma sessão junto a um servidor de banco de dados.
SQL Handle Usado para identificar uma conexão junto a um servidor de banco de
dados.
String Uma cadeia de caracteres.
Window Usado para identificar uma instância de um objeto sendo executado.
Handle

A declaração das variáveis

As variáveis são declaradas na seção Variables, que é encontrada na Global Declarations,


nas instâncias dos objetos top level, nas definições das classes dos objetos e nas funções.

A Centura Software Corporation sugere, em seu manual, que o desenvolvedor siga alguns
padrões na definição das suas variáveis, para facilitar a sua utilização e identificação. No
código abaixo estão definidas uma variável para cada tipo de dado do SQLWindows/32.
Observe os prefixos utilizados em cada nome de variável:
Window Variables
Boolean: bOk
Date/Time: dtDataAtual
File Handle: fhConfig
Long String: lsObs
Number: nCodigo
Sql Handle: hSqlConexao
Session Handle: shSessao
String: sDescricao
Window Handle: hWndObjeto

Quando você define uma variável, como mostrado logo acima, mesmo que a variável ainda
não tenha sido utilizada nenhuma vez, ela já possui um valor, o valor default que é iniciado
pelo próprio SQLWindows.

Página PAGE 582


Programando com o Centura Team Developer 2000

Tipo de dado Valor default


Date/Time Um valor data/hora nulo. O mesmo que a constante DATETIME_Null
Number Valor 0 (zero). O mesmo que a constante NUMBER_Null
String Um valor string nulo. O mesmo que a constante STRING_Null.
Window Um valor window handle nulo. O mesmo que a variável de sistema
Handle hWndNULL.

Obs.: No Centura, o tamanho máximo permitido para os nomes de variáveis é de 32


caracteres. É possível o uso das letras, números e do sinal _ (underscore). Os nomes das
variáveis e dos objetos são case-sensitive. Portanto, sNome é uma variável e sNOME é
outra.

Veremos como trabalhar com as variáveis do SQLWindows nos exemplos presentes nos
capítulos onde são mostrados exemplos de programação.

Variáveis do Sistema

O Centura SQLWindows/32 possui algumas variáveis internas, chamadas de Variáveis do


Sistema (System Variables). São variáveis cuja definição não se faz necessária antes de
utilizá-las. São, portanto, especiais.

A tabela abaixo apresenta algumas variáveis do sistema e suas descrições :

Variável Descrição
- MyValue O valor do objeto atual. Assume o tipo de dado do objeto.
- hWndForm O Window Handle do objeto top level atual.
- hWndItem O Window Handle do objeto atual.
- hWndMDI O Window Handle do objeto mdi atual.
- hWndNull Equivale a um valor tipo Window Handle nulo.
- wParam Um valor numérico para ser utilizado como parâmetro em mensagens.
- lParam Um valor numérico para ser utilizado como parâmetro em mensagens.
- nArgCount Contém a quantidade de argumentos passados como parâmetro quando
a aplicação é iniciada.
- strArgArray Vetor com os argumentos passados por parâmetro na linha de comando
para a aplicação.
- SqlDatabase Indica o nome do banco de dados a ser utilizado.
- SqlUser Indica o nome do usuário do banco de dados.
- SqlPassword Indica a senha do usuário do banco de dados.

Vetores

O Centura suporta vetores multidimensionais de cada um dos seus tipos de dados nativos e
dos tipos de dados definidos pelo usuário. Os vetores podem ter suas dimensões
predeterminadas na sua definição ou podem ser dinâmicos, tendo como limite a memória
disponível.

A sintaxe para a definição de um vetor é mostrada abaixo :


Variables
Boolean: abStatus [10]

Página PAGE 582


Programando com o Centura Team Developer 2000

Number: anMeses [1:12]


String: asNomes [*]

O primeiro vetor declarado, abStatus, é um vetor que poderá armazenar apenas valores 1
(TRUE) ou 0 (FALSE), pois seu tipo de dados é Boolean. Poderá ter no máximo 10
elementos, entre 0 e 9.

O segundo vetor declarado, anMeses, é um vetor que poderá armazenar qualquer valor
numérico válido e poderá ter no máximo 12 elementos, entre 1 e 12.

O terceiro vetor, asNomes, poderá armazenar apenas valores caracteres válidos. Este vetor
é dinâmico, ou seja, o seu número de elementos não tem limite.

Constantes

Constantes, assim como as variáveis, podem armazenar valores. A principal diferença é


que constantes armazenam informações (como nome, salário), e não ponteiros internos
(como file handles ou window handles). As constantes devem ser definidas em tempo de
programação e não mudam seus valores durante a execução do programa.

Enumerations são constantes numéricas que são utilizadas em servidores COM para conter
listas de valores. Normalmente o primeiro item da lista define o valor inicial e os demais
itens são sempre acrescidos de um. No exemplo mostrado na figura abaixo, o primeiro item
possui valor 1, o segundo 2 e assim por diante.

Constantes são declaradas no outline na seção chamada Constants, que é uma seção
subordinada a seção Global Declarations.

Declaração de Constantes.

As Funções

O Centura SQLWindows/32 apresenta um conjunto de funções que é embutido à


linguagem SAL. Essas funções realizam uma variedade enorme de tarefas que ajudam o
desenvolvedor a construir poderosas aplicações. O Centura oferece algumas funções que
são específicas do ambiente do Windows e outras funções que são específicas do próprio
ambiente do SQLWindows/32.

O Centura disponibiliza uma quantidade enorme de funções.


Consulte o Capitulo 13 – Guia de Referência das Funções SAL, para uma explicação detalhada de todas as
funções disponíveis no SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

Os Objetos do Centura SQLWindows/32

O Centura SQLWindos32 dispõe de um conjunto de objetos básicos que são normalmente suficientes para a
implementação das soluções necessárias aos desenvolvedores no seu dia-a-dia. Esses objetos são todos
apresentados ao desenvolvedor na Paleta de Controles, que iremos analisar em detalhes agora.

Esses objetos são os elementos utilizados para a criação da interface com o usuário.
Dividem-se em três tipos :

Personalizável Codificável Recebe / Envia


Mensagens
Window Objects Sim Sim Sim
Background Itens Sim Não Não
Menus Não Sim Não / Sim

Os Windows Objects são todos os elementos gráficos que podem enviar e receber
mensagens. Na realidade, são os objetos que interferem no fluxo da aplicação. Esses têm
alguma função lógica no programa, ou seja, possuem algum código associado a eles. No
Centura SQLWindows/32, esses objetos dispõem de uma identificação única na aplicação,
a qual damos o nome de handles.

Os Window Objects podem ser

Top Level Window – São os objeto do tipo mdi, form window, dialog box e table window.

Child Window – São os outros objetos que estão sempre subordinados a algum objeto top
level. Jamais um objeto Child existirá sem que exista um objeto top level.

Vamos agora analisar detalhadamente cada um dos objetos do SQLWindows/32.

MDI Window

Um objeto top level do tipo mdi.

Um objeto mdi é o único top level que pode conter outros objetos top level no seu interior.
Normalmente é usado para gerenciar várias janelas abertas simultaneamente. Ou seja, o
mdi controla várias outras janelas abertas, podendo distribuir mensagens entre essas
janelas. Quando um mdi é encerrado, automaticamente todas as suas janelas filhas são
encerradas também. Objetos tipo mdi são geralmente utilizados para servirem de “menu
principal” das aplicações que requerem muitas janelas abertas simultaneamente.

Página PAGE 582


Programando com o Centura Team Developer 2000

Um mdi, assim como todos os outros objetos do SQLWindows/32, possui diversas


propriedades. Você pode alterar os valores de qualquer uma das propriedades do objeto,
através do Customizer ou do Attribute Inspector.

Abaixo estão relacionadas todas as propriedades de um objeto do tipo mdi :

Propriedade Descrição
MDI Window O nome interno do mdi. Nome utilizado pelo programador.
Object Title O título que aparecerá na barra de títulos quando o programa
estiver sendo executado.
Accessories Indica se os acessórios do mdi estarão visíveis. Os acessórios são
Enabled a barra de ferramentas e a barra de mensagem.
Tool Bar Visible Indica se a barra de ferramentas estará visível.
Tool Bar Size É a medida da altura da barra de ferramentas ( em unidades de
form ).
Tool Bar Position Indica a localização da barra de ferramentas.
Status Bar Visible Indica se a barra de mensagens estará visível.
Automatically Indica se o mdi será criado automaticamente quando a aplicação
Create for executada.
Maximizable Indica se o mdi poderá ser maximizado.
Minimizable Indica se o mdi poderá ser minimizado.
System Menu Indica se o menu do sistema, localizado na parte superior
esquerda do objeto, poderá ser utilizado pelo usuário quando a
aplicação estiver em tempo de execução.
Resizable Indica se o mdi poderá ter seu tamanho alterado.
Initial State Indica o estado inicial (maximizado, minimizado ou normal) do
mdi.
Icon File Name Informe aqui o nome de um ícone para este mdi.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.

Para incluir um MDI na sua aplicação:

1 Clique com o botão direito do mouse na palavra "Windows" localizada no quadro


esquerdo.
2 Será mostrado um menu de contexto onde você deve escolher o item New.
3 Depois basta clicar no item chamado "MDI Window".
Conforme mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Form Window

Um objeto top level form window geralmente é criado como filho de algum mdi, podendo
trocar informações com outros forms.

É normalmente utilizado para a entrada de dados, consultas e visualização de relatórios.


Um form window pode ser maximizado, minimizado e ter seu tamanho alterado pelo
usuário. Pode também apresentar uma barra de ferramentas em qualquer um dos seus
lados, além de uma barra de mensagens.

Um objeto top level do tipo form window .

Obs : Quando um form window é criado como filho de um mdi, a sua barra de mensagens
não é visualizada no form window, mas sim no mdi. Esse é um comportamento padrão do
Windows, não requerendo nenhum esforço de programação por parte do desenvolvedor.

Um form window, assim como todos os outros objetos do SQLWindows/32, possui


diversas propriedades. Você pode alterar os valores de qualquer uma das propriedades do
objeto, através do Customizer ou do Attribute Inspector.

Abaixo estão relacionadas todas as propriedades de um objeto do tipo form window :

Propriedade Descrição
Form Window O nome interno do form window, utilizado pelo programador.
Object Title O título que aparecerá na barra de títulos do form window, quando o
programa estiver sendo executado.
Accessories Indica se os acessórios estarão visíveis. Os acessórios são a barra de
Enabled ferramentas e a barra de mensagem.

Página PAGE 582


Programando com o Centura Team Developer 2000

Tool Bar Visible Indica se a barra de ferramentas estará visível.


Tool Bar Size É a medida da altura da barra de ferramentas ( em unidades de form
).
Tool Bar Indica a localização da barra de ferramentas.
Position
Status Bar Indica se a barra de mensagens estará visível.
Visible
Display Style Indica o estilo de visualização do form window.
Automatically Indica se o form window será criado automaticamente, quando a
Create aplicação for executada.
Maximizable Indica se o form window poderá ser maximizado.
Minimizable Indica se o form window poderá ser minimizado.
System Menu Indica se o menu do sistema, localizado na parte superior esquerda
do objeto, poderá ser utilizado pelo usuário, quando a aplicação
estiver em tempo de execução.
Resizable Indica se o form window poderá ter seu tamanho alterado.
Initial State Indica o estado inicial (maximizado, minimizado ou normal) do
form window.
Icon File Name Informe aqui o nome de um ícone para este form window.
Page Width Largura da página.
Page Height Altura da página.
Page Count Número de páginas.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Background Indica a cor utilizada no corpo do form window.
Color
Text Color A cor do texto.
Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement

Para incluir um Form Window na sua aplicação:

1 Clique com o botão direito do mouse na palavra "Windows" localizada no quadro


esquerdo.
2 Será mostrado um menu de contexto onde você deve escolher o item New.
3 Depois basta clicar no item chamado "Form Window".
Conforme mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Dialog Box

Os Dialog Box não possuem a característica de serem filhos de algum outro objeto.
Sempre são mostrados por cima das demais janelas, e, estando ativo um Dialog Box,
nenhum elemento de outra janela pode ser acionado. Os Dialog Box não podem ser
minimizados, maximizados e ter seus tamanhos alterados em tempo de execução. Também
possuem barras de ferramentas e de status.

Obs : Já que os objetos do tipo dialog box não são filhos de nenhum objeto, o
comportamento da barra de status não é similar ao comportamento encontrado no form
window. A sua barra de status é visualizada na parte inferior do próprio objeto. Esse
também é um comportamento padrão do Windows, não requerendo nenhum esforço de
programação do desenvolvedor.

Um objeto top level do tipo dialog box.

Um dialog box, assim como todos os outros objetos do SQLWindows/32, possui diversas
propriedades. Você pode alterar os valores de qualquer uma das propriedades do objeto,
através do Customizer ou do Attribute Inspector.

Abaixo estão relacionadas todas as propriedades de um objeto do tipo dialog box :

Propriedade Descrição
Dialog Box O nome interno do dialog box, utilizado pelo programador.
Object Title O título que aparecerá na barra de títulos do dialog box, quando o
programa estiver sendo executado.
Accessories Indica se os acessórios estarão visíveis. Os acessórios são a barra de
Enabled ferramentas e a barra de mensagem.
Tool Bar Visible Indica se a barra de ferramentas estará visível.
Tool Bar Size É a medida da altura da barra de ferramentas ( em unidades de form

Página PAGE 582


Programando com o Centura Team Developer 2000

).
Tool Bar Indica a localização da barra de ferramentas.
Position
Status Bar Indica se a barra de mensagens estará visível.
Visible
Display Style Indica o estilo de visualização do dialog box.
Type of Dialog Existem três tipos disponíveis:
O tipo Modeless indica que o usuário poderá utilizar outros recursos
da aplicação enquanto usa este dialog box. Poderá utilizar menus,
outras janelas, etc.
O tipo Modal indica que o usuário não poderá utilizar outros
recursos da aplicação atual, porém, poderá utilizar outras aplicações
do sistema operacional, como um editor de textos e planilhas.
Já o tipo System Modal indica que o usuário não poderá utilizar
nenhum outro recurso. O sistema ficará aguardando que o dialog
box tipo System Modal seja encerrado, para então prosseguir
normalmente.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Background Indica a cor utilizada no corpo do form window.
Color
Text Color A cor do texto.
Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement

Para incluir um Dialog Box na sua aplicação:

1 Clique com o botão direito do mouse na palavra "Windows" localizada no quadro


esquerdo.
2 Será mostrado um menu de contexto onde você deve escolher o item New.
3 Depois basta clicar no item chamado "Dialog Box".
Conforme mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Table Window

A table window é bastante semelhante ao form window. Basicamente duas características a


diferenciam do form window : A table window possui no seu interior um objeto tipo child
table, não sendo permitido a utilização de nenhum outro objeto no seu interior. Esse objeto
child table no interior do form é automaticamente ajustado quando o form tem seu tamanho
alterado, não sendo necessário nenhum esforço de programação para isso.

Os demais comportamentos são idênticos ao do form window.

Um objeto top level do tipo table window.

Uma table window, assim como todos os outros objetos do SQLWindows/32, possui diversas propriedades.
Você pode alterar os valores de qualquer uma das propriedades do objeto, através do Customizer ou do
Attribute Inspector.

Abaixo estão relacionadas todas as propriedades de um objeto do tipo table window :

Propriedade Descrição
Table Window O nome interno da table window, utilizado pelo programador.
Object Title O título que aparecerá na barra de títulos da table window quando o
programa estiver sendo executado.
Accessories Indica se os acessórios estarão visíveis. Os acessórios são a barra de
Enabled ferramentas e a barra de mensagem.
Tool Bar Visible Indica se a barra de ferramentas estará visível.
Tool Bar Size É a medida da altura da barra de ferramentas ( em unidades de form
).
Tool Bar Indica a localização da barra de ferramentas.
Position
Status Bar Indica se a barra de mensagens estará visível.
Visible
Automatically Indica se a table window será criada automaticamente quando a
Create aplicação for executada.
Maximizable Indica se a table window poderá ser maximizada.
Minimizable Indica se a table window poderá ser minimizada.
System Menu Indica se o menu do sistema, localizado na parte superior esquerda
do objeto, poderá ser utilizado pelo usuário, quando a aplicação
estiver em tempo de execução.
Resizable Indica se a table window poderá ter seu tamanho alterado.
Initial State Indica o estado inicial (maximizado, minimizado ou normal) da
table window.
Icon File Name Informe aqui o nome de um ícone para esta table window.
Página PAGE 582
Programando com o Centura Team Developer 2000

Left A coordenada mais à esquerda do objeto.


Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Lines Per Row Indica a quantidade de linhas de dados que uma linha da table
window terá.
Allow Row Indica se o usuário poderá modificar, em tempo de execução, a
Sizing altura das linhas da table window.
Background Indica a cor utilizada no corpo do form window.
Color
Text Color A cor do texto.
Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement
Discartable Indica se o SQLWindows/32 irá manter todas as linhas no cache da
table window, ou se manterá apenas as linhas utilizadas,
descartando as demais. O comportamento padrão do
SQLWindows/32 é descartá-las.
Max Row in O número de linhas que a table window manterá no seu cache, o
Memory valor padrão é manter 100 linhas, o máximo é 32.753.

Para incluir uma Table Window na sua aplicação:

1 Clique com o botão direito do mouse na palavra "Windows" localizada no quadro


esquerdo.
2 Será mostrado um menu de contexto onde você deve escolher o item New.
3 Depois basta clicar no item chamado "Table Window".
Conforme mostrado na figura abaixo:

Background Text – normalmente utilizado quando se é necessário identificar alguns


campos na tela. Não pode ser programado, ou seja, não responde a nenhuma ação do
usuário, clicks, edição, etc. Este objeto não possui Message Actions.

Página PAGE 582


Programando com o Centura Team Developer 2000

As Propriedades de um objeto tipo Background Text:

Propriedade Descrição
Background Text O texto que aparecerá na aplicação para o usuário.
Visible Indica se o objeto está ou não visível.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Justify Indica o tipo de alinhamento do objeto.
Background Color Indica a cor utilizada no fundo do objeto.
Text Color A cor do texto.
Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement

Para incluir um objeto Background Text na sua aplicação:

1 Ative a Paleta de Controles, pressionando Alt 4.

2 Clique no ícone equivalente ao Background Text.

3 Clique na posição onde você deseja colocar o Background Text na sua aplicação.

Todos os demais objetos Child são inseridos na aplicação dessa forma.

Group Box – Usado para agrupar informações logicamente relacionadas. Não pode ser
programado, ou seja, não responde a nenhuma ação do usuário, clicks, edição, etc. Este
objeto não possui Message Actions.

As propriedades de um objeto tipo Group Box :

Propriedade Descrição
Group Box O texto que aparecerá na aplicação para o usuário, na parte
superior esquerda do objeto.
Visible Indica se o objeto está ou não visível.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Background Color Indica a cor utilizada no fundo do objeto.
Página PAGE 582
Programando com o Centura Team Developer 2000

Text Color A cor do texto.


Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement

O ícone do objeto Group Box na paleta Controls.

Frame – Utilizado para fazer molduras. Não pode ser programado, ou seja, não responde a
nenhuma ação do usuário, clicks, edição, etc. Este objeto não possui Message Actions.

As propriedades de um objeto tipo Frame :

Propriedade Descrição
Visible Indica se o objeto está ou não visível.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Corners Indica o tipo de laterais a ser utilizado no objeto.
Border Style Indica o tipo de borda a ser utilizado no objeto.
Border Thickness Indica a espessura da borda a ser utilizada no objeto.
Background Color Indica a cor utilizada no fundo do objeto.
Border Color A cor da borda do objeto.

O ícone do objeto Frame na paleta Controls.

Line – Utilizado para fazer linhas. Não pode ser programado, ou seja, não responde a
nenhuma ação do usuário, clicks, edição, etc. Este objeto não possui Message Actions.

As propriedades de um objeto tipo Line :

Propriedade Descrição
Visible Indica se o objeto está ou não visível.
Begin X O ponto inicial das coordenadas do objeto, no eixo X.
Begin Y O ponto inicial das coordenadas do objeto, no eixo Y.
End X O ponto final das coordenadas do objeto, no eixo X.
End Y O ponto final das coordenadas do objeto, no eixo Y.
Line Style Indica o tipo de linha a ser utilizado no objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

Line Thickness Indica a espessura da linha a ser utilizada no objeto.


Line Color A cor da linha.

O ícone do objeto Line na paleta Controls.

Data Field – É um dos objetos que podem ser utilizados para a digitação e visualização de
informações na tela. Um datafield pode receber informações tipo Number, Date/Time,
String e Long String.

As propriedades de um objeto tipo Data Field:

Propriedade Descrição
Data Field O nome do objeto utilizado internamente pelo programador.
Visible Indica se o objeto está ou não visível.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Data Type O tipo de dado do conteúdo do objeto.
Max Data Length A quantidade máxima de caracteres que o objeto irá suportar.
Editable Indica se o conteúdo do objeto poderá ser editado pelo usuário.
Border Indica se o objeto terá uma borda.
Justify Indica a forma como o conteúdo do objeto aparecerá alinhado para
o usuário.
Format Indica a formatação a ser utilizada no objeto.
Input Mask Indica a máscara de edição a ser utilizada no objeto quando o
usuário estiver digitando os dados.
Country As predefinições referentes ao país.
Background Color Indica a cor utilizada no fundo do objeto.
Text Color A cor do texto.
Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement

O ícone do objeto Data Field na paleta Controls.

Multiline Text – Normalmente é utilizado para a digitação e visualização de campos de


textos longos, cartas, observações, arquivos padrão texto, logs de erro, etc.

Página PAGE 582


Programando com o Centura Team Developer 2000

As propriedades de um objeto tipo Multiline Text:

Propriedade Descrição
Multiline Field O nome do objeto utilizado internamente pelo programador.
Visible Indica se o objeto está ou não visível.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
String Type O tipo de string do conteúdo do objeto. Pode ser string ou long
string.
Max Data Length A quantidade máxima de caracteres que o objeto irá suportar.
Editable Indica se o conteúdo do objeto poderá ser editado pelo usuário.
Border Indica se o objeto terá uma borda.
Word Wrap Se Yes, o SQLWindows/32 quebra as frases automaticamente,
continuando a digitação na linha seguinte.
Vertical Scroll Indica se o objeto terá a barra de rolagem na sua lateral direita.
Background Color Indica a cor utilizada no fundo do objeto.
Text Color A cor do texto.
Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement

O ícone do objeto Multiline Text na paleta Controls.

Child Table – Executa todas as operações e herda todas as características do objeto


TopLevel Table Window, exceto a possibilidade de ter suas dimensões alteradas pelo
usuário em tempo de execução. Numa Table Window é possível carregar dados do banco
de dados e então permitir que o usuário os edite nas próprias células. É um objeto
proprietário da Centura para edição de dados em forma tabular.

As propriedades de um objeto tipo Child Table :

Propriedade Descrição
Child Table O nome do objeto utilizado internamente pelo programador.
Visible Indica se o objeto está visível ou não.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Lines Per Row Informe aqui a quantidade de linhas de dados que uma linha da

Página PAGE 582


Programando com o Centura Team Developer 2000

child table terá.


Allow Row Sizing Indica se o usuário poderá modificar, em tempo de execução, a
altura das linhas da child table.
Background Color Indica a cor de fundo da child table.
Text Color A cor do texto.
Font Name O nome da fonte utilizada.
Font Size O tamanho da fonte.
Font Melhoramentos da fonte.
Enhancement
Discartable Indica se o SQLWindows/32 irá manter todas as linhas no cache
da table window, ou se manterá apenas as linhas utilizadas,
descartando as demais linhas. O comportamento padrão do
SQLWindows/32 é descartá-las.
Max Row in O número de linhas que a table window manterá no seu cache. O
Memory valor padrão é manter 100 linhas, o máximo é 32.753.

O ícone do objeto Child Table na paleta Controls.

Column – Cada coluna do banco de dados é mostrada numa table window num objeto
Column. Pode ser personalizada pelo usuário em tempo de execução, tendo sua largura
alterada. Pode mostrar informações tipo string, date/time, number e long string.

As propriedades de um objeto tipo Column:

Propriedade Descrição
Column O nome do objeto utilizado internamente pelo programador.
Object Title O título da coluna.
Visible Indica se o objeto está ou não visível.
Column Width A largura do objeto.
Data Type O tipo de dado do conteúdo da coluna.
Max Data Length A quantidade máxima de caracteres que o objeto irá suportar.
Editable Indica se o conteúdo do objeto poderá ser editado pelo usuário.
Cell Type Indica o tipo da célula.
Sorted Quando o tipo da célula é Drop Down List, classifica os valores
em ordem alfabética crescente.
Vertical Scroll Quando o tipo da célula é Multiline, indica se a barra de rolagem
estará visível.
Auto Drop Down Quando o tipo da célula é Drop Down List, indica se a lista será
aberta automaticamente, quando o usuário posicionar o foco na
célula.
Allow Text Quando o tipo da célula é Drop Down List, indica se o usuário
Editing poderá editar valores que não estejam presentes na lista.
Checked Value Quando o tipo da célula é Check, indica o valor atribuído à coluna, quando o
usuário selecionar o objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

Unchecked Value Quando o tipo da célula é Check, indica o valor atribuído à coluna,
quando o usuário desfazer a seleção no objeto.
Ignore Case Quando o tipo da célula é Check, indica se o SQLWindows/32 irá
ignorar o tipo de letra utilizado. Maiúsculas e minúsculas.
Justify Indica a forma como o conteúdo do objeto aparecerá alinhado para
o usuário.
Format Indica a formatação a ser utilizada no objeto.
Input Mask Indica a máscara de edição a ser utilizada no objeto, quando o
usuário estiver digitando os dados.
Country As predefinições referentes ao país.
Word Wrap Se Yes, o SQLWindows/32 quebra as frases automaticamente,
continuando a digitação na linha seguinte.

O ícone do objeto Column na paleta Controls.

Pushbutton – É utilizado normalmente para se ativar alguma ação no sistema, são os


botões de comando.

As propriedades de um objeto tipo Pushbutton :

Propriedade Descrição
Object Name É o nome do objeto, que será utilizado pelo programador.
Object Title É o título do objeto.
Visible Indica se o objeto está visível ou não.
Left As coordenadas mais à esquerda do objeto.
Top As coordenadas da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
File Name O nome de uma imagem para ser mostrada dentro do objeto.
Picture Indica a cor que será substituída pela cor de fundo do objeto. Essa
Transparent característica funciona apenas no caso das imagens tipo bitmap.
Color
Keyboard O atalho que ativa o objeto.
Accelerator
Background Color Indica a cor do fundo do objeto.
Text Color A cor do texto no objeto.
Font Name O tipo da fonte do texto utilizado no objeto.
Font Size O tamanho da fonte utilizada no objeto.
Font O melhoramento da fonte do texto utilizada no objeto.
Enhancement

Página PAGE 582


Programando com o Centura Team Developer 2000

O ícone do objeto Push Button na paleta Controls.

Radio Button – São normalmente agrupados em um Group Box e utilizados para que o usuário escolha uma
opção única, quando não é permitido múltipla escolha.

As propriedades de um objeto tipo Radio Button :

Propriedade Descrição
Object Name O nome interno do objeto, utilizado pelo programador.
Object Title O título do objeto.
Visible Indica se o objeto está visível.
Left As coordenadas mais à esquerda do objeto.
Top As coordenadas da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Background Color Indica a cor do fundo do objeto.
Text Color A cor do texto no objeto.
Font Name O tipo da fonte do texto utilizado no objeto.
Font Size O tamanho da fonte utilizada no objeto.
Font O melhoramento da fonte do texto utilizada no objeto.
Enhancement

O ícone do objeto Radio Button na paleta Controls.

Check Box – Diferentemente dos Radio Buttons, os Check Boxes permitem múltiplas
escolhas.

As propriedades de um objeto tipo Check Box :

Propriedade Descrição
Object Name O nome interno do objeto, utilizado pelo programador.
Object Title O título do objeto.
Visible Indica se o objeto está visível.
Left As coordenadas mais à esquerda do objeto.
Top As coordenadas da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Background Color Indica a cor do fundo do objeto.
Text Color A cor do texto no objeto.
Font Name O tipo da fonte do texto utilizado no objeto.
Página PAGE 582
Programando com o Centura Team Developer 2000

Font Size O tamanho da fonte utilizada no objeto.


Font O melhoramento da fonte do texto utilizada no objeto.
Enhancement

O ícone do objeto Check Box na paleta Controls.

Option Button – Possui um comportamento parecido com o do PushButton, porém, o


controle da aparência up e down do option button é feita pelo programador. Extremamente
útil quando a tarefa não pode ser acionada novamente. Esse objeto é amplamente usado em
barras de ferramentas.

As propriedades de um objeto tipo Option Button :

Propriedade Descrição
Object Name É o nome do objeto, que será utilizado pelo programador.
Object Title É o título do objeto.
Visible Indica se o objeto está visível ou não.
Left As coordenadas mais à esquerda do objeto.
Top As coordenadas da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
File Name O nome de uma imagem para ser mostrada dentro do objeto.
Picture Indica a cor que será substituída pela cor de fundo do objeto. Essa
Transparent característica funciona apenas no caso das imagens tipo bitmap.
Color
Button Style É o estilo do botão, pode ser Palette, Radio ou Check.
Background Color Indica a cor do fundo do objeto.
Text Color A cor do texto no objeto.
Font Name O tipo da fonte do texto utilizado no objeto.
Font Size O tamanho da fonte utilizada no objeto.
Font O melhoramento da fonte do texto utilizada no objeto.
Enhancement

O ícone do objeto Option Button na paleta Controls.

List Box – Normalmente os List Box são utilizados para mostrar uma lista de dados que
geralmente vem do banco de dados. Permite também a seleção de vários elementos da lista.

Página PAGE 582


Programando com o Centura Team Developer 2000

As propriedades de um objeto tipo List Box :

Propriedade Descrição
Object Name O nome do objeto, utilizado pelo programador.
Visible Indica se o objeto está visível ou não.
Left As coordenadas mais à esquerda do objeto.
Top As coordenadas da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Indica se será permitido ao usuário escolher mais de um elemento
Multiple Selection
da lista.
Sorted Indica se a lista de itens do objeto estará ordenada
automaticamente.
Vertical Scroll Indica se o list box terá uma barra de rolagem vertical na sua
lateral direita.
Background Color Indica a cor do fundo do objeto.
Text Color A cor do texto no objeto.
Font Name O tipo da fonte do texto utilizado no objeto.
Font Size O tamanho da fonte utilizada no objeto.
Font O melhoramento da fonte do texto utilizada no objeto.
Enhancement

O ícone do objeto List Box na paleta Controls.

Combo Box – Normalmente os Combo Box são utilizados para mostrar uma lista de dados
que geralmente vem do banco de dados. Difere do ListBox no visual, pois ocupa o espaço
de um datafield e permite apenas a seleção de um elemento.

As propriedades de um objeto tipo Combo Box :

Propriedade Descrição
Object Name O nome do objeto utilizado pelo programador.
Visible Indica se o objeto está visível ou não.
Left As coordenadas mais à esquerda do objeto.
Top As coordenadas da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
String Type O tipo de dado do combop box, pode ser string ou long string.
Max Data Length O número máximo de caracteres que o objeto pode digitar num
combo box.
Editable Indica se o usuário poderá digitar algum texto no combo box.
Input Mask Indica a máscara de edição a ser utilizada no objeto quando o
usuário estiver digitando os dados.
Página PAGE 582
Programando com o Centura Team Developer 2000

Sorted Indica se a lista de itens do objeto estará ordenada


automaticamente.
Always Show List Indica se a lista do combo box estará sempre aberta.
Vertical Scroll Indica se o combo box terá uma barra de rolagem vertical na sua
lateral direita.
Background Color Indica a cor do fundo do objeto.
Text Color A cor do texto no objeto.
Font Name O tipo da fonte do texto utilizado no objeto.
Font Size O tamanho da fonte utilizada no objeto.
Font O melhoramento da fonte do texto utilizada no objeto.
Enhancement

O ícone do objeto Combo Box na paleta Controls.

Picture – Normalmente utilizado para apresentar imagens gráficas, ícones, figuras.

As propriedades de um objeto tipo Picture :

Propriedade Descrição
Object Name O nome interno do objeto.
Visible Indica se o objeto está visível ou não.
Left As coordenadas mais à esquerda do objeto.
Top As coordenadas da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Editable Indica se o usuário poderá alterar o conteúdo do objeto.
Picture Contents O nome de uma imagem para ser mostrada dentro do objeto.
Transparent Indica a cor que será substituída pela cor de fundo do objeto. Essa
Color característica funciona apenas no caso das imagens tipo bitmap.
Picture Fit Indica o estilo do preenchimento do objeto, pode ser:
Scale - A imagem é mostrada no seu tamanho original.
Size to Fit - A imagem é mostrada de acordo com o tamanho do
objeto picture.
Size for Best Fit - A imagem é mostrada no tamanho em que é
melhor visualizada, baseando-se no tamanho do objeto picture.
Scale Width O percentual da escala ( largura ); o valor padrão é 100.
Scale Height O percentual da escala ( altura ); o valor padrão é 100.
Tile to Parent Indica se o objeto irá ocupar todo o espaço do objeto pai.
Corners Indica o tipo de laterais a ser utilizado no objeto.
Border Style Especifica o estilo da linha da borda.
Border Thickness A espessura da linha da borda do objeto.
Background Color Indica a cor do fundo do objeto.
Border Color Indica a cor da borda do objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

O ícone do objeto Picture na paleta Controls.

Custom Control – É utilizado para que objetos de terceiros possam ser usados no Centura.

As propriedades de um objeto tipo Custom Control :

Propriedade Descrição
Object Name O nome do objeto utilizado internamente pelo programador.
Object Title É o nome que aparecerá no título do objeto.
Current DLL Mostra o nome da DLL que define a classe do objeto.
MS Windows É o nome da classe do objeto definido na DLL. Este nome é
Class Name fornecido pelo autor da DLL.
Visible Indica se o objeto estará ou não visível.
Left A coordenada mais à esquerda do objeto.
Top A coordenada da parte superior do objeto.
Width A largura do objeto.
Height A altura do objeto.
Border Indica se o objeto terá uma borda.
Etched Border Indica se o objeto terá uma borda tipo etched.
Vertical Scroll Indica se a barra de rolagem vertical do objeto estará visível.
Horizontal Scroll Indica se a barra de rolagem horizontal do objeto estará visível.
Hollow Window Indica se o objeto terá o comportamento equivalente a um group
box, ou seja, se você poderá colocar outros objetos ocupando a sua
área, sem que o Centura sobreponha o objeto.
Tab Stop Os valores disponíveis são:
None – O usuário não poderá mover o foco para o objeto.
Group – O primeiro ou o último item do grupo poderá receber o
foco através da tecla Tab. Entre os demais objetos, o foco é
alterado através das teclas para cima e para baixo.
Tab - O usuário poderá colocar o foco no objeto utilizando a tecla
Tab.
Tile to Parent Indica se o objeto irá ocupar todo o espaço do objeto pai.
MS Windows Identifica um estilo para o objeto. Essa informação é específica do
Style objeto, consulte o seu manual.
MS Windows Identifica um estilo estendido para o objeto. Essa informação é
Extended Style específica do objeto, consulte o seu manual.
Background Color A cor de fundo do objeto.
Text Color A cor do texto no objeto.
Font Name O tipo da fonte do texto utilizado no objeto.
Font Size O tamanho da fonte utilizada no objeto.
Font O melhoramento da fonte do texto utilizada no objeto.
Enhancement

Página PAGE 582


Programando com o Centura Team Developer 2000

O ícone do objeto Custom Control na paleta Controls.

Tipos de Menus

Os menus são de grande utilidade num aplicativo, pois é através deles que o usuário
“chama” por uma determinada janela. Menus são como os outros objetos do
SQLWindows/32, porém, não estão na paleta de controles e não podem receber
mensagens. Os menus podem ser colocados na aplicação diretamente no outline, através do
Assistente de Código, ou utilizando-se o Editor de Menus. Apenas os objetos mdi, form
window e top level table window permitem a utilização de menus. O SQLWindows/32
oferece ao desenvolvedor os seguintes tipos de menus :

 Popup menu
 Menu item
 Menu separator
 Menu row
 Menu column
 Named menus
 Windows menu

Esses tipos de menus, o Editor de menus e a criação de menus dinamicamente em tempo


de execução, serão demonstrados agora detalhadamente.

Popup menu

Um popup menu é utilizado para agrupar outros menus numa lista.

Você pode utilizar o Coding Assistant para definir os menus diretamente no outline da sua
aplicação.

O popup menu no outline, em execução e o Coding Assistant.

Página PAGE 582


Programando com o Centura Team Developer 2000

Propriedades de um popup menu :

Propriedade Descrição
Menu Title Este é o nome que aparece na barra de menus quando a aplicação
está sendo executada.
Enabled When Você pode indicar uma condição para que o menu seja habilitado
ou desabilitado, essa condição será avaliada sempre que a barra de
menus for desenhada pela aplicação. O valor da condição é
avaliado e se retornar TRUE o popup menu é habilitado, se
retornar FALSE o mesmo aparece desabilitado na barra de menus.

Essa condição é avaliada em duas ocasiões:


 Após a execução da mensagem SAM_Create, quando a janela
é desenhada pela primeira vez, e antes da mensagem
SAM_CreateComplete.
 Quando a função SalDrawMenuBar for executada.
Status Text O texto informado nesta propriedade é mostrado na barra de status
do form window, top level table window ou mdi window, quando
o foco é posicionado no menu. O menu não precisa ser ativado
para que o texto seja mostrado na barra de status, basta que seja
selecionado.

Menu Item

Um menu item é o item de menu que efetivamente permite que o programa execute
determinadas ações ao ser ativado. Menu items são os elementos que compõem um popup
menu.

Você pode utilizar o Coding Assistant para definir os menus diretamente no outline da sua
aplicação.

O menu item Copiar em destaque no outline, em execução e o Coding Assistant.

Propriedades de um menu item:

Propriedade Descrição

Página PAGE 582


Programando com o Centura Team Developer 2000

Menu Item Este é o nome que aparece na barra de menus quando a aplicação
está sendo executada.
Keyboard Accelerator Uma combinação de teclas que é utilizada como atalho para
acionar um menu. A combinação de teclas é mostrada no menu à
direita do nome do menu item.

Você pode utilizar o Assistente de Código para ter a lista de


combinações disponíveis.
Status Text O texto informado nesta propriedade é mostrado na barra de status
do form window, top level table window ou mdi window, quando
o foco é posicionado no menu. O menu não precisa ser ativado
para que o texto seja mostrado na barra de status, basta que seja
selecionado.
Enabled When Você pode indicar uma condição para que o menu seja habilitado
ou desabilitado, essa condição será avaliada seguindo-se as regras
abaixo :

A condição de um menu item localizado na barra de menus da


aplicação é avaliada em duas ocasiões :
 Após a execução da mensagem SAM_Create, quando a janela
é desenhada pela primeira vez, e antes da mensagem
SAM_CreateComplete.
 Quando a função SalDrawMenuBar for executada.

A condição de um menu item localizado no interior de um popup


menu é avaliada apenas quando o popup menu é desenhado, ou
seja, quando o usuário "abrir" o popup menu.

O valor da condição é avaliado e se retornar TRUE o menu item é


habilitado, se retornar FALSE o mesmo aparece desabilitado.
Checked When Você pode indicar uma condição para que o menu apareça
marcado (checked).
Quando a condição retornar TRUE, o menu aparece com uma
marca, quando a condição retornar FALSE, a marca é retirada.
A marca de checked é mostrada à esquerda do nome do menu.
Menu Actions Os comandos SAL que serão executados quando o usuário acionar
o menu item.

Menu Separator

Um menu separator é uma linha horizontal colocada entre menus items, utilizada para
separar visualmente um grupo de menus relacionados. Sua função é apenas estética, não
influenciando em nada na lógica da aplicação.

Você pode utilizar o Coding Assistant para definir os menus diretamente no outline da sua
aplicação.

Página PAGE 582


Programando com o Centura Team Developer 2000

O menu separator em destaque no outline, em execução e no Coding Assistant.

O menu separator não possui propriedades.

Menu Row

Um menu row é utilizado para iniciar uma nova linha de menus a partir do local onde é
posicionado. Sua função é apenas estética, não influenciando em nada na lógica da
aplicação.

Você pode utilizar o Coding Assistant para definir os menus diretamente no outline da sua
aplicação.

O menu row em destaque no outline, sua visualização em execução e no Coding


Assistant.

Um menu row não possui propriedades.

Menu column

Um menu column é utilizado para agrupar itens de menu em colunas verticais a partir do
local onde é posicionado. Sua função é apenas estética, não influenciando em nada na
lógica da aplicação.

Você pode utilizar o Coding Assistant para definir os menus diretamente no outline da sua
aplicação.

Página PAGE 582


Programando com o Centura Team Developer 2000

O menu column em destaque no outline, sua visualização em execução e no Coding


Assistant.

Um menu column não possui propriedades.

Named menus

Através de um named menu é possível compartilhar uma definição de menu popup por
toda a aplicação. Esse compartilhamento de menus pode ser feito através de sua utilização
na seção Named Menu de qualquer objeto top level table window, form window ou mdi da
aplicação.

Você pode criar um menu dinamicamente em qualquer posição da tela.

Para definir um named menu que poderá ser compartilhado por toda a aplicação, defina-o
na seção chamada Named Menus do Global Declarations. Os named menus definidos num
form window, top level table window ou num mdi só poderão ser compartilhados nos
próprios objetos onde foram definidos e nos seus objetos filhos.

Você pode utilizar o Coding Assistant para definir os menus diretamente no outline da sua
aplicação. Observe na figura abaixo a definição e a utilização de um named menu num
form window.

Um named menu em destaque no outline e no Coding Assistant.

Propriedades de um named menu:

Propriedade Descrição

Página PAGE 582


Programando com o Centura Team Developer 2000

Menu Este é o nome que você deverá utilizar quando quiser utilizar o
named menu na aplicação.
Menu Title Este é o nome que aparece na barra de menus quando a aplicação
está sendo executada.
Enabled When Você pode indicar uma condição para que o menu seja habilitado
ou desabilitado, essa condição será avaliada sempre que a barra de
menus for desenhada pela aplicação. O valor da condição é
avaliado e se retornar TRUE o menu é habilitado, se retornar
FALSE o mesmo aparece desabilitado na barra de menus.

Essa condição é avaliada em duas ocasiões:


 Após a execução da mensagem SAM_Create, quando a janela
é desenhada pela primeira vez, e antes da mensagem
SAM_CreateComplete.
 Quando a função SalDrawMenuBar for executada.
Status Text O texto informado nesta propriedade é mostrado na barra de status
do form window, top level table window ou mdi window quando o
foco é posicionado no menu. O menu não precisa ser ativado para
que o texto seja mostrado na barra de status, basta que seja
selecionado.

Windows menu

Windows menu é um tipo especial de popup menu que mostra os nomes de todas as janelas
que estão abertas e que sejam filhas da janela em que o menu está localizado, tornando
fácil a mudança de uma janela para outra. Isso é feito sem que seja necessário qualquer
esforço de programação.

O Editor de menus

O SQLWindows/32 possui um editor de menus que você pode utilizar para auxiliá-lo na
definição de menus. O Editor de Menus possui uma interface gráfica amigável que aplica
no outline todas as configurações feitas.

Você pode ativar o editor de menus das seguintes formas:

 Clique no form window, top level table window ou mdi onde você deseja criar o menu.
 Acione o menu Component | Menu Editor....

Ou

 Clique com o botão direito do mouse no form window, top level table window ou mdi
onde você deseja criar o menu.
 No menu de contexto que irá aparecer acione o menu Menu Editor....

Página PAGE 582


Programando com o Centura Team Developer 2000

O Editor de Menus.

Menus em tempo de execução

Você pode criar um popup menu dinamicamente em tempo de execução, em qualquer


posição da tela da sua aplicação, com a função SalTrackPopupMenu ( hWndObj ,
sNomeDoMenu , nFlags , nX , nY ).

Onde :

hWndObj É o window handle do objeto que irá processar as mensagens enviadas


pelo menu.
sNomeDoMe O nome de um named menu que precisa estar definido em um destes três
nu locais:
 na seção Named Menus do objeto informado em hWndObj
 na seção Named Menus do objeto pai do objeto hWndObj
 seção Named Menus do Global Declarations
nFlags Especifica como o popup menu será mostrado. Você pode combinar os
valores dos flags com o operador OR ( | ) .
Os flags disponíveis são:
TPM_LeftButton - O usuário pode clicar nos itens do menu com o botão
esquerdo.
TPM_RightButton - O usuário pode clicar nos itens do menu com o
botão direito.
TPM_CenterAlign - Centraliza o menu horizontalmente na janela.
TPM_CursorX - Mostra o menu na posição do mouse, ao invés de usar a
posição nX.
TPM_CursorY - Mostra o menu na posição do mouse, ao invés de usar a
posição nY.
TPM_LeftAlign - Alinha o menu horizontalmente à esquerda na janela.
TPM_RightAlign - Alinha o menu horizontalmente à direita na janela.
nX e nY As coordenadas da tela onde o menu será desenhado. Esses valores são
ignorados caso você utilize TPM_CursorX e TPM_CursorY em nFlags.

Página PAGE 582


Programando com o Centura Team Developer 2000

Observe o código abaixo:


Pushbutton: pbMENU_EDITAR
On SAM_Click
Call SalTrackPopupMenu( hWndForm,'menuEditar',
TPM_CursorX | TPM_CursorY | TPM_LeftAlign, 0 ,0 )

Esse código, quando executado, comporta-se conforme mostrado na figura que se segue.

O menu dinâmico sendo utilizado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 3
O acesso ao SQLBase
O Centura SQLBase
Alguns comandos básicos
SELECT , INSERT , UPDATE , DELETE , ALTER TABLE, COMMIT,
CREATE INDEX, CREATE TABLE, CREATE VIEW, DROP INDEX,
DROP TABLE, DROP VIEW e ROLLBACK.
Tabela de Comandos do Centura SQLBase
Tabela de Funções do Centura SQLBase
Usando o Centura SQLBase através do CTD
Quando utilizar SqlPrepare / SqlExecute ou SqlPrepareAndExecute ?

Página PAGE 582


Programando com o Centura Team Developer 2000

O Centura SQLBase

O SQLBase é o Sistema Gerenciador de Banco de Dados Relacional (SGBDR) da Centura Software


Corporation, com implementação completa da linguagem SQL. Ele foi desenhado e construído especialmente
para redes de PC’s na plataforma Intel e suporta várias configurações de LAN/WAN.

As plataformas SQLBase hoje disponíveis são: NetWare 3.x e 4.x, MS Windows 3.1 e
Windows for Workgroups 3.11 (16-bits), Windows NT e Windows 95 (32-bits).

Na plataforma 16-bits, o SQLBase suporta mono-usuários com comunicação local e


servidores remotos. Nas outras plataformas, o SQLBase suporta múltiplos usuários com
comunicação remota, através de rede e também comunicação local.

As configurações atualmente existentes para o SQLBase vão desde o SQLBase para Smartcard, utilizado em
smart cards num único processador (chip de memória), passando pelo SQLBase Lite, embutido em
aplicações de larga comercialização e baixo custo. Há ainda as tradicionais versões do protuto: a versão
SQLBase Desktop mono-usuário, e as versões multi-usuário do SQLBase Server para 5, 10, 25, 50 e usuários
ilimitados.

Todas as versões do banco de dados SQLBase caracterizam-se por :


 alto desempenho ;
 baixo consumo de memória – devido ao “small footprint” gerado ;
 escalabilidade – desde smart cards até ambientes multi-usuário e plataforma ;
 necessidade mínima, próxima de zero, de administração de suas bases de dados .

Página PAGE 582


Programando com o Centura Team Developer 2000

Alguns comandos básicos

O Centura SQLBase possui uma série de comandos que podem ser utilizados pelo desenvolvedor e pelo
administrador das bases de dados. Mostraremos agora os principais comandos a serem utilizados no
desenvolvimento de aplicações com o CTD. Os comandos para administração do servidor, e das bases de
dados, não serão abordados por não fazerem parte do propósito deste livro. Os comandos mais utilizados no
desenvolvimento de aplicações client/server, para a manutenção de tabelas, visões e índices são mostrados
em detalhes abaixo :

SELECT

Este comando encontra, recupera e mostra dados. Ele especifica as seguintes informações :

• As tabelas ou visões a serem procuradas no banco de dados


• As condições de procura
• A sequência na qual os dados são mostrados

Os comandos SELECT são recursivos; eles podem ser aninhados dentro do SELECT
principal.

Sintaxe :

SELECT [ ALL ] [ DISTINCT ] <expressao>


FROM <nome_da_tabela> / <nome_da_visao>
WHERE <condicao_pesquisa>
[GROUP BY <constante> / <nome_da_coluna>]
[HAVING <condicao_pesquisa> ]
[ORDER BY constante [ASC] [DESC]] nome_da_coluna ]
[FOR UPDATE OF nome_da_coluna ]
[UNION ]

Argumentos :

ALL O default para um comando SELECT : recuperar todas as


linhas.
DISTINCT Não mostra linhas duplicadas.
Expressao Uma lista de seleção contendo expressões separadas por
vírgulas. Uma expressão pode ser um nome de coluna, uma
constante, uma variável assinalada, o resultado de uma função
ou uma palavra-chave do sistema.
Um máximo de 255 expressões são permitidas na lista.
FROM Contém os nomes de tabelas ou visões a partir das quais um
<nome_da_tabela> conjunto de linhas é resultante.
<nome_da_visao>
WHERE Especifica uma condição de procura para as tabelas básicas ou
<condicao_pesquisa> visãos.
A condição de procura não pode conter funções agregadas.
GROUP BY <constante> Esta cláusula agrupa as linhas resultantes da consulta, de
<nome_da_coluna> acordo com os nomes de coluna da cláusula.
Se a coluna pela qual o agrupamento ocorre é uma expressão, você deve
Página PAGE 582
Programando com o Centura Team Developer 2000

especificar um número que indica a sua posição relativa na lista de seleção,


mas apenas se a expressão tem mais de uma coluna.
HAVING Esta cláusula permite estabelecer uma condição de procura por
<condicao_pesquisa> um grupo de linhas resultantes de um GROUP BY ou colunas
agrupadas.
ORDER BY Especifica a ordem das linhas em uma tabela de resultados. As
constante [ASC] [DESC]] linhas podem ser ordenadas por mais de uma coluna.
nome_da_coluna ] Se a coluna de ordenação é derivada de uma função ou
expressão aritmética, a coluna deve ser especificada por um
inteiro que signifique o número relativo da sua posição no
comando SELECT.
Cada nome de coluna ou número, pode ser opcionalmente
seguido de ASC ou DESC, indicando ordenação ascendente ou
descendente.
[FOR UPDATE OF Se você está usando um cursor nomeado, esta cláusula trava
nome_da_coluna ] partes da tabela, de forma que atualizações e deleções sub-
sequentes não causam incompatibilidades entre usuários
concorrentes.

Exemplos :

SELECT * FROM CUSTOMER;

SELECT DISTINCT JOB FROM EMP;

SELECT EMPNO,SALARY/12 FROM EMPSAL WHERE SALARY > 400;

SELECT DEPTNO, MIN(SALARY), AVG(SALARY)


FROM EMP, EMPSAL
WHERE EMP.EMPNO=EMPSAL.EMPNO
GROUP BY DEPTNO;

SELECT * FROM EMP


WHERE JOB IN
(SELECT JOB FROM EMP WHERE LNAME = 'Drape');

SELECT * FROM ORDERS


WHERE CUSTNO=2
ORDER BY ORDERDATE;

SELECT LNAME FROM EMP


WHERE DEPTNO = 2500
FOR UPDATE OF JOB;

INSERT

Este comando insere linhas de dados em uma tabela ou visão, não existindo um número
máximo de linhas que podem ser inseridas. No caso das visões, as linhas são inseridas na
tabela base.
Página PAGE 582
Programando com o Centura Team Developer 2000

Você deve possuir privilégio INSERT na tabela para executar este comando.
Se o banco de dados possui integridade referencial definida, as regras de integridade
devem ser seguidas, para que se possa incluir dados em uma tabela pai, contendo uma
chave primária, ou em uma tabela dependente, contendo uma chave estrangeira.

Sintaxe :

INSERT INTO <nome_da_tabela> [ <nome_da_coluna> ]


<nome_da_visao>
VALUES ( <constantes> )
( <variaveis_bind> )
( <palavra_chave> )
[ADJUSTING <nome_cursor> ]
subselect

Página PAGE 582


Programando com o Centura Team Developer 2000

Argumentos :

<nome_da_tabela> Nome de uma tabela existente no banco de dados.


<nome_da_visao> Nome de uma visão existente no banco de dados.
<nome_da_coluna> Um ou mais nomes de colunas na tabela ou visão
especificada, para as quais serão fornecidos valores. Você
não pode omitir um nome de coluna ou inserir nulos em
colunas NOT NULL.
<constantes> Esta cláusula contém uma linha de valores de colunas a
<variaveis_bind> serem inseridos. Os valores podem ser constantes, variáveis
<palavra_chave> assinaladas ou palavras-chave do sistema.
Separe com vírgulas os valores de colunas.
<nome_cursor> Esta cláusula é usada para programação de conjuntos de
resultados (result sets). Ela permite que o usuário insira uma
linha sem invalidar o conjunto de resultados corrente.
As linhas inseridas são posicionadas no final do conjunto de
resultados e do banco de dados.
subselect Insere linhas provenientes de uma tabela de resultados,
produzida por um comando SELECT. O número de colunas
recuperadas deve ser igual ao número de colunas a serem
inseridas.
Você não pode usar a cláusula ORDER BY no sub-select.
Você não pode usar a cláusula UNION no sub-select, mas
pode usar uma visão contendo esta cláusula.

Exemplos :

INSERT INTO EMP VALUES (1001,‘Carver’,‘Dan’,2500,01-APR-1994, ‘Manager’)

INSERT INTO EMP (EMPNO,LNAME,FNAME,HIREDATE)


(1002,’Murphy’,’Bill’,17-APR-1994)

INSERT INTO EMP VALUES (1003,’Johnson’,’Bob ”Bo”’, 2500,01-FEB-1994,


‘Analyst’)

UPDATE

Este comando atualiza valores em uma ou mais colunas de uma tabela ou visão, baseado
em condições de procura específicas.

Você deve possuir o privilégio UPDATE nas colunas da tabela ou da visão.

Uma mensagem de erro é retornada se as regras de integridade dos dados forem violadas
por um comando UPDATE.

Sintaxe :

UPDATE <nome_da_tabela>

Página PAGE 582


Programando com o Centura Team Developer 2000

<nome_da_visao> [ <nome_relacionado> ]
SET <nome_da_coluna> = <expressao>
NULL
[WHERE <condicao_de_pesquisa> ]

Argumentos :

<nome_da_tabela> Identifica uma tabela existente. Somente colunas de tabelas


criadas pelo usuário podem ser atualizadas.
<nome_da_visao> Identifica uma visão existente. Você não pode atualizar uma
visão baseada em mais de uma tabela.
<nome_relacionado> Um nome relacionado deve ser especificado se a condição de
procura envolve uma sub-consulta relacionada.
<nome_da_coluna> Identifica as colunas a serem atualizadas em uma tabela ou
visão.
Colunas derivadas de uma expressão aritmética, ou uma função,
não podem ser atualizadas.
SET Se o valor de atualização for NULL, a coluna deve ter sido
definida de forma a aceitar valores nulos.

Se a coluna a ser atualizada é um índice único, o valor de


atualização deve ser único, ou um erro será retornado.

Se o valor de atualização é uma expressão string na qual duas ou


mais strings são concatenadas, o tamanho resultante da string
não pode exceder 254 caracteres.
WHERE A condição de procura qualifica um conjunto de linhas para
<condicao_de_pesquisa> atualização.

Exemplos :

UPDATE EMPSAL SET SALARY = 45000 WHERE EMPNO= 1004;

UPDATE EMPSAL SET SALARY = SALARY*1.10


WHERE EMPNO IN
(SELECT EMPNO FROM EMP WHERE DEPTNO = 2500);

UPDATE EMPSAL SET SALARY= 40000


WHERE CURRENT OF EMPCURSOR;

DELETE

Este comando apaga uma ou mais linhas que satisfazem a condição de procura de uma
única tabela ou visão.
Para executá-lo, você deve possuir privilégio DELETE na tabela.

A sintaxe do comando DELETE :

DELETE FROM <nome_da_tabela>


Página PAGE 582
Programando com o Centura Team Developer 2000

<nome_da_visao> [<nome_relacionado>]
[ WHERE <condicao_de_pesquisa> ]
[ CURRENT OF <nome_cursor> ]

Argumentos :

nome_da_tabela Nome de tabela especificado por qualquer usuário, com


privilégios de deleção.
nome_da_visao Nome de visão especificado por qualquer usuário com,
privilégios de deleção.
nome_relacionado Um nome relacionado pode ser usado dentro da condição de
procura para designar a tabela ou a visão.
WHERE A condição de procura qualifica um conjunto de linhas para
condicao_de_pesquisa deleção.
Obs : Se você não especificar uma condição para o comando
DELETE, todas as linhas da tabela serão apagadas.
CURRENT OF Um comando DELETE com esta cláusula é chamado
nome_cursor “posicional” ou “controlado por cursor”.
Este tipo de atualização requer dois cursores abertos:
- Cursor 1, associado a um comando SELECT;
- Cursor 2, associado a um comando DELETE.

Um nome de cursor deve ser associado ao Cursor 1, antes


que este comando seja executado.

Exemplos :

DELETE FROM emp WHERE codemp = 1234

DELETE FROM empsal WHERE codemp IN ( SELECT codemp FROM emp


WHERE coddepto = 12 )

DELETE FROM hitórico

ALTER TABLE

Este comando pode ser utilizado para executar as seguintes funções :

- Adicionar, apagar ou modificar uma coluna.


- Renomear uma coluna ou tabela.

As visões que fazem referência a colunas ou tabelas apagadas ou renomeadas, são


automaticamente apagadas. Já os comandos pré-compilados que referenciam colunas ou
tabelas apagadas, ou renomeadas, não são apagados.

Sintaxe :

ALTER TABLE <nome_da_tabela>

Página PAGE 582


Programando com o Centura Team Developer 2000

DROP <nome_da_coluna>
ADD <nome_da_coluna> <tipo_de_dado> [( tamanho)]
[NOT NULL]
[NOT NULL WITH
DEFAULT]
RENAME <nome_da_coluna> <novo_nome_da_coluna>
TABLE <novo_nome_da_tabela>
MODIFY <nome_da_coluna> <tipo_de_dado> [( tamanho)]
[NULL]
[NOT NULL]
[NOT NULL WITH
DEFAULT]

Argumentos :

ADD Adiciona uma coluna em uma tabela. As colunas são criadas da


mesma forma que no comando CREATE TABLE.
ADD é a cláusula default se nenhuma cláusula for especificada.
DROP Remove uma coluna de uma tabela. Se a coluna possui dados, os
dados são perdidos. Você não pode apagar: uma coluna indexada,
uma coluna pertencente a uma chave, colunas do catálogo do
sistema.
MODIFY Altera os atributos de uma coluna.
Você pode aumentar o tamanho de uma coluna caracter, mas não
diminuí-lo.
Você não pode alterar o tipo de dado da coluna.
Você não pode alterar o tamanho de uma coluna numérica.

NULL - Remove o atributo NOT NULL de uma coluna.


NOT NULL - Adiciona o atributo NOT NULL a colunas que
correntemente aceitam nulos. Se a coluna contém valores nulos,
você não pode redefiní-la como NOT NULL.
NOT NULL WITH DEFAULT - Esta cláusula previne uma
coluna de conter valores nulos e permite valores default que não
sejam nulos.
RENAME Altera o nome de uma tabela ou coluna. Tabelas e colunas que
fazem parte do catálogo do sistema não podem ser renomeadas.

Exemplos :

ALTER TABLE EMP ADD JOB VARCHAR(15);

ALTER TABLE EMP DROP JOB, HIREDATE;

ALTER TABLE EMP RENAME TABLE EMPLOYEE;

ALTER TABLE EMP MODIFY HIREDATE NOT NULL;

Página PAGE 582


Programando com o Centura Team Developer 2000

COMMIT

Este comando efetiva todas as alterações realizadas no banco de dados desde o último COMMIT ou
ROLLBACK, ou desde a conexão inicial do usuário, se não houveram comandos realizados.

A operação COMMIT aplica-se a todos os comandos SQL, incluindo comandos de definição (CREATE,
DROP, ALTER) e de controle (GRANT, UPDATE, DELETE).

Os “locks” são sempre liberados depois de um COMMIT, a menos que o modo de preservação de cursores
esteja ativo.

Sintaxe :

COMMIT

Exemplos :

COMMIT; (sinaliza fim de transação e início de uma nova)

<Comando SQL ...>


<Comando SQL ...>
<Comando SQL ...>
COMMIT; (efetiva os três comandos SQL acima)

CREATE INDEX

Este comando cria um índice baseado em uma ou mais colunas da tabela, não existindo
limite para o número de índices por tabela. Os possíveis tipos de índices são : UNIQUE ou
CLUSTERED HASHED.

Obs. :
- se um índice é do tipo “clustered hashed”, sua chave não pode ser atualizada.
- se você cria uma tabela contendo uma chave primária usando CREATE TABLE, deve
criar um índice único baseado nas colunas da chave primária.

Funções nos Índices :

Pode-se criar um índice que é o resultado da utilização de funções não-aninhadas na coluna, ou colunas, da
tabela. Estes índices são usados pelo SQLBase sempre que as respectivas funções são chamadas na cláusula
WHERE.

Sintaxe :

CREATE [UNIQUE]
[CLUSTERED HASHED] INDEX <nome_do_indice>
ON <nome_da_tabela> ( <nome_da_coluna> [ASC ]
[DESC] )
[PCTFREE integer constant]
[SIZE integer value ROWS
BUCKETS]

Página PAGE 582


Programando com o Centura Team Developer 2000

Argumentos :

UNIQUE Esta palavra-chave força valores únicos dentro da tabela. Um erro


é retornado se esta propriedade de unicidade de valores for
violada durante uma operação de inserção ou atualização.
CLUSTERED Esta cláusula armazena linhas de dados em localizações baseadas
HASHED no valor da chave. Um índice deste tipo aumenta a velocidade de
acesso randômico às linhas da tabela.
O SQLBase usa este tipo de índice quando:
- todas as colunas-chave estão na cláusula WHERE;
- as colunas somente usam condições de igualdade, como C1=C2.
INDEX Cada nome de índice consiste de um identificador longo, pré-
<nome_do_indice> fixado por um qualificador implícito que é o identificador do
criador do índice.
<nome_da_tabela> Nome da tabela para a qual criar o índice. Visão não pode ser
usada.
ASC / DESC Especifica se o índice está na ordem ascendente ou descendente.
ASC é o valor default.

Exemplos :

CREATE INDEX HIRE_IDX ON EMP ( HIREDATE )

CREATE INDEX NAME_IDX ON EMP ( LNAME, FNAME )

CREATE UNIQUE INDEX EMP_IDX ON EMP ( EMPNO DESC )

CREATE INDEX LN_IDX ON EMP ( @UPPER( LNAME))

CREATE INDEX CODE_IDX ON EMP ( @LEFT( DEPTNO, 3 ) )

CREATE TABLE

Este comando cria uma tabela com colunas específicas-somente poderá ser definido um máximo de 253
colunas para cada tabela. Para executá-lo é necessário ter autoridade RESOURCE, SYSADM ou DBA.

Ao usar CREATE TABLE com “constraints” referenciais, você pode definir uma chave estrangeira com as
mesmas especificações que a chave primária da tabela pai. Pode-se também especificar a regra de deleção da
“constraint” referencial. A regra default é RESTRICT.

Sintaxe :

CREATE TABLE <nome_da_tabela> ( <nome_da_coluna> <tipo_de_dado>


[NOT NULL]
[NOT NULL WITH
DEFAULT] )
[ PRIMARY KEY ( <nome_da_coluna> )]
[ FOREIGN KEY [ <nome_da_chave> ] ( <nome_da_coluna> )

Página PAGE 582


Programando com o Centura Team Developer 2000

REFERENCES <nome_da_tabela_pai>
[ ON DELETE
[ RESTRICT]
[ CASCADE]
[ SET NULL]]] )

Argumentos :

<nome_da_tabel Um nome de tabela qualificado tem a forma : identificador.nome da


a> tabela, onde identificador é o nome do criador da tabela.
<tipo_de_dado> Uma coluna pode ter os seguintes tipos de dados:
CHAR (tamanho) , VARCHAR (tamanho) , DECIMAL [(precisão,
escala)] , FLOAT ,
INTEGER , LONG VARCHAR , NUMBER , SMALLINT , DATE ,
DATETIME ,
TIME , TIMESTAMP.
PRIMARY Cria a chave primária para a tabela.
KEY As seguintes regras se aplicam para a chave primária:
- Se uma tabela possui chave primária, você deve também criar um
índice único baseado nas colunas da chave;
- Não pode conter mais de 16 colunas cuja soma do tamanho dos
atributos deverá ser menor que 255. Colunas do tipo LONG ou LONG
VARCHAR não deverão ser utilizadas;
- Os valores da chave primária devem ser únicos;
- Cada tabela só pode ter uma chave primária.
FOREIGN KEY Especifica a chave estrangeira para uma tabela. Cada valor na chave
estrangeira deve possuir um valor correspondente na chave primária da
qual origina.
<nome_da_chav Você pode assinalar um nome à chave estrangeira para identificá-la. Este
e> nome pode ter até 18 caracteres. Se ele não é fornecido, o SQLBase cria
um nome baseado na primeira coluna da chave estrangeira.
REFERENCES Identifica a tabela pai em um relacionamento e define as restrições
necessárias.
NOT NULL Requer que dados estejam presentes na coluna toda vez que uma linha
for adicionada à tabela.
NOT NULL Esta cláusula previne uma coluna de conter valores nulos e permite
WITH valores default que não sejam nulos.
DEFAULT
ON DELETE Especifica as regras de deleção em uma tabela. O valor default é
RESTRICT. Estas regras só são usadas para definir uma chave
estrangeira.
CASCADE Apaga primeiro as linhas selecionadas, depois as linhas dependentes,
ignorando as regras de deleção dos dependentes.
RESTRICT Especifica que a linha só pode ser apagada se nenhuma outra linha
depender dela.
SET NULL Especifica que para cada deleção executada na chave primária, valores
correspondentes da chave estrangeira são configurados como NULL.

Exemplos :
Página PAGE 582
Programando com o Centura Team Developer 2000

CREATE TABLE EMP


( EMPNO INT NOT NULL ,
LNAME VARCHAR(15) ,
FNAME CHAR(10) ,
DEPTNO SMALLINT ,
HIREDATE DATE ,
JOB VARCHAR (15)
PRIMARY KEY ( EMPNO ) )

CREATE TABLE EMPSAL


( EMPNO INTEGER,
SALARY DECIMAL (9,2),
REVISÃO LONG VARCHAR,
PRIMARY KEY ( EMPNO ) ,
FOREIGN KEY ( EMPNO ) REFERENCES EMP
ON DELETE CASCADE )

CREATE VIEW

Este comando cria uma visão a partir de uma ou mais tabelas, ou visões.

Você pode modificar tabelas através de uma visão, somente se a visão referencia um único nome de tabela na
cláusula FROM do comando SELECT, e as colunas da visão não são derivadas de funções ou expressões
aritméticas.

Para criar uma visão, você deve possuir privilégio de SELECT nas colunas das tabelas que
compõem a visão.

Sintaxe :

CREATE VIEW <nome_da_visao> [( <nome_da_coluna> )]


AS SELECT [WITH CHECK OPTION]

Argumentos :

<nome_da_visao> O nome da visão deve ter a forma: identificador do dono.nome da


visão
<nome_da_coluna> Especifica nomes de colunas, devendo apenas ser especificado se
você deseja que as colunas da visão tenham nomes diferentes das
colunas da tabela.
SELECT Um comando SELECT que defina a visão. A visão contém as
linhas resultantes da execução deste comando SELECT.
Você não pode usar a cláusula ORDER BY em uma definição de
VISÃO.
WITH CHECK Faz com que todas as operações de inserção e atualização através
OPTION da visão sejam checadas contra a definição da visão, e rejeitadas
caso não estejam em conformidade com a definição.

Página PAGE 582


Programando com o Centura Team Developer 2000

Exemplos :

CREATE VIEW PAY


AS SELECT FNAME, LNAME, SALARY
FROM EMP, EMPSAL
WHERE EMP.EMPNO = EMPSAL.EMPNO

CREATE VIEW
DEPT_SAL (DEPT, TOTSAL)
AS SELECT DEPTNO, SUM(SALARY)
FROM EMP, EMPSAL
WHERE EMP.EMPNO = EMPSAL.EMPNO
GROUP BY DEPTNO;

CREATE VIEW WEEK2


AS SELECT * FROM ORDERS
WHERE ORDERDATE > = 05-JUL-94
WITH CHECK OPTION

DROP INDEX

Este comando remove do banco de dados o índice especificado. Já os comandos pré-compilados, que
referenciam índices apagados, não são automaticamente deletados.

Um índice só pode ser apagado por seu criador ou por um usuário com autoridade
SYSADM ou DBA.

Sintaxe :

DROP INDEX <nome_do_indice>

Argumentos :

<nome_do_indice> Nome do índice a ser removido. Índices de tabelas do sistema não


podem ser removidos. Visões e tabelas existentes não são afetadas.

Exemplo :

DROP INDEX EMP_IDX;

DROP TABLE

Este comando remove do banco de dados a tabela especificada. Os comandos pré-compilados que
referenciam tabelas apagadas não são automaticamente deletados. Já as triggers definidas para as tabelas são
apagadas.

Em um banco de dados com integridade referencial definida, ao apagar a tabela você está apagando a sua
chave primária, bem como as chaves estrangeiras em outras tabelas que façam referência à tabela pai. O
comando DROP TABLE apaga todas as “constraints” nas quais a tabela apagada era pai ou dependente.

Página PAGE 582


Programando com o Centura Team Developer 2000

Uma tabela só pode ser apagada por seu criador ou por um usuário com autoridade
SYSADM ou DBA.

Sintaxe :

DROP TABLE <nome_da_tabela>

Argumentos :

<nome_da_tabela> Esta cláusula apaga os seguintes objetos:


- a tabela especificada;
- todos os sinônimos e índices para a tabela;
- todos os privilégios garantidos para a tabela;
- todas as visões dependentes;
- todas as triggers definidas para a tabela.

Exemplo :

DROP TABLE EMP;

DROP VIEW

Este comando remove do banco de dados a visão especificada. Já os comandos pré-compilados que
referenciam visões apagadas não são automaticamente deletados.

Uma visão só pode ser apagada por seu criador ou por um usuário com autoridade SYSADM ou DBA.

Sintaxe :

DROP VIEW <nome_da_visão>

Argumentos :

<nome_da_visao> Remove do catálogo do sistema a visão especificada, além de todas as


visões dependentes e seus privilégios.

Exemplo :

DROP VIEW WEEK2

ROLLBACK

Este comando finaliza uma transação corrente.

Quando um comando ROLLBACK é executado, o SQLBase aborta a transação corrente. Isto restaura o
banco de dados, até o estado que ele estava antes do último COMMIT ou ROLLBACK, ou, se isso não
ocorreu, até o momento da conexão pelo usuário.

Página PAGE 582


Programando com o Centura Team Developer 2000

Sintaxe :

ROLLBACK

Exemplos :

COMMIT;

<SQL Command…>
<SQL Command…>
<SQL Command…>
ROLLBACK ;
Tabela dos comandos do SQLBase

Nome Descrição
ALTER DATABASE Altera o grupo de armazenamento ou log para um banco de
dados.
ALTER DBAREA Altera o tamanho da área do banco de dados.
ALTER EXTERNAL Altera a definição de uma função externa.
FUNCTION
ALTER PASSWORD Altera a senha.
ALTER STOGROUP Adiciona ou apaga uma área do banco de dados de um
grupo de armazenamento.
ALTER TABLE Altera a definição de uma tabela.
ALTER TABLE Torna as mensagens de erro específicas para uma
(mensagens de erro) determinada violação de integridade referencial.
ALTER TABLE Adiciona ou apaga chaves primárias e estrangeiras.
(integridade referencial)
ALTER TRIGGER Habilita e desabilita triggers definidas em tabelas.
AUDIT MESSAGE Grava uma mensagem em um arquivo de auditoria.
CHECK DATABASE Verifica a integridade do banco de dados.
CHECK INDEX Verifica a integridade de um determinado índice.
CHECK TABLE Verifica a integridade de uma determinada tabela.
COMMENT ON Substitui ou adiciona um comentário à definição de uma
tabela, visão, coluna ou função externa do catálogo do
sistema.
COMMIT Finaliza uma unidade lógica de trabalho e efetiva alterações
por ela realizadas no banco de dados.
CREATE DATABASE Cria fisicamente um banco de dados.
CREATE DBAREA Cria uma área de banco de dados.
CREATE EVENT Cria um evento.
CREATE EXTERNAL Cria uma função externa.
FUNCTION
CREATE INDEX Cria um índice em uma tabela.
CREATE STOGROUP Cria um grupo de armazenamento.
CREATE SYNONYM Define um nome alternativo para uma tabela, view ou
função externa.
CREATE TABLE Define uma tabela.
CREATE TRIGGER Cria uma trigger.
Página PAGE 582
Programando com o Centura Team Developer 2000

CREATE VIEW Define uma visão de uma ou mais tabelas ou visões.


DBATTRIBUTE Configura atributos específicos do banco de dados.
DEINSTALL DATABASE Retira um banco de dados da rede, tornando-o não
disponível para usuários.
DELETE Apaga uma ou mais linhas de uma tabela.
DROP DATABASE Apaga fisicamente um banco de dados.
DROP DBAREA Apaga fisicamente uma área de banco de dados.
DROP EVENT Apaga um evento.
DROP EXTERNAL Apaga uma função externa.
FUNCTION
DROP INDEX Remove um índice.
DROP STOGROUP Apaga um grupo de armazenamento.
DROP SYNONYM Apaga um sinônimo.
DROP TABLE Apaga fisicamente a tabela de um banco de dados.
DROP TRIGGER Apaga uma trigger.
DROP VIEW Apaga uma visão.
GRANT (níveis de autoridade
Assinala níveis de autorização ou privilégios para um banco
no banco de dados) de dados.
GRANT Assinala um ou mais privilégios específicos para uma
(privilégios em tabelas)
tabela ou view.
GRANT EXECUTE ON Assinala privilégio à usuários para execução de stored
procedures e funções externas.
INSERT Insere uma ou mais linhas em uma tabela já existente.
INSTALL DATABASE Coloca o banco de dados na rede, tornando-o acessível por
usuários.
LABEL Adiciona ou altera etiquetas nas definições do catálogo.
LOAD Carrega uma ou mais tabelas em um banco de dados.
LOCK DATABASE Coloca um lock exclusivo no banco de dados, prevenindo
conexões por outros usuários.
PROCEDURE: Cria um procedimento.
REVOKE Revoga níveis de autorização ou privilégios para um banco
de dados.
REVOKE EXECUTE ON Revoga privilégio de usuários para execução de stored
procedures e funções externas.
ROLLBACK Finaliza uma unidade lógica de trabalho e desfaz alterações
realizadas no banco de dados durante a última transação.
ROWCOUNT Conta o número de linhas de uma tabela.
SAVEPOINT Determina um ponto de checagem dentro de uma transação.
SELECT Consulta tabelas ou visões.
SET DEFAULT STOGROUP Especifica um grupo de armazenamento default.
START AUDIT Inicia uma auditoria no banco de dados.
STOP AUDIT Finaliza uma auditoria no banco de dados.
UNLOAD Descarrega o banco de dados em um arquivo externo.
UNLOCK DATABASE Libera o lock exclusivo de um banco de dados, colocado
através do comando LOCK DATABASE.
UPDATE Atualiza valores de colunas de uma tabela ou view.
UPDATE STATISTICS Atualiza as estatísticas para um índice de uma tabela.

Página PAGE 582


Programando com o Centura Team Developer 2000

Tabela das Funções do Centura SQLBase

Nome Descrição
AVG Média dos itens.
COUNT Contador dos itens.
MAX Número máximo de itens.
MIN Número mínimo de itens.
SUM Somatório dos itens.
@ABS Valor absoluto.
@ACOS Arco-coseno.
@ASIN Arco-seno.
ATAN Arco-tangente do segundo quadrante.
@ATAN2 Arco-tangente do quarto quadrante.
@CHAR Caracter ASCII de um código decimal.
@CHOOSE Seleciona o valor de uma lista baseado em uma correlação.
@CODE Código decimal ASCII do primeiro caracter em uma string.
@COS Coseno.
@CTERM Período necessário para se obter ganhos no futuro.
@DATE Converte para valor do tipo data.
@DATETOCHAR Edita valor do tipo data.
@DATEVALUE Edita valor do tipo data.
@DAY Dia do mês.
@DECIMAL Valor decimal de uma string hexadecimal.
@DECODE Dada uma expressão, retorna uma string.
@EXACT Compara duas strings.
@EXP Retorna logarítmo natural base (e) elevado à potência x.
@FACTORIAL Fatorial.
@FIND Posição dentro da string1 que ocorre na string2.
@FV Valor futuro obtido a partir de uma série de pagamentos iguais.
@HEX String hexadecimal de um número decimal.
@HOUR Hora do dia.
@IF Testa número e retorna 1 se VERDADEIRO ou 2 se FALSO.
@INT Parte inteira.
@ISNA Retorna VERDADEIRO se NULO.
@LEFT Substring mais à esquerda.
@LENGTH Tamanho de uma string.
@LICS Ordenação usando conjunto de caracteres internacionais.
@LN Logarítmo natural base (e) de x (positivo).
@LOG Logarítmo de x na base 10.
@LOWER Maiúsculo para minúsculo.
@MEDIAN Valor do meio de um conjunto de itens.
@MICROSECOND Valor em microsegundos.
@MID Retorna uma string, começando com o caracter em posição-inicial.
@MINUTE Minuto da hora.
@MOD Módulo de x/y.
@MONTH Mês do ano.
@MONTHBEG Primeiro dia do mês.
@NOW Data e Hora correntes.
Página PAGE 582
Programando com o Centura Team Developer 2000

@NULLVALUE Retorna uma string ou número especificado por y se x é NULO.


@PI Valor Pi ( = 3.14159265).
@PMT Pagamentos necessários para quitar um empréstimo.
@PROPER Converte o primeiro caracter de cada palavra de uma string para
maiúsculo e torna os outros caracteres minúsculos.
@PV Valor atual de uma série de pagamentos iguais.
@QUARTER Número que representa o trimestre.
@QUARTERBEG Primeiro dia do trimestre.
@RATE Taxa de juros necessária para um investimento crescer para uma
valor futuro.
@REPEAT Concatena uma string com ela mesma por um determinado número
de vezes.
@REPLACE Substitui caracteres em uma string.
@RIGHT Substring mais à direita.
@ROUND Arredonda um número.
@SCAN Procura um padrão em uma string.
@SDV Desvio padrão.
@SECOND Segundos do minuto.
@SIN Seno.
@SLN Depreciação linear.
@SQRT Raiz quadrada.
@STRING Converte um número em uma string.
@SUBSTRING Retorna uma parte da string.
@SYD Método da depreciação da soma dos dígitos do ano.
@TAN Tangente.
@TERM Número de períodos para pagamento de um investimento.
@TIME Retorna um valor do tipo data/hora dados hora, minuto e segundo.
@TIMEVALUE Retorna um valor do tipo data/hora dados HH:MM:SS [AM ou PM].
@TRIM Remove brancos; comprime múltiplos espaços.
@UPPER Minúscula para maiúscula.
@VALUE Converte uma string de caracteres contendo dígitos para um número.
@WEEKBEG Primeiro dia da semana (segunda-feira).
@WEEKDAY Dia da semana.
@YEAR O ano, tendo como base 1900.
@YEARBEG Primeiro dia do ano.
@YEARNO Ano do calendário.

Usando o Centura SQLBase através do CTD

A utilização de uma base de dados numa aplicação desenvolvida em Centura Team


Developer, na maioria dos casos, é feita basicamente da seguinte forma :

Conectar a aplicação ao banco de dados

Para que você possa utilizar um banco de dados é necessário estabelecer uma conexão
entre a aplicação e a base de dados. Esta conexão é feita, em CTD, utilizando-se a função
SqlConnect. O nome da base de dados que será conectada deve estar na variável do sistema

Página PAGE 582


Programando com o Centura Team Developer 2000

chamada SqlDatabase, assim como o nome do usuário e a senha devem estar nas variáveis
SqlUser e SqlPassword, respectivamente.

Para saber se a conexão foi bem sucedida, verifique o valor retornado pela função
SqlConnect.

Sendo a conexão realizada com sucesso, você terá um handle sql conectado ao banco de
dados. Podemos chamar também este handle sql de cursor, este termo é também bastante
utilizado e, em resumo, significa que existe um canal de comunicação entre a aplicação e o
banco de dados. É através deste canal de comunicação que toda a interação com o banco de
dados é realizada.

Uma aplicação Centura pode ter um número teoricamente ilimitado de conexões


simultâneas com bancos de dados, inclusive com bancos de diferentes fornecedores. Por
exemplo, você pode conectar sua aplicação com bases de dados Centura SQLBase,
Oracle/Unix, SqlServer/WindowsNT, DB2/MVS e DBFs/ODBC, ao mesmo tempo.

Observe abaixo um código padrão, mostrando uma típica conexão sendo feita :

Set SqlDatabase = "ISLAND"


Set SqlUser = "SYSADM"
Set SqlPassword = "SYSADM"
Call SqlConnect( hSql1 )

Obs :
Se você executar as funções SqlImmediate ou SqlExists antes de executar SqlConnect, a
aplicação será automaticamente conectada ao banco de dados.

Compilar o comando SQL

Após a conexão ser realizada com sucesso, você pode utilizar os comandos sql para consultar, incluir, alterar
ou excluir informações da base de dados conectada. Os comandos devem ser enviados ao servidor de banco
de dados para que este analise o seu comando. Esta fase, chamada compilação, é conhecida no CTD por
preparação. Você deve utilizar a função SqlPrepare no CTD para realizar esta função. O comando enviado ao
servidor é analisado, verificando-se a existência de algum erro de sintaxe. As visões utilizadas são resolvidas,
o comando é otimizado, e então é gerado um plano de execução.

Observe abaixo um código padrão, mostrando uma típica preparação de um comando sql :

Call SqlPrepare( hSql1 , ‘SELECT COMPANY_NAME FROM COMPANY’ )

Página PAGE 582


Programando com o Centura Team Developer 2000

Definir alguns argumentos

O propósito desta fase é identificar as variáveis da aplicação que recebem os dados através
do comando sql utilizado na fase anterior. Estas variáveis são conhecidas no CTD pelo
termo variáveis INTO.

Observe abaixo um código padrão, mostrando uma utilização das variáveis INTO :

Call SqlPrepare( hSql1 , ‘SELECT COMPANY_ID , COMPANY_NAME


INTO :dfCodigo , :dfNome FROM COMPANY’ )

Obs :
Você não pode deixar de utilizar os dois pontos “:” precedendo o nome de cada variável citada na
cláusula INTO do comando sql. O compilador do CTD não faz esse tipo de verificação, e o erro
será identificado apenas em tempo de execução da sua aplicação.

Executar o comando

Este passo é realizado pelo servidor de banco de dados, que irá verificar a existência da utilização de
variáveis BIND, obtendo os valores necessários para a correta execução do comando. Variáveis BIND são,
normalmente, variáveis da aplicação CTD que possuem valores a serem obtidos pelo servidor antes que o
comando sql seja executado. Geralmente são valores utilizados em codições. Você deve utilizar a função
SqlExecute no CTD para realizar esta função.

Observe abaixo um código padrão, mostrando uma utilização das variáveis BIND :

Call SqlPrepare( hSql1 , ‘SELECT COMPANY_ID , COMPANY_NAME


INTO :dfCodigo , :dfNome FROM COMPANY
WHERE COMPANY_ID = :nCodigo’ )
Call SqlExecute( hSql1 )

Obs :
Assim como as varíaveis INTO, você não pode deixar de utilizar os dois pontos “:” precedendo o
nome de cada variável BIND do comando sql. O compilador do CTD não faz esse tipo de
verificação e o erro será identificado apenas em tempo de execução da sua aplicação.
A principal diferença entre as variáveis INTO e as variáveis BIND é que as variáveis BIND são
enviadas ao servidor para que o comando sql seja executado corretamente, exercendo influência
no resultado do comando. As variáveis INTO são enviadas para a aplicação pelo servidor com os
dados recuperados.

Página PAGE 582


Programando com o Centura Team Developer 2000

Recuperar os dados

Até este momento, o fluxo de informações tem sido sempre da aplicação para o servidor. Nenhum dado
retornou do servidor até agora. O único modo de se obter informações vindas do banco de dados é fazendo
uso do comando select e, então, recuperando o resultado deste comando. Os passos anteriores são
responsáveis pela requisição dos dados, tarefas estas realizadas pelas funções SqlPrepare e SqlExecute, ou
pela função SqlPrepareAndExecute. Para se obter os dados resultantes do comando select que foi preparado e
executado anteriormente, faz-se necessário o uso das funções SqlFetchPrevious, SqlFetchRow e
SqlFetchNext.

Ao conjunto de linhas que compõem o resultado de um comando select, dá-se o nome de


result set. As funções SqlFetch* são responsáveis pela navegação neste result set.

As funções SqlFetchPrevious e SqlFetchNext permitem a navegação para trás e para frente, respectivamente,
uma linha por vez, através do result set. A função SqlFetchRow permite que uma determinada linha seja
posicionada sem que seja preciso navegar por todas as demais. Ou seja, salta direto para uma linha específica.
Este recurso é chamado de scrolling.

Existem duas funções que recuperam informações do banco de dados carregando-as num objeto visual. Estas
executam internamente as funções SqlPrepare, SqlExecute e SqlFetchNext. As funções SalTblPopulate e
SalListPopulate carregam o result set obtido por um comando select em objetos do tipo table window, e em
list box (ou combo box), respectivamente. Nestes casos, a navegação pelo result set não é feita através do uso
da funções SqlFetch*.

Obs :
A navegação no result set é feita na máquina cliente e não na servidora. Por esse motivo, alguns
cuidados devem ser observados para a obtenção de resultados satisfatórios, como por exemplo o
espaço em disco disponível na máquina cliente, pois, arquivos temporários são gerados. Estes
arquivos temporários gerados podem, eventualmente, não serem apagados ao final do processo.
Isto pode ocorrer em tempo de desenvolvimento. Não esqueça de apagar estes arquivos
temporários.

Finalizar a transação

Para encerrar uma transação você deve utilizar um dos dois comandos disponíveis,
dependendo do caso em que se aplicar. Use o comando commit para tornar permanentes as
edições feitas no banco de dados, ou então, use o comando rollback para descartar
qualquer modificação que tenha sido realizada.

Quando um destes comandos é executado, todas as transações abertas são destruídas, ou seja, qualquer
comando que tenha sido preparado com as funções SqlPrepare, SqlPrepareAndExecute e SqlRetrieve são
destruídas, sendo necessário compilar novamente os comandos.

Para executar um comando commit você pode utilizar a função SqlCommit. No caso do
comando rollback, você pode fazer uso da função SqlPrepareAndExecute( hSql ,
“ROLLBACK” ).

Desconectar do banco de dados

Quando não for mais necessário a utilização de um handle sql, este deve ser desconectado. Para desconectá-
lo você deve utilizar a função SqlDisconnect. Neste momento, o canal de comunicação que foi criado com a
função SqlConnect é destruído, liberando recursos de memória da estação cliente e do servidor.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Quando utilizar SqlPrepare / SqlExecute ou SqlPrepareAndExecute ?

Na maioria dos casos, não há diferença entre utilizar as funções SqlPrepare e SqlExecute
com relação a utilização da função SqlPrepareAndExecute. Porém, é importante observar
dois detalhes:

Call SqlPrepare( hSql, sComandoSql )


Call SqlExecute( hSql )

Que pode ser substituído pelo seguinte código :

Call SqlPrepareAndExecute( hSql , sComandoSql )

Neste caso, é claramente observada uma nítida vantagem na utilização da função SqlPrepareAndExecute,
pois, em apenas uma chamada de função, são executadas as duas tarefas anteriores, otimizando a utilização
da rede e do servidor do banco de dados. Isso, já pode ser bastante significante.

Observe este outro exemplo :

Set nIndice = 1
While nIndice < 500
Call SqlPrepareAndExecute( hSql,’INSERT INTO tab_a (
col1 )
VALUES ( :nIndice ) ‘ )
Set nIndice = nIndice + 1
Call SqlPrepareAndExecute( hSql, ‘ COMMIT ’ )

Neste exemplo, são feitas 500 inclusões no banco de dados, utilizando-se um laço While.
Múltiplas atualizações ao banco de dados podem causar problemas na estação cliente e
junto ao servidor. Para evitar esse tipo de problema, podemos escrever um código
equivalente ao mostrado acima, porém, mais eficiente.

Set nIndice = 1
Call SqlPrepare(hSql,’INSERT INTO tab_a ( col1 ) VALUES (
:nIndice ) ‘ )
While nIndice < 500
Call SqlExecute( hSql )
Set nIndice = nIndice + 1
Call SqlPrepareAndExecute( hSql, ‘ COMMIT ’ )

No primeiro exemplo, o comando é preparado todas as 500 vezes !

Observe que a compilação do comando está fora do laço, ou seja, o comando é preparado
apenas uma vez. Nas demais vezes, ele é apenas executado. Na preparação do comando é
montado o link com a variável BIND nIndice, indicando que, quando o comando for
executado pelo servidor, o valor de nIndice será utilizado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 4
Programação Baseada em Eventos
O SQLWindows/32 é uma linguagem de programação de quarta geração, extremamente rica e
poderosa, que é também orientada a eventos. Aliás, o SQLWindows/32, nasceu orientado a
eventos. Portanto, é de suma importância ao desenvolvedor estar devidamente familiarizado
com os conceitos que orientam o desenvolvimento de aplicações baseadas em eventos.

Neste capítulo, esses conceitos são apresentados de forma simples, utilizando


exemplos de aplicações que exploram recursos possíveis de serem
implementados apenas numa linguagem orientada a eventos, como é o caso do
SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

Introdução

O Microsoft Windows é um ambiente orientado a eventos. Todos os objetos de uma aplicação MS Windows
são chamados de window objects. Esses podem ser form windows, data fields, combo box e table windows,
entre outros. A responsabilidade em criar, manter e destruir os objetos de uma aplicação é do Windows. É
dele também a tarefa de gerenciar os requisitos de memória e recursos para as aplicações.

Linguagens como Pascal ou C são procedurais. O Centura SQLWindows/32 é uma


linguagem baseada em eventos e mensagens. Os objetos do SQLWindows/32 recebem a
mensagem e executam a devida ação. Um evento, ou uma série de eventos, geram uma
mensagem e esta é enviada aos objetos ativos que executam as devidas ações. Eventos e
mensagens controlam todo o fluxo de execução de um programa Centura.

Podemos afirmar que é o usuário final quem controla os eventos, assim como a aplicação.
Por exemplo, o usuário pode clicar num conjunto de objetos e atingir um determinado
resultado, clicando nos mesmos objetos, porém, numa outra seqüência, os resultados
podem ser completamente diferentes.

Todos os objetos do ambiente Windows comunicam-se por meio de mensagens.


Mensagens são o protocolo para comunicação entre os objetos.

Definição

Eventos

Num nível bastante básico, o Windows possui quatro eventos de hardware, a saber: :
De teclado – como teclas do cursor e teclas de função.
Do mouse – como clique do botão esquerdo e clique duplo.
De timers – como o relógio interno.
De Caneta Óptica – a leitura de dados através de uma caneta.

Existem muitos outros eventos derivados dos eventos de hardware e alguns outros que são gerados pelas
aplicações. Por exemplo, quando uma aplicação é encerrada, um evento é gerado, resultando no recebimento
de uma mensagem pela janela principal.

Mensagens

Uma mensagem é um simples numeral hexadecimal compreendido entre o número 0 e


0xFFFF. Essas mensagens podem originar-se do próprio ambiente Windows, do
SQLWindows32 ou do código da aplicação. As aplicações enviam mensagens aos objetos.
Se um objeto possuir alguma ação preparada para essa mensagem, a ação é executada. A
única forma de avisar a um objeto que uma mensagem chegou é através do número da
mensagem.

Um evento gera uma mensagem e, se o objeto estiver preparado para esta mensagem, uma
ação será executada em resposta a mensagem enviada.

Objetos

Página PAGE 582


Programando com o Centura Team Developer 2000

Um objeto é qualquer elemento visual ou não visual presente numa aplicação. Todos os objetos no Centura
SQLWIndows32 possuem uma seção a ele correspondente no outline. No SQLWindows32 existem dois tipos
de objetos:

Objetos Passivos: são objetos que não podem receber e nem enviar mensagens, eles não
possuem a seção Message Actions no outline. Os objetos background text, group box,
frame e line são exemplos de objetos passivos no SQLWindows32.

Objetos Ativos: são objetos que possuem a seção message actions no outline do SQLWindows32,
possibilitando a recepção de mensagens. Tendo recebido uma mensagem, o objeto executa uma ação que
pode envolver enviar outras mensagens a outros objetos. Por exemplo, quando o usuário clica num push
button, uma mensagem SAM_Click é enviada ao objeto. Neste exemplo, o message actions do objeto precisa
estar preparado para receber essa mensagem e executar as ações devidas.

Pushbutton: pb1
Message Actions
On SAM_Click
! Ações

O comando On SAM_Click informa ao objeto que execute uma ação, quando receber a
mensagem cujo número corresponda à constante SAM_Click.

Obs :
Você pode fazer uso das funções SalGetFirstChild e SalGetNextChild para acessar os
objetos ativos e passivos numa aplicação.

Evento  Mensagem  Ação

Um evento faz com que uma mensagem seja enviada a um objeto. Se esse objeto captar a
mensagem através do comando On, todo o bloco de ação subordinado é executado até o
fim, ou até que seja executado um comando Return.

Nem todos os objetos recebem todas as mensagens. Por exemplo, apenas o objeto
Aplicação recebe a mensagem SAM_AppStartup. A aplicação recebe essa mensagem
antes que qualquer objeto visual seja criado. Um objeto push button não pode receber essa
mensagem, assim como não faz sentido a aplicação receber a mensagem SAM_Click.

As mensagens podem partir de três locais distintos :

 MS Windows - Mensagens geradas pelo próprio sistema operacional. Por exemplo,


WM_PAINT
 Aplicação Centura, através de interação do usuário - Mensagens geradas devido a
ações do usuário. Por exemplo, SAM_Click.
 Aplicação Centura, via programação - Mensagens geradas por código SAL.

Três funções podem ser utilizadas para o envio de mensagens entre objetos:

SalSendMsg – Envia uma mensagem para a fila de mensagens de um objeto.


SalPostMsg – Envia uma mensagem para ser executada imediatamente por um objeto.
Página PAGE 582
Programando com o Centura Team Developer 2000

SalSendMsgToChildren – Envia uma mensagem para cada um dos objetos child, a qual
deve ser executada imediatamente.

Mensagens definidas pelo usuário

Uma mensagem é, basicamente, um número. Tanto o MS Windows quanto o Centura


reservam um conjunto de número para mensagens. A Constante do SQLWindows32
SAM_User marca o fim das mensagens do MS Windows e do Centura, indicando o início
das mensagens disponíveis para os usuários do SQLWindows32.

Se o MS Windows ou o Centura adicionarem novas mensagens, o valor da constante


SAM_User é automaticamente incrementado, não ocorrendo impacto algum às aplicações.

Informações adicionais

Fazendo parte de todo esse recurso de mensagens do sistema operacional, existem duas
variáveis do MS Windows que podem ser utilizadas para transmissão de parâmetros. São
elas:

wParam
( 2 bytes – tipo WORD )
Aceita valores entre 0 e 65.535

lParam
( 4 bytes – tipo LONG )
Aceita valores entre – 4.294.967.296 e 4.294.967.295

São comumente utilizadas nas aplicações SQLWindows32.

A utilização da variável wParam é demonstrada no fragmento de código abaixo:


Pushbutton: pbOk
Message Actions
On SAM_Click
Call SalSendMsg( dfNOME , CEM_Limpa , TRUE , 0 )
Data Field: dfNOME
Message Actions
On CEM_Limpa
If wParam
Set MyValue = 'OK'
Else
Set MyValue = ''

No exemplo acima, o objeto dfNOME recebe a mensagem CEM_Limpa, enviada pelo


push button pbOK e, dependendo do valor da variável wParam. Caso o valor da variável
wParam seja TRUE, é tomada uma determinada ação. Se o valor da variável wParam for
FALSE, uma outra ação é tomada.

Exemplo 1

Vamos construir uma aplicação extremamente simples, com base nos conceitos
apresentados neste capítulo, facilitando o entendimento dos mesmos. Lembre-se que os

Página PAGE 582


Programando com o Centura Team Developer 2000

problemas que você terá de resolver, no dia-a-dia das empresas são bem mais complexos
do que este exemplo; entretanto, adequado para ilustrar as teorias apresentadas até então.

1- Inicie uma aplicação nova no Centura SQLWindows/32.

2- Defina uma Constante chamada CEM_Mensagem, na seção Constants do Global


Declarations.

3- Construa um form window.

4- Coloque nele dois push button chamados, pbOK e pbLIMPAR, incluindo os seus
devidos títulos.

5- Três data fields devem ser colocados neste form window.

Sua janela deve parecer-se com a figura mostrada abaixo :

6- Insira o código referente ao pbOK.

No evento SAM_Click, envie a mensagem CEM_Mensagem a todos os objetos filho


do form window, passando TRUE no parâmetro wParam.

Página PAGE 582


Programando com o Centura Team Developer 2000

7- O código do pbLIMPAR.
No evento SAM_Click, envie a mensagem CEM_Mensagem a todos os objetos filho
do form window, passando FALSE no parâmetro wParam.

8- O código dos data fields são todos iguais.


Capture a mensagem CEM_Mensagem e verifique o valor da variável wParam.
Quando wParam for TRUE ( 1 ) , escreva ‘Olá ’ no conteúdo do data field.
Quando wParam for FALSE ( 0 ) , limpe o conteúdo do data field.

Se você tiver alguma dúvida, confira a listagem do código fonte abaixo:


Pushbutton: pbOK
Title: Ok
Message Actions
On SAM_Click
Call SalSendMsgToChildren( hWndForm, CEM_Mensagem, TRUE, 0 )
Pushbutton: pbLIMPAR
Title: Limpar
Message Actions
On SAM_Click
Call SalSendMsgToChildren( hWndForm, CEM_Mensagem, FALSE, 0 )
Data Field: df1
Message Actions
On CEM_Mensagem
If wParam
Set MyValue = 'Olá'
Else
Set MyValue = ''
Data Field: df2

Página PAGE 582


Programando com o Centura Team Developer 2000

Message Actions
On CEM_Mensagem
If wParam
Set MyValue = 'Olá'
Else
Set MyValue = ''
Data Field: df3
Message Actions
On CEM_Mensagem
If wParam
Set MyValue = 'Olá'
Else
Set MyValue = ''

Você pode fazer download dos arquivos fonte presentes no livro diretamente a partir do site
http://www.centuraexplorer.com.br/livro_ctd2000/. Este exemplo chama-se exCap04_01.app.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 5
Programando com o Centura SQLWindows
Neste capítulo desenvolveremos algumas aplicações. Várias telas de manutenção, consulta e
um album de fotografias são montadas e explicadas em detalhes.

Todos os programas fontes são disponíveis para download no site


http://www.centuraexplorer.com.br/livr_ctd2000/ além de alguns outros exemplos e tutoriais.

Nestes exemplos, é demonstrado o uso das técnicas mais comuns utilizadas na resolução de
problemas comerciais típicos, encontrados nas empresas.

Neste capítulo, utilizaremos o banco de dados que acompanha o próprio


Centura Team Developer, as ferramentas de Bancos de Dados nele contidas, o
Servidor de SQLBase, a base de dados de exemplos chamada ISLAND e o
Database Explorer. Portanto, é extremamente importante que a instalação do
Centura Team Developer tenha sido realizada conforme as instruções descritas
no Apêndice F – Guia de Instalação do Centura Team Developer 2000.

Obs : Como a nossa intenção neste momento é obter conhecimento dos


recursos básicos da linguagem Centura, nos exemplos a seguir procuraremos
sempre implementar o código de modo extremamente simples, sem a utilização
dos recursos avançados da linguagem. Essa abordagem mais avançada será
vista a partir do sétimo capítulo.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Login do Sistema

Esta é a janela responsável pela segurança do sistema. Só podem ter acesso ao sistema os
usuários autorizados, que tenham conhecimento da senha e de um determinado nome de
usuário do banco de dados. No caso do nosso exemplo, o nome do usuário e a senha devem
estar cadastrados no banco de dados que estiver sendo utilizado. Ou seja, só têm acesso ao
sistema usuários cadastrados no banco de dados.

Esta janela possui o seguinte comportamento : Assim que o usuário executa o sistema, esta
janela de login aparece e solicita a digitação do nome do usuário e da senha. Sem estas
informações, o sistema não pode ser utilizado. Caso o usuário não digite corretamente uma
senha e um nome de usuário válidos, o sistema emitirá uma mensagem de erro. A janela de
login permanece ativa até que o usuário informe, corretamente, um usuário e senha e clique
no botão Ok, ou que desista e clique no botão Cancelar.

Observe abaixo o código completo da caixa de diálogo dlgLogin.

Dialog Box: dlgLogin


Title: Login ao Sistema
Description: Solicitar um nome de usuário e senha válidos.
Tool Bar
Contents
Background Text: Nome
Data Field: dfNome
Background Text: Senha
Data Field: dfSenha
Format: Invisible
Pushbutton: pbOK
Title: &Ok
Message Actions
On SAM_Click
Set SqlDatabase = "ISLAND"
Set SqlUser = dfNome
Set SqlPassword = dfSenha
When SqlError
Call SalMessageBox( "Usuário ou senha inválidos." , "Erro no login", MB_Ok)
Return FALSE
If SqlConnect( hSql )
Set prhSql = hSql
Call SalEndDialog( hWndForm , TRUE )
Pushbutton: pbCancelar
Keyboard Accelerator: Esc
Message Actions
On SAM_Click
Call SalEndDialog( hWndForm , FALSE )
Functions
Window Parameters
Receive Sql Handle: prhSql
Window Variables
Sql Handle: hSql
Message Actions

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Depurando

 Inicialmente, observe as variáveis que esta janela utiliza. Na seção Window


Parameters, é declarado um parâmetro da janela de login, tipo Receive Sql Handle (
prhSql ), que será utilizado para retornar um handle válido ao local de onde foi
chamada a janela de login. Já na seção Variables, é declarada uma variável tipo Sql
Handle ( hSql ), que será efetivamente utilizada na janela para a conexão. Esta
declaração dupla se fez necessária, pois, a função SqlConnect precisa de uma variável
como parâmetro, não sendo possível a utilização de prhSql, uma vez que este já é um
parâmetro da janela de login.
 O data field chamado dfSenha é formatado com o atributo Invisible, que faz com que o
conteúdo do campo não fique visível ao usuário. Durante a digitação são mostrados
asteriscos para garantir o sigilo da senha.
 No código do evento SAM_Click no botão pbOK, o nome da base de dados a ser
utilizada está sendo atribuído à variável do sistema chamada SqlDatabase. Este nome
está fixo neste exemplo. Eventualmente, também poderia ser digitado na janela de
login, assim como é feito com o nome do usuário ( que é atribuído a SqlUser ) e a
senha do usuário ( que é atribuída a SqlPassword ). Lembre-se, você não precisa digitar
estas três variáveis do sistema, pode escolher com o mouse através do uso do Coding
Assistant. No combo box, escolha System Variables, assim, as variáveis do sistema
serão listadas, inclusive estas três citadas acima.
 Ainda no código do evento SAM_Click no botão pbOK, é testado o retorno da função
SqlConnect. Se a função apresentar algum erro ( retornando FALSE ), o fluxo do
programa é desviado para o código imediatamente superior, o When SqlError, onde
uma mensagem de erro é mostrada ao usuário. Se tudo ocorrer bem, e a função retornar
TRUE, sgnifica que a conexão foi bem sucedida e que o programa pode continuar,
então, o handle sql que foi conectado em hSql é atribuído a prhSql e a janela de login é
encerrada pela função SalEndDialog, tendo como o seu segundo parâmetro o valor
TRUE, indicando o sucesso da operação de login.
 No código do evento SAM_Click no botão pbCancelar, a janela de login é encerrada
pela função SalEndDialog, tendo como o seu segundo parâmetro o valor FALSE,
indicando que o usuário cancelou a operação de login.
 Observe que o botão pbCancelar foi configurado de forma que, a qualquer momento
que o usuário pressionar a tecla ESC, o código deste objeto é acionado. Isso é feito
através do atributo Keyboard Accelerator, e pode ser configurado através do
Customizer ou do Attribute Inspector.
 Para obter maiores informações a respeito da utilização das funções do Centura,
consulte o apêndice F, Guia de Referência das Funções SAL.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Menu Principal.

O Menu Principal é a janela de onde todas as funções do sistema são acionadas, é onde
todos os menus estão definidos. Usaremos uma janela tipo MDI Window que é a mais
apropriada para esta função, pois, possui a Interface de Múltiplos Documentos ( Multiple
Document Interface ) permitindo que várias janelas sejam administradas pela janela MDI.

Esta janela possui o seguinte comportamento : Somente após o sucesso no login ( que foi
programado no exemplo anterior ), o mdiPrincipal deverá ser mostrado. Em seguida, todos
os menus devem ser disponibilizados para o usuário. Assim que o usuário escolher uma
função num dos menus, a janela correspondente deve ser acionada.

Observe abaixo, o código completo do mdiPrincipal.

MDI Window: mdiPrincipal


Description:
Named Menus
Menu
Popup Menu: Cadastros
Menu Item: Empresas
Status Text: Ativa a tela de manutenção de Empresas.
Menu Settings
Enabled when: NOT SalFindWindow ( hWndMDI , "frmEmpresa" )
Menu Actions
Call SalCreateWindow( frmEmpresa, hWndMDI )
Menu Item: Contatos
Status Text: Ativa a tela de manutenção de Contatos.
Menu Settings
Enabled when: NOT SalFindWindow ( hWndMDI , "frmContato" )
Menu Actions
Call SalCreateWindow( frmContato, hWndMDI )
Menu Separator
Menu Item: Faturas
Status Text: Ativa a tela de manutenção de Faturas.
Menu Settings
Enabled when: NOT SalFindWindow ( hWndMDI , "frmFaturas" )

Página PAGE 582


Programando com o Centura Team Developer 2000

Menu Actions
Call SalCreateWindow( frmFaturas , hWndMDI )
Menu Separator
Menu Item: Sair
Status Text: Sair do sistema.
Menu Actions
Call SalSendMsg( hWndMDI , SAM_Close , wParam ,lParam )
Tool Bar
Contents
Functions
Window Parameters
Window Variables
Message Actions
On SAM_Create
If NOT SalModalDialog( dlgLogin , hWndMDI , hSql )
Call SalQuit( )

Depurando

 Inicialmente, observe o evento SAM_Create no Message Action do mdiPrincipal, esta


parte do código é a primeira a ser executada pela aplicação. Neste momento está sendo
feita uma chamada ao dialog box dlgLogin, que foi definido no exemplo anterior.
Conforme as definições lá feitas, observe que, se o dialog box retornar FALSE, a
aplicação é encerrada através da função SalQuit.
 Observe o menu Empresas, a seção Enable When, tem a finalidade de habilitar ou não
o menu Empresas, de acordo com um valor lógico que será avaliado ali. Neste
exemplo, a função SalFindWindow se encarrega de fazer a verificação da existência de
alguma janela com o nome informado e que ainda esteja aberta, caso encontre,
retornará TRUE, fazendo com que o menu não fique habilitado para o usuário. Este é
um bom exemplo de como fazer para não permitir que a mesma janela seja acionada
duas vezes, podendo vir a causar problemas para a aplicação.
 Ainda no menu Empresas, a seção Menu Actions contém todo o código a ser executado
quando o usuário acionar o menu. Neste caso, a janela frmEmpresa é criada através do
uso da função SalCreateWindow. Todos os comandos do Centura podem ser utilizados
num Menu Actions, exceto o comando On, que captura eventos ocorridos no sistema.
 Para obter maiores informações a respeito da utilização das funções do Centura,
consulte o apêndice F, Guia de Referência das Funções SAL.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Form de manutenção na tabela de empresas

Esta tela de manutenção realiza as funções de consultar, imprimir, incluir, alterar e excluir
informações da tabela de empresa ( tabela COMPANY ) . De uma forma simples e rápida
procuraremos mostrar como é possível fazer isso, utilizando a linguagem SAL. Um
conhecimento básico de linguagem padrão SQL é necessário agora para os comandos
Select, Insert, Update e Delete.

Consulte o Capítulo 3 – Acesso ao SQLBase, para maiores informações.

Esta janela é chamada pelo mdiPrincipal quando o usuário ativa o menu Empresas.

Esta tela possui o seguinte comportamento : Inicialmente, o usuário pode realizar uma
consulta. Caso saiba o código da empresa a ser consultada, basta digitar este código no
campo “Código” ( dfCOMPANY_ID ) e então clicar no botão “Procurar” ( pbPROCURAR
). Feito isso, os dados da empresa serão mostrados na tela. Utilizando os botões da barra de
ferramentas, o usuário pode visualizar o primeiro registro com muita facilidade, para tanto
basta clicar no botão identificado pelo símbolo “|<” ( pbPRIMEIRO ). Para ver o último
registro, é só clicar no botão com o símbolo “>|” ( pbULTIMO ). Dessa forma, fica bastante
fácil a navegação através de todos os registros da tabela. Nesse momento, o usuário pode
alterar os campos que julgar necessário e então clicar no botão “Gravar” ( pbGRAVAR ) .
Assim é possível incluir uma nova empresa, o usuário necessita apenas preencher os
campos e acionar o botão “Gravar”. O Botão “Gravar” distingue o momento correto de
executar uma inclusão ou uma alteração. Para excluir uma empresa, basta fazer uma
consulta, localizar a empresa desejada e clicar no botão “Excluir” ( pbEXCLUIR ).
Neste exemplo, a impressão do relatório não tem nenhum relacionamento com os dados
que estiverem sendo mostrados no momento. O relatório é impresso sempre com todas as
empresas existentes no cadastro.

Página PAGE 582


Programando com o Centura Team Developer 2000

Observe abaixo, o código fonte completo desta tela :

Form Window: frmEmpresa


Accesories Enabled? Yes
Display Settings
Automatically Created at Runtime? No
Tool Bar
Contents
Pushbutton: pbPRIMEIRO
Message Actions
On SAM_Click
If nTotalLinhas < 2
Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok )
Else
Call SqlFetchRow( hSqlEmpresa , 0, lParam )
Pushbutton: pbANTERIOR
Message Actions
On SAM_Click
If nTotalLinhas < 2
Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok )
Else
Call SqlFetchPrevious( hSqlEmpresa , lParam )
Pushbutton: pbPROXIMO
Message Actions
On SAM_Click
If nTotalLinhas < 2
Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok )
Else
Call SqlFetchNext( hSqlEmpresa , lParam )
Pushbutton: pbULTIMO
Message Actions
On SAM_Click
If nTotalLinhas < 2
Call SalMessageBox( MSG_ErrNAV , "Err", MB_Ok )
Else
Call SqlFetchRow( hSqlEmpresa , nTotalLinhas-1, lParam )
Contents
Background Text: Código
Data Field: dfCOMPANY_ID
Data
Maximum Data Length: 3
Data Type: Number
Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Call SalEnableWindow( hWndItem )
Background Text: Nome
Data Field: dfCOMPANY_NAME
Data
Maximum Data Length: 30
Data Type: String
Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Background Text: Endereço
Data Field: dfADDRESS
Data
Maximum Data Length: 50
Data Type: String
Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Background Text: Telefone
Data Field: dfPHONE
Data
Maximum Data Length: 20
Data Type: String
Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Background Text: Cidade
Data Field: dfCITY
Data
Maximum Data Length: 30
Página PAGE 582
Programando com o Centura Team Developer 2000

Data Type: String


Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Background Text: Estado
Data Field: dfSTATE
Data
Maximum Data Length: 30
Data Type: String
Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Background Text: País
Data Field: dfCOUNTRY
Data
Maximum Data Length: 30
Data Type: String
Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Background Text: Web Site
Data Field: dfCORPORATE_URL
Data
Maximum Data Length: 128
Data Type: String
Message Actions
On PAM_Limpa
Call SalClearField( hWndItem )
Pushbutton: pbLIMPAR
Title: Limpar
Message Actions
On SAM_Click
Call SalSendMsgToChildren( hWndForm, PAM_Limpa, 0, 0 )
Set nTotalLinhas = 0
Pushbutton: pbGRAVAR
Message Actions
On SAM_Click
If SalIsWindowEnabled( dfCOMPANY_ID )
Call SqlPrepareAndExecute( hSqlEmpresa, sSqlInsert )
Else
Call SqlPrepareAndExecute( hSqlEmpresa, sSqlUpdate )
Call SqlCommit( hSqlEmpresa )
Call SalSendMsg( pbLIMPAR , SAM_Click, 0, 0 )
Pushbutton: pbEXCLUIR
Message Actions
On SAM_Click
If NOT SalIsWindowEnabled( dfCOMPANY_ID )
If IDYES = SalMessageBox( "Confirma a exclusão do registro", "Exclusão", MB_YesNo )
Call SqlPrepareAndExecute( hSqlEmpresa, sSqlDelete )
Call SqlCommit( hSqlEmpresa )
Call SalSendMsg( pbLIMPAR , SAM_Click, 0, 0 )
Pushbutton: pbPROCURAR
Message Actions
On SAM_Click
If NOT SalIsNull( dfCOMPANY_ID )
Set sWhere = " WHERE COMPANY.COMPANY_ID = :frmEmpresa.dfCOMPANY_ID "
Else
Set sWhere = STRING_Null
Call SqlPrepareAndExecute( hSqlEmpresa , sSqlSelect || sWhere || " ORDER BY COMPANY_ID " )
If SqlFetchNext( hSqlEmpresa , lParam )
Call SqlGetResultSetCount( hSqlEmpresa, nTotalLinhas )
Call SalDisableWindow( dfCOMPANY_ID )
Else
Set nTotalLinhas = 0
Pushbutton: pbIMPRIMIR
Message Actions
On SAM_Click
Call SalReportView( hWndForm, hWndNULL, "company.qrp",
"address, city, company_id, company_name, url, country, phone, state" ,
"address, city, company_id, company_name, url, country, phone, state" , lParam )
Pushbutton: pbCANCELAR
Message Actions
On SAM_Click
Call SalSendMsg( hWndForm , SAM_Close , 0, 0 )
Functions
Página PAGE 582
Programando com o Centura Team Developer 2000

Window Parameters
Window Variables
String: sWhere
String: sSqlSelect
String: sSqlInsert
String: sSqlUpdate
String: sSqlDelete
!
Sql Handle: hSqlEmpresa
Number: nTotalLinhas
!
String: address
String: city
Number: company_id
String: company_name
String: url
String: country
String: phone
String: state
Message Actions
On SAM_Create
Set nTotalLinhas = 0
Set sSqlSelect = "
SELECT ADDRESS , CITY ,
COMPANY_ID , COMPANY_NAME ,
CORPORATE_URL , COUNTRY ,
PHONE , STATE
INTO
:frmEmpresa.dfADDRESS , :frmEmpresa.dfCITY ,
:frmEmpresa.dfCOMPANY_ID , :frmEmpresa.dfCOMPANY_NAME ,
:frmEmpresa.dfCORPORATE_URL , :frmEmpresa.dfCOUNTRY ,
:frmEmpresa.dfPHONE , :frmEmpresa.dfSTATE
FROM COMPANY "
Set sSqlInsert = "
INSERT INTO COMPANY (
ADDRESS , CITY ,
COMPANY_ID , COMPANY_NAME ,
CORPORATE_URL , COUNTRY ,
PHONE , STATE )
VALUES (
:frmEmpresa.dfADDRESS , :frmEmpresa.dfCITY ,
:frmEmpresa.dfCOMPANY_ID , :frmEmpresa.dfCOMPANY_NAME ,
:frmEmpresa.dfCORPORATE_URL , :frmEmpresa.dfCOUNTRY ,
:frmEmpresa.dfPHONE , :frmEmpresa.dfSTATE ) "
Set sSqlUpdate = "UPDATE COMPANY SET
ADDRESS = :frmEmpresa.dfADDRESS ,
CITY = :frmEmpresa.dfCITY ,
COMPANY_NAME = :frmEmpresa.dfCOMPANY_NAME ,
CORPORATE_URL = :frmEmpresa.dfCORPORATE_URL ,
COUNTRY = :frmEmpresa.dfCOUNTRY ,
PHONE = :frmEmpresa.dfPHONE ,
STATE = :frmEmpresa.dfSTATE
WHERE COMPANY_ID = :frmEmpresa.dfCOMPANY_ID"
Set sSqlDelete = "DELETE FROM COMPANY WHERE COMPANY_ID = :frmEmpresa.dfCOMPANY_ID"
Call SqlConnect( hSqlEmpresa )
On SAM_ReportStart
Call SqlPrepare( hSqlEmpresa,
" SELECT
ADDRESS , CITY , COMPANY_ID , COMPANY_NAME ,
CORPORATE_URL , COUNTRY , PHONE , STATE
INTO
:address, :city, :company_id, :company_name,
:url , :country , :phone , :state
FROM COMPANY
ORDER BY COMPANY_ID " )
On SAM_ReportFetchInit
Return SqlExecute( hSqlEmpresa )
On SAM_ReportFetchNext
Return SqlFetchNext( hSqlEmpresa , lParam )

Depurando

Página PAGE 582


Programando com o Centura Team Developer 2000

 Observe as variáveis definidas neste form na seção Window Variables. Através da


variável sWhere, demonstramos a utilização de uma pesquisa onde a condição só é
conhecida quando em tempo de execução. A variável sWhere é usada para montar a
condição da busca de empresa. As demais variáveis, sSqlSelect, sSqlInsert, sSqlUpdate
e sSqlDelete são utilizadas para armazenar os comandos SQL Select, Insert, Update e
Delete. A utilização destas variáveis pode ser observada no evento SAM_Create do
form frmEmpresa, onde os comandos são atribuídos às variáveis e, posteriormente, nos
botões pbGRAVAR e pbEXCLUIR, onde os comandos são efetivamente utilizados,
junto ao banco de dados. Para a utilzação de todos os comandos sql desta janela, foi
definido o handle de conexão chamado hSqlEmpresa. A variável nTotalLinhas serve
para o controle da navegação nos registros pesquisados. As demais variáveis (address,
city, company_id, company_name, url, country, phone e state ) são utilizadas para a
emissão do relatório das empresas. Sua utilização se faz visível junto ao evento
SAM_ReportStart.
 Observe que o form window frmEmpresa foi configurado de forma a não ser criado
automaticamente, através da propriedade Automatically Created at Runtime, que pode
ser configurada no Customizer ou no Attribute Inspector.
 Neste exemplo é utilizado botões na barra de ferramentas do form window
frmEmpresa, portanto, observe o código da seção Contents da Tool Bar deste form
window. Todos os botões da tool bar possuem um código bastante parecido, onde
basicamente é feita uma verificação para saber se a navegação pode ser realizada e,
caso positivo, é feita uma chamada à função SqlFetchRow para que a navegação seja
efetivada. Caso a navegação não seja possível, é mostrada ao usuário uma mensagem
de alerta explicando o problema, através da função SalMessageBox. Observe que na
utilização desta função é usada uma constante do usuário chamada MSG_ErrNAV, que
foi definida na seção Constants, no Global Declarations. Foi utilizada esta técnica para
demonstrar uma maneira de padronizar todas as mensagens de erro de navegação.
 Estando na seção Constants, observe a definição de uma outra constante chamada
PAM_Limpa. Esta constante é utilizada em todos os data fields para capturar o evento
gerado pelo usuário para que os campos da janela sejam limpos, permitindo nova
digitação.
 Observe o Message Actions do data field dfCOMPANY_ID. O evento PAM_Limpa é
capturado e a ação tomada é a de limpar o conteúdo do objeto, a função SalClearField
faz isso. A próxima função chamada é SalEnableWindow, que disponibiliza o objeto
para a utilização do usuário. Este procedimento é feito todas as vezes em que o data
field dfCOMPANY_ID precise ser reiniciado.
 Os data fields restantes seguem o mesmo padrão quanto ao evento PAM_Limpa. Ou
seja, fazem uma chamada a função SalClearField para que o seu conteúdo seja limpo.
 Observe que os objetos ( data fields ) os quais recebem os dados digitados pelo usuário,
estão configurados conforme a definição da tabela no banco de dados, no que diz
respeito aos tipos de dados e aos tamanhos dos campos.
 O evento SAM_Click no Message Actions do push button pbLIMPAR envia a
mensagem PAM_Limpa ( utilizando a função SalSendMsgToChildren ) para todos os
“objetos filhos” do objeto identificado pelo handle hWndForm, que, neste caso, refere-
se ao frmEmpresa. Este é o procedimento mais recomendado, de forma que, cada
objeto filho implemente seu próprio método PAM_Limpa. Observe que o contador de
linhas também é iniciado.
 Já o push button pbGRAVAR, identifica se a operação a ser executada é uma inclusão
ou alteração, baseando-se no estado do objeto dfCOMPANY_ID. Se este objeto estiver
Página PAGE 582
Programando com o Centura Team Developer 2000

habilitado, significa que o usuário teve condições de digitar alguma informação neste
objeto e , então , acionar o botão de gravação. Quando isso acontece, deve ser realizada
uma inclusão. A alteração sempre é realizada após uma pesquisa, e, como está
codificado no pbPROCURAR, assim que uma pesquisa é realizada, o objeto
dfCOMPANY_ID é desabilitado. A função SqlPrepareAndExecute prepara e executa os
comandos Insert ou Update ( dependendo do caso ) para os dados que estão nos data
fields. A função SqlCommit encerra a transação. Logo em seguida, é enviado ao botão
pbLIMPAR o evento SAM_Click, simulando um click com o mouse no objeto, para que
os campos da janela sejam reiniciados.
 O push button pbEXCLUIR só pode ser utilizado após uma consulta, pois, só é possível
excluir uma empresa que já encontra-se cadastrada no banco de dados. Por isso, a
crítica feita é saber se o objeto dfCOMPANY_ID está habilitado, se não estiver,
significa que foi realizada uma consulta, podendo então ser excluída alguma empresa.
Mesmo após essa crítica, ainda é solicitada a confirmação do usuário. Logo em
seguida, é enviado ao botão pbLIMPAR o evento SAM_Click, para que os campos da
janela sejam reiniciados.
 O push button pbPROCURAR é o responsável por buscar os dados no banco de dados e
mostrá-los nos data fields. Para isso, é feita uma crítica, com o intuito de saber se o
usuário informou o código de alguma empresa ou se o usuário quer consultar todas as
empresas, iniciando a navegação até encontrar a desejada. Essa crítica é feita com o
auxílio da função SalIsNull. Observe que o comando where é montado apenas se foi
informado alguma empresa. A função SqlPrepareAndExecute executa o comando
montado, e a função SqlFetchNext traz a primeira linha retornada no comando select
executado, mostrando os dados nos data fields. Se SqlFetchNext retornar FALSE,
significa que nenhuma linha foi encontrada com a condição especificada, então, a
variável nTotalLinhas é zerada. A função SqlGetResultSetCount obtém o número total
de linhas retornados pelo select executado, para controle da navegação dos registros.
Então, a função SalDisableWindow desabilita o objeto dfCOMPANY_ID. Isso é muito
importante para o restante da aplicação, pois, é baseado neste status do
dfCOMPANY_ID que os push buttons pbGRAVAR e pbEXCLUIR são ou não
executados.
 No message actions do push button pbIMPRIMIR está o código responsável por ativar
o preview de uma listagem do cadastro de empresas.
 O push button pbCANCELAR envia uma mensagem de SAM_Close para o form, para
que este form window seja encerrado, e então o controle da aplicação passe para o
mdiPrincipal.
 Observe o evento SAM_ReportStart no Message Actions do frmEmpresa. Este evento é
enviado para a aplicação pelo Report Builder e é capturado quando o relatório está
pronto para ser formatado, ao ser iniciado. Neste momento, o comando select
responsável por capturar os dados da tabela de empresas é preparado. Quando o evento
SAM_ReportFetchInit é capturado pela aplicação, o comando sql foi preparado no
evento anterior é executado. Todas as linhas do relatório são transportadas do banco de
dados ao relatório no evento SAM_ReportFetchNext. Se a aplicação retornar FALSE,
no evento SAM_ReportFetchInit ou no SAM_ReportFetchNext , o relatório é encerrado.
 Para obter maiores informações a respeito da utilização das funções do Centura,
consulte o apêndice F, Guia de Referência das Funções SAL.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Form de manutenção na tabela de contatos

Nesta tela é mostrada a utilização do objeto top level table window para imprimir, incluir,
alterar e excluir informações na tabela de contatos. Neste exemplo, usaremos o objeto top-
level table window, onde os dados são trabalhados na forma de planilha. Assim, pode-se
facilmente trabalhar com vários registros simultaneamente. É possível incluir registros,
alterar e excluir “ao mesmo tempo”.

A table window é um objeto bastante poderoso e complexo, conforme demonstramos nos


recursos básicos. As informações são trazidas do banco de dados e mostradas na forma
tabular, onde cada coluna visual representa uma coluna do banco de dados, ou um campo.
Cada linha da table window refere-se a uma linha da tabela no banco de dados, ou, um
registro. O encontro de uma linha numa determinada coluna recebe o nome de célula. Esta
célula possui praticamente o mesmo comportamento de um data field, podendo inclusive
assumir o comportamento de um combo box, multiline field ou check box, além do
comportamento de data field.

Na lateral esquerda de cada linha da table window existe uma coluna cinza, não editável.
Esta coluna chama-se row header e normalmente é utilizada para servir de sinalizador do
status da linha da table window. É no row header que é mostrado os flags da linha.

Consulte o Capítulo 2 para obter maiores detalhes sobre a table window, seus flags e
atributos.

O comportamento desta tela é parecido com a tela de Empresas, porém, não existe a
consulta, já que os dados são mostrados todos na table window. Um outro recurso
interessante que é demonstrado é a utilização da coluna Empresa ( colCOMPANY_NAME
), que foi programada e tem o comportamento similar ao objeto combo box.

Observe o código fonte :

Table Window: frmContatos


Display Settings
Initial State: Maximized
Description:

Página PAGE 582


Programando com o Centura Team Developer 2000

Named Menus
Menu
Tool Bar
Contents
Pushbutton: pbNOVALINHA
Message Actions
On SAM_Click
Call fNovaLinha( )
Pushbutton: pbATUALIZAR
Message Actions
On SAM_Click
Call SqlPrepare( hSqlContatos, "
INSERT INTO CONTACT (
CONTACT.COMPANY_ID , CONTACT.CONT_EMAIL ,
CONTACT.CONT_FAX , CONTACT.CONT_FIRST_NAME ,
CONTACT.CONT_LAST_NAME , CONTACT.CONT_PHONE ,
CONTACT.CONT_TITLE , CONTACT.CONTACT_ID )
VALUES (
:frmContatos.colCOMPANY_ID , :frmContatos.colCONT_EMAIL ,
:frmContatos.colCONT_FAX , :frmContatos.colCONT_FIRST_NAME ,
:frmContatos.colCONT_LAST_NAME , :frmContatos.colCONT_PHONE ,
:frmContatos.colCONT_TITLE , :frmContatos.colCONTACT_ID ) " )
Call SalTblDoInserts( hWndForm , hSqlContatos, TRUE )
!
Call SqlPrepare( hSqlContatos, "
UPDATE CONTACT SET
CONTACT.COMPANY_ID = :frmContatos.colCOMPANY_ID ,
CONTACT.CONT_EMAIL = :frmContatos.colCONT_EMAIL ,
CONTACT.CONT_FAX = :frmContatos.colCONT_FAX ,
CONTACT.CONT_FIRST_NAME = :frmContatos.colCONT_FIRST_NAME ,
CONTACT.CONT_LAST_NAME = :frmContatos.colCONT_LAST_NAME ,
CONTACT.CONT_PHONE = :frmContatos.colCONT_PHONE ,
CONTACT.CONT_TITLE = :frmContatos.colCONT_TITLE
WHERE
CONTACT.CONTACT_ID = :frmContatos.colCONTACT_ID " )
Call SalTblDoUpdates( hWndForm , hSqlContatos, TRUE )
!
Call SqlPrepare( hSqlContatos, "DELETE FROM CONTACT
WHERE CONTACT.CONTACT_ID = :frmContatos.colCONTACT_ID" )
Call SalTblDoDeletes( hWndForm, hSqlContatos, ROW_MarkDeleted )
Call fPopulate( )
Pushbutton: pbIMPRIMIR
Message Actions
On SAM_Click
Call SalShowWindow( colCOMPANY_ID )
Call SalReportTableView( hWndForm , hWndNULL , "contatos.qrp", lParam )
Call SalHideWindow( colCOMPANY_ID )
Pushbutton: pbCANCELAR
Message Actions
On SAM_Click
Call SalSendMsg( hWndForm , SAM_Close , 0, 0 )
Contents
Column: colCOMPANY_ID
Column: colCONTACT_ID
Title: Código Contato
Maximum Data Length: 18
Column: colCONT_FIRST_NAME
Title: Primeiro Nome
Maximum Data Length: 18
Column: colCONT_LAST_NAME
Title: Último Nome
Maximum Data Length: 18
Column: colCOMPANY_NAME
Title: Empresa
Maximum Data Length: 30
Cell Options
Cell Type? Drop Down List
List Values
Message Actions
On SAM_Create
Call SalListPopulate( hWndItem , hSql , "SELECT COMPANY_NAME FROM COMPANY " )
On SAM_AnyEdit
Call SqlPrepareAndExecute( hSql , " SELECT COMPANY_ID FROM COMPANY
INTO :frmContatos.colCOMPANY_ID WHERE COMPANY_NAME = :MyValue " )
Call SqlFetchNext( hSql , lParam )
Página PAGE 582
Programando com o Centura Team Developer 2000

Column: colCONT_EMAIL
Title: e-mail
Maximum Data Length: 64
Column: colCONT_TITLE
Title: Cargo
Maximum Data Length: 18
Column: colCONT_PHONE
Title: Telefone
Maximum Data Length: 18
Column: colCONT_FAX
Title: Num Fax
Maximum Data Length: 18
Functions
Function: fNovaLinha
Description:
Returns
Parameters
Static Variables
Local variables
Actions
Call SalTblSetFocusCell( hWndForm,SalTblInsertRow( hWndForm,TBL_MaxRow),colCONTACT_ID, -1, -1)
Function: fPopulate
Description:
Returns
Parameters
Static Variables
Local variables
Actions
Call SalTblPopulate( hWndForm , hSqlContatos, "
SELECT
CONTACT.COMPANY_ID ,
CONTACT.CONT_EMAIL ,
CONTACT.CONT_FAX ,
CONTACT.CONT_FIRST_NAME ,
CONTACT.CONT_LAST_NAME ,
CONTACT.CONT_PHONE ,
CONTACT.CONT_TITLE ,
CONTACT.CONTACT_ID ,
COMPANY.COMPANY_NAME
INTO
:frmContatos.colCOMPANY_ID ,
:frmContatos.colCONT_EMAIL ,
:frmContatos.colCONT_FAX ,
:frmContatos.colCONT_FIRST_NAME ,
:frmContatos.colCONT_LAST_NAME ,
:frmContatos.colCONT_PHONE ,
:frmContatos.colCONT_TITLE ,
:frmContatos.colCONTACT_ID ,
:frmContatos.colCOMPANY_NAME
FROM CONTACT , COMPANY
WHERE
CONTACT.COMPANY_ID = COMPANY.COMPANY_ID ", TBL_FillAll )
Window Parameters
Window Variables
Sql Handle: hSqlContatos
Message Actions
On SAM_Create
Call SqlConnect( hSqlContatos )
Call fPopulate( )
On SAM_RowHeaderDoubleClick
Call SalTblSetRowFlags( hWndForm , lParam , ROW_MarkDeleted, TRUE )
On SAM_RowHeaderClick
Call SalTblSetRowFlags( hWndForm , lParam , ROW_MarkDeleted, FALSE )

Página PAGE 582


Programando com o Centura Team Developer 2000

Depurando

 Observe a única variável definida na seção Window Variables deste form. Apenas uma
variável tipo sql handle ( hSqlContatos ) é utilizada para realizar todas as operações de
pesquisa e manutenção na tabela. Esta variável é conectada ao banco de dados no
evento SAM_Create do form.
 No evento SAM_Create do form é feita a conexão com o banco de dados utilizando
uma função chamada fPopulate. Esta função não faz parte das funções pré-definidas
pelo Centura, trata-se de uma função de usuário. Sua finalidade é carregar os dados da
tabela do banco de dados para a table window.
 Observe o código da função fPopulate, definida na seção Functions do top-level table
window frmContatos. A função SalTblPopulate executa o comando select e carrega os
dados retornados na table window.
 Uma outra função de usuário é utilizada, a qual encontra-se definida na mesma seção
Functions deste form. É a função fNovaLinha, que insere uma nova linha na table
window e posiciona o cursor de edição na coluna colCONTACT_ID, para que o
usuário inicie a digitação das informações da nova linha.
 Ainda no Message Actions do do top-level table window frmContatos, observe o
código dos eventos SAM_RowHeaderClick, que desliga o flag de linha marcada para
ser excluída, e o evento SAM_RowHeaderDoubleClick, onde a linha é então marcada
para exclusão. Essa ação de marcar/desmarcar a linha é efetuada pela função
SalTblSetRowFlags.
 Na seção Contents estão definidas as colunas desta table window. Observe que para
cada coluna foi configurado um tamanho máximo limitando que sejam digitadas
informações maiores do que a capacidade das colunas da tabela no banco de dados.
 A coluna colCOMPANY_NAME possui uma característica especial, assumindo o
comportamento de um combo box, que é configurado através do customizer ou do
attribute inspector. Observe o seu Message Actions. No evento SAM_Create, através
da função SalListPopulate, o Centura carrega para a coluna os nomes das empresas da
table COMPANY. O evento SAM_AnyEdit é utilizado para capturar o momento em
que o usuário escolhe uma das empresas na lista. Neste momento, é recuperado da
tabela o código da empresa escolhida, e este é armazenado na coluna
colCOMPANY_ID. Observe a utilização da variável de sistema chamada MyValue,
que neste caso representa o texto escolhido na porção combo box da coluna.
 O restante do código do programa está na seção Tool Bar. Observe que o push button
pbNOVALINHA apenas faz uma chamada à função fNovaLinha. No evento
SAM_Click do push button pbATUALIZAR são executados os comandos insert,
update e delete, da forma mais simples a ser implementada no Centura, utilizando-se as
funções SalTblDoInserts, SalTblDoUpdates e SalTblDoDeletes, que procuram na table
window alguma linha marcada com os flags de inclusão, alteração e exclusão. Assim,
pode-se efetuar a devida operação na tabela do banco de dados.
 O push button pbIMPRIMIR ativa o preview do relatório, fazendo uso da função
SalReportTableView. Observe que a coluna colCOMPANY_ID é mostrada
(SalShowWindow) antes da chamada do preview do relatório, e escondida
(SalHideWindow) logo após. Isso é feito, pois a função SalReportTableView só leva
para o relatório as colunas visíveis da table window. Essa operação é rápida o
suficiente para que o usuário não perceba visualmente o ocorrido.
 Para obter maiores informações a respeito da utilização das funções do Centura,
consulte o apêndice F, Guia de Referência das Funções SAL.
Página PAGE 582
Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Construindo um Álbum de fotografias

No exemplo que se segue demonstramos vários recursos do SQLWindows/32 numa aplicação bastante
simples e curiosa, um Álbum de fotografias. Neste álbum, as fotografias são armazenadas numa base de
dados SQL, mais especificamente, utilizando uma base Centura SQLBase.

Este exemplo é composto de três janelas, sendo que, duas delas são do tipo dialog box e uma do tipo form
window. Na figura abaixo, pode ser observada a janela principal do álbum de fotografias.

Janela principal do Álbum de Fotografias.

Através desta janela, é possível visualizar as diversas categorias de fotografias que já foram cadastradas no
banco de dados. Assim que uma categoria é escolhida, no list box ‘Categoria’, os nomes das fotografias nela
cadastradas são listados no list box ‘Imagens’. Quando o usuário clica no nome da fotografia, a imagem
correspondente é mostrada logo abaixo, no objeto picture.

A qualquer momento podem ser acrescentadas novas categorias às já existentes. Essa função é acionada
através do botão chamado ‘Nova...’, localizado logo acima do list box ‘Categoria’, onde são mostrados os
nomes das categorias cadastradas. A janela onde as categorias são inseridas, é mostrada na figura abaixo :

Página PAGE 582


Programando com o Centura Team Developer 2000

Janela de cadastramento de novas categorias.

A janela de inclusão de categorias é extremamente simples, possui um list box, onde são
apresentados os nomes das categorias que já estão cadastradas na base de dados, e um data
field para digitação do nome da nova categoria.

O cadastramento das imagens é feito através da janela mostrada na figura abaixo.

Janela de escolha de novas imagens.

Esta janela apresenta alguns recursos interessantes e bem fáceis de serem utilizados.
Logo de início, o combo box ‘Drive’, que é um combo especial, mostra de forma automática todos os drives
disponíveis. Este combo box é um dos objetos da biblioteca de classes Visual Toolchest, que acompanha o
CTD.
O list box ‘Diretório’, também um objeto da Visual Toolchest, apresenta um
comportamento já bem familiar ao ambiente Windows, onde é permitido navegar entre os
diretórios do drive escolhido no combo box ‘Drive’.
Assim que o diretório é escolhido, os nomes dos arquivos são mostrados no list box abaixo, conforme o tipo
de imagem escolhido no combo box ‘Tipo de Imagem’. Quando o usuário clica no nome de um arquivo, a
imagem correspondente a este arquivo é visualizada ao lado direito, num objeto picture.
Quando o usuário desejar incluir no banco de dados a imagem mostrada, basta clicar no
botão ‘Incluir’.

Para que este exemplo funcione corretamente, são necessários dois pré-requisitos básicos :

1 – A biblioteca de classes Visual Toolchest deve estar disponível. Caso não esteja, você
precisa instalar corretamente o CTD, para isso, siga as instruções descritas no Apêndice F -
Guia de Instalação do Centura Team Developer 2000.

Página PAGE 582


Programando com o Centura Team Developer 2000

2 – As tabelas utilizadas neste exemplo precisam existir no banco de dados. Do contrário,


você deve executar o programa dbAlbum.app, o qual se encontra disponivel para download
no site http://www.centuraexplorer.com.br/livro_ctd2000/ .

Obs : O programa fonte deste exemplo, ‘Album.app’, também pode ser encontrado no site.
Para programar este exemplo, é necessário informar ao Centura SQLWindows/32 que você deseja utilizar a
biblioteca de classes Visual Toolchest. Essa informação deve estar na seção do outline chamada Libraries.
Para entrar com essa informação, siga os seguintes passos :

1 – Inicie uma nova aplicação clicando no botão ‘New’.


2 – No quadro do lado esquerdo do Centura SQLWindows/32, a árvore dos componentes da aplicação, clique
uma vez no primeiro elemento da árvore, chamado ‘Application1’.
3 – Agora, no quadro direito do Centura SQLWindows/32, onde é mostrado o outline, clique na tab inferior
chamada ‘Libraries’. Isto fará com que apenas a seção Libraries seja mostrada no outline.
A janela do Centura SQLWindows/32 deve estar conforme mostrada na figura abaixo :

Janela do Centura SQLWindows/32, mostrando uma aplicação nova.

4 – No outline, clique na seção ‘Libraries’ com o botão direito do mouse, fazendo com que o menu de
contexto para o item ‘Libraries’ seja mostrado.
5 – No menu de contexto, apenas posicione o mouse sobre a opção chamada ‘Add Next Level’. Isso fará com
que um novo menu seja mostrado. Neste menu, aparecem os nomes das bibliotecas que podem ser
adicionadas ao seu programa. Escolha, então, a opção chamada ‘Visual Toolchest’. Isto fará com que a
biblioteca chamada ‘vt.apl’ seja adicionada ao programa fonte.

Página PAGE 582


Programando com o Centura Team Developer 2000

A biblioteca Visual Toolchest sendo adicionada ao outline.

Observe abaixo, o fonte da janela principal do álbum de fotografias :

Form Window: frmAlbum


Title: Album
Accesories Enabled? Yes
Tool Bar
Contents
Background Text: Categoria
Pushbutton: pbINCLUIR_CATEGORIA
Message Actions
On SAM_Click
If SalModalDialog( dlgINCLUIR_CATEGORIAS , hWndForm )
Call SalSendMsg( lbCATEGORIAS, CEM_Populate, wParam , lParam )
List Box: lbCATEGORIAS
List Initialization
Message Actions
On SAM_Create
Call SalSendMsg( hWndItem, CEM_Populate, wParam , lParam )
On CEM_Populate
Call SalListPopulate( hWndItem , hSql, "SELECT NOME FROM IMG_CATEGORIAS" )
On SAM_Click
Set sItemEscolhido = SalListQueryTextX( hWndItem , SalListQuerySelection( hWndItem ) )
Call SqlPrepareAndExecute( hSql , "SELECT ID_CATEGORIA INTO :nIdCategoria FROM
IMG_CATEGORIAS
WHERE NOME = :sItemEscolhido " )
Call SqlFetchNext( hSql , lParam )
Call SalSendMsg( lbIMAGENS, CEM_Populate, wParam , lParam )
Background Text: Imagens
List Box: lbIMAGENS
Message Actions
On CEM_Populate
Call SalListPopulate( hWndItem , hSql, "SELECT NOME_ARQ FROM FOTOS WHERE
CATEGORIA = :nIdCategoria" )
On SAM_Click
Set sImagem = SalListQueryTextX( hWndItem , SalListQuerySelection( hWndItem ) )
Call SqlPrepareAndExecute( hSql , " SELECT FOTO INTO :lsIMAGEM FROM FOTOS
WHERE NOME_ARQ = :sImagem AND CATEGORIA =
:nIdCategoria " )
If SqlFetchNext( hSql , lParam )
Call SalPicSetString( picIMAGEM , PIC_FormatObject, lsIMAGEM )
Pushbutton: pbEXCLUIR_IMG
Message Actions
On SAM_Click
If IDYES = SalMessageBox( "Deseja realmente excluir a imagem " || sImagem || " ?" ,"Confirma
exclusão", MB_YesNo | MB_IconQuestion)
Call SqlPrepareAndExecute( hSql , " DELETE FROM FOTOS WHERE nome_arq = :sImagem
AND categoria = :nIdCategoria" )
If SqlCommit( hSql )
Call SalSendMsg( lbIMAGENS, CEM_Populate, wParam , lParam )
Página PAGE 582
Programando com o Centura Team Developer 2000

Pushbutton: pbINCLUIR_IMG
Message Actions
On SAM_Click
Call SalModalDialog( dlgINCLUIR_IMAGENS , hWndForm , nIdCategoria )
Call SalSendMsg( lbIMAGENS, CEM_Populate, wParam , lParam )
Contents
Picture: picIMAGEM
Fit: Size for Best Fit
Tile To Parent? Yes
Functions
Window Parameters
Window Variables
String: sItemEscolhido
Number: nIdCategoria
String: sImagem
Long String: lsIMAGEM
Sql Handle: hSql
Message Actions
On SAM_Create
Set SqlDatabase = 'ISLAND'
Call SqlConnect( hSql )
On SAM_Close
Call SqlDisconnect( hSql )

Depurando

 Este form contém cinco variáveis. sItemEscolhido é utilizada no SAM_Click do list


box lbCATEGORIAS, para armazenar o nome da categoria escolhida pelo usuário,
assim como a variável nIdCategoria armazena o código da categoria escolhida. De
forma similar a variável sImagem utilizada no SAM_Click do lbIMAGENS, armazena
o nome do arquivo da imagem que o usuário escolheu,. Ainda neste mesmo evento, a
variável lsIMAGEM serve de intermediária entre a imagem no banco de dados e sua
representação visual ao usuário, através do objeto picIMAGEM. Uma imagem gravada
no banco de dados precisa ser trazida à aplicação numa variável do tipo long string,
para ser então associada a um objeto picture. Isso é feito utilizando-se a função
SalPicSetImagem. A variável hSql é o handle sql conectado ao banco de dados.
 Observe que, o código do botão pbEXCLUIR_IMG faz com que uma caixa de diálogo
padrão do Windows pergunte ao usuário se ele deseja realmente excluir a imagem
selecionada. Esse procedimento sempre é adotado antes das exclusões de informações
no banco de dados. O registro será excluído apenas se o usuário confirmar a exclusão,
clicando no botão ‘Sim’.
 Observe que os botões pbINCLUIR_IMG e pbINCLUIR_CATEGORIA, apenas
ativam a janela de inclusão de imagens e categorias, respectivamente.
 Neste exemplo é utilizado um evento definido pelo programador, chamado
CEM_Populate. Esta definição é feita na seção Constants do Global Declarations. Este
evento permite forçar a carga dos dados no objeto, neste caso, no lbCATEGORIAS e
no lbIMAGENS.
 Para obter maiores informações a respeito da utilização das funções do Centura,
consulte o Apêndice F - Guia de Referência das Funções SAL.

Observe abaixo o fonte da janela onde são incluídas novas categorias :

Dialog Box: dlgINCLUIR_CATEGORIAS


Title: Categorias
Contents
Background Text: Nome da Nova Categoria
Data Field: dfCATEGORIA
Data
Página PAGE 582
Programando com o Centura Team Developer 2000

Maximum Data Length: 40


Data Type: String
Editable? Yes
Background Text: Categorias existentes
List Box: lbCATEGORIAS
Message Actions
On SAM_Create
Call SalListPopulate( hWndItem , hSql, "SELECT NOME FROM IMG_CATEGORIAS" )
Pushbutton: pbOK
Title: OK
Message Actions
On SAM_Click
If fIncluiCategoria ( )
Call SalSendMsg( hWndForm , SAM_Close, 0, 1 )
Else
Call SalSendMsg( hWndForm , SAM_Close, 0, 0 )
Pushbutton: pbCANCELAR
Title: Cancelar
Message Actions
On SAM_Click
Call SalSendMsg( hWndForm , SAM_Close, 0, 0 )
Functions
Function: fIncluiCategoria
Description:
Returns
Boolean:
Parameters
Static Variables
Local variables
Number: nIdCategoria
Actions
If SqlPrepareAndExecute( hSql , "SELECT NOME FROM IMG_CATEGORIAS WHERE NOME =
:dfCATEGORIA" )
If SqlFetchNext( hSql , lParam )
Call SalMessageBox( "Categoria já cadastrada.
Informe um nome diferente.", "Atenção", MB_Ok )
Return FALSE
If SqlPrepareAndExecute( hSql , "SELECT MAX( ID_CATEGORIA ) + 1 INTO :nIdCategoria FROM
IMG_CATEGORIAS" )
If SqlFetchNext( hSql , lParam )
If NOT ( nIdCategoria > 0 )
Set nIdCategoria = 1
If SqlPrepareAndExecute( hSql , "INSERT INTO IMG_CATEGORIAS ( ID_CATEGORIA , NOME )
VALUES ( :nIdCategoria , :dfCATEGORIA ) " )
Return SqlCommit( hSql )
Window Parameters
Window Variables
Sql Handle: hSql
Message Actions
On SAM_Create
Call SqlConnect( hSql )
On SAM_Close
Call SqlDisconnect( hSql )
Call SalEndDialog( hWndForm , lParam )

Depurando

 Neste dialog box é utilizada uma função definida pelo usuário, chamada
fIncluiCategoria. A definição desta função está na seção Functions do dialog box
dlgINCLUIR_CATEGORIAS. Esta função executa basicamente três comandos : O
primeiro comando select verifica se a categoria que o usuário digitou já existe
cadastrada no banco de dados, se existir, mostra uma mensagem ao usuário (categoria
já cadastrada) e não processa o restante do código da função. O segundo comando
obtém o valor máximo armazenado na coluna ID_CATEGORIA e acrescenta um a este
número, que será utilizado na gravação da nova categoria. Dessa forma, cada categoria
possui um número diferente, sequencial e em ordem crescente. O terceiro comando

Página PAGE 582


Programando com o Centura Team Developer 2000

inclui a categoria digitada pelo usuário, com o código obtido no comando anterior, na
tabela IMG_CATEGORIAS.
 Observe que, o código do botão pbOK faz uma crítica ao valor retornado pela função
fIncluiCategoria. Se a função retornar FALSE, significa que a inclusão não foi
realizada com sucesso. Então, é enviada a mensagem SAM_Close para o top level,
fazendo com que a janela seja encerrada. Se a inclusão for bem sucedida, a mesma
mensagem é enviada, porém, o valor do último parâmetro da função SalSendMsg é 1,
ou seja, lParam é igual a 1. Observe que na mensagem SAM_Close do
dlgINCLUIR_CATEGORIAS, a última função utilizada, SalEndDialog, usa a variável
lParam no seu último parâmetro. Ess procedimento faz que a janela principal da
aplicação, o frmAlbum, tome conhecimento do momento em que a inclusão da
categoria foi bem sucedida, para então carregar novamente os dados no list box
lbCATEGORIAS.
 Obtenha maiores informações a respeito da utilização das funções do SQLWindows/32
consultando o Apêndice F - Guia de Referência das Funções SAL.

Observe abaixo o fonte da janela onde são incluídas novas imagens :

Dialog Box: dlgINCLUIR_IMAGENS


Title: Incluir Imagens
Contents
Background Text: Drive
Combo Box: cmbDRIVE
Class: cDriveComboBox
Message Actions
On SAM_Click
Set sDrive = cmbDRIVE.GetSelectedDrive( )
Call SalSendMsg( lbDIR , CEM_Populate, 0, 0 )
Background Text: Diretórios
Background Text: Pré-visualização da imagem
Background Text: Arquivos
List Box: lbDIR
Class: cDirListBox
Message Actions
On CEM_Populate
Call lbDIR.Populate( sDrive )
On VTM_Click
Call SalSendMsg( lbARQUIVOS, CEM_Populate, 0, 0 )
List Box: lbARQUIVOS
Message Actions
On CEM_Populate
Call fCarregaArquivos( )
On SAM_Click
Call SalPicSetFile( picPREVIEW , lbDIR.GetSelectedDir( ) || "\\" || SalListQueryTextX( hWndItem ,
SalListQuerySelection( hWndItem ) ) )
Picture: picPREVIEW
Pushbutton: pbINCLUIR
Message Actions
On SAM_Click
Call fIncluir( )
Pushbutton: pbFECHAR
Message Actions
On SAM_Click
Call SalDestroyWindow( hWndForm )
Background Text: Tipo de Imagem
Combo Box: cmbTIPO
List Initialization
Text: Windows ( *.bmp )
Text: Imagens Gif ( *.gif )
Text: Internet ( *.jpg )
Message Actions
On SAM_Create
Call SalListSetSelect( hWndItem , 0 )
On SAM_Click
Página PAGE 582
Programando com o Centura Team Developer 2000

Call fCarregaArquivos( )
Functions
Function: fCarregaArquivos
Local variables
String: sFiltro
String: asArquivos [*]
Actions
Call SalListClear( lbARQUIVOS )
Set sFiltro = lbDIR.GetSelectedDir( ) || fGetTipoArquivo ( )
Call VisDosEnumFiles( sFiltro , FA_Standard , asArquivos )
Call fCopiaVetorParaLista( asArquivos , lbARQUIVOS )
Function: fGetTipoArquivo
Returns
String:
Actions
If cmbTIPO = "Windows ( *.bmp )"
Return "\\*.bmp"
If cmbTIPO = "Imagens Gif ( *.gif )"
Return "\\*.gif"
If cmbTIPO = "Internet ( *.jpg )"
Return "\\*.jpg"
Function: fIncluir
Local variables
Long String: lsIMAGEM
String: sNomeArq
String: sPathCompleto
Actions
Call SalPicGetString( picPREVIEW, PIC_FormatObject, lsIMAGEM )
Set sPathCompleto = lbDIR.GetSelectedDir( ) || SalListQueryTextX( lbARQUIVOS , SalListQuerySelection(
lbARQUIVOS ) )
Set sNomeArq = SalListQueryTextX( lbARQUIVOS , SalListQuerySelection( lbARQUIVOS ) )
Call SqlPrepareAndExecute( hSql , "INSERT INTO FOTOS
( CATEGORIA , NOME_ARQ, DESC_FOTO , FOTO ) VALUES
( :pnIdCategoria, :sNomeArq, :sPathCompleto , :lsIMAGEM ) " )
If SqlCommit( hSql )
Call SalMessageBox( "Imagem foi incluída com sucesso.", "Inclusão de imagem", MB_Ok )
Window Parameters
Number: pnIdCategoria
Window Variables
String: sCategoria
String: sDrive
Sql Handle: hSql
Message Actions
On SAM_Create
Call SqlConnect( hSql )
Call SqlPrepareAndExecute( hSql , " SELECT NOME INTO :sCategoria FROM IMG_CATEGORIAS WHERE
ID_CATEGORIA = :pnIdCategoria" )
If SqlFetchNext( hSql , lParam )
Call SalSetWindowText( hWndForm , "Escolher imagens a serem incluídas na categoria " || sCategoria )
On SAM_Close
Call SqlDisconnect( hSql )

Depurando

 Observe que este dialog box recebe um parâmetro definido na seção Window
Parameters, chamado pnIdCategoria. Este parâmetro indica a categoria onde as
imagens serão incluídas. O nome da categoria, mostrado na barra de título do dialog
box, através da função SalSetWindowText, é obtido no SAM_Create do dialog box.
 Observe que o cmbDRIVE pertence a uma classe de objetos especial, a classe
cDriveComboBox. Este objeto não possui definições para o evento SAM_Create. As
instruções para este evento encontran-se na classe. Apenas o código do SAM_Click foi
definido na instância, e este obtém a letra do drive escolhido ( através da função
GetSelectedDrive ) enviando a mensagem CEM_Populate para o lbDIR, que mostrará
os diretórios do drive selecionado.

Página PAGE 582


Programando com o Centura Team Developer 2000

 O objeto lbDIR também pertence a uma classe especial, chamada cDirListBox. Nesta
estão codificados os procedimentos para que este objeto comporte-se de forma similar
ao list box de diretórios do Windows. Isso é feito para tornar a utilização do objeto
familiar aos usuários do Windows.
 Observe o código do CEM_Populate do objeto lbARQUIVOS, onde é feita uma
chamada à função fCarregaArquivos, a qual é definida na seção Functions. Nela, são
utilizadas algumas funções da biblioteca Visual Toolchest, entre elas a função
VisDosEnumFiles, que obtém os nomes dos arquivos, de acordo com o filtro
especificado na variável sFiltro. A função fCopiaVetorParaLista é definida pelo
programador, e seu código ( conforme listado abaixo ) está presente na seção Internal
Functions do Global Declarations.
 A cada clique do usuário num dos nomes das imagens, mostrados no lbARQUIVOS, é
executado o código do evento SAM_Click, onde a função SalPicSetFile mostra no
objeto picture o conteúdo de um arquivo de imagem tipo bmp, gif ou jpg.
 Observe a forma como é incluída a imagem no banco de dados, na função fIncluir. A
função SalPicGetString copia a imagem mostrada no objeto picture para a variável
lsIMAGEM, que é gravada no banco de dados.
 Para obter maiores informações a respeito da utilização das funções do
SQLWindows/32, consulte o Apêndice F - Guia de Referência das Funções SAL.

Segue abaixo o código da função fCopiaVetorParaLista :

Function: fCopiaVetorParaLista
Description: Copia todos os elementos de um vetor tipo string para um objeto do tipo list box ou combo box.
Parameters
String: pasVetor [*]
Window Handle: phWndLista
Local variables
Number: nNumElementos
Number: nNumItem
Actions
Call SalArrayGetUpperBound( pasVetor , 1, nNumElementos )
While nNumItem <= nNumElementos
Call SalListAdd( phWndLista , pasVetor [ nNumItem ] )
Set nNumItem = nNumItem + 1

Página PAGE 582


Programando com o Centura Team Developer 2000

O Debug do Centura SQLWindows/32

O debugador do Centura SQLWindows/32 é uma poderosa ferramenta que você tem em


mãos para auxíliá-lo no processo de depurar a aplicação e encontrar possíveis falhas.
Analisando a lógica de execução da aplicação, o conteúdo das variáveis e dos objetos, os
valores de retorno das funções, entre outros recursos que tornam indispensável o
conhecimento do debug. Esta ferramenta é mostrada a seguir.

Para que você possa depurar sua aplicação é necessário que a mesma esteja sendo
executada a partir do Centura SQLWindows/32. Não é possível depurar uma aplicação
sendo executada a partir de um executável.
Mesmo no Centura SQLWindows/32, existem algumas situações onde o depurador não
atua. São elas :

 Funções externas – Estas funções são, geralmente, definidas em arquivos tipo DLL e
EXE, são normalmente geradas através de outros compiladores.
 Dynalibs – Uma dynalib é como uma DLL, o seu código já está compilado e protegido.
 Objetos ActiveX – As funções e eventos destes objetos também são protegidos, não
sendo possível depurá-los. Porém, seus atributos estão acessíveis ao depurador.

O processo de depuração consiste em identificar uma linha no código fonte, onde, a partir desta linha, a
execução do programa poderá ser acompanhada passo-a-passo, assim como os valores dos objetos, variáveis
etc, poderão ser analisados, e até mesmo alterados.

Para identificar a linha de código desejada, você deve clicar nesta linha com o mouse, e marcar a linha como
breakpoint. Então, a linha marcada terá sua cor alterada de modo a ser destacada visualmente das demais
linhas do programa. Estando com uma linha marcada, ative ou desative um breakpoint de uma das seguintes
maneiras :

 pressione a tecla de atalho F9.


 acione o menu de contexto e selecione a opção Toggle Breakpoint.
 acione o menu Debug / Breakpoints / Toggle.

Estes passos podem ser efetuados tanto em modo de execução como em modo de design.

Obs : A linha marcada como breakpoint será destacada das demais linhas do programa, conforme definição
feita na janela de configurações de preferências. O default do Centura SQLWindows/32 é mostrar os
breakpoints na cor vermelha. Você pode alterar este default acionando o menu Tools / Preferences, na área
de configurações chamada Outline.

A barra de ferramentas do debug

Quando o fluxo de execução do programa atingir a linha marcada com o breakpoint, a execução do programa
será interrompida e a janela da aplicação será substituída pela janela do Centura SQLWindows/32, entáo, o
outline é mostrado com a linha marcada com o breakpoint em destaque. Estará disponível neste momento a
barra de ferramentas do debug, onde é possível acionar algumas tarefas, conforme descritas abaixo :

Página PAGE 582


Programando com o Centura Team Developer 2000

As descrições detalhadas de cada ícone da barra de ferramentas do debug.

Continue – Use esta ferramenta para fazer com que o programa continue a ser
executado normalmente, ou seja, sair do modo de depuração. Porém, se o fluxo de
execução do programa encontrar outro breakpoint, o depurador é ativado
novamente.
Break – Use esta ferramenta para fazer com que o fluxo de execução do programa
seja interrompido, não importando o local onde esteja, e o modo de depuração será
ativado.
Step into – Use esta ferramenta quando a linha a ser executada possuir uma função
cujo código você deseja depurar. O depurador “entra” na função e continua a
execução, passo-a-passo, no seu message actions.
Step over – Use esta ferramenta quando a linha a ser executada possuir uma função
cujo código você não deseja depurar. O depurador executa a função, porém, não
mostra a sua execução passo-a-passo, continuando o fluxo de execução do
programa. Observe que, se no message actions desta função (ou de alguma função
que esta chamar) houver alguma marca de breakpoint, o depurador pára a execução
nessa linha.
Variables – Use esta ferramenta para visualizar numa janela os valores de algumas
variáveis selecionadas previamente. Através desta janela, é possível também
adicionar algumas variáveis, além de expressões. Esta janela pode continuar sendo
visualizada enquanto o programa é depurado. Isso é de grande utilidade, pois, nesta
janela, você pode inspecionar o valor de várias váriáveis ao mesmo tempo.
Call stack – Use esta ferramenta para visualizar numa janela todo o fluxo de
execução do programa, os objetos, eventos executados nestes objetos e funções
chamadas. Esta janela mostra todas estas informações na sequência em que são
chamadas, ajudando muito na depuração do código.
Messages – Use esta ferramenta para visualizar numa janela todos os eventos que a
aplicação está executando, até mesmo os eventos do sistema operacional. Esta
ferramenta é extremamente útil, pois, através da janela por ela acionada, obtemos,
além dos nomes dos eventos executados, a informação de qual objeto recebeu
determinado evento e os valores das variáveis do sistema operacional lParam e
wParam.
Expressions – Use esta ferramenta para visualizar uma janela que permite obter o
valor de expressões e variáveis, mesmo estas não estando relacionadas ao fluxo
atual do programa.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 6
Utilizando os QuickObjects
Um dos recursos mais poderosos disponíveis no Centura Team Developer são os
QuickObjects. Utilizando-os você poderá desenvolver rapidamente aplicações, sem a
necessidade de codificação em SAL ( Scalable Application Language, a linguagem de
programação do SQLWindows/32 ), no entanto, deve conhecer a maneira como o negócio da
sua aplicação funciona.

O Centura Team Developer dispõe de uma arquitetura complexa e poderosa de objetos pré-
construídos, inteligentes e expansíveis. Os QuickObjects são construídos segundo os conceitos
da teoria de Orientação a Objetos, obedecendo suas regras e sua hierarquia.

Os QuickObjects são compostos de classes visuais e não visuais, que oferecem ao


desenvolvedor uma maneira rápida e poderosa de se desenvolver aplicações em
SQLWindows/32, dispondo de variadas fontes de dados, incluindo-se bases de dados
relacionais como SQLBase, Lotus Notes e sistemas de e-mail.

Neste capítulo, você irá trabalhar com os QuickObjects que acompanham o SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

A Arquitetura dos QuickObjects

Os QuickObjects são desenvolvidos em linguagem SAL, utilizando-se técnicas de orientação a objetos,


portanto, uma vez conhecendo sua arquitetura, o programador poderá perfeitamente criar novos
QuickObjects a partir dos já existentes, ou até mesmo criar QuickObjects completamente novos.

Existem três tipos de QuickObjects

 Data Sources
 Visualizers
 Commanders

Data Sources

Os QuickObjects Data Sources são utilizados para acessar dados estruturados, ou não, como por exemplo
bancos de dados sql, e-mail e Lotus Notes.

São representados visualmente por um objeto tipo child table. Cada coluna dessa child table corresponde a
uma informação na fonte de dados.

Os QuickObjects Data Sources para bancos de dados sql são representados numa aplicação SQLWindows/32
pela classe cQuickTable, e permitem acesso a todos os tipos de bancos de dados com os quais o
SQLWindows/32 possui conectividade: Centura SQLBase, Oracle, Sybase, MS SQLServer entre outros. (
Consulte no Capítulo 3 - Acesso ao SQL, a seção Conectividade, para maiores detalhes sobre a
conectividade do SQLWindows/32 )

Os QuickObjects para sistemas de e-mail são representados numa aplicação SQLWindows/32 pela classe
cQuickEMail, e suportam os sistemas de e-mail da Lotus ( VIM ), da Microsoft ( MAPI ) e da Novell ( MHS
).

Os QuickObjects Data Sources são a parte principal do QuickObjects do SQLWindows/32, eles controlam o
estado dos Commanders e o que será mostrado nos Visualizers.

Visualizers

Os QuickObjects Visualizers são utilizados para mostrar e manipular os dados providos pelos QuickObjects
Data Sources, estando sempre ligados a estes.

Os QuickObjects Visualizers são associados aos QuickObjects Data Sources no momento em que o
desenvolvedor está ‘desenhando’ a tela, em tempo de design, através da Paleta de Controles. Os Visualizers
podem ser personalizados pelo Customizer.

Os QuickObjects Visualizers são representados visualmente, numa aplicação SQLWindows/32, pelas


seguintes classes:

 cQuickField – Similar ao objeto Data Field.


 cQuickMLField – Similar ao objeto Multiline Text.
 cQuickRadio – Similar ao objeto Radio Button.
 cQuickRadioGroup – Similar ao objeto Radio Button.
 cQuickCheckBox – Similar ao objeto Check Box.
 cQuickListBox – Similar ao objeto List Box.
 cQuickComboBox – Similar ao objeto Combo Box.
 cQuickPicture – Similar ao objeto Picture.
 cQuickGraph – Permite apenas visualização.

Página PAGE 582


Programando com o Centura Team Developer 2000

Commanders

Assim como os Visualizers, os Commanders estão sempre ligados aos QuickObjects Data Sources, essa
‘ligação’ é feita em modo de design. Os comandos dependem do tipo do Data Sources associado, conforme
relacionado abaixo:

Comandos associados aos QuickObjetcs Data Sources para Bancos de Dados:

 Apply – Faz as atualizações necessárias, dos dados que tenham sido excluídos, alterados ou incluídos.
Similar ao comando sql commit.
 Delete – Quando associado a um Data Source tipo Master, marca para exclusão o registro pai e todos os
filhos. Quando associado a um Data Source tipo Detail, marca para exclusão apenas os registros
selecionados no objeto filho.
 Discard – Desconsidera todas as edições feitas nos dados contidos no Data Source ao qual o
QuickObject Commander está associado, carregando novamente os dados da fonte de dados. Similar ao
comando sql rollback.
 First – Este é um comando para navegação pelos dados do Data Source, faz com que o foco seja
posicionado na primeira linha de dados.
 Last - Este é um comando para navegação pelos dados do Data Source, faz com que o foco seja
posicionado na última linha de dados.
 New – Prepara o Data Source para a inclusão de uma nova linha de dados.
 Next - Este é um comando para navegação pelos dados do Data Source, faz com que o foco seja
posicionado na próxima linha de dados.
 Previous - Este é um comando para navegação pelos dados do Data Source, faz com que o foco seja
posicionado na linha anterior.
 Retrieve – Carrega todos os dados no QuickObject Data Source.

Comandos associados aos QuickObjetcs Data Sources para E-Mail:

 Address – Obtém a lista de endereços dos destinatários.


 Attach – Anexa arquivos a uma mensagem.
 Forward – Encaminha uma mensagem.
 Login – Efetua login no sistema de e-mail.
 Logout – Efetua logout no sistema de e-mail.
 Mark Read – Marca uma mensagem como lida.
 Reply – Responde uma mensagem ao destinatário.
 Save – Salva o conteúdo de uma mensagem.
 Send – Envia uma mensagem.

Comandos associados aos QuickObjetcs Data Sources para Lotus Notes:

 First – Move para o primeiro documento, no result set de documentos do Lotus Notes.
 Last - Move para o último documento, no result set de documentos do Lotus Notes.
 Next - Move para o próximo documento, no result set de documentos do Lotus Notes.
 Previous - Move para o documento anterior, no result set de documentos do Lotus Notes.
 Retrieve - Carrega novamente os dados da fonte de dados.
 New - Prepara o Data Source para a inclusão de um novo documento.
 Delete – Marca um registro para ser excluído.
 Apply - Faz as atualizações necessárias aos dados que tenham sido excluídos, alterados ou incluídos.
 Discard – Descarta as modificações feitas, carregando novamente os dados da fonte de dados.
 Mail – Mostra a caixa de diálogo para enviar correio do Notes.
 Replicate Server – Cria uma réplica do servidor atual.
 New Replica – Cria uma nova réplica do banco de dados atual no servidor escolhido.

Os QuickObjects Commanders não executam comando algum junto ao banco de dados, na realidade, eles
apenas comunicam ao QuickObject Data Sources, a que estão relacionados, a ação a ser realizada. Por
exemplo, quando o usuário aciona o comando First, o QuickObject Commander envia uma mensagem ao
QuickObject Data Source, onde o comando First será então executado. Toda a interface entre a aplicação e o
Página PAGE 582
Programando com o Centura Team Developer 2000

banco de dados é feita sempre pelo QuickObject Data Source. Os demais QuickObjects fazem a solicitação
junto ao Data Source, e este a executa junto ao banco de dados.

Atenção
Ao desenvolver uma aplicação utilizando os QuickObjects da Centura, os QuickObjects Data Sources devem
ser criados antes dos demais QuickObjects Commanders e Visualizers. Caso os Commanders ou Visualizers
sejam criados antes, não será possível relacioná-los a um QuickObjects Data Sources.

Como funciona um QuickObject ?

Um QuickObject é um objeto especial do SQLWindows/32 que possibilita o desenvolvimento de aplicações


sem a necessidade de escrever código adicional. Isso não quer dizer que não seja possível adicionar código
SAL a um QuickObject. Um QuickObject, assim como um objeto normal do SQLWindows/32, é
configurado através do seu Customizer ( ou Attribute Inspector ), porém, no caso dos QuickObjects, existe
uma propriedade adicional. É através dessa propriedade que o desenvolvedor tem acesso às configurações
‘Quick’.

Por exemplo, um QuickComboBox recebe, em tempo de design, a informação de qual comando sql deve ser
executado para que as informações, em tempo de execução da aplicação, sejam mostradas ao usuário
corretamente. Dessa forma, não existe a necessidade de codificação pelo programador.

Existem duas formas básicas pelas quais os QuickObjects trabalham, são elas:

Geração de Código

Uma das maneiras de trabalhar dos QuickObjects, que tornam os objetos do SQLWindows/32 avançados e
poderosos, é a Geração de Código SAL. Um QuickObject, como por exemplo uma classe cQuickTable, em
tempo de desenvolvimento, cria as colunas, na seção Contents da table window, equivalentes ao comando sql
necessário para carregar os dados, quando a aplicação estiver sendo executada. Essa geração de código já
utilizada nos QuickObjects do Centura ( que acompanham o pacote do CTD ), está também disponível aos
programadores através da interface provida pelo Components Developer Kit, o CDK, porém, não entraremos
em detalhes sobre esse assunto agora. O CDK é estudado no Capítulo 10 – Criando seus próprios
QuickObjects.

Nomeação de Propriedades

A outra forma de trabalhar dos QuickObjects, que expande as características naturais dos objetos Centura, é
chamada Named Properties, algo como Nomeação de Propriedades. Funciona baseada em propriedades e
seus valores. Uma propriedade é basicamente composta de dois elementos: um nome e um valor. Cada um
dos elementos mostrados no Customizer de um objeto é uma propriedade com um valor associado. Essas
propriedades são configuradas em tempo de design, ou seja, quando o objeto ainda está sendo criado pelo
programador. Por exemplo, um data field possui uma propriedade chamada Editable, que pode possuir dois
valores, Yes ou No, determinando quando o usuário poderá editar o valor deste data field. Essa propriedade, e
todas as demais que são mostradas num Customizer de um objeto do SQLWindows/32, são propriedades
naturais do objeto. A Nomeação de Propriedades consiste na definição de propriedades adicionais. Por
exemplo, esse mesmo data field poderia conter uma propriedade nomeada pelo desenvolvedor chamada
TextoExplicativo, utilizada para que, em tempo de execução, quando o mouse estivesse por cima do objeto, o
valor da propriedade TextoExplicativo fosse mostrado na barra de status do form.

Página PAGE 582


Programando com o Centura Team Developer 2000

Construindo uma Aplicação

Vamos criar uma típica aplicação de negócios, utilizando o QuickObject chamado QuickForm, que acessará
duas tabelas relacionadas. Utilizaremos a base de dados ISLAND, que acompanha o CTD, e que é instalada
conforme as instruções do Apêndice F – Guia de Instalação do Centura Team Developer 2000.

A tabela COMPANY será a tabela principal da nossa aplicação, também chamada de tabela Master, e a
tabela INVOICE será a tabela filha, também chamada tabela Detail. Essa aplicação será capaz de realizar a
navegação através de todos os registros da tabela COMPANY, sendo que, sempre serão mostrados os
registros da tabela INVOICE relacionados à empresa que estiver com o foco. Ou seja, para cada empresa
escolhida, serão apresentadas as invoices pertencentes a essa empresa. Além da navegação, será possível
também realizarmos alterações de informações, inclusões e exclusões. A aplicação será capaz de realizar
todas essas atividades, sem que seja necessário qualquer conhecimento da linguagem SAL pelo programador,
pois, não será preciso escrever código algum.

Acompanhe as instruções a seguir, para criar uma aplicação de acesso a banco de dado, utilizando os
QuickObjects do SQLWindows/32:

Inicie o Centura SQLWindows/32 clicando no respectivo ícone do menu iniciar. Normalmente o menu do
Centura está localizado no Menu iniciar | Programas | Centura | Team Developer 2000. Então escolha o
ícone do SQLWindows 2000.

Você deve ativar o Assistente do QuickForm que está localizado na caixa de diálogo onde concentram-se
todos os Assistentes do SQLWindows/32. Essa caixa de diálogo recebe o nome de Wizards, e pode ser
acionada através do botão chamado Wizards, situado na barra de ferramentas do SQLWindows/32. Ou
através do menu Component | Wizards.

- botão chamado Wizards, situado na barra de ferramentas do Centura SQLWindows/32.

O menu Component | Wizards.

Página PAGE 582


Programando com o Centura Team Developer 2000

Na janela Wizards, selecione o Assistente chamado QuickForm, e clique no botão Start.

A janela Wizards.

Na janela inicial do Assistente QuickForm, escolha:


Tipo de form: Form Window
Posição da ToolBar: Top
E clique no botão Next.

Assistente do QuickForm, escolha aqui a aparência da sua aplicação.

Página PAGE 582


Programando com o Centura Team Developer 2000

O Assistente do QuickForm precisa agora conectar-se ao banco de dados. Efetue a conexão através da janela
abaixo, Database Login, informando o nome da base de dados. Neste exemplo utilizaremos a base chamada
ISLAND. Informe SYSADM, no campo nome do usuário, e senha.

A janela Database Login, do QuickForm.

O próximo passo agora é escolher os nomes das tabelas que serão os Data Sources da aplicação. Escolha
inicialmente a tabela COMPANY. Quando você escolhe uma tabela, o seu nome e os seus campos são
mostrados no quadro do lado direito. Isso pode ser feito de uma das seguintes formas:

 Clicando duas vezes no nome da tabela desejada.


 Clicando uma vez no nome da tabela e arrastando para o quadro do lado direito.
 Clicando ou utilizando as teclas para cima e para baixo, posicionando o foco no nome da tabela desejada,
e clicando no botão Choose Source.

Página PAGE 582


Programando com o Centura Team Developer 2000

Você deve, neste momento, saber quais colunas da tabela escolhida deverão fazer parte da sua aplicação.
Observe que, ao escolher a tabela COMPANY, no quadro do lado direito apareceu o nome da tabela e os
nomes de todas as colunas que a compõem. Ao lado do nome de cada coluna existe um ícone amarelo. A
aplicação gerada pelo QuickForm irá considerar apenas as colunas que possuírem esse ícone ao seu lado.
Então, basta clicar uma vez no nome da coluna que você não quer que apareça na sua aplicação. Para esse
exemplo, deixe marcadas as colunas conforme a figura anterior, ou seja, as colunas COMPANY_ID,
COMPANY_NAME, CORPORATE_URL e PHONE devem estar selecionadas.

A tabela COMPANY é a tabela master dessa nossa aplicação.

Você deve agora escolher a tabela detail, ou seja, a tabela INVOICE. Siga os mesmos procedimentos
utilizados na escolha da tabela COMPANY, selecionando a tabela INVOICE e deixando visíveis todas as
suas colunas. Conforme a figura abaixo :

Tabelas Master e Detail da nossa aplicação.

Observe que, as duas tabelas foram ligadas visualmente. Um link foi feito ligando a tabela COMPANY à
tabela INVOICE. Esse link é o relacionamento entre os dois Data Sources que serão criados na sua aplicação.

Clique então no botão Finish para que o QuickForm crie a aplicação, que deve ter o visual semelhante ao
mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Janela da aplicação gerada pelo QuickForm.

Observe que o Centura SQLWindows/32, automaticamente, posiciona a aplicação gerada na Tab chamada
Layout. Isso faz com que a janela da aplicação seja vista. Dessa forma, nesta aplicação, podemos facilmente
observar os três tipos de QuickObjects de que falamos no início deste capítulo. Os pushbuttons são os
Commanders ( First, Prev, Next, Last, Retrieve, New, Delete, Apply e Discard ), os data fields são os
Visualizers ( Company Id, Company Name, Corporate Url e Phone ) e a child table window é o QuickObject
Data Source para a tabela INVOICE. Suas colunas são Visualizers. O Data Source da tabela COMPANY está
com a propriedade Visible configurada para No, por esse motivo, não está visível.

Neste momento, você pode alterar, da maneira que desejar, a posição dos objetos gerados pelo QuickForm.
A aplicação está pronta para ser executada. Pressione a tecla F7 ou acione o menu Debug | Go.
Quando o SQLWindows/32 pedir que a aplicação seja salva, informe o nome qckForm1.app, para facilitar
futuras referências.

Com a aplicação em execução, clique nos botões Last, Prev, Next e First da barra de ferramentas para
navegar pelos registros da tabela master, a tabela COMPANY. Observe que cada vez que uma nova empresa
é selecionada, a child table onde são mostradas as INVOICES é atualizada com as informações referentes à
empresa escolhida.

Página PAGE 582


Programando com o Centura Team Developer 2000

Aplicação gerada com o QuickForm sendo executada.

Observe o código fonte gerado pelo QuickForm, estão lá todos os objetos e seus respectivos códigos
necessários para o funcionamento correto da aplicação.

Para ver o código fonte da aplicação:

 Volte ao Centura SQLWindows/32, fechando a janela da aplicação gerada pelo QuickForm, que está
sendo executada.
 Clique na Tab chamada Outline, isso fará com que o SQLWindows/32 mostre o código fonte gerado
pelo QuickForm momentos antes.

Sua janela deverá se parecer com a figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Visão do outline mostrando o código fonte gerado pelo QuickForm.

A aplicação está pronta e você pode realizar quaisquer alterações que julgue necessário.
Por exemplo, altere o número de colunas visíveis na table window onde aparecem as INVOICES. Não é
necessário que as colunas COMPANY_ID e COMPANY_NAME estejam visíveis. Então, através do
customizer ( ou do Attribute Inspector) de cada uma, atribua No à propriedade Visible.

Na figura abaixo, a coluna COMPANY_ID está sendo configurada através do Attribute Inspector.

Página PAGE 582


Programando com o Centura Team Developer 2000

Coluna Company_id sendo configurada, através do Attribute Inspector.

Página PAGE 582


Programando com o Centura Team Developer 2000

Alterando e expandindo a aplicação

Nesta aplicação montada, você tem, rapidamente, as informações sobre as INVOICES da empresa desejada.
Vamos agora acrescentar uma outra tabela a nossa aplicação. Será uma tabela filha da tabela INVOICES,
contendo os itens que compõem a INVOICE selecionada na child table. Ou seja, acrescentaremos agora à
aplicação um terceiro QuickObject Data Sources, correspondente à tabela do banco de dados, chamada
INVOICE_ITENS.

No SQLWindows/32, selecione a Tab chamada Layout para que a janela da aplicação seja visualizada.
Ative a paleta de controles ( pressionando Alt-4 ) e escolha o controle tipo child table window.

Controles. Em destaque, a classe cQuickTable.

Neste momento, serão mostrados na paleta de controles os nomes das classes de child table. Clique uma vez
na classe chamada cQuickTable e coloque na janela da aplicação a child table.

Imediatamente, após esse ato, a child table window será desenhada no local onde você colocou, acionando
pelo SQLWindows/32, a janela de configuração da classe cQuickTable. Essa janela aparecerá solicitando as
informações para login na base de dados. Informe os valores: ISLAND, SYSADM e SYSADM para
Database, User Name e Password, respectivamente. Em seguida, na janela chamada cQuickTable Properties,
você deverá informar o nome da tabela que será utilizada como Data Source, na child table colocada na
aplicação. Escolha então a tabela desejada, clicando duas vezes no nome da tabela chamada
INVOICE_ITEM. São mostrados os nomes das colunas.

Escolha as colunas que deverão fazer parte da aplicação. Para este exemplo, selecione todas as colunas.

Página PAGE 582


Programando com o Centura Team Developer 2000

Janela de configuração das propriedades da classe cQuickTable.

Os pushbuttons dessa janela serão habilitados neste momento, clique no pushbutton chamado Sort, e informe
a coluna chamada ITEM_NO. Clique então no botão Ok.

Janela para informar a classificação dos dados.

De volta à janela principal das propriedades da classe cQuickTable, clique no pushbutton Apply para que o
QuickObject escreva as instruções referentes às configurações realizadas.

A aplicação será gerada, ou melhor, ao código já existente, um novo código, referente ao QuickObject Data
Source, será acrescentado a tabela INVOICE_ITEM.

Devemos relacionar a tabela INVOICE_ITEM com a sua tabela pai, no caso, a tabela INVOICE. Para isso,
siga os seguintes passos:

Página PAGE 582


Programando com o Centura Team Developer 2000

 Clique com o botão direito do mouse na child table window tblINVOICE1, que é a tabela
correspondente ao Data Source para a tabela INVOICE.
 Ao aparecer o menu de contexto, conforme a figura abaixo, clique na opção chamada Quick Table.

Menu de contexto, permiti acesso à janela de configuração das propriedades da cQuickTable.

Assim, você tem acesso à janela de configuração das propriedades do cQuickTable, onde o pushbutton Links
deve ser pressionado.

Isso fará com que você tenha acesso à janela de configuração dos links, mostrada na figura abaixo, onde os
Data Sources são relacionados entre si.
Escolha, então, no list box Master Table Columns, a coluna INVOICE_NO, pois esta é a coluna chave da
tabela INVOICE. No lado direito, no combo box Detail Tables\Columns, você deve clicar no nome da child
table tblINVOICE_ITEM3, que foi adicionada à aplicação recentemente. Clique no pushbutton New.

Página PAGE 582


Programando com o Centura Team Developer 2000

Definição do relacionamento entre os Data Sources INVOICE e INVOICE_ITENS.

Clique no pushbutton OK para salvar esta configuração. De volta à janela de configuração da cQuickTable,
clique no pushbutton Apply para salvar as alterações, e para que as configurações sejam aplicadas ao
programa fonte.

Se você desejar, altere a propriedade Visible da coluna INVOICE_NO para No, pois, não é necessário que
essa esteja visível.

Feito isso, execute novamente a aplicação para realizar um teste.


Observe que, para cada INVOICE escolhida, serão listados agora todos os itens que a compõem.

Página PAGE 582


Programando com o Centura Team Developer 2000

Nesta figura pode ser observada todos os itens que compõem uma INVOICE.

Observe na figura acima que, os valores da coluna Color formam um conjunto de valores que podem ser
apresentados de outra forma, visualmente, através de outro objeto. Esse é um ótimo exemplo para conhecer a
funcionalidade de um outro QuickObject, o QuickRadioGroup.

Acione a paleta de controles do SQLWindows/32 e selecione o controle Radio Button. Ao fazer isso serão
mostradas na paleta as classes de radio button disponíveis. Escolha a classe cQuickRadioGroup. O Centura
identifica que essa corresponde a uma classe de QuickObjects e, imediatamente, a paleta de controles passa a
mostrar também os nomes dos Data Sources disponíveis. Selecione o Data Source chamado
tblINVOICE_ITEM3 e a coluna COLOR, conforme mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Paleta de controles.

Esse QuickObject fará uma consulta ao banco de dados pela coluna COLOR, utilizando a cláusula
DISTINCT no comando select, obtendo assim os valores existentes na coluna escolhida. Para cada valor
retornado, este QuickObject cria um radio button na aplicação, fazendo com que a mesma fique assim:

Página PAGE 582


Programando com o Centura Team Developer 2000

QuickRadioButton criados a partir da coluna COLOR.

Na verdade, cada item dessa INVOICE corresponde a um pedido de camisetas, indicando a quantidade, o
preço e a estampa. A estampa correspondente ao item é a informação contida na coluna STYLE_ID.
Utilizaremos essa informação para mostrar a imagem da estampa num objeto picture, também sem escrever
nenhuma linha de código SAL.

Página PAGE 582


Programando com o Centura Team Developer 2000

O processo agora é o mesmo utilizado nos exemplos anteriores.

 Acione a paleta de controles ( Alt-4 ).


 Escolha o objeto tipo child table.
 Selecione a classe cQuickTable, para adicionar um novo QuickObject Data Source.
 Ao colocar essa child table da classe cQuickTable na sua aplicação, aparecerá a janela de configurações
da classe.
 Efetue o login e selecione a tabela chamada PRODUCT.
 Dessa tabela, escolha apenas as colunas STYLE_ID e PICTURE.
 Clique em seguida no pushbutton Apply.
 A child table chamada tblPRODUCT4 é criada e as duas colunas escolhidas são colocadas no seu
interior.
 Você precisa agora relacionar os dois Data Sources.
 Então, clique com o botão direito do mouse na tblINVOICE_ITENS3 e escolha no menu de contexto a
opção chamada Quick Table. Efetue o login, se for necessário.
 Na janela de configuração das propriedades do objeto tblINVOICE_ITENS3, clique no pushbutton Links
para relacionar o Data Source com o recém incluído tblPRODUCT4.
 A coluna a ser utilizada para relacionamento é a coluna chamada STYLE_ID. Não esqueça de pressionar
o pushbutton New.
 Clique no botão OK e, na janela de configuração das propriedades, pressione o pushbutton Apply.
 Selecione, na paleta de controles, o objeto tipo picture, a classe cQuickPicture e o Data Source que você
acabou de adicionar, ou seja, tblPRODUCT4.
 Selecione então a coluna PICTURE, colocando-a na sua aplicação.
 Você já pode executar a aplicação. Observe que, para cada item selecionado na child table
tblINVOICE_ITENS3, a imagem correspondente será mostrada no objeto picture.

Visualização da estampa da camiseta.


Página PAGE 582
Programando com o Centura Team Developer 2000

Você tem pronta uma aplicação que trabalha com quatro tabelas relacionadas entre si, completamente
funcional, mostrando inclusive figuras, sem digitar nenhuma linha de código SAL.

Os próximos passos são, estudar os outros QuickObjects do SQLWindows/32, que são mostrados no
Capítulo 7 – Explorando os QuickObjects, e aprender a construir seus QuickObjects no Capítulo 10 –
Criando seus próprios QuickObjects.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 7
Explorando os QuickObjects
Dando prosseguimento ao Capítulo 7, onde foram apresentados os conceitos básicos dos
QuickObjects do SQLWindows/32, apresentaremos neste capítulo mais alguns
QuickObjects, que auxiliarão o programador a construir aplicações avançadas. Serão
abordados os principais quickobjects disponíveis, com exemplos e instruções passo-a-
passo para que você, ao término do estudo, esteja apto a aplicar os recursos aqui
demonstrados.

O estudo deste capítulo possui dois pré-requisitos:

 É extremamente necessário que o Capítulo 6 tenha sido estudado e


compreendido totalmente, pois, uma série de instruções contidas
nestes dois capítulos, são idênticas. Porém, não serão explicadas
detalhadamente novamente, já que o fizemos no capitulo 6.

 É importante lembrar que, para que todos os QuickObjects aqui


citados estejam disponíveis, é necessário que as instruções descritas no
Apendice A – Guia de Instalação do Centura Team Developer
2000, tenham sido seguidas.

Página PAGE 582


Programando com o Centura Team Developer 2000

Usando os QuickTabs

Os QuickTabs são os QuickObjects do SQLWindows/32 que facilitam a utilização dos


controles de Tabs nas aplicações escritas em linguagem SAL. Os controles de Tabs são
extremamente úteis quando se faz necessário mostrar muitas informações numa mesma
janela. Com as Tabs é possível que, na mesma janela, sejam mostradas muitas informações
divididas em categorias, por exemplo. Com os QuickTabs você poderá construir aplicações
no SQLWindows/32 onde os recursos visuais serão idênticos aos encontrados normalmente
em ferramentas como o Microsoft Office.

No Capítulo 6 foi desenvolvida uma aplicação envolvendo as tabelas de company, invoice,


invoice_item e product. Todas estas informações foram colocadas numa mesma janela,
tornando-a um pouco ‘apertada’ devido ao grande número de informações presentes.
Agora será desenvolvida a mesma aplicação, porém, as informações serão divididas em
categorias e colocadas em Tabs. Observe na figura abaixo a aplicação que você irá
construir utilizando os QuickTabs :

Janela da aplicação utilizando os QuickTabs.

Acompanhe os passos a seguir, para criar esta aplicação, utilizando os QuickObjects do


SQLWindows/32:

Inicie o Centura SQLWindows/32. Se este já estiver aberto, salve a aplicação que


porventura esteja sendo utilizada, e inicie uma nova aplicação clicando no botão da barra
de ferramentas chamado New, pressionando juntas as teclas Ctrl+N ou acionando o menu
File | New.

Para desenvolver esta aplicação, utilizaremos os QuickObjects do SQLWindows/32,


conforme demonstrado no Capítulo 6. Portanto, é necessário informar ao Centura
SQLWindows/32 que serão utilizadas as classes dos seus QuickObjects. Essas classes
estão numa biblioteca, assim como as classes dos QuickTabs. Então, inclua essas duas
bibliotecas ao programa.

Página PAGE 582


Programando com o Centura Team Developer 2000

Para incluí-las, localize a seção Libraries do outline e informe os nomes das bibliotecas
clicando com o botão direito do mouse na palavra Libraries, no outline, e escolhendo as
duas bibliotecas, conforme ilustrado abaixo :

Biblioteca dos QuickObjects sendo incluída ao programa.

Dessa forma, inclua ao seu programa as duas bibliotecas. No final dessa operação, a seção Libraries do seu
outline deve estar assim :

Agora, adicione em sua aplicação o form window que irá conter os demais objetos. O form
window utilizado deve ser da classe cQuickTabsForm. Proceda da seguinte forma:

No Centura SQLWindows/32, clique com o botão direito do mouse no item chamado


Windows, localizado no quadro esquerdo, chamado Application1. Escolha as opções New
e depois cQuickTabsForm, no menu de contexto que aparecerá.

Página PAGE 582


Programando com o Centura Team Developer 2000

O form window sendo incluído através do menu de contexto.

Isso fará com que um form window da classe cQuickTabsForm seja adicionado ao outline.
Coloque um nome para o seu form e ative a paleta de controles pressionando as teclas Alt-
4.

Adicione ao form window uma child table da classe cQuickTable que servirá como Data
Source relacionado à tabela COMPANY da base de dados.
Escolha os seguintes campos da tabela COMPANY:
 COMPANY_ID
 COMPANY_NAME
 ADDRESS
 CITY
 CORPORATE_URL
 COUNTRY
 PHONE
 STATE

Através do Customizer, ou do Attribute Inspector, altere a propriedade View da table


window tblCOMPANY1 para o valor Browse Bar. Isso fará com que a table window
mude sua aparência, tornando-se uma barra de navegação.

Na paleta de controles, clique no ícone correspondente ao data field e selecione a classe


cQuickField. Escolha o Data Source tblCOMPANY1 e marque todas as colunas mostradas
na paleta de controles, exceto a coluna chamada ROWID. Feito isso, clique no form
window para que os data fields correspondentes às colunas escolhidas sejam criados na
aplicação.
Neste momento, sua aplicação deve estar assim:

Página PAGE 582


Programando com o Centura Team Developer 2000

Aplicação sendo construída dentro do objeto QuickTab.

Você precisa adicionar mais uma Tab ao seu form window. Clique com o botão direito do
mouse numa área do form window, até que o menu de contexto abaixo seja mostrado :

Menu de contexto do QuickTab.

Escolha a última opção, Tab Frame Properties.


Você terá acesso à janela de configuração das propriedades do QuickTabs. Todas as
configurações são feitas nesta janela.

Página PAGE 582


Programando com o Centura Team Developer 2000

Inclua mais três linhas na table window desta janela, clicando no botão New.

Caixa de diálogo onde todas as propriedades do QuickTab são configuradas.

Em cada uma das linhas incluídas escreva Invoice, Itens e Detalhes Itens. Em seguida,
clique no pushbutton OK. Isso fará com que seja adicionado ao form window mais três
Tabs, cada uma com os nomes digitados.

Clique na Tab chamada Invoice e adicione uma child table da classe cQuickTable. Através
da janela de configuração das propriedades da classe cQuickTable, relacione esse Data
Source à tabela INVOICE.
Selecione as seguintes colunas da tabela INVOICE:
 AMOUNT_PAID
 COMPANY_ID
 DATE_PAID
 INVOICE_DATE
 INVOICE_NO
Através do pushbutton Sort, configure para que a classificação dos pedidos seja pela coluna INVOICE_NO.

Agora, o seu form window deve estar assim :

Página PAGE 582


Programando com o Centura Team Developer 2000

Tela da aplicação após a inclusão do Data Source para a tabela INVOICE.

Relacione os Data Source tblCOMPANY1 e tblINVOICE2 através da janela de


configurações do Data Source tblCOMPANY1.
Lembre-se, a coluna COMPANY_ID é o link entre os dois objetos.

Você pode executar a aplicação agora e verificar que, os pedidos mostrados na Tab Invoice
estão sempre relacionados à Empresa escolhida na Tab Empresa. Desta vez, é possível
visualizar mais informações na tela, de forma bem mais confortável, pois, as informações
estão organizadas nas Tabs.

Do mesmo modo descrito no capítulo 6, você pode acrescentar à aplicação as demais


informações dos itens dos pedidos ( INVOICE_ITENS) e a imagem da estampa
(PRODUCTS).

Página PAGE 582


Programando com o Centura Team Developer 2000

As Propriedades do QuickTabs

A caixa de diálogo das propriedades do QuickTabs possui as seguintes Tabs, que são
descritas abaixo:

Tabs – Associa um Tab Label a uma determinada Tab Name. Tab Label é o nome que
aparecerá para o usuário, quando a aplicação estiver sendo executada. Nessa Tab, você
pode criar, apagar, alterar e mudar a posição das Tabs da sua aplicação.

Fonts – Você pode definir o tipo de fonte e o tamanho que desejar para ser utilizada pela
aplicação. Ao informar uma fonte específica, tenha certeza de que a fonte especificada
estará disponível no seu sistema. Você pode também definir que as fontes utilizadas serão
as mesmas da janela pai, para isso, marque o radio button chamado User Parent’s Font.

Colors – Especifica as cores das letras e do fundo da janela (background). As cores


definidas são aplicadas a todas as Tabs. Não é possível especificar cores diferentes para
cada Tab.

Size – É nesta pasta que você configura se as Tabs da aplicação terão o tamanho da janela
pai. Neste caso, os valores informados nos campos Left, Right, Top e Botton, indicam a
distância da borda da janela para a borda do quadro dos Tabs.

Style – Você pode especificar o número de linhas de Tabs que desejar, se a posição das
Tabs será acima ou abaixo, assim como a aparência ( seguindo o padrão Windows3.1 ou
Windows95 ).

Windows – Nesta Tab da janela de configurações você pode associar uma Tab da sua
aplicação a um form window ou um dialog box, que será criado assim que a Tab seja
acionada pela primeira vez.

As Mensagens do QuickTabs

O QuickTabs possui uma série de mensagens que podem ser interceptadas pelo
programador, que são:

TABSM_Create - Para garantir a correta inicialização da classe picTabs. Utilize esta


mensagem, ao invés de usar SAM_Create.

TABSM_UserRequest – Esta mensagem é enviada a um objeto da classe picTabs para


indicar que o usuário tentou selecionar uma das Tabs disponíveis. Verifique o valor da
variável wParam para saber o número da Tab que o usuário clicou. Se você quiser impedir
o usuário de escolher uma determinada Tab, Utilize a função CancelMode( ).

TABSM_TabActivateStart - Esta mensagem é enviada a um objeto da classe picTabs,


antes que os objetos pertencentes à Tab sejam mostrados, para indicar que uma
determinada Tab foi selecionada pelo usuário. Verifique o valor da variável wParam para
saber o número da Tab escolhida pelo usuário.

TABSM_TabActivateFinish - Esta mensagem é enviada a um objeto da classe picTabs,


depois que os objetos pertencentes à Tab são mostrados, para indicar que uma determinada
Página PAGE 582
Programando com o Centura Team Developer 2000

Tab foi selecionada pelo usuário. Verifique o valor da variável wParam para saber o
número da Tab escolhida pelo usuário.

Você pode também, ao invés de capturar essas mensagens, utilizar as funções late bound
equivalentes a cada uma das mensagens. São elas:

Nome da Mensagem Função late bound


TABSM_Create TabCreate ( )
TABSM_UserRequest TabUserRequest ( )
TABSM_TabActivateStart TabActivateStart ( )
TABSM_TabActivateFinish TabActivateFinish ( )

Página PAGE 582


Programando com o Centura Team Developer 2000

Utilizando o QuickGraph

O QuickGraph é um QuickObject tipo Visualizer, que utiliza um QuickObject Data Source


para apresentar as informações graficamente. Os gráficos podem ser apresentados
baseando-se em uma ou mais colunas da table window.

Entre alguns recursos do QuickGraph, destacam-se:

 Gráficos verdadeiramente 3D.


 Total controle de elevação, rotação e perspectiva.
 Hot-Graphs para criação de gráficos sensíveis ao click.
 Controle das fontes utilizadas nos títulos e legendas.
 Controle sobre os estilos das grades.
 Impressão e exportação dos gráficos.

Assim como os demais QuickObjects, o QuickGraph não necessita de nenhuma programação, porém, possui
uma rica gama de funções que podem ser utilizadas através do SQLWindows/32, que tornam os gráficos
extremamente flexíveis quando utilizados via programação. O QuickGraph é uma classe do
SQLWindows/32, podendo ser modificada e expandida com facilidade.

Pré-requisitos

Para utilizar o QuickGraph, conforme mostrado neste exemplo, a instalação do


SQLWindows/32 deve ter sido feita seguindo-se as instruções descritas no Apendice F –
Guia de instalação do Centura Team Developer 2000.

Na aplicação, você precisa incluir na seção Libraries, a biblioteca de QuickObjects


chamada qckdvc.apl, onde é definida a classe cQuickGraph.

Assim como todos os QuickObjects Visualizers, você precisa associá-los a um


QuickObject Data Source.

A utilização do QuickGraph é extremamente simples, conforme mostrado abaixo:

Inicie uma nova aplicação no Centura SQLWindows/32.


Declare a biblioteca de classes qckdvc.apl na seção Libraries do Outline.
Você precisará de um DataSorce para servir os dados para o QuickGraph.
Observe a figura abaixo, nela foi desenvolvida uma aplicação simples. Uma aplicação
Master/Detail envolvendo as tabelas COMPANY e INVOICE, como demonstramos no
Capítulo 6.

Página PAGE 582


Programando com o Centura Team Developer 2000

Aplicação que servirá de Data Source para o QuickGraph.

O próximo passo é selecionar, na paleta de controles, o objeto QuickGraph.


Escolha o Data Source chamado tblINVOICE2, conforme ilustrado na figura que se segue:

O Data Source tblINVOICE2 sendo selecionado.

Coloque então o QuickGraph na janela da sua aplicação.


Através da barra de ferramentas do QuickGraph você poderá personalizar os diversos
aspectos do seu gráfico, como por exemplo as colunas nele mostradas.

Clique no ícone chamado QuickGraph, que está na barra de ferramentas do QuickGraph.


Isso fará com que a janela de configurações chamada Graph Control apareça. Efetue as
configurações conforme ilustrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Janela de controle dos elementos do QuickGraph.

Salve sua aplicação como exQckGraph.app.


Execute a aplicação pressionando a tecla F7.

Página PAGE 582


Programando com o Centura Team Developer 2000

Aplicação utilizando o QuickGraph.

Página PAGE 582


Programando com o Centura Team Developer 2000

Utilizando o QuickHTML

Com o QuickHTML é possível, facilmente, construir uma aplicação para navegação pela
Internet, ou seja, um Web Browser, com todas as funcionalidades de navegação
encontradas no Microsoft Internet Explorer.

Construir um simples web browser é extremamente fácil, não sendo necessário escrever
nem uma linha de código SAL.

Observe a figura abaixo, onde um web browser contruído com o QuickHTML está sendo
utilizado para navegar pela Internet.

Um Web Browser construído com o QuickHTML.

Pré-requisitos

Para utilizar o QuickHTML, a instalação do SQLWindows/32 deve ter sido feita seguindo-
se as instruções descritas no Apendice F – Guia de instalação do Centura Team
Developer 2000.

Na aplicação, você precisa incluir na seção Libraries, a biblioteca onde o QuickHTML está
definido. Inclua a biblioteca chamada qckwax.apl.

Para construir um web browser com o QuickHTML, siga os seguintes passos:


Página PAGE 582
Programando com o Centura Team Developer 2000

Inicie uma nova aplicação no Centura SQLWindows/32.


Declare a biblioteca de classes qckwax.apl na seção Libraries do Outline.
Crie um form window.
Ative a paleta de Controles e escolha o objeto do tipo Custom Control.
Escolha a classe cQuickHTML e coloque o objeto no form window.

Altere algumas características do objeto cQuickHTML, através do Customizer ou do


Attribute Inspector.
Name : oCTDBrowser
Tile to Parent : Yes

Através do Customizer ( ou Attribute Inspector) do form window, altere as seguintes


propriedades:
Name: frmQckHTML
Object Title: CTD Browser
Accessories Enabled: Yes
Initial State: Maximized
Na barra de ferramentas do form window, coloque um data field ( dfURL) e um pushbutton ( pbABRIR).
O seu código fonte deve ficar assim:
Form Window: frmQuickHTML
Description:
Named Menus
Menu
Tool Bar
Contents
Background Text: URL :
Data Field: dfURL
Pushbutton: pbABRIR
Contents
Custom Control: oCTDBrowser
Message Actions
Functions
Window Parameters
Window Variables
Message Actions

A janela, em modo de design, deve estar assim:

Página PAGE 582


Programando com o Centura Team Developer 2000

O form window que será utilizado para navegar na Internet.

Você já pode executar o seu browser e navegar naturalmente pela Internet.


Digite o endereço do site desejado, no campo Address do controle web browser, e utilize
os pushbuttons na sua barra de ferramentas.

Tudo deve funcionar perfeitamente, exceto os dois objetos que foram colocados na barra
de ferramentas, pois, ainda não escrevemos código para eles.

Para isso, escreva o seguinte código no Message Actions do pbABRIR :


Pushbutton: pbABRIR
Keyboard Accelerator: Enter
Message Actions
On SAM_Click
Call oCTDBrowser.PageLoad( dfURL )

Observe a propriedade Keyboard Accelerator do pbABRIR. Isso faz com que, quando o
usuário digitar o endereço e pressionar a tecla Enter, seja ativado o SAM_Click do
pbABRIR.

Propriedades do QuickHTML

Através da caixa de diálogo de propriedades do QuickHTML é possível configurar e


alterar diversos comportametos do objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

As propriedades da classe cQuickHTML.

Funções do QuickHTML :

EnumLinks ( ) – Obtém todos os links da página html.


GetSource ( ) – Obtém o código fonte em HTML da página.
GetCurrentURL ( ) – Obtém o endereço da página.
GetPageTitle ( ) – Obtém o título de uma página.
GetStatus ( ) – Obtém o código de status de uma página.
GoHome ( ) – Vai para a página especificada na propriedade m_strHomePage.
PageCancel ( ) – Cancela o carregamento da página.
PageLoad ( ) – Carrega uma determinada página.
PageBackward ( ) – Mostra a página anterior da lista de histórico.
PageForward ( ) – Mostra a página seguinte da lista de histórico.
PageReload ( ) – Carrega novamente uma página.
SetSource ( ) – Define o texto origem para ser mostrado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 8
Programação Orientada a Objetos com o
SQLWindows/32
Este capítulo descreve as características do SQLWindows no suporte a Orientação a
Objetos. São mostradas as classes e objetos, herança, encapsulamento, polimorfismo e
a implementação de todos estes conceitos no SQLWindows.

A compreensão deste capítulo é muito importante para o prosseguimento do estudo


dos demais capítulos.

Página PAGE 582


Programando com o Centura Team Developer 2000

Os Benefícios da Orientação a Objetos

Modelagem mais próxima da realidade, mais apurada.


A reutilização de código é aumentada.
A confiança é aumentada.
Diminuição dos problemas com manutenção.

Classes

Classe é a base da programação orientada a objetos. É um modelo que define as ações e os


atributos de um determinado tipo de objeto. Todos os indivíduos de uma determinada
classe são idênticos em sua forma e comportamento, mas possuem dados diferentes em
seus atributos. Aos indivíduos das classes dá-se o nome de instâncias. As classes podem
ser criadas em hierarquias, que podem passar os dados e comportamentos entre elas.

Os atributos de uma classe são os dados da classe. Por exemplo:

Classe de Pushbutton: cpbNavegacao


Atributos : Titulo
MsgDica
MsgStatus
MsgErro

As ações definidas numa classe são os procedimentos, ou comportamentos, comuns entre


todos os membros dessa classe. As implementações dessas ações são chamadas de
métodos.

Os métodos podem ser internos e externos, ou privados e públicos. Um método interno não
requer interação com outros objetos, são métodos acionados pelo próprio objeto. Um
método externo necessita de uma interação com objeto para ser realizado.

Os métodos de uma classe são as ações tomadas pela classe. Por exemplo:

Classe de Pushbutton: cpbNavegacao


Métodos : MostrarMsgDica
MostrarMsgStatus
MostrarMsgErro
_AtivarBarraDeStatus

Existem duas formas de se acionar procedimentos nos objetos:

Passiva - esta forma caracteriza-se pelo recebimento, pelo objeto, de uma mensagem que
pode ter sido enviada de algum objeto da mesma classe, ou de outra. O objeto que recebe a
mensagem deve decidir se executa alguma ação ou se simplesmente ignora a solicitação.

Ativa - desta forma, um objeto externo explicitamente requisita que alguma ação
específica seja realizada, normalmente, o valor de algum atributo é obtido.

Página PAGE 582


Programando com o Centura Team Developer 2000

Uma Instância refere-se a um determinado objeto que pode ser desenhado numa tela, no
caso dos objetos visuais, ou declarado, no caso de objetos abstratos.

Objetos

Objetos são criados numa aplicação em tempo de execução, são chamados também de
instâncias de uma classe. As classes são apenas as definições de um conjunto de objetos.
Objeto refere-se a uma instância específica de uma classe, que possui as características
definidas na classe.

No SQLWindows/32 podemos criar os seguintes tipos de classes de objetos:


Classes de Objetos Visuais – como data fields, combo box, pushbutton ...
Classes de Objetos Custom Controls.
Classes Abstratas – Functional Class.

Os atributos de um objeto são comuns em relação aos outros objetos da mesma classe,
porém, os valores dos seus atributos são diferentes. Por exemplo:

Pushbutton cpbNavegacao: pbPrimeiro


Atributos : Titulo  'Primeiro'
MsgDica  'Vai para o primeiro registro'
MsgStatus  'Posiciona no primeiro registro do conjunto de registros pesquisados.'
MsgErro  'Erro ao tentar posicionar no primeiro registro.'

Classe Base

É a classe da qual uma determinada classe é derivada. A classe derivada herda da sua
classe base todas as definições dos dados e do seu comportamento.

Uma classe base é expandida em classes mais especializadas, e estas são derivadas da
classe base. A classe cAutomoveis é uma classe derivada da classe cMeiosDeTransporte,
que é a classe base.

Herança

Herança é a maneira pela qual uma classe na hierarquia pode compartilhar dados e
comportamentos de outras classes, sem duplicação de código. Uma classe derivada,
automaticamente, inclui dados e comportamentos de todas as suas classes base. Pode
acrescentar seus próprios dados e comportamentos, e pode também redefinir os dados e
comportamentos herdados das classes base.

A herança permite que uma classe utilize e expanda todas as propriedades, operações (os
métodos) e mensagens a outras classes.

Quando uma classe é criada derivada de uma classe base, dá-se o nome de Herança
Simples. E quando a classe deriva de mais de uma classe base, chamamos de Herança
Múltipla.

Página PAGE 582


Programando com o Centura Team Developer 2000

Encapsulamento

O ideal é que um objeto jamais acesse diretamente os atributos de outro objeto. O correto é
que cada objeto defina uma interface para que outros objetos possam utilizar ao requisitar
dados e invocar métodos. Dessa forma, um objeto pode ser tratado como uma caixa preta,
possuindo sua interface para entrada/saída, fazendo com que não seja necessário ao
desenvolvedor conhecer as definições internas do objeto. Então, são criados métodos para
atribuir e obter os valores dos atributos e um objeto, escondendo a complexidade interna
necessária para manter os valores dos seus atributos.

No objeto pbPrimeiro, que é uma instância da classe cpbNavegacao, o método


ObtemTitulo( ) retorna o valor do atributo do objeto chamado Titulo. O método
MostraMsgErro( ) mostra ao usuário a mensagem adequada de erro numa caixa de diálogo.
Objetos externos podem utilizar os métodos sem preocupar-se com a complexidade que
envolve o processamento dos mesmos.

Polimorfismo

É basicamente o fato de objetos da mesma classe (ou não) responderem de forma diferente
a mesma mensagem.

Normalmente, o método padrão para uma determinada operação é especificado em alguma


classe pai. Eventualmente, uma ou mais classes filhas podem necessitar de uma
implementação diferente para um determinado método. Sendo assim, a classe filha faz a
especificação da operação que passa a ser um método interno seu. Fazendo isso, a classe
filha não herda mais as especificações para esse método, definido em suas classes pai.
Nesse caso, diz-se que foi implementado o polimorfismo através de sobreposição de
métodos, a classe filha "sobrescreveu" o método antes definido na classe pai. Observe o
exemplo:

Classe cCalculadora
Métodos
Imprimir ( )  imprime o resultado da operação matemática realizada.
Copiar ( )  copia o resultado para a área de transferência.

Classe cCalculadoraAvancada
Classe Base : cCalculadora
Métodos
Imprimir ( )  imprime o resultado das últimas dez operações realizadas.
Copiar ( )  copia os últimos dez resultados para a área de transferência.

Comportamento

Muitos objetos de uma classe podem apresentar o mesmo comportamento ao representar e


processar dados. Esse comportamento é conhecido como comportamento da classe.
Existem casos em que os objetos de uma mesma classe apresentam comportamento
diferente, o qual é conhecido como comportamento da instância.

Página PAGE 582


Programando com o Centura Team Developer 2000

Implementando OOP no Centura SQLWindows/32

As classes no SQLWindows/32 estão localizadas no outline, na seção Global Declarations


| Classes, ou, conforme ilustrado abaixo, na pasta Classes, localizada no quadro esquerdo
do SQLWindows/32.
Observe abaixo como são organizadas as classes no outline.

Exemplo de classe de form window :

Representação de uma classe de form window no SQLWindows/32.

Na figura acima estão mostradas as seções pertencentes a uma classe de form window.
Cada tipo de classe possui seções específicas ao seu tipo. Porém, as seções são
basicamente as mesmas. Por exemplo, uma classe de pushbutton possui as mesmas seções
descritas abaixo, com exceção das seções que são específicas aos objetos do tipo form
window. No caso da classe de form window, as seções são:

Seção no Outline Descrição


Form Window Class: Descreve o tipo e o nome da classe. O nome da classe
cfrmPadrao será utilizado quando você instanciar um objeto, este
nome será apresentado no menu de contexto de criação
de objetos tipo top level.
Description A descrição da classe. Utilize para propósitos de
documentação, informando o que esta classe faz.
Derived From Quando esta classe é derivada de outra, o nome da
classe base fica nesta seção. No caso de herança
múltipla, os nomes aparecem listados aqui. A ordem
dos nomes das classes pode fazer muita diferença.
Menu A definição do menu que será utilizado pelos membros
da classe.
Tool Bar A definição da toolbar utilizada pelos membros da
classe.
Contents Os objetos child.
Class Variables Variáveis que são compartilhadas entre os membros da
classe.
Instance Variables Variáveis específicas para cada instância desta classe.
São as variáveis cujos valores são únicos para cada
elemento.
Página PAGE 582
Programando com o Centura Team Developer 2000

Functions Funções ( métodos ) que poderão ser utilizadas pelos


membros da classe. São similares às funções utilizadas
no restante da aplicação, exceto pelo fato de que os
métodos aqui declarados dão acesso aos atributos da
classe ( as variáveis de classe e de instância ).
Message Actions As ações padrões aos membros da classe.

A definição da classe

A figura abaixo ilustra a definição de uma classe de pushbutton chamada cpbDica:

Definição da variável de instância isMsgDica.

A variável isMsgDica será utilizada para mostrar ao usuário um texto identificando a sua
função. Cada instância da classe cpbDica precisa atribuir à variável isMsgDica a
mensagem que será mostrada ao usuário, a sua mensagem específica.

Isto é feito conforme ilustrado na figura abaixo:

A inicialização da variável de instância isMsgDica com as mensagens a serem


mostradas.

Podemos agora analisar o funcionamento do método MostrarMsgDica( ):

Página PAGE 582


Programando com o Centura Team Developer 2000

A utilização das variáveis de instância.

Observe que o método MostrarMsgDica( ), que foi definido na classe, utiliza o mesmo
código para todas as instâncias, porém, os valores são diferentes, pois, a variável de
instância isMsgDica foi inicializada em cada instância com seus devidos valores. Isso faz
com que o resultado também seja diferente.

O comportamento descrito na classe representa o comportamento padrão aos membros da


classe que irão responder aos eventos, desde que não sejam sobrepostos os métodos. As
modificações necessárias a um determinado objeto, que necessite executar uma tarefa
diferente da descrita na classe, são feitas da forma normal, como qualquer código escrito
em qualquer parte do programa, porém, apenas no método a ser redefinido. Conforme
ilustrado no exemplo abaixo :

Sobreposição de código

Página PAGE 582


Programando com o Centura Team Developer 2000

Essa modificação no código faz com que o pb1 continue funcionando conforme as
instruções descritas na classe base. Já o objeto pb2, que teve o código referente ao evento
SAM_Click modificado, não executará o código padrão definido na classe. Esse exemplo
demonstra o polimorfismo por sobreposição de código.

Classes Derivadas

Vamos agora definir uma classe de pushbutton que deve ser derivada da classe cpbDica,
ou seja, tudo o que já foi codificado para a classe cpbDica será automaticamente herdado
por essa nova classe.

Apenas para demonstrar outra maneira de se definir uma classe, utilizaremos o assistente
do SQLWindows/32 para essa tarefa.

Ative o Assistente para Geração de Classes, através da caixa de diálogo Wizards ( Ctrl-W
).

Na sua primeira janela, você precisa informar ao Assistente de Classes o tipo da classe a
ser gerada.

Assistente de Classes.

Conforme a figura acima, escolha no list box com os tipos de classes a classe de
Pushbutton, em seguida clicando no pushbutton Next.

Na próxima janela do Assistente de Classes você deve informar o nome e a descrição da


classe a ser gerada.

Página PAGE 582


Programando com o Centura Team Developer 2000

Assistente de Classes, informações sobre o nome da classe.

Conforme a figura acima, dê o nome para a classe e sua descrição.


Classe : cpbDica2
Descrição : Classe de pushbutton para servir de base aos objetos que deverão apresentar a
sua mensagem de dica na barra de status.

E clique no pushbutton Next.

Na próxima janela do Assistente de Classes você deve selecionar a classe que será a classe
base da classe gerada.

O Assistente de Classes, a escolha da classe base.

Conforme a figura acima, escolha a classe cpbDica, que foi previamente criada.
Clique no pushbutton Add para que a classe base seja efetivamente escolhida.

Prossiga pressionando no pushbutton Next.

Página PAGE 582


Programando com o Centura Team Developer 2000

Na próxima janela do Assistente de Classes você poderá confirmar o que será gerado na
sua aplicação. Clicando no pushbutton Finish, o Assistente de Classes irá criar a classe no
local apropriado do Outline, que ficará conforme mostrado na figura abaixo:

O código da classe que foi gerado pelo Assistente de Classes.

Página PAGE 582


Programando com o Centura Team Developer 2000

Tipos de classes do SQLWindows/32

O SQLWindows/32 suporta quatro tipos de classes. Esses tipos de classes possuem em


comum vários recursos como funções, variáveis de instância e de classe. Com exceção das
classes do tipo Functional Class, todas as demais possuem a seção message actions.

Veremos uma descrição dos tipos de classes disponíveis no SQLWindows/32:

Functional Class

A classe functional é um objeto não visual que pode ser utilizado para representar objetos
intangíveis. Por exemplo, um processo de controle de estoque não pode ser representado
visualmente, porém, o processo possui um padrão definido. Classes funcionais também
podem ser utilizadas como Classes Abstratas Base, para objetos tangíveis.

General Window Class

Uma classe tipo General Window possui todas as funcionalidades encontradas numa classe
tipo functional e possui ainda a seção Message Actions. Assim como a classe Functional,
essa classe não possui representação visual, porém, pode ser utilizada para compartilhar a
funcionalidade das mensagens, das funções e variáveis entre todos os demais tipos de
classes. Classes do tipo General Window só podem ser utilizadas como classe abstrata.

Classes Window

Classes Window são as classes correspondentes a cada tipo de objeto do SQLWindows/32


(por exemplo, scroll bars, radio buttons e combo box). Essas classes devem ser utilizadas
como base para as definições das classes instanciadas pelos objetos visuais. Devem ser
usadas também para dar a aparência correspondente à funcionalidade das aplicações.

Classes Custom Control

Classes tipo custom control são utilizadas para permitir que DLLs e controles do Visual
Basic possam ser utilizados no SQLWindows/32. Através de classes custom control o
programador pode expandir a funcionalidade de um controle, ou empacotar a
funcionalidade para facilitar a sua utilização. A grande diferença presente nesta classe está
em prover a funcionalidade necessária para se relacionar com rotinas externas.

Página PAGE 582


Programando com o Centura Team Developer 2000

A representação das classes no outline do SQLWindows/32

Uma classe no outline do SQLWindows/32 é representada por uma determinada estrutura.


Essa estrutura é padrão e pouca diferença há entre as estruturas de diferentes classes.
Abaixo estão descritas as seções que são adicionadas ao outline quando você cria uma
classe.

As seções das classes são:

Nome da classe

É utilizado quando você instancia um objeto. Esse nome é apresentado no menu de


contexto de criação de objetos tipo top level. Para classes de objetos child, o nome da
classe é mostrado na paleta de controles. Assim que você escolher um tipo de objeto, as
classes desse objeto são listadas na Paleta de Controles.

Derived From

Quando uma classe é derivada de outra, o nome da classe base fica nesta seção. Você não
pode derivar classes de tipos diferentes. Por exemplo, uma classe de combo box não pode
ter como classe base uma classe de pushbutton.

Classes tipo functional só podem ter como classe base uma ou mais classes do tipo
functional.

Classes tipo general window só podem ter como classe base uma ou mais classes do tipo
functional e general window class.

Classes de objetos top level e child só podem ter como classe base uma ou mais classes do
mesmo tipo, classes tipo functional e/ou do tipo general window class.

Class Variables

Variáveis de classe são as variáveis que armazenam dados compartilhados entre todos os
membros da classe. Isso significa que existe apenas um único local alocado para
armazenamento desse tipo de variável para todos os membros da classe. Esse tipo de
variável é bastante parecido com uma variável Global, exceto pelo fato de que só pode ser
utilizada por membros da classe.
Se um membro da classe armazena um valor numa variável de classe, todos os demais
membros da classe podem ver o novo valor.

Instance Variables

Variáveis de instância são variáveis definidas para utilização pela classe. Porém, diferente
das variáveis de classe, existe um local de armazenamento para cada membro da classe.
Dessa forma, cada instância da classe possui seus próprios valores para os mesmos
atributos.

Functions

Página PAGE 582


Programando com o Centura Team Developer 2000

Funções (métodos) que poderão ser utilizadas pelos membros da classe. São similares às
funções utilizadas no restante da aplicação, exceto pelo fato de que os métodos aqui
declarados dão acesso aos atributos da classe (as variáveis de classe e de instância), e não
podem ser utilizados de fora da classe.

Message Actions

Todos os tipos de classe possuem esta seção, exceto as classes functional e as classes de
objetos passivos (como line, background e frames). Todo o processamento global de
mensagens deve ser codificado nesta seção. A única forma de compartilhamento de
mensagens entre objetos visuais de tipos diferentes é através do message actions da classe
general window.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 9
Ampliando o desenvolvimento com o CDK
Neste capítulo você conhecerá os fundamentos do CDK, seus benefícios,
componentes, e aprenderá a utilizar seus recursos, entre eles a geração de
código fonte, talvez o mais interessante dos recursos disponíveis no
SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

Apresentação

O CDK é uma biblioteca orientada a objeto que possui uma série de classes, as quais
podem ser utilizadas pelos programadores em SQLWindows/32 e em linguagem C++.

O CDK torna possível:

 O desenvolvimento de ferramentas adicionais para os programadores em linguagem


SQLWindows/32.

 A confecção de assistentes, componentes e uma série de utilitários que ajudam a


aumentar a produtividade.

 Adaptação do ambiente de desenvolvimento Centura de acordo com as necessidades do


desenvolvedor.

 A integração do Centura com outras ferramentas de desenvolvimento, como por


exemplo ferramentas upper-CASE, ferramentas de teste e análise de performance.

Utilização e benefícios

Utilizando os objetos providos pela biblioteca CDK você pode desenvolver uma série de
ferramentas que aumentarão sua produtividade em diversas tarefas repetitivas, tarefas que,
se realizadas manualmente, podem demorar muito tempo para ficarem prontas, além de
não haver garantia de padronizacão e de qualidade.

Alguns exemplos de ferramentas que você pode construir:

 Um programa que salve as aplicações e suas respectivas bibliotecas em formato binário


ou texto. Essa é uma forma muito interessante de economizar o espaço ou de atualizar
as bibliotecas de todas as suas aplicações.

 Pode alterar a funcionalidade da opção Save na barra de ferramentas do


SQLWindows/32, para que, automaticamente, seja realizado um backup do arquivo
fonte.

 Personalizar o ambiente de desenvolvimento, permitindo que você configure as


propriedades de vários objetos num form window, ao mesmo tempo.

 Personalizar objetos de forma que suas propriedades sejam configuradas através de


amigáveis assistentes, ficando essas armazenadas dentro do objeto, não aparecendo no
outline. Essas propriedades são recuperadas pelo objeto quando for necessário, e o
programador pode alterá-las através da sua janela de configuração.

 Um programa que faz as correções necessárias, quanto ao tratamento de datas com


quatro dígitos para o ano, evitando assim que ocorram erros com a chegada do ano
2000.

Página PAGE 582


Programando com o Centura Team Developer 2000

 Expandir e aumentar o seu ambiente de trabalho, criando você mesmo seus utilitários
para ajudá-lo no processo de desenvolvimento.

 Melhorar a precisão da implementação do código, utilizando ferramentas que, de forma


bastante simples, através de interfaces amigáveis, façam a geração de código
automaticamente.

Página PAGE 582


Programando com o Centura Team Developer 2000

Interfaces

O CDK possui três interfaces, descritas abaixo:

 Interface Outline

Esta interface é composta de um conjunto de classes e funções que permitem a


manipulação do outline de uma aplicação SQLWindows/32. Essa manipulação é feita
através de um outro programa escrito em SQLWindows/32 ou C++. Para utilização dessa
biblioteca de classes, é necessário o conhecimento da estrutura do outline do
SQLWindows/32.

Utilize a interface Outline para criar programas que leiam e que gerem aplicações
SQLWindows/32 com a linguagem SAL ou C++.

As classes e funções providas pela interface Outline estão presentes na biblioteca chamada
CDK.APL, que é instalada junto com o CDK, conforme instruções descritas no Apêndice F
- Guia de instalação do Centura Team Developer 2000.

 Interface Runtine

Esta interface permite que se obtenha o estado dos objetos de uma aplicação
SQLWindows/32 quando estes encontram-se em tempo de execução, pode ser utilizada por
uma série de utilitários como ferramentas de automatização de testes.

Você pode utilizar a interface Runtime para avaliações de performance, depuração etc.
Pode também acompanhar a execução de cada comando, gravando um arquivo de log, sem
utilizar nenhum comando de depuração do SQLWindows/32, ou seja, sem alteração no
código fonte.

 Interface Notification

Esta interface permite que um programa receba avisos cada vez que você modificar o foco
no outline, apagar um item, adicionar um item, abrir ou salvar uma aplicação no
SQLWindows/32. Você pode criar ferramentas que executem tarefas, como selecionar uma
linha na visão Outline. A interface Notification atua sobre a interface do SQLWindows/32
com o programador.

Ferramentas do CDK

O CDK possui algumas ferramentas para o SQLWindows/32 que são instaladas junto com
o produto no subdiretório cdk\samples, são elas:

Página PAGE 582


Programando com o Centura Team Developer 2000

 CDK Item Explorer


Cada elemento no outline do SQLWindows/32 possui um valor numérico, identificado
por uma constante declarada na seção Constants na biblioteca CDK.APL. Este utilitário
permite que você conheça os valores de cada elemento do outline, bastando que você
selecione o componente desejado.

 Wizard Wizard
Instala o seu assistente junto aos assistentes do SQLWindows/32.

 Property Editor
Mostra as propriedades de um objeto, permitindo que sejam alteradas.

 Mass Customizer
Lista todos os objetos child de um determinado top level window e permite que você
modifique os valores dos atributos de um ou mais objeto ao mesmo tempo.

Página PAGE 582


Programando com o Centura Team Developer 2000

O modo de funcionamento

O modo de funcionamento do CDK é bastante simples. Consiste basicamente de uma


aplicação ( ativa ), que serve como um editor das propriedades, ou seja, uma janela de
configurações, que lê e escreve o código fonte na aplicação que está sendo configurada
(passiva). A aplicação ativa pode ser escrita em SQLWindows/32 ou em linguagem C++.

Existem quatro maneiras de relacionar sua aplicação SQLWindows/32 à aplicação que


configura as propriedades, são elas:

 Relacionando, através do QuickObject Editor, o objeto à aplicação que serve de


editor das propriedades.

 Adicionando um ícone na barra de ferramenats do SQLWindows/32 que ativa o editor


de propriedades.

 Escrevendo código na aplicação a partir de um programa em execução, o qual abre um


fonte SQLWindows/32, lê e escreve os comandos necessários, salva e fecha a
aplicação.

 Registrando, como um Assistente, a aplicação que serve como editor de propriedades.


Essa aplicação passa a ser ativada a partir da janela Wizards do próprio
SQLWindows/32.

Serão mostrados exemplos para cada um dos casos citados acima.

i
Informação:
Os capítulos 9 e 10 dão todas as informações necessárias para realizar essas
quatro tarefas citadas acima, sendo de suma importância que você compreenda
o funcionamento dos QuickObjects, que foi explicado no capítulo 6, e as
classes estudadas no capítulo 8.

Utilizando o QuickObject Editor

Através do QuickObject Editor, você relaciona uma classe a um aplicativo que irá
configurar suas propriedades.

A criação de uma aplicação que configura as propriedades de objetos é estudada em


detalhes no capítulo 10 - Criando seus próprios QuickObjects.

A seguir, serão enumeradas as instruções que você deve seguir para relacionar uma classe
ao aplicativo que irá configurar as suas propriedades.

1- Inicie uma nova aplicação no SQLWindows/32.

2- Crie uma nova classe de data fields, chamada cMeuDataField, na seção de classes
do outline.

3- Crie um novo form window chamado frmExemplo.

Página PAGE 582


Programando com o Centura Team Developer 2000

4- Coloque um data field da classe cMeuDataField no form window frmExemplo.

Dê um nome a esse data field, utilize o nome dfTEXTO para facilitar futuras
referências.

5- Acione o QuickObject Editor através dos menus Component | QuickObject


Editor....
6- Na tela do QuickObject Editor preencha os campos com as informações descritas a
seguir:

7- Selecione a classe cMeuDataField que você criou conforme o item 2.

8- No campo Application Name informe a aplicação chamada exCDK_App_01.exe,


(posteriormente estudaremos detalhadamente a construção dessa aplicação).

Você pode fazer download dos arquivos fonte presentes no livro diretamente a
partir do site http://www.centuraexplorer.com.br/livro_ctd2000/.

9- No combo box Dialog Name você deve escolher o dlgConfigProp.

10- No campo Command Text escreva "Propriedades..." ( sem as aspas ).

11- Sua tela deve estar igual a figura mostrada abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Clique no botão OK para aplicar as configurações feitas e fechar a janela do


QuickObject Editor. Os demais campos dessa tela serão explicados no final deste
exemplo.

12- Acione o customizer do data field que você colocou no form window frmExemplo.
Observe que uma nova opção apareceu no customizer, a opção chamada
Propriedades....

Essa nova opção foi criada para ativar a aplicação que irá configurar as
propriedades desse objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

13- Abaixo você pode observar a janela de configuração das propriedades que foi
chamada conforme configurado no QuickObject Editor.

Essa janela é a janela de configuração das propriedades da classe cMeuDataField.

Para facilitar referências futuras, salve sua aplicação como exCap10_01.app.

O QuickObject Editor

O QuickObject Editor serve para relacionar as classes visuais desenvolvidas no


SQLWindows/32 as suas respectivas aplicações, responsáveis por configurar os seus
atributos. Essa aplicação deve ter sido construída numa versão binariamente compatível
com o SQLWindows/32 que está sendo executado no momento. Por exemplo, não é
possível a uma classe, atualmente carregada no outline do SQLWindows/32, ser
configurada por uma aplicação gerada numa versão do SQLWindows/16, ou ainda numa
versão anterior do Centura Team Developer 2000.

Observe abaixo o que significa cada objeto presente na tela do QuickObject Editor:

Página PAGE 582


Programando com o Centura Team Developer 2000

1 No list box Classes são mostrados os nomes de todas as classes visuais da aplicação.
Você só pode configurar as classes definidas na aplicação atual. Classes
pertencentes a outras bibliotecas são mostradas em letras azuis, porém, não podem
ser alteradas. As classes que você pode configurar são mostradas em letras pretas.

2 No campo Application Name, você deve informar o path completo do aplicativo


responsável pela configuração das propriedades da classe selecionada no list box
Classes. Esse aplicativo é o programa que, utilizando a biblioteca de classes do
CDK, lê e grava no outline as configurações necessárias.

3 Você deve escolher um dos nomes mostrados no combo box Dialog Name, onde são
mostrados os nomes dos dialog boxes presentes na aplicação que você informou no
campo Application Name. O dialog box que você escolher será ativado, quando
solicitado pelo programador, para configurar as propriedades das instâncias da
classe selecionada no list box Classes.

Veremos mais à frente como construir os dialog boxes de configuração de


propriedades.

4 Através do QuickObject Editor você pode especificar duas maneiras de se ativar o


dialog box de configuração de propriedades. A maneira padrão é através da opção
que é adicionada no customizer do objeto, conforme você pôde observar no exemplo
anterior. Outra maneira é fazer com que, de forma automática, o dialog box de
configuração seja acionado, assim que você, a partir da paleta de controles, coloca o
objeto no form window. Para que isso ocorra, selecione o check box identificado na
figura acima pelo número 4.

5 No campo Palette Bitmap você pode especificar o path completo da figura que será
utilizada como ícone da classe, que será mostrado na paleta de controles.

6 No campo CommandText você deve informar o texto do novo item que será
adicionado no customizer do objeto. Através desse item de menu, o programador
poderá acionar a janela de configurações das propriedades do objeto.

7 Se você quiser que os objetos tipo data source sejam mostrados na paleta de
controles, selecione o check box identificado na figura acima com o número 7.

Para salvar as configurações feitas para uma classe, e poder configurar outras
classes, clique no botão Apply. Clicando no botão OK as configurações feitas são
gravadas, e o QuickObject Editor é encerrado. O botão Clear limpa as configurações
para a classe que estiver selecionada. Para sair do QuickObject Editor, sem gravar as
configurações feitas, clique no botão Cancel.

Adicionando sua aplicação como um ícone na barra de ferramentas do


SQLWindows/32

Você pode adicionar ícones na barra de ferramentas do SQLWindows/32, para ativar os


aplicativos de configuração de propriedades dos objetos.

Página PAGE 582


Programando com o Centura Team Developer 2000

A seguir, serão enumeradas as instruções que deverão ser seguidas para adicionar um ícone
na barra de ferramentas do SQLWindows/32. Neste exemplo, o ícone executará a mesma
aplicação do exemplo anteiror.

1- Caso seja necessário, inicie o SQLWindows/32 e carregue a aplicação exemplo


chamada exCap10_01.app, utilizada no exemplo anterior.

2- Acione a janela de configurações das ferramentas através do menu Tools | User


Tools.

3- Para adicionar uma nova ferramenta você deve clicar no botão Add.

4- No campo chamado Command informe a aplicação chamada exCDK_App_01.exe,


Não esqueça de colocar o path completo, para que a aplicação seja encontrada.
Essa foi a mesma aplicação utilizada no exemplo anterior.

5- No campo Parameters digite:


"dlgConfigProp" $Outline $MarkedItem $MainWindow

Posteriormente esses parâmetros serão explicados.

6- No campo Working Directory informe o mesmo path utilizado no item 4.

7- No campo Menu Text informe "Propriedades" ( sem as aspas ).

8- No campo Tool Tip informe "Propriedades do objeto" ( sem as aspas ).

9- Clique no botão OK para salvar as configurações feitas.

10- Observe que foi adicionado ao menu Tools o item que você acabou de adicionar.

Para acionar a janela de propriedades, selecione o objeto data field e acione o


menu Tools | Propriedades.

11- Você pode também ativar a barra de ferramentas do SQLWindows/32. Acione o


menu Tools | Toolbars ...

Página PAGE 582


Programando com o Centura Team Developer 2000

12- Marque o check box Tools para que a barra de ferramentas apareça.

13- A barra de ferramentas pode ser posicionada em qualquer lugar da tela.

A janela Tools

Através da janela Tools é possível adicionar novas funcionalidades ao menu Tools do


SQLWindows/32. Você pode adicionar seus QuickObjects ( como mostrado no exemplo
anterior ) ou chamadas para quaisquer aplicativos que você desejar, como seu browser,
aplicativo de e-mails, editor de textos ou agenda.

Cada aplicativo adicionado ao menu Tools está também, automaticamente, disponível na


barra de ferramentas Tools.

Observe abaixo o que significa cada objeto presente na tela de configurações do menu
Tools.

Página PAGE 582


Programando com o Centura Team Developer 2000

1 O objeto mostrado no campo Tools é um list view, onde são mostrados os ícones e
os nomes das aplicações já configuradas no menu Tools, as aplicações já existentes.
Caso você queira alterar alguma configuração feita numa ferramenta presente, basta
clicar uma vez sobre seu ícone ou nome, fazer as alterações desejadas e então clicar
no botão OK para gravar as configurações.

2 Quando o check box Ask for arguments está selecionado, o SQLWindows/32, ao


executar o aplicativo que está sendo configurado, mostra uma caixa de diálogo
solicitando por mais algum argumento a ser passado como parâmetro ao aplicativo
de configuração.

3 Ao marcar o check box Ask to save outline, o SQLWindows/32 sempre irá perguntar
se você deseja salvar a aplicação antes de executar o aplicativo configurado.

4 Informe no campo Command a linha de comando completa para a execução da


ferramenta desejada, ou seja, o path completo e o nome do aplicativo. Para executar
o nosso aplicativo exemplo, informamos o path e o nome do seu executável. Por
exemplo, caso você queira ativar o windows explorer informe
C:\WINDOWS\EXPLORER.EXE.

Página PAGE 582


Programando com o Centura Team Developer 2000

5 No campo Parameters são colocados os parâmetros que serão enviados ao aplicativo


a ser executado. No caso dos QuickObjects, os quatro primeiros parâmetros sempre
devem ser o nome do dialog box que será ativado no aplicativo, o handle do outline
atual, o handle do objeto ativo e o handle da janela principal. Você deve utilizar as
macros descritas abaixo:

$File A especificação completa do nome do arquivo que representa o


outline.
$FileName O nome e extensão do arquivo que representa o outline.
$FileDir O drive e diretório do arquivo que representa o outline.
$Outline Um valor numérico equivalente ao outline atual.
$MainWindo O handle da janela principal.
w
$DesignItem O handle do objeto top level que está sendo utilizado no
SQLWindows/32 ( é o handle do form window, mdi, dialog box ou
table ).
$MarkedItem O handle do objeto selecionado no outline.

6 Informe no campo Working Directory o diretório de trabalho da aplicação informada


no campo 4.

7 O texto informado no campo Menu Text será adicionado ao menu Tools.

8 O texto informado no campo Tool Tip será mostrado quando o mouse estiver sobre o
ícone da barra de ferramentas correspondente a essa ferramenta.

9 Você pode escolher um dos ícones mostrados no campo Available Icons, para que
seja associado ao aplicativo que você está configurando. Esse ícone é mostrado na
barra de ferramentas Tools.

1 O botão identificado pelo número dez aciona um menu mostrando as macros que
0 você pode informar no campo Parameters.

Escrevendo código numa aplicação

Neste exemplo, mostraremos como construir uma aplicação em SQLWindows/32 que,


utilizando o CDK, irá abrir uma aplicação, escrever algumas linhas de código, salvar e
fechar a aplicação. Os passos são os seguintes:

 Abrir a aplicação fonte, chamada exCap10_01.app, que criamos no primeiro exemplo.


 Localizar o form window que chamamos de frmExemplo.
 Definir uma variável na seção variables do form window frmExemplo.
 Dentro desse form window, localizar o data field chamado dfTEXTO.
 Escrever algumas linhas de código para o dfTEXTO.
 Salvar a aplicação com o nome exCap10_02.app.
 E sair.

Observe as instruções detalhadas para executarmos estas operações:

Página PAGE 582


Programando com o Centura Team Developer 2000

1 - Caso seja necessário, inicie uma nova aplicação no SQLWindows/32.

2 - Declare na seção file Include do outline a biblioteca do CDK chamada CDK.APL.

3- Crie um novo form window chamado frmGeraCodigo.

4- Coloque um pushbutton nesse form window, com o nome pbGERAR_CODIGO e


com título "Gerar Código".

5- Declare algumas variáveis na seção Variables do form window frmGeraCodigo,


conforme mostrado abaixo:

6- Digite o código mostrado abaixo no message actions do botão


pbGERAR_CODIGO. As linhas de código estão numeradas para facilitar as
1
explicações:
2
3 On SAM_Click
4 Call SalWaitCursor( TRUE )
5 Call CDK_App.InitFromFile ( "exCap10_01.app" )
6 If CDK_App.GetTopLevelWindow ( "frmExemplo" , oForm )
7 Call oForm.AddWindowVariable( CDK_IT_String, "sNome" )
8 If oForm.GetChildWindow ( "dfTEXTO" , oDataField )
9 Call oDataField.AddMessageAction ( "SAM_Create" , oMensagem )
10 Call oMensagem.GetActions ( oAcao )
11 Call oAcao.InsertAfter ( "Call SalGetItemName( hWndItem , sNome )" )
12 Call oAcao.InsertAfter( "Set MyValue = 'Olá, este é o objeto ' || sNome")
13 Call CDK_App.SaveOutline ( "exCap10_02.app" )
Página PAGE 582
Programando com o Centura Team Developer 2000

Call CDK_App.CloseApp ( )
Call SalWaitCursor( FALSE )

Na linha 3, a aplicação exCap10_01.app é inicializada pela função do CDK


chamada InitFromFile. A variável CDK_App representa o objeto aplicação.

Na linha 4 a função GetTopLevelWindow está localizando o objeto frmExemplo e,


quando encontrar, inicializa o objeto representado pela variável oForm.

Na linha 5, uma variável tipo String, chamada sNome, é definida no objeto


identificado pela variável oForm. CDK_IT_String é uma constante do CDK que
representa o tipo de dado string, na definição de variáveis.

Na linha 6 a função GetChildWindow localiza o objeto dfTEXTO, dentro do


objeto representado pela variável oForm, ou seja, o dfTEXTO é procurado dentro
do frmExemplo. Quando o data field for encontrado, o objeto representado pela
variável oDataField é inicializado.

Na linha 7 é adicionado o evento SAM_Create no message actions do data field.

A linha 8 inicializa o objeto oAcao, que será utilizado para escrever o código
referente ao conteúdo do evento SAM_Create.

Na linha 9 é inserido uma linha de código dentro do evento SAM_Create, essa


linha obtém o nome do objeto, armazenando-o na variável sNome, que foi definida
na linha 5.

Na linha 10 o valor do conteúdo do data field é definido, utilizando-se o conteúdo


da variável sNome.

7- Salve a aplicação ( como exCap10_03.app) e execute.

8- Clique no pbGERAR_CODIGO, para que o códgo seja escrito na aplicação


destino.

9- Após o término da execução, carregue a aplicação destino (exCap10_02.app) no


SQLWindows/32 e observe o código que foi escrito.
Form Window: frmExemplo
Contents
cMeuDataField: dfTEXTO
On SAM_Create
Call SalGetItemName( hWndItem , sNome )
Set MyValue = 'Olá, este é o objeto ' || sNome

Execute a aplicação e veja o resultado.

Assim, utilizando o CDK, você pode construir programas que escrevam código fonte no
outline de aplicações SQLWindows/32, podendo vir a criar aplicações completas dessa

Página PAGE 582


Programando com o Centura Team Developer 2000

forma. Este assunto será estudado detalhadamente no Capítulo 11 - Criando seus próprios
QuickObjects.

Registrando seus Assistentes

Suas aplicações construídas com o CDK podem ser transformadas em Assistentes, e você
pode registrar essas aplicações na caixa de diálogo de assistentes do próprio
SQLWindows/32, a janela Wizards, facilitando a utilização por parte dos desenvolvedores.

Para que você inclua suas aplicações na janela Wizards, é necessário registrar no
SQLWindows/32 o Assistente dos Wizards, uma aplicação que é instalada junto com o
CDK, chamada Wizard Wizard.

Para instalar o Wizard Wizard siga os seguintes procedimentos:

1- Ative o SQLWindows/32, caso seja necessário.

2- O Wizard será adicionado na janela dos Wizards do SQLWindows/32. Pressione


Ctrl-W, ou ative o menu Component | Wizards ... para visualizar a janela
Wizards.

Clique no botão Cancel para fechar a janela Wizards.

3- A aplicação Wizard Wizard precisa ser executada, isso pode ser feito de uma das
maneiras mostradas abaixo:

 Ative o menu Executar no Menu Iniciar do seu Windows e informe o


Página PAGE 582
Programando com o Centura Team Developer 2000

aplicativo "C:\Program Files\Centura\cdk\sal\samples\Wizwiz.exe" para ser


executado.

 Através do Windows Explorer, localize o diretório


C:\CENTURA\CDK\TOOLS e clique duas vezes no programa WIZWIZ.EXE.

4- Confirme a execução da aplicação quando esta janela de confirmação for


mostrada.

Página PAGE 582


Programando com o Centura Team Developer 2000

5- A janela abaixo mostra as informações que serão gravadas no registro do sistema.

Não altere nenhuma das informações mostradas, simplesmente clique no botão


Install para que a instalação seja realizada.

6- A janela mostrada abaixo indica que o processo de instalação do Wizard Wizard


foi concluído com sucesso.

7- O Wizard Wizard, devidamente registrado na janela Wizards do SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

Uma vez que o Wizard Wizard encontra-se instalado, você pode instalar seus próprios
Wizards. O Wizard Wizard faz com que sua aplicação seja um assistente auto-instalável,
ou seja, que se registra automaticamente junto aos assistentes do SQLWindows/32.

Para exemplificar o registro de uma aplicação com Assistente de Wizard utilizaremos a


aplicação chamada "exemplo de editor de propriedades", exCDK_App_01.app, a qual foi
citada no início deste capítulo para ilustrar a utilização de uma aplicação que configura as
propriedades de algum objeto.

Siga as instruções abaixo para registrar a aplicação na janela de Wizards do


SQLWindows/32:

1- Ative o SQLWindows/32, se for necessário, e carregue a aplicação chamada


exCDK_App_01.app

2- Salve a aplicação exCDK_App_01.app com o nome exCDK_App_01a.app.

3- O Wizard Wizard escreverá as instruções necessárias na seção Application


Página PAGE 582
Programando com o Centura Team Developer 2000

Actions, na aplicação, para que essa se comporte como um assistente auto-


instalável, então, apague ou comente a linha referente ao evento On AppStartup, no
Application Actions da aplicação exCDK_App_01.app.

Comente apenas a linha do evento AppStartup, conforme mostrado acima.

Apague ou comente o dialog box chamado dlgConfigProp que existe nessa


aplicação.

4- Ative a janela Wizards e execute o Wizard Wizard.

A figura mostrada acima é a janela inicial do Wizard Wizard, o programa que


transforma sua aplicação em um assistente auto-instalável. Clique no botão Next
para iniciar.

5- Nesta janela você deve informar o nome do aplicativo e o seu ícone. Após ser
instalado, o seu aplicativo será identificado na janela Wizards pelo nome que você
digitar no campo Title.
Página PAGE 582
Programando com o Centura Team Developer 2000

O nome do ícone mostrado no campo Icon File ( D:\Aplicacao\help.ico ) é apenas


uma sugestão.

Clique no botão Next para prosseguir.

6- Nesta janela, digite "Propriedade" ( sem as aspas ) no campo Key.

Isso identifica o seu assistente perante o registro do Windows.

7- Conforme a figura abaixo, digite o nome do dialog box que será executado quando
o seu aplicativo, que será transformado em assistente, for ativado. Informe aqui o
nome da janela principal do seu assistente, digitando "dlgConfigProp".

Clique no botão Next para continuar.


Página PAGE 582
Programando com o Centura Team Developer 2000

8- Na janela abaixo, o Wizard Wizard está mostrando as informações que serão


registradas.

Clique no botão Finish.

Ao término desse processo, o código adicionado pelo Wizard Wizard transformou a


aplicação num assistente auto-instalável. Quando a aplicação for executada pela primeira
vez, ela automaticamente será registrada no Registro do Windows, e o seu ícone será
adicionado à janela Wizards do SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 10
Criando seus próprios QuickObjects
No capítulo 6 foi mostrado como desenvolver aplicações com os QuickObjects que
acompanham o Centura Team Developer. Foram construídas rapidamente algumas
aplicações sem a necessidade de programação em SQLWindows/32. Agora mostraremos
como construir seus próprios QuickObjects, através de exemplos simples e instruções
passo-a-passo. Através dos exemplos mostrados procuramos fazer com que você
compreenda as diversas possibilidades dos QuickObjects.

Para construir seus próprios QuickObjects, você precisa ter compreendido os conceitos
apresentados nos capítulos 8 - Programação Orientada a Objetos com o
SQLWindows/32 e 9 - Ampliando o desenvolvimento com o CDK, pois essa é a base da
tecnologia dos QuickObjects.

Página PAGE 582


Programando com o Centura Team Developer 2000

Introdução

Vamos relembrar alguns conceitos sobre os QuickObjects que precisam estar bem claros
neste momento.

 Os QuickObjects são classes especiais que possuem uma interface amigável com o
programador, para que sejam configuradas suas características, parâmetros e alguns
comportamentos para o objeto, quando este estiver sendo executado.

 Uma classe pode ser configurada via programação através de escrita de código SAL
diretamente no message actions do objeto instanciado, dessa forma configuramos os
comportamentos e atributos. Através do customizer configura-se as características do
objeto. Nesse ponto, os QuickObjects entram em ação, oferecendo uma maneira
amigável e produtiva para a configuração das propriedades do objeto, podendo vir a
substituir totalmente os outros dois modos citados anteriormente.

 A configuração via QuickObjects consiste de uma aplicação que é chamada para


configurar as propriedades do objeto. Essa aplicação pode ter sido escrita em
SQLWindows/32 ou em linguagem C++, utilizando a interface Outline da biblioteca
CDK.

 O relacionamento entre uma classe e a aplicação que irá configurar suas propriedades,
é feito através do QuickObject Editor.

O ciclo de atividades de uma aplicação configuradora de propriedades em uma


determinada classe é descrito abaixo:

1 A aplicação QuickObject precisa saber quem a chamou, isso é possível através dos
parâmetros recebidos na variável do sistema chamada strArgArray. Estas
informações necessárias estão contidas nos quatro primeiros elementos deste vetor:
strArgArray[1]- O nome da caixa de diálogo a ser criada, para configurar as
propriedades.
strArgArray[2]- O identificador do outline da aplicação.
strArgArray[3]- O identificador do objeto no outline.
strArgArray[4]- O handle do objeto principal da janela de design.

Você não precisa preocupar-se com isso, deve apenas ter conhecimento. Existe um
procedimento padrão a todas as aplicações QuickObjects que configuram
propriedades em objetos, este código deve estar presente na seção Application
Actions e é mostrado abaixo:
On SAM_AppStartup
Call CDK_App.InitializeFramework()
Call CDK_App.DisplayModalWindow()
On SAM_AppExit
Call CDK_App.CloseApp()
Call CDK_App.CloseFrameWork()

2 A aplicação deve obter as propriedades a serem configuradas, para que, se


necessário, sejam alteradas. Existem várias formas de se obter uma propriedade de
um objeto, diversas funções podem ser utilizadas, por exemplo:

Página PAGE 582


Programando com o Centura Team Developer 2000

oObjeto.GetClassName ( ) - Obtém o nome da classe do objeto oObjeto.


oObjeto.GetName ( ) - Obtém o nome do objeto.
oObjeto.GetStrProperty ( 'PropXXX' , sProp ) - Obtem o valor da propriedade
'PropXXX'.

A função GetStrProperty deve ser utilizada para recuperar os valores das


propriedades definidas pelo programador.

!
Lembre-se:
As propriedades definidas pelo programador são armazenadas no interior do
objeto, não estando visíveis no attribute inspector, customizer ou no outline. A
única forma de acessar essas propriedades e alterar seus valores é através da
sua própria aplicação configuradora.

3 Ao término da operação de configuração, a aplicação deve gravar as propriedades


configuradas no interior do objeto. Existem várias formas de se gravar uma
propriedade num objeto, diversas funções podem ser utilizadas, por exemplo:

oObjeto.SetObjectClass ( ) - Define a classe base do objeto.


oObjeto.SetName ( ) - Define o nome do objeto.
oObjeto.SetStrProperty ( 'PropXXX' , sProp ) - Gravar o valor da propriedade
'PropXXX' no objeto.

A função SetStrProperty deve ser utilizada para gravar os valores das propriedades
definidas pelo programador.

!
Lembre-se:
As propriedades criadas pelo programador são do tipo de dado string. Você
sempre deve tomar os devidos cuidados junto a sua utilização, convertendo
tipos diferentes ao gravá-las dentro do objeto ( SetStrProperty ), e ao
recuperá-las ( GetStrProperty ).

Eventualmente utilizaremos alguns exemplos de aplicações construídas em capítulos


anteriores, você pode utilizar as aplicações contruídas por você ou recuperá-la diretamente
do CD-ROM que acompanha o livro.

Exemplo 1
Trabalhando com propriedades definidas pelo programador.

Neste exemplo iremos criar uma típica janela de propriedades que será utilizada para
permitir que o programador configure o texto que será mostrado na barra de status, quando
o usuário posicionar o mouse por cima do objeto.

1 - Inicie uma nova aplicação no SQLWindows/32.

2 - Carregue no SQLWindows/32 a aplicação chamada exOOP2.app que foi


Página PAGE 582
Programando com o Centura Team Developer 2000

construída no Capítulo 8 - Programação Orientada a Objetos no


SQLWindows/32.

Você pode fazer download dos arquivos fonte presentes no livro diretamente a
partir do site http://www.centuraexplorer.com.br/livro_ctd2000/. Este exemplo
chama-se exOOP2.app.

Essa aplicação, mostrada na figura acima, faz com que uma mensagem seja
mostrada na barra de status do form window. A mensagem é configurada através
do método DefineMsgBarraStatus que foi definido na classe de pushbutton
cpbDica.

A utilização dessa função não será mais necessária, pois, criaremos uma interface
amigável para configurar esta propriedade.

3 - Comente as linhas de código existentes no message action do pbOK e do


pbCANCELAR.

4 - Para facilitar futuras referências salve a aplicação com o nome exQO2.app.

5 - Inicie uma outra instância do SQLWindows/32. Você ficará com dois


SQLWindows/32 abertos em seu Windows, dessa forma ilustraremos melhor o que
está acontecendo.

6 - Neste segundo SQLWindows/32 aberto defina na seção Libraries do outline a


interface Outline do CDK, cujo nome do arquivo é CDK.APL.

Libraries
File Include: CDK.apl

7 - Para facilitar futuras referências salve a aplicação com o nome exQO2Prop.app.

Página PAGE 582


Programando com o Centura Team Developer 2000

8 - Insira, na seção Application Actions desta aplicação, as linhas de código mostradas


abaixo:
On SAM_AppStartup
Call CDK_App.InitializeFramework()
Call CDK_App.DisplayModalWindow()
On SAM_AppExit
Call CDK_App.CloseApp()
Call CDK_App.CloseFrameWork()

Essas linhas representam a inicialização e a finalização do QuickObject que


estamos criando.

9- Crie um objeto dialog box chamado dlgConfigPropriedades, conforme mostrado


na figura abaixo:

A mensagem que será mostrada na barra de status do form será mostrada no data
field chamado dfTEXTO, permitindo assim, que o programador configure a
mensagem de forma mais amigável. Para gravar as alterações basta clicar no botão
Ok. Caso queira sair sem salvar as alterações, utiliza-se o botão Cancela.

10- Para que o dfTEXTO mostre a mensagem configurada para o objeto você precisa
escrever as seguintes instruções no seu message actions:

O primeiro parâmetro da função GetStrProperty é o nome da propriedade a ter seu


valor recuperado, este valor é armazenado na variável ou objeto informado no
segundo parâmetro.

Página PAGE 582


Programando com o Centura Team Developer 2000

11- A próxima tarefa a ser realizada é gravar o novo valor da propriedade


MsgBarraStatus quando o usuário clicar no botão Ok. Para que o botão grave o
valor da propriedade você deve escrever as seguintes instruções no seu message
actions:

O primeiro parâmetro da função SetStrProperty é o nome da propriedade que terá


seu valor modificado para o conteúdo da variável ou objeto informado no segundo
parâmetro. Quando a propriedade não existe o SQLWindows/32 cria uma nova,
com o nome informado.

Neste caso, a função SalEndDialog simula a operação salvar e fechar, pois, encerra
o dialog box, retornando ao objeto origem, no outline do SQLWindows/32.

12- O código do botão Cancelar é simples, pois encerra a aplicação, sem salvar as
alterações que porventura tenham sido realizadas.

O código do botão Cancelar é mostrado abaixo:

13- Você precisa gerar o executável desta aplicação, para poder relacionar a classe
cpbDica ao dlgConfigPropriedades.

14- Para gerar o executável, acione o menu Project | Build: exQO2Prop.exe

Página PAGE 582


Programando com o Centura Team Developer 2000

15- A janela abaixo é mostradada no caso da geração do executável ser bem sucedida.

16- Caso ocorra algum problema, algo parecido a janela abaixo é mostrado:

O erro pode não ser o mesmo mostrado na figura acima, mas você deve corrigir o
problema e executar novamente as instruções a partir do item 14.

Agora você precisa relacionar a classe cpbDica, que está definida no programa exQO2.app,
ao executável exQO2Prop.exe através do QuickObject Editor. Para fazer isso, siga as
instruções abaixo:

1 - Retorne ao SQLWindows/32 que está com a aplicação exQO2.app carregada.

2 - Ative o QuickObject Editor através do menu Component | QuickObject Editor.

3 - Configure a classe cpbDica, conforme mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

E clique no botão OK para salvar as configurações.

4 - Agora que a classe está configurada, você pode testar a utilização do seu
QuickObject.

5 - Ative a paleta com os controles ( Ctrl-W ) e escolha o objeto do tipo pushbutton,


conforme mostrado na figura abaixo:

Escolha a classe cpbDica e coloque o objeto no form window da sua aplicação.

6 - Ative o menu de contexto do objeto clicando sobre o mesmo com o botão direito
do mouse, para então acionar opção chamada "Propriedades".

7 - Na janela de propriedades, digite o texto que você deseja que seja mostrado
quando o mouse passar por cima do objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

Clique no botão Ok para gravar e sair do QuickObject.

8 - Execute a aplicação.

Você pode utilizar quantas propriedades forem necessárias para resolver as necessidades
da sua aplicação, nesse exemplo, utilizamos apenas uma como efeito didático.

Página PAGE 582


Programando com o Centura Team Developer 2000

Exemplo 2
Populando uma table window

Neste exemplo mostraremos como fazer um assistente que gera uma aplicação
SQLWindows/32 escrevendo o código fonte necessário para o seu funcionamento. Esta
aplicação que será gerada será capaz de carregar, numa table window, as informações
presentes nma tabela do banco de dados, de acordo com as colunas que o programador
desejar.

A janela da aplicação gerada será parecida com a figura abaixo:

Este assistente que criaremos a seguir irá gerar o código necessário para que a aplicação
funcione, o programador não precisará escrever nenhuma linha de programação. Observe
abaixo o código fonte necessário para que a janela acima funcione. Este código foi gerado
pelo assistente que criaremos a seguir:

Será necessário registrar o assistente na janela Wizards do SQLWindows/32, portanto, é


muito importante o total domínio das instruções necessárias a esse procedimento, que foi
explicado no capítulo 10 - Ampliando o desenvolvimento com o CDK.

1 - Inicie uma nova aplicação no SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

2 - Para facilitar futuras referências salve a aplicação com o nome exQO3Wiz.app.

3 - Registre sua aplicação como Wizard auto instalável . Os procedimentos são


detalhadamente explicados no capítulo 10 - Ampliando o desenvolvimento com o
CDK, na seção chamada Registrando seus assistentes.

4 - Além da biblioteca CDK.APL você deve incluir na seção Libraries do outline a


biblioteca chamada dlgLOGIN.APL, pois, nela encontra-se a janela que efetuará o
login no banco de dados.
A seção Libraries da sua aplicação deve estar parecida com a figura mostrada
abaixo:

5 - Observe abaixo o layout do dialog box dlgGeraTbl, faça o mesmo em sua


aplicação.

O programador deve escolher no combo box Tabela o nome da tabela desejada. No


list box chamado Colunas o programador deve clicar duas vezes no nome de cada
coluna que será incluída na aplicação. As colunas mostradas no list box do lado
Página PAGE 582
Programando com o Centura Team Developer 2000

direito serão incluídas na aplicação que será gerada.


Quando for acionado o botão Ok o programa escreverá o código fonte necessário
para que a aplicação funcione.

6- Observe abaixo os nomes dado aos dos objetos, é importante que este padrão seja
seguido para facilitar as explicações a seguir.

7- Abaixo é mostrado o código fonte referente a inicialização do dialog box:


On SAM_Create
If NOT SalModalDialog( dlgLOGIN, hWndForm )
Call SalQuit( )
Else
Call SqlConnect( hSql )

O dialog box dlgLOGIN é ativado logo no início da aplicação, para que o


programa seja conectado ao banco de dados.

8- Abaixo é mostrado o código fonte referente a inicialização do combo box


cmbTABELAS:
Combo Box: cmbTABELAS
Message Actions
On SAM_Create
Call SalListPopulate( hWndItem, hSql, "SELECT NAME FROM SYSTABLES")

Isso faz com que os nomes de todas as tabelas do banco de dados sejam
carregados no combo box.

9- Quando o nome de uma tabela for escolhida no combo box cmbTABELA os


nomes das colunas desta tabela devem ser mostrados no list box lbCOLUNAS.
Combo Box: cmbTABELAS
Message Actions
On SAM_Click
Call SalListPopulate( lbCOLUNAS, hSql,
"SELECT NAME FROM SYSCOLUMNS WHERE TBNAME = :cmbTABELAS" )

Esse é o código necessário ao cmbTABELAS, para que os nomes das colunas


sejam mostrados no list box lbCOLUNAS.

10 - Quando o programador clicar duas vezes em algum dos nomes mostrados no


lbCOLUNAS, esse nome deve ser colocado no lbCOLS_ESCOLHIDAS e
retirado do lbCOLUNAS.

Página PAGE 582


Programando com o Centura Team Developer 2000

List Box: lbCOLUNAS


Message Actions
On SAM_DoubleClick
Call SalListAdd( lbCOLS_ESCOLHIDAS,
SalListQueryTextX( hWndItem, SalListQuerySelection( hWndItem )))
Call SalListDelete( hWndItem, SalListQuerySelection( hWndItem ))

Observe que a função SalListQuerySelection obtém o número do item


selecionado, o item que o programador clicou, esse número é passado como
parâmetro para a função SalListQueryTextX que retorna o texto deste item, esse
texto é inserido no list box lbCOLS_ESCOLHIDAS pela função SalListAdd.
Tudo isso é feito na primeira linha de código do message actions, a segunda linha
simplesmente exclui o item selecionado no list box lbCOLUNAS.

11 - O lbCOLS_ESCOLHIDAS possui comportamento semelhante, observe o código


fonte:
List Box: lbCOLS_ESCOLHIDAS
Message Actions
On SAM_DoubleClick
Call SalListAdd( lbCOLUNAS,
SalListQueryTextX( hWndItem, SalListQuerySelection( hWndItem )))
Call SalListDelete( hWndItem , SalListQuerySelection( hWndItem ))

12 - No botão Ok está a parte principal deste programa, é através dele que o


programador encerra a execução do programa e ativa a geração do código fonte.
O message actions do pbOK é extremamente simples:
Pushbutton: pbOK
Message Actions
On SAM_Click
Call dlgGeraTbl.fListaParaStr( )
Call dlgGeraTbl.fGeraCodigo( )
Call SalEndDialog( hWndForm , TRUE )

Vamos analisar mais detalhadamente as duas funções utilizadas.

13 - A função fListaParaStr transfere os nomes das colunas que foram escolhidas, e


que estão no lbCOLS_ESCOLHIDAS, para uma variável stgring chamada
sColunasEscolhidas. Nessa variável as colunas estão separadas por vírgulas. Isso
é feito para que seja montado parte do comando SELECT que será utilizado para
carregar os dados na table window.
Observe abaixo o código fonte da função fListaParaStr:
Function: fListaParaStr
Local variables
Number: nQtdEscolhidas
Number: nIdx
String: sColuna
Actions
Set nQtdEscolhidas = SalListQueryCount( lbCOLS_ESCOLHIDAS )
Set sColunasEscolhidas = STRING_Null
While nQtdEscolhidas >= nIdx
Set sColuna = SalListQueryTextX( lbCOLS_ESCOLHIDAS, nIdx )
If SalStrLength( sColuna ) >= 1
If SalStrLength( sColunasEscolhidas ) >= 1
Set sColunasEscolhidas = sColunasEscolhidas || ", " || sColuna
Else
Set sColunasEscolhidas = sColuna

Página PAGE 582


Programando com o Centura Team Developer 2000

Set nIdx = nIdx + 1

Suponha que o programador escolheu as colunas COMPANY_ID,


COMPANY_NAME e PHONE. Estas colunas encontram-se no list box
lbCOLS_ESCOLHIDAS. Ao término da execução dessa função o conteúdo da
variável sColunasEscolhidas será "COMPANY_ID, COMPANY_NAME,
PHONE".

14 - Isso tudo é a preparação para a função fGeraCodigo, que gera o código fonte, seu
código é mostrado abaixo:
Function: fGeraCodigo
Local variables
Number: nNumColunas
Number: nColuna
cdkBaseTable: oTable
cdkColumn: oColuna
cdkActionBlock: oAcao
cdkMessageAction: oMsgAction
cdkContainer: oForm
Actions
1 Call CDK_App.AddTopLevelWindow( CDK_IT_TableWindow ,
"tw" || cmbTABELAS , oTable )
2 Call oTable.SetWindowTitle( "Dados da tabela " || cmbTABELAS )
3 Set nNumColunas = SalListQueryCount( lbCOLS_ESCOLHIDAS )
4 Set nColuna = 0
5 While nNumColunas > nColuna
6 Call oTable.AddColumn( "col" ||
SalListQueryTextX( lbCOLS_ESCOLHIDAS, nColuna ) , oColuna )
7 Call oColuna.SetWindowTitle( SalStrProperX(
SalListQueryTextX( lbCOLS_ESCOLHIDAS, nColuna ) ) )
8 Set nColuna = nColuna + 1
!
9 Call oTable.AddWindowVariable( CDK_IT_SqlHandle, "hSql" )
!
10 Call oTable.AddMessageAction( "SAM_Create", oMsgAction )
11 Call oMsgAction.GetActions( oAcao )
!
12 Call oAcao.InsertAfter( "Set SqlDatabase = '" || SqlDatabase || "' " )
13 Call oAcao.InsertAfter( "Set SqlUser = '" || SqlUser || "' " )
14 Call oAcao.InsertAfter( "Set SqlPassword = '" || SqlPassword || "' " )
15 Call oAcao.InsertAfter( "Call SqlConnect ( hSql ) " )
!
16 Call oAcao.InsertAfter( "Call SalTblPopulate ( hWndItem , hSql ,
' SELECT " || sColunasEscolhidas ||
" FROM " || cmbTABELAS || " ' , TBL_FillAll ) " )
!
17 Call oTable.AddMessageAction( "SAM_Close", oMsgAction )
18 Call oMsgAction.GetActions( oAcao )
19 Call oAcao.InsertAfter( "Call SqlDisconnect ( hSql ) " )

As linhas foram numeradas para facilitar as explicações a seguir:


A linha 1 insere na aplicação um objeto tipo top level table window, neste
momento, a variável oTable é inicializada representando o objeto criado. O título
da table window é atribuído na linha 2.
Na linha 3 o número de colunas escolhidas é armazenado na variável
nNumColunas que será utilizada juntamente com a variável nColuna ( na linha 4 )
no loop definido pelo comando While ( na linha 5 ). Esse laço é utilizado para
criar as colunas na aplicação, de acordo com as colunas escolhidas no
lbCOLS_ESCOLHIDAS. A linha 6 insere a coluna enquanto que a linha 7
determina o seu título.
A variável que será utilizada como handle sql é inserida no outline da aplicação,
conforme mostrado na linha 9. As próximas instruções, entre as linhas 10 e 19,
Página PAGE 582
Programando com o Centura Team Developer 2000

são utilizadas para a escrita propriamente dita do código fonte. Essas linhas são
inseridas no message actions da table window, são as informações necessárias
para a conexão e para a carga dos dados na table window.

15 - Você deve gerar o executável desta aplicação ( exQO3Wiz.exe ) e executá-lo para


que seja adicionado à janela Wizards do SQLWindows/32.

Nesse exemplo mostramos como programar a geração de código completamente funcional


em SQLWindows/32 utilizando a biblioteca CDK. Você pode modificar e melhorar
alguma funcionalidade dessa aplicação para melhor satisfazer suas necessidades de
desenvolvimento.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 11
Imprimindo relatórios com o Report Builder
Este capítulo procura apresentar os conceitos de funcionamento do Report Builder e do
SQLWindows na impressão de relatórios. O mecanismo de comunicação entre o Report
Builder e o SQLWindows são apresentados de forma simples sempre seguida de um
exemplo.

É importante consultar o Apêndice D - Guia de referência das Funções do Report Builder


para maiores detalhes das funções disponíveis no Report Builder. Quanto às funções do
SQLWindows que tratam da interface com relatórios recomendamos que seja consultado o
Apêndice A - Guia de Referência das Funções SAL.

Página PAGE 582


Programando com o Centura Team Developer 2000

O mecanismo de impressão de relatório do Centura Team Developer

O Report Builder é a ferramenta que acompanha o Centura Team Developer destinada a


confecção dos relatórios executados a partir das aplicações desenvolvidas em
SQLWindows. É no Report Builder que você define o layout do seu relatório, as colunas,
os grupos de quebras, os totais e as fórmulas. Eventualmente você pode ter necessidade de
criar relatórios com gráficos, necessidade suprida no Report Builder através de um objeto
específico para gráficos.

Você define o layout desejado para o seu relatório no Report Builder e salva este layout
como um arquivo apropriado, com extensão "QRP", que pode ser utilizado no
SQLWindows como parâmetro nas funções SalReport* para identificar o relatório a ser
executado pela aplicação.

Em tempo de execução da aplicação, no momento em que o relatório é solicitado pelo


usuário, você deve fazer uso das funções SalReportPrint() ou SalReportView() para iniciar
a impressão ou a visualização do layout montado. Em tempo de execução os dados são
incorporados ao layout e o relatório é então extraído para a impressora ou tela.

O programador possui total controle sobre o envio dos dados da aplicação para o Report
Builder. Através de uma série de mensagens a comunicação entre as duas aplicações é
estabelecida e a troca de informações é constante.

No momento em que o programador faz uma chamada às funções que disparam o relatório,
o Report Builder é iniciado, por isso o executável do aplicativo Report Builder deve ser
instalado no ambiente do cliente junto com a aplicação. Junto a essa chamada que inicia o
relatório são passados vários parâmetros partindo da aplicação para o Report Builder. Um
desses parâmetros é o nome do arquivo de layout a ser carregado.

Logo na sua inicialização o Report Builder faz algumas verificações como por exemplo
certificar-se da existência do arquivo de layout informado. Existindo alguma anormalidade
a própria função que iniciou o relatório retorna um erro para a aplicação.

Caso nenhum erro ocorra o Report Builder carrega na memória o layout informado e avisa
para a aplicação que a inicialização do relatório foi efetuada com sucesso. O modo pelo
qual o Report Builder avisa a aplicação que tudo está OK é enviando a mensagem
SAM_ReportStart para o objeto identificado na inicialização como objeto responsável pela
comunicação entre a aplicação e o Report Builder. Você deve interceptar essa mensagem
na aplicação caso queira configurar alguns parâmetros, variáveis ou executar algumas
tarefas típicas de inicialização de relatório.

Neste momento o Report Builder está apto a receber dados vindos da aplicação. A tarefa de
buscar os dados do conteúdo do relatório no banco de dados deve ser realizada pela
aplicação, o Report Builder apenas recebe estas informações, formata de acordo com a
definição do layout e envia para a impressora.

Após a mensagem SAM_ReportStart o Report Builder envia outra mensagem à aplicação


para indicar o momento em que a primeira página do relatório será formatada. A
mensagem SAM_ReportFetchInit indica que o Report Builder está apto a receber as

Página PAGE 582


Programando com o Centura Team Developer 2000

informações a serem impressas. Você deve, neste momento, iniciar o envio do conteúdo a
ser impresso.

O restante da comunicação entre a aplicação e o relatório passa a ser estabelecida através


de duas mensagens:

SAM_ReportFetchNext Quando o Report Builder envia esta mensagem para a aplicação


significa que esta pode enviar dados para serem impressos. A
aplicação deve, neste momento, obter a próxima linha de dados
do local de origem das informações a serem impressas, este local
não precisa ser obrigatoriamente um banco de dados padrão SQL.
Relatórios podem ser impressos no Report Builder com dados
vindos de qualquer lugar onde uma aplicação Centura
SQLWindows seja capaz de ir buscar, por exemplo arquivos
TXT, DBF, documentos de um processador de textos ou sites
web.

O Report Builder aguarda pelo valor de retorno da mensagem


SAM_ReportFetchNext. Quando a aplicação determinar que o
relatório deve ser encerrado, um valor FALSE deve ser retornado
nesta mensagem.

Caso um valor TRUE seja retornado o Report Builder continua a


impressão do mesmo.

SAM_ReportNotify As informações enviadas a partir da aplicação vão sendo


formadas pelo Report Builder em blocos para então serem
impressas. Quando estes blocos atingem o limite de uma página a
página é impressa ou visualizada na tela.
A mensagem SAM_ReportNotify é enviada à aplicação antes que
qualquer desses blocos sejam formatados ou impressos, de modo
que você possa modificá-los antes de serem formatados pelo
Report Builder. Por exemplo, antes de formatar o cabeçalho você
pode enviar informações como nome da empresa, intervalo de
datas do período de abrangência do relatório ou até mesmo o
nome do módulo da aplicação.
Consulte o Apêndice C - Guia das Mensagens SAM para obter
maiores detalhes sobre o funcionamento da mensagem
SAM_ReportNotify.

De acordo com as definições feitas no layout quanto aos grupos de quebras o Report
Builder automaticamente efetua as quebras de grupo atualizando os devidos sub-totais.
Nenhum esforço de programação é necessário para que as quebras de grupo sejam feitas.
Da mesma forma que nenhum esforço se faz necessário no que diz respeito às quebras de
página. De acordo com as definições de layout de página (tamanho, margens etc) o próprio
Report Builder se encarrega de imprimir o rodapé, saltar uma página, imprimir o cabeçalho
e continuar a impressão normalmente do relatório.

Página PAGE 582


Programando com o Centura Team Developer 2000

Já que é a aplicação o responsável por enviar os dados para o Report Builder, ela mesma é
a responsável por determinar quando o relatório deve ser encerrado. Para que o Report
Builder entenda que o relatório deve ser encerrado basta que, assim que a aplicação receber
a mensagem SAM_ReportFetchNext, um valor FALSE seja retornado para o relatório.

Neste momento o Report Builder se encarrega de imprimir o rodapé da página e, caso seja
definido, a página final de resumo do relatório. Assim que o Report Builder termina esse
trabalho a mensagem SAM_ReportFinish é enviada à aplicação.

Este é todo o ciclo de comunicação entre a aplicação e o Report Builder necessário para
imprimir qualquer tipo de relatório.

Existe uma alternativa muito prática e que pode ser utilizada na grande maioria dos
relatórios necessitados pelas empresas. Consiste em carregar numa child table window
todos os dados a serem enviados para o Report Builder, na ordem de classificação em que
devem ser impressos. Simplesmente fazendo-se uma chamada à função
SalReportTablePrint() ou SalReportTableView() o processo de enviar os dados para o
Report Builder é feito de forma automática, sem que seja necessário interceptar as
mensagens SAM_ReportStart, SAM_ReportFetchInit, SAM_ReportFetchNext e
SAM_ReportFinish na aplicação. Esta é uma forma muito utilizada pois a mensagem
SAM_ReportNotify continua a ser recebida pela aplicação, permitindo as "customizações"
que forem necessárias.

O Report Builder

Apresentaremos agora o Report Builder, a ferramenta onde os layouts são definidos, para
em seguida mostrar alguns exemplos de como enviar dados e receber informações do
Report Builder.

O Report Builder pode ser ativado a partir do ambiente do SQLWindows, onde a aplicação
é codificada. Através do menu Tools | Report Builder você tem acesso ao Report Builder.

A interface padrão do Report Builder é mostrada na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Assim como o ambiente de desenvolvimento de aplicações SQLWindows, o Report


Builder também possui os quadros esquerdo e direito, de forma a melhor organizar as
informações e facilitar a definição do layout do relatório.

No quadro esquerdo estão as definições dos itens, das variáveis, fórmulas, totais e das
quebras de grupos. Basta acionar o menu de contexto clicando com o botão direito do
mouse para ter acesso às telas de configurações de cada item, permitindo que itens sejam
incluídos, alterados e excluídos rapidamente.

No quadro direito está localizado o layout propriamente dito. Onde devem ser colocados os
itens a serem impressos. Existem áreas distintas para que seja configurado o conteúdo do
Report Header, Page Header, Detail Block, Page Footer e Report Footer. Cada uma dessas
áreas, quando expandidas, podem possuir diversas linhas onde os itens a serem impressos
são colocados. Todas as configurações quanto a posição, formatação de fonte, cores e
melhoramento de fonte deve ser definida neste momento pois o relatório será impresso
conforme as definições feitas neste local.

A figura abaixo ilustra o item chamado PHONE, que está posicionado no Detail Block,
Página PAGE 582
Programando com o Centura Team Developer 2000

tendo sua fonte configurada através do combo box situado na barra de ferramentas do
Report Builder.

Caso seja necessário realizar configurações mais profundas num determinado item, basta
ativar o menu de contexto do objeto clicando sobre ele com o botão direito do mouse e
acionando o menu item Properties. Isso fará com que uma janela de configurações das
propriedades do item selecionado seja mostrada e diversas configurações possam ser
realizadas numa única janela. Conforme ilustrado na figura abaixo:

A janela com as propriedades do objeto escolhido.

Você pode mover os itens situados na árvore localizada no quadro esquerdo diretamente
para a posição desejada no layout, desta forma a confecção do seu layout de impressão é
bastante agilizada.

Observe que no momento em que você adiciona um Break Group, dois novos itens são
adicionados na estrutura das seções no quadro direito, uma chamada Header do grupo e
Página PAGE 582
Programando com o Centura Team Developer 2000

outra Footer. Através dessa estrutura toda a implementação aos grupos de quebra e seus
respectivos sub-totais é habilitada.

As fórmulas

Você pode inserir fórmulas em qualquer local do relatório, no quadro esquerdo você define
a fórmula e posteriormente a arrasta posicionando-a no quadro direito. Opcionalmente
você pode inserir um objeto do tipo campo (Field) e clicar no botão chamado Editor,
localizado na barra de ferramentas do Report Builder.

Selecione o objeto Field, posicione o objeto no layout e clique no botão Editor.

Dessa forma você terá acesso à janela do Editor de Formulas do Report Builder, onde
fórmulas complexas podem ser definidas mesclando-se os itens de dados definidos e as
funções nativas do Report Builder.

O Editor de Fórmulas do Report Builder.

Consulte o Apêndice D - Guia das Funções do Report Builder para obter informações
detalhadas do funcionamento de cada uma das funções disponíveis no Report Builder,
além de seus parâmetros, valores de retorno e descrição.

Montando um relatório rapidamente

O Report builder presente no Centura Team Developer 2000 provê um meio extremamente
rápido para a definição de layouts com nível médio de complexidade. Relatórios
Página PAGE 582
Programando com o Centura Team Developer 2000

complexos exigem esforço manual do desenvolvedor, que precisará criar cada item no
quadro esquerdo e posicioná-lo no seu devido lugar no quadro direito.

Mostraremos agora como o Report Builder pode nos ajudar na montagem de um layout
simples de relatório. No exemplo abaixo ilustraremos um relatório simples para que você
entenda o conceito e a forma de operação do Report Builder.

Assim que o Report Builder é iniciado a impressão que se tem é de que o relatório é todo
branco e vazio. Isso acontece pois o Report Builder inicia em modo Preview de um layout
realmente vazio. Precisamos definir a query que servirá de fonte de dados para o relatório.

1 Clique no botão Define Query para que a caixa de diálogo chamada Define Query
apareça.

2 Nesta caixa de diálogo você deve informar, utilizando o mouse, o fornecedor do seu
banco de dados, o nome, efetuar o login, escolher as tabelas e as colunas desejadas.

É bem provável que esta interface visual o faça lembrar dos Quick Objects vistos
anteriormente nos capítulos iniciais deste livro.

3 Conforme a figura anterior, você pode escolher algumas colunas de uma ou mais

Página PAGE 582


Programando com o Centura Team Developer 2000

tabelas, montar as condições, a classificação e outros atributos da query que servirá de


fonte dos dados para o relatório.

É importante lembrar que a query só fica armazenada no arquivo de layout caso este seja
salvo com extensão .CQT. O padrão para utilizarmos posteriormente numa aplicação
SQLWindows é o formato .QRP. Portanto tome cuidado para não fazer confusão com
estes formatos.

Arquivos do tipo CQT devem ser utilizados apenas pelo usuário final, no caso deste
usuário ter acesso a um banco de dados para poder definir seus próprios layouts e
imprimir seus próprios relatórios de forma automática no Report Builder.

4 Após a definição da fonte de dado do relatório o Report Builder monta um modelo


padrão de layout de relatório que pode ser perfeitamente personalizado.

5 O layout pode ser personalizado conforme as necessidades da aplicação e


posteriormente salvo com extensão QRP, para que possamos utilizá-lo no
SQLWindows.

A geração do arquivo QRP

Após ter configurado todo o layout do seu relatório você deve exportá-lo para o formato
QRP. Faça isso através do botão da barra de ferramentas chamado Export Template.

Exporte o seu layout para o formato QRP.

O layout pode continuar existindo e você deve salvá-lo como .CQT pois provavelmente
será necessário futuramente inserir ou excluir colunas no layout do relatório. Com o
Página PAGE 582
Programando com o Centura Team Developer 2000

arquivo salvo em formato .CQT você poderá sempre que desejar gerar arquivos QRP,
bastando para isso exportá-los.

Imprimindo a partir do SQLWindows

Uma vez definido o layout no Report Builder o próximo passo para que a aplicação de
impressão de relatórios seja concluída é codificar o programa em SQLWindows para
enviar os dados para o relatório. Mostraremos como fazer isso abaixo:

1 Construímos uma aplicação onde um pushbutton ativará a impressão do relatório.

2 Ilustraremos como ativar uma janela com a visualização do relatório em tela.

Adicione ao pushbutton o seguinte código:

Pushbutton: pbIMPRIME_EMPRESAS
Message Actions
On SAM_Click
Call SalReportView( hWndForm, hWndNULL, sQRP, sINPUTS, sBINDS, nErro)

Consulte o Apêndice A - Guia de referência das Funções SAL para obter detalhes do
funcionamento da função SalReportView(), assim como seus parâmetros.

Lembre-se de definir as variáveis que estão sendo utilizadas na seção Variables do


form window.

3 Iniciando a conexão com o banco de dados e configurando variáveis iniciais da


aplicação.
On SAM_ReportStart
Set SqlDatabase = "ISLAND"
Set sSQL = "
SELECT COMPANY_ID , COMPANY_NAME
INTO :sCodigo , :sNome
FROM COMPANY
ORDER BY 1"
Call SqlConnect( hSql )

4 Quando o Report Builder avisar que foi inicializado corretamente execute o comando
SQL que irá recuperar as informações do banco de dados a serem impressas.
On SAM_ReportFetchInit
Página PAGE 582
Programando com o Centura Team Developer 2000

Return SqlPrepareAndExecute ( hSql, sSQL )

5 Envie cada linha recuperada para o relatório


On SAM_ReportFetchNext
Return SqlFetchNext ( hSql )

6 A linha de código abaixo ilustra o envio de uma data armazenada no data field
dfData_Emissao para ser impressa no Page Header do relatório. Observe que no layout
do relatório deve existir uma variável definida do mesmo tipo de dado do data field
utilizado.
On SAM_ReportNotify
If lParam = RPT_BeforePageHeader
Call SalReportSetDateTimeVar( hRelatorio, "dtDATA", dfData_Emissao )

7 Fim do relatório. Sempre desconecte sua aplicação do banco de dados.


On SAM_ReportFinish
Call SqlDisconnect( hSql )

É importante observar os tipos de dados envolvidos nas variáveis utilizadas. Isso pode
economizar um tempo considerável no desenvolvimento da aplicação, pois o Report
Builder não permite a troca de informações através de variáveis/objetos com tipos de dados
diferentes.

Procuramos mostrar neste capítulo uma introdução quanto a utilização do Report Builder e
impressão de relatório a partir do SQLWindows. Este assunto merece um estudo mais
aprofundado que aguardamos ter oportunidade de estudar em outra ocasião.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 12
Distribuição do produto final
Este capítulo mostra ao leitor as três formas de distribuição de aplicações construídas com o
SQLWindows/32. São explicados os seus conceitos, limitações, forma de implementação e
utilização de cada uma das tecnologias apresentadas, bem como dicas de utilização.

É extremamente importante que a instalação do Centura Team Developer tenha sido realizada
conforme instruções presentes no Apêndice F - Guia de Instalação do Centura Team
Developer 2000 . Serão utilizados exemplos utilizando o Object Compiler que para funcionar
corretamente, necessita que o MS Visual C++ tenha sido instalado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Apresentação

Uma vez pronta a sua aplicação, é necessário gerar o módulo que será distribuído aos seus usuários. No
SQLWindows/32 essa distribuição pode ser feita de diversas maneiras.

Dynalibs

Uma dynalib é um módulo compilado com funções e objetos que são utilizados dinamicamente por outras
aplicações em tempo de execução, é um tipo de arquivo intermediário entre uma APL e uma DLL. Assim
como uma APL, é possível incluí-la numa na seção Libraries do outline da aplicação e utilizar seus recursos.
A diferença entre dynalibs em bibliotecas *.APL é que a dynalib não compartilha código, mas sim as
interfaces aos recursos como forms, table windows, funções e variáveis. Assim como uma DLL, o seu
conteúdo só é carregado para a memória quando o aplicativo solicitar algum recurso que pertence a uma
determinada dynalib, isto já em tempo de execução. A principal diferença entre uma dynalib e uma DLL é
que a dynalib é gerada diretamente a partir de um programa escrito em SQLWindows/32.

Nem todos os recursos disponíveis numa aplicação SQLWindows/32 podem ser compartilhados. Observe
abaixo, o que pode ser compartilhado numa dynalib:

 As funções globais
 As variáveis nativas globais
 Objetos top level e suas funções
 Objetos MDI, suas funções e seus objetos child.

As vantagens na utilização de dynalibs são :

 Desenvolvimento modular
Você pode separar sua aplicação em módulos distintos (dynalibs), onde cada módulo
dedica-se a realizar uma determinada tarefa.

 Economia de recursos
Você precisará de menos espaço para distribuir suas aplicações.

 Atualização modular
É possível recompilar uma biblioteca depois que uma aplicação já encontra-se em
produção, sem recompilar a aplicação em si.

 Segurança de código fonte


É possível a distribuição de bibliotecas escritas em SAL sem que o código fonte seja
revelado.

 Compilação rápida
As dynalibs não são compiladas a cada vez que a aplicação é, isso reduz drasticamente
o tempo de abertura dos programas e também da compilação.

i
Informação:
No desenvolvimento de grandes aplicativos, é provável que alguns limites
internos do SQLWindows/32 sejam atingidos. Por exemplo a tabela de
símbolos, o espaço para as strings, o número de objetos entre outros. Cada
dynalib possui seus próprios recursos e são independentes do restante da
aplicação. Isso pode ajudar a evitar alguns limites impostos pelo
SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

Limitações

Os recursos mostrados abaixo, não podem ser exportados através da utilização de dynalib:

 Constantes, classes e declarações de funções externas.


Coloque esses elementos num arquivo *.APL e inclua esse arquivo tanto na dynalib
quanto na aplicação.

 Funções e variáveis herdados.


Crie e compartilhe funções servindo de interface para acessar as variáveis ou chamar as
funções herdadas.

 Objetos situados no interior da seção Contents.


Não é possível compartilhar apenas child objects.

Implementando Dynalib

Para a geração de uma dynalib o primeiro passo é identificar quais os itens que serão
exportados, identificá-los e compilar a biblioteca ativando a geração da dynalib.

Observe a definição da constante e a declaração da função interna fObtem_DynalibVersao(


) que irá recuperar o valor da constante Dynalib_Versao. Observe também que após o
nome da função está a palavra chave “! __exported”, que serve para que o
SQLWindows/32 entenda quais elementos serão exportados na geração da dynalib.

Após indicar quais elementos da aplicação serão compartilhados você precisa compilar a
dynalib para que possa utilizar em outras aplicações. Ative o menu Project | Build
Settings... para ter acesso à janela Build Settings, onde é feita a configuração do
SQLWindows/32 para que seja gerada a dynalib.

Página PAGE 582


Programando com o Centura Team Developer 2000

Certifique-se de que o radio button Dynalib está marcado.

Clique no botão OK para prosseguir.

Para criar a dynalib acione o menu Project | Build: exDynalib.apd, quando a janela
chamada Build Information aparecer, clique no botão OK.

i
Informação:
Dynalib provê ao desenvolvedor a possibilidade de criação de componentes,
modularizando a aplicação. Com as dynalibs o desenvolvedor pode, passo-a-
passo, enviar ao cliente partes novas da aplicação que foi comprada ou
enviada para demonstração, sem que seja necessário enviar uma versão
completa para o cliente.

Utilizando a dynalib

Observe na figura abaixo que a dynalib exDynalib.apd foi incluída na aplicação e que a
função fObtem_DynalibVersao ( ) aparece no outline da aplicação. O código fonte da
função não é visualizado. Assim como o programador não faz a menor idéia de que a
constante Dynalib_Versao existe.

Página PAGE 582


Programando com o Centura Team Developer 2000

i
Importante:
Normalmente as dynalibs continuam compatíveis mesmo após uma
atualização do Centura Team Developer, fique atento ao arquivo release notes
que acompanha cada nova versão, neste arquivo é informado se existe a
necessidade de recompilar as dynalibs. Isso só deve ocorrer quando as versões
forem “binariamente incompatíveis”.

Executáveis

A geração do executável de uma aplicação SQLWindows/32 é extremamente simples,


basta acionar o menu Project | Build. Lembre-se que a aplicação precisar estar livre de
erros de compilação.

Através da caixa de diálogo Build Settings pode ser configurado a geração do executável,
seu path e o ícone da aplicação.

Página PAGE 582


Programando com o Centura Team Developer 2000

O executável gerado pelo SQLWindows/32 não é independente, ou seja, o executável


sozinho não é o suficiente para que a aplicação seja executada corretamente pelo usuário.
Alguns cuidados devem ser tomados :

 Normalmente, todo o conteúdo do diretório “Centura\Deploy” é necessário para que o


executável funcione corretamente. Neste diretório estão as bibliotecas do Centura,
drivers dos bancos de dados e o módulo run-time do Centura SQLWindows/32 e do
Report Builder. Este diretório deve estar no path da máquina que for utilizar o
aplicativo. Sem este diretório a aplicação não é executada.

 As bibliotecas de terceiros como as DLLs e controles ActiveX, devem estar


devidamente instalados na máquina que irá executar o aplicativo.

 As dynalibs que a aplicação estiver utilizando precisam estar no mesmo diretório do


executável. Sem as dynalibs, a aplicação executa normalmente até o momento em que
um recurso presente na dynalib for requerido. Neste momento a execução da aplicação
é interrompida.

 Os demais arquivos utilizados pela aplicação ( ícones, bitmaps, cursores, layouts de


relatórios etc ) também devem estar no mesmo diretório onde o executável está
localizado. Sem estes arquivos, a aplicação executa, mas pode não ser obtido os efeitos
esperados.

Página PAGE 582


Programando com o Centura Team Developer 2000

Geração de DLLs no Centura SQLWindows/32

A terceira forma de distribuição dos aplicativos em construídos com o SQLWindows/32 é


a geração de arquivos dlls, feita através do Object Compiler. A geração de arquivos dlls
oferece, não só mais uma opção para a distribuição de aplicações, como também uma
forma de melhorar a performance da aplicação.

O Object Compiler precisa ter sido habilitado na instalação do Centura Team Developer,
conforme instruções descritas no Apêndice F - Guia de Instalação do Centura Team
Developer 2000.

Para a compilação e geração do arquivo .dll o Object Compiler necessita de um compilador


C, que pode ser o Visual C++ versão 2.0, ou versões mais recentes. Por esse motivo, o
Object Compiler necessita que alguns componentes presentes no compilador C estejam
habilitados para que a dll seja gerada com sucesso, esse componentes são:

 utilitário make
 compilador C
 linker
 As bibliotecas
 Os arquivos include.

Esses componentes podem ser localizados através do arquivo MSVC.INI localizado no


diretório do Windows, ou através das variáveis de ambiente configuradas no arquivo batch
chamado VCVARS32.BAT, que é instalado junto com o Visual C++.

Além desses componentes, o Object Compiler precisa encontrar algumas bibliotecas que
são encontradas nos diretórios CENTURA\LIB e CENTURA\INC.

Itens que podem ser compilados

Existem algumas partes de uma aplicação SQLWindows/32 que, quando compiladas pelo
Object Compiler, são transformadas em dll. Mas é preciso saber que partes da sua
aplicação podem ser compiladas pois, por enquanto, não é possível compilar toda a
aplicação SQLWindows/32. Com o Object Compiler a performance da aplicação pode ser
melhorada sensivelmente, por isso é necessário saber que partes da aplicação podem obter
benefícios com a compilação em C.

Podem ser compilados com o Object Compiler os seguintes itens de uma aplicação
SQLWindows/32:

 Funções internas
 Funções das classes tipo Functional
 Funções e mensagens das classes tipo General Window

As limitações do Object Compiler

O Object Compiler não será capaz de gerar a biblioteca dll caso o código fonte possua uma
das seguintes características:
Página PAGE 582
Programando com o Centura Team Developer 2000

 Utilização do comando When SqlError


 Chamada à função SalCompileAndEvaluate
 Chamada à funções que não podem ser compiladas
 Chamada à funções externas que possuam ao menos um parâmetro do tipo
structPointer
 Chamada à funções Late Bound
 Referência qualificada (é permitido apenas chamadas qualificadas à variáveis e funções
da classe base)
 Referência a algum objeto.
 Referência a variáveis, parâmetros ou funções de algum objeto

i
Dica :
Declare sempre o tipo de dado de retorno da função que você deseja compilar.

Convenções do Object Compiler

Como vimos anteriormente, para indicar que um elemento da sua aplicação será exportado
em uma dynalib utiliza-se por convenção a palavra chave __exported, para a utilização do
Object Compiler existem algumas convenções.

i
Importante :
Não coloque um espaço e dois underscores após um sinal de exclamação em
seus comentários.

As convenções a serem utilizadas junto ao Object Compiler são demonstradas abaixo:

Para evitar a compilação de determinadas partes do código SAL :

 __native

Podemos informar ao Object Compiler que utilize um determinado tipo de dado para
variáveis numéricas. Utilize uma das seguintes convenções ao lado da declaração da
variável:

 __byte
 __char
 __double
 __float

Página PAGE 582


Programando com o Centura Team Developer 2000

 __word
 __int
 __long
 __dword
 __number ( o padrão )

i
Dicas :
Utilize os tipos de dados __byte, __char, __word, __int, __long ou __dword
para contadores e índices de vetores, e os tipos de dados __double e __float
para cálculos científicos em notação exponencial.

Utilizando o Object Compiler

Mostraremos agora como utilizar o Object Compiler, ou seja, como gerar dlls com o
Centura SQLWindows/32. Lembre-se que a instalação do produto deve ter sido realizada
conforme as instruções descritas no Apêndice F - Guia de Instalação do Centura Team
Developer 2000. Você precisa ter disponível o Visual C++ da Microsoft para que a
compilação seja bem sucedida. Nos exemplos mostrados abaixo foi utilizado o MS Visual
C++ 5.0.

1 - Inicie uma nova aplicação no SQLWindows/32.

2 - Salve a aplicação com o nome exCap13_01.apl para facilitar futuras referências.

3 - Crie uma função interna utilizando variáveis numéricas, se desejar utilize as


convenções para os tipos dados numéricos, conforme mostrado anteriormente.

Acima é mostrado um exemplo de codificação de uma função interna.

4 - Crie uma classe do tipo functional e nela defina algumas funções.

Página PAGE 582


Programando com o Centura Team Developer 2000

Para efeito de demonstração observe acima a definição de uma função da classe


cFC_01.
Lembre-se sempre de especificar o tipo de dado que será retornado pela função.

5 - Crie uma classe tipo general e defina algumas funções e ações.

6 - Compile o aplicativo, para evitar erros de compilação, acionando a tecla F8.


Se nenhum erro for encontrado acione o menu Project | Build Settings... para ter
acesso à janela mostrada abaixo:

Selecione o radio button chamado Include Library ( Using Object Compiler ) e, no


campo Build Target, informe o nome do arquivo a ser gerado. Esse nome, que
normalmente é sugerido pelo SQLWindows/32, deve ter a extensão *.APC,
identificando o arquivo como um arquivo compilado pelo Object Compiler.
Página PAGE 582
Programando com o Centura Team Developer 2000

7 - O nome da dll que será gerada pode ser configurado na mesma tela, na tab Object
Compiler.

Se você desejar, pode alterar as configurações que o Object Compiler utilizará para
a geração da dll clicando no botão Settings...
Clique no botão OK para salvar as configurações da geração da biblioteca dll.

8 - Acione o menu Project | Build para ativar a geração da dll. A janela abaixo será
mostrada, confirme as informações apresentadas. Caso você queira alterar alguma
configuração, clique no botão Settings para ter acesso à janela Build Settings. Se
estiver tudo correto clique no botão OK para que a geração da dll tenha início.

9 - A figura abaixo mostra a janela de status do Object Compiler, onde é informado


que a geração da dll foi realizada com sucesso.

Página PAGE 582


Programando com o Centura Team Developer 2000

10 Você pode abrir o arquivo exCap13_01.APC e verificar o que foi feito pelo Objetc
- Compiler.

11 Para utilizar a biblioteca exCap13_01.DLL que foi gerada pelo Object Compiler
- você precisa declarar o arquivo exCap13_01.APC na seção Libraries da sua
aplicação.

Resumo

Conforme vimos nesse capítulo, existem três formas que podemos distribuir aplicações
feitas em Centura SQLWindows/32. Você precisa conhecer bem as três formas para
utilizar seus recursos de forma correta. Observe algumas sugestões:

 Distribuição através de um executável ( *.EXE )

Utilize o executável para colocar a parte principal do seu aplicativo, a parte que
serve apenas ao aplicativo, não sendo compartilhada com outras aplicações. Por
exemplo os menus, funções e objetos particulares ao aplicativo.

 Distribuição através de uma dynalib ( *.APD )

Utilize a dynalib para compartilhar janelas top level e funções que devem ser
compartilhadas entre diversas aplicações. Por exemplo as janelas genéricas como
de login, tabelas e funções genéricas.

 Distribuição através de uma dll ( *.DLL )

Crie suas dlls para distribuir funções otimizadas de alta performance. Como vimos
anteriormente as funções internas, funções definidas nas classes tipo funcional e
general podem ser também compartilhadas através de dlls.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 13
Traduzindo aplicações com o Object Nationalizer
Este capítulo apresenta o Object Nationalizer, sua filosofia, benefícios e o
modo como você pode utilizá-lo. Essa é uma ferramenta muito importante
e útil, pois, a grosso modo, permite que sejam alterados os executáveis e
dynalibs quanto ao idioma e quanto aos recursos visuais, para que a
aplicação se adapte aos usuários.

O Object Nationalizer é uma evolução do Edit Windows utilizado no


SQLWindows/16. Portanto, é muito importante que você conheça
perfeitamente seus recursos.

Para utilizar o Object Nationalizer você precisar ter instalado o Centura


Team Developer conforme descrito no Apêncice F – Guia de Instalação
do Centura Team Developer 2000.

Página PAGE 582


Programando com o Centura Team Developer 2000

Objetivo

Com o Object Nationalizer é possível traduzir as aplicações desenvolvidas em


SQLWindows/32, sem modificar o seu código fonte, sendo necessário apenas o arquivo
executável e, se for o caso, as dynalibs. Você pode também modificar a aparência da
interface do usuário, dispensando alteração no código fonte.

Por exemplo, após a tradução, o tamanho de um componente pode não ser adequado para
comportar o texto traduzido. As dimensões dos componentes da aplicação podem ser
alteradas para se adaptarem às traduções feitas.

O que pode ser traduzido ?

Um executável Centura SQLWindows/32 não contém apenas a lógica da aplicação, dele


fazem parte alguns atributos conhecidos por recursos ( resources ). Esses atributos são de
natureza estética, modificá-los não acarretará em mudança na lógica da aplicação. São as
propriedades dos objetos visuais. Propriedades que afetam diretamente a aparência do
objeto.

O Object Nationalizer pode ser utilizado para extrair, visualizar e editar esses recursos
diretamente dos arquivos executáveis e das Dynalibs. Através do Object Nationalizer não é
possível realizar qualquer alteração na lógica da aplicação, ou acessar o seu Outline.

Por exemplo, a especificação do tipo da fonte utilizada num data field afeta apenas a
aparência do mesmo, não afeta a sua lógica. A cor da fonte e o seu tamanho, os títulos dos
pushbuttons, os background text são outros exemplos de atributos que não interferem no
funcionamento do objeto. Esses atributos são os recursos possíveis de serem alterados pelo
Object Nationalizer.

O funcionamento do Object Nationalizer

Existem duas figuras importantes que precisam ser bem compreendidas no trabalho com o
Object Nationalizer, são elas:

O Programador é quem codifica a aplicação em SQLWindows/32 e gera o executável da


aplicação ou a Dynalib a ser utilizada por outras aplicações. A aplicação é feita de maneira
normal, sem a preocupação do idioma a ser utilizado.

O Tradutor é quem, utilizando o Object Nationalizer, e possuindo uma cópia do arquivo


gerado pelo programador, edita os recursos da aplicação realizando as devidas traduções e
ajustes de layout de tela que se fizerem necessários. Quando encerrar o trabalho, o tradutor
pode salvar as alterações no próprio executável/dynalib, num arquivo texto padrão ou num
arquivo binário especial para o armazenamento dos recursos ( *.apr ).

Naturalmente que essas duas pessoas podem ser a mesma, dependendo do modo como a
empresa decidir realizar o trabalho de tradução da aplicação. Mas é importante que fique
claro que o programador não precisa conhecer todos os idiomas em que a aplicação será

Página PAGE 582


Programando com o Centura Team Developer 2000

utilizada. Assim como o tradutor não precisa conhecer nada de programação


SQLWindows/32.

Obs :
Para que o tradutor tenha acesso aos recursos de um arquivo executável ou de uma dynalib,
o programador precisa marcar o check box Enable Resource Editing, na caixa de diálogo
Build Settings, quando for gerar o executável ou a dynalib.

Atualizações das versões do seu aplicativo

É interessante salvar a tradução num arquivo de recursos ( *.apr ), para que possa ser
reutilizada quando estiver disponível uma nova versão da aplicação. Por exemplo, suponha
que a tradução da versão 1.0 de uma aplicação foi realizada para diversos idiomas
diferentes, e cada idioma foi salvo num arquivo de recursos separado. Posteriormente,
quando a versão 2.0 da mesma aplicação for disponibilizada, a tradução não precisará ser
feita novamente desde o início para cada um dos idiomas. Basta aplicar o arquivo de
recursos, salvo anteriormente junto a nova versão do aplicativo, para cada idioma. Isso fará
com que todos os recursos presentes na versão1.0, e que ainda existam na versão 2.0,
sejam automaticamente traduzidos, restando, então, traduzir apenas os novos itens do
aplicativo, incorporados com a nova versão.

Todos os recursos que ainda existirem na nova versão do aplicativo já estarão traduzidos
quando o arquivo de recursos for aplicado, sendo necessário apenas traduzir os novos
recursos.

Uma vez feita essa tradução adicional, o arquivo de recursos é então atualizado para que
seja utilizado novamente junto a próxima atualização do aplicativo.

Aplicando as traduções em tempo de execução

Os arquivos de recursos podem também ser aplicados ao executável ou dynalib enquanto a


aplicação é executada, ou seja, em tempo de execução.

Conforme o exemplo citado acima, foram salvos diversos arquivos de recursos, cada um
contendo as traduções para um determinado idioma. Em tempo de execução, a aplicação
decide qual arquivo de recursos deve ser aplicado ao arquivo executável ou dynalib.

Seu programa de instalação pode instalar uma única versão do aplicativo, com os diversos
idiomas que, porventura, o usuário tenha escolhido no momento da instalação.

Quando o aplicativo for iniciado, ele decide o idioma a ser utilizado e aplica o arquivo de
recursos. Essa decisão pode ser feita tomando-se por base o idioma configurado no
Windows, ou até mesmo com a interação do usuário.

Para que o próprio aplicativo decida o idioma a ser aplicado, dois procedimentos devem
ser tomados:
Página PAGE 582
Programando com o Centura Team Developer 2000

 o tradutor precisa salvar as traduções em arquivos recursos, um para cada idioma


diferente, sem aplicá-lo ao executável.
 o programador precisa, via programação, detectar o idioma correto e aplicar o arquivo
de recursos adequado junto ao aplicativo.

Para aplicar o arquivo de recursos em tempo de execução junto ao aplicativo, o


programador deve utilizar a função SalResourceSet, na seção do outline chamada On
SAM_AppStartup.

A sintaxe da função é a seguinte:

bOk = SalResourceSet ( sArquivoDeRecursos , nReservado )

Onde :
sArquivoDeRecursos é o nome do arquivo de recursos que será lido e aplicado pelo
SQLWindows/32. Esse arquivo foi salvo pelo tradutor com as especificações de um
determinado idioma.
nReservado é um parâmetro que ainda não possui utilização, está sendo reservado para
uso futuro. Utilize zero nesse parâmetro.
bOk é TRUE se a função for executada com sucesso e FALSE se algum erro ocorrer.

Quando a função SalResourceSet é executada com sucesso, um arquivo de recursos é


aplicado ao executável ou dynalib e armazenado na memória. Os arquivos ( .exe e .apd )
armazenados no disco, e que estão sendo executados, não são modificados.

Observe abaixo um exemplo de código que o programador pode escrever para que a
aplicação decida em tempo de execução o idioma a ser utilizado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Você pode distribuir um único executável, para uma determinada linguagem, e diversos
arquivos de recursos, um para cada idioma. Pode ainda distribuir os executáveis de acordo
com o idioma correto.

Atenção:
É importante ter sempre em mente que, quando uma aplicação está sendo executada pelo
programador, através do Centura SQLWindows/32, e utilizando a função SalResourceSet,
os recursos da aplicação, que no momento estão na memória, são atualizados conforme o
idioma especificado no arquivo de recursos. Se a aplicação for salva, os recursos lidos se
sobrepõem aos recursos originais, modificando a sua aplicação.

Página PAGE 582


Programando com o Centura Team Developer 2000

Utilizando o Object Nationalizer

Para utilizar o Object Nationalizer, você precisar ter instalado o Centura Team Developer,
conforme descrito no Apêndice F – Guia de Instalação do Centura Team Developer
2000.

O Object Nationalizer é extremamente fácil de ser utilizado, possuindo interface similar ao


ambiente de programação do SQLWindows/32.

Você pode iniciar o Object Nationalizer clicando no botão Iniciar do seu Windows, e
selecionando os menus Programas | Centura | Team Developer 2000 | Object
Nationalizer 2000.

Para abrir um arquivo executável, dynalib ou um arquivo de recursos no Object


Nationalizer, selecione os menus File | Open e escolha o arquivo desejado.

Lembre-se que, na geração do arquivo executável ou dynalib, o programador precisa


habilitar o recurso na caixa de diálogo Build Settings, que permite ao Object Nationalizer
editar seus recursos. Caso isso não tenha sido feito, o Object Nationalizer não poderá abrir
o arquivo e uma mensagem de erro será mostrada.

Configurando a geração do executável para habilitar a edição do executável pelo


Object Nationalizer.

Você pode editar os recursos da aplicação de duas formas: traduzindo o texto da aplicação
diretamente ou modificando os recursos graficamente. Mostraremos abaixo como utilizar
as duas formas.

Traduzindo o texto da aplicação

O Object Nationalizer dispõe de um editor que você pode utilizar para editar os elementos
da sua aplicação. Dessa forma, o restante da aplicação permanece inalterado. O editor

Página PAGE 582


Programando com o Centura Team Developer 2000

permite que rapidamente você realize as edições dos textos da aplicação traduzindo-os para
o idioma desejado.

O Editor do Object Nationalizer

1. Selecione o item Application Text no quadro esquerdo da janela do Object


Nationalizer.
2. Selecione um item na coluna Translated Text, que é mostrada na metade de baixo do
quadro direito da janela do Object Nationalizer. Fazendo isso, o mesmo texto é
automaticamente colocado no quadro chamado Translated Text, que é mostrado na
metade superior do quadro direito.

A lista de itens da coluna Translated Text é mostrada em ordem alfabética ascendente,


pelo texto traduzido. Você pode alterar essa classificação clicando no título da coluna,
a qual você deseja que seja classificada. Por exemplo, se você clicar uma vez na coluna
Identifier, o Object Nationalizer classifica os textos mostrados, classificados por objeto
da aplicação. Se você clicar no nome da coluna Type, os textos serão classificados pelo
tipo do objeto. Experimente as diversas possibilidades, ou, para encontrar um item
específico, selecione os menus Edit | Find.

3. Você pode clicar tanto na coluna Translated Text como no quadro chamado Translated
Text para realizar a tradução do texto.
4. Repita os procedimentos descritos nos itens 2 e 3 até terminar de traduzir toda a
aplicação.

Observe a figura abaixo onde o texto foi traduzido. Neste caso, "Incluir Imagens" foi
traduzido para "Add Images", em inglês. O texto traduzido aparece no quadro e na coluna
chamados Translated Text, enquanto que o texto original aparece no quadro Original Text.

Página PAGE 582


Programando com o Centura Team Developer 2000

A tradução de um texto através do Editor do Object Nationalizer

Para realizar a mesma tradução várias vezes, você pode selecionar os menus Edit |
Replace, informar o texto original no campo Find What e sua tradução no campo Change
To. Clique no botão Find Next para localizar a próxima ocorrência do texto original,
clique em Change para traduzi-la. Para traduzir todas as ocorrências do texto original
numa única operação, clique em Change All e não em Change.

Atenção:
Após clicar em Change All, você não poderá desfazer as modificações aplicadas por essa
ação. Portanto, se você não tiver certeza de que deseja realmente modificar todos os
valores, fique alternando entre os botões Change e Find Next, para controlar as operações
de mudança uma de cada vez.

Traduzindo recursos graficamente

Você pode utilizar o Object Nationalizer para visualizar e modificar uma aplicação
graficamente. Visualizando o objeto da sua aplicação você pode traduzir o texto visível e
alterar seus atributos visualmente, como faz no SQLWindows/32.

Para modificar os recursos da aplicação graficamente, selecione o objeto top level no


quadro esquerdo do Object Nationalizer e clique na Tab chamada Layout ( localizada na
parte inferior do quadro direito ).

O objeto é mostrado no quadro direito e você pode acionar o customizer ( ou attribute


inspector ) do objeto para alterar seus atributos, da mesma forma que você faz no
SQLWindows/32.

Obs :
Para escolher entre o customizer e o attribute inspector, selecione os menus Tools |
Preferences para acessar a janela Preferences, onde você pode configurar também a grade
utilizada na janela layout.

Observe a figura abaixo onde o texto do pushbutton foi traduzido. Neste caso, "Cancelar"
foi traduzido para "Cancel", em inglês. A tradução é feita utilizando-se o customizer, da
mesma forma que você edita as propriedades do objeto no SQLWindows/32.

Página PAGE 582


Programando com o Centura Team Developer 2000

A tradução do título de um pushbutton através do attribute inspector.

Quando você traduz o texto, o mesmo pode ficar com um tamanho maior do que o
disponibilizado anteriormente. A qualquer momento você pode também redimensionar os
objetos, exatamente da mesma maneira que faz no SQLWindows/32.

Assim que terminar sua tradução, você deve salvar seu trabalho de uma das seguintes
formas:

 Atualizando o arquivo original.


Selecione os menus File | Save.

 Criando um novo arquivo contendo as edições realizadas.


Selecione os menus File | Save As... e selecione no combo box "Salvar como tipo" o tipo
do arquivo apropriado ao seu caso, que pode ser um executável ( .exe ) ou dynalib ( .apd ).

 Salvando as modificações num arquivo de recursos.


Selecione os menus File | Save As... e selecione no combo box "Salvar como tipo" o tipo
do arquivo binário ( .apr ) ou texto padrão ( .txt ).

Lembre-se que o arquivo salvo contém as traduções feitas para apenas um idioma.

Você pode utilizar os dois métodos apresentados para traduzir sua aplicação. Traduzindo
graficamente sua aplicação, você poderá também alterar as dimensões e posições dos
objetos. Quando for necessário realizar traduções em massa, utilize o Editor do Object
Nationalizer para realizar mais rapidamente essa tarefa.

Página PAGE 582


Programando com o Centura Team Developer 2000

Conforme se pode observar nos exemplos mostrados até então, apenas objetos visuais
foram traduzidos. Você precisará utilizar o Editor do Object Nationalizer para traduzir as
constantes string da aplicação. Esses elementos não podem ser traduzidos graficamente,
pois não são elementos visuais como pushbuttons.

Atenção:
Através do Object Nationalizer você só pode traduzir as constantes definidas no outline, na
seção Constants | User. As constantes presentes na seção Constants | System não podem
ser traduzidas.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 14
Gerenciamento de equipes com o Team Object
Manager
Com o Team Object Manager as equipes de desenvolvimento possuem em suas mãos um
poderos mecanismo de Controle de Versão e Gerenciamento de Equipes de
desenvolvimento dos diversos projetos. Este capítulo procura ilustrar os pontos principais
da utilização do Team Object Manager para que o desenvolvedor que está iniciando a
utilização da ferramenta tenha uma idéia exata do propósito da ferramenta. Não
procuraremos nos aprofundar no estudo do Team Object Manager neste momento, mas sim
apresentar uma visão geral da ferramenta.

Página PAGE 582


Programando com o Centura Team Developer 2000

Apresentação

O Centura Team Developer possui uma poderosa ferramenta para o gerenciamento de


projetos e de equipes de desenvolvimento. O Team Object Manager gerencia os projetos e
tudo o que está envolvido nesse processo; projetos, aplicações, bibliotecas, imagens,
relatórios, documentos, equipes, faz controle de versão e muitas outras atividades típicas
de um sistema de gerenciamento de projetos.

Antes de utilizar o Team Object Manager você precisa criar o repositório onde as
informações sobre os projetos ficarão armazenadas. Você deve acionar o Repository Setup
Wizard para realizar essa tarefa.

Toda a operação do Team Object Manager ( TOM ) é baseada num, repositório onde estão
localizadas todas as informações. Este repositório é uma base de dados padrão SQL que
pode funcionar num servidor de rede ou numa máquina stand-alone. O TOM suporta os
bancos de dados Centura SQLBase, Informix, MS-SQLServer e Oracle.

Na figura abaixo pode ser observada a interface inicial do TOM.

TOM. Visão inicial do projeto Starter.

As Equipes

Para que o TOM gerencie a equipe de desenvolvimento é necessário primeiramente


cadastrar a equipe toda. Cada usuário recebe um nome código, uma senha e seus
privilégios que servem de classificação da hierarquia dos membros da equipe. Os possíveis
privilégios são Gerente de projetos, Manutenção dos membros do projeto, Modificar os
Página PAGE 582
Programando com o Centura Team Developer 2000

membros do projeto e Modificar as propriedades do repositório. Isso se faz através da tela


mostrada na figura abaixo.

Os membros da equipe podem ser visualizados conforme a figura abaixo, os nomes e seus
direitos. Qualquer alteração que se fizer necessária em algum usuário pode ser feita nesta
tela. Clicando-se com o botão direito do mouse no nome de um usuário fará com que um
menu específico de usuários apareça com todas as opções de configuração possíveis para o
usuário escolhido.

Os Projetos

Os projetos são criados no TOM através da janela do Assistente de Criação de Projeto, que
é mostrada na figura abaixo. Neste assistente são configurados os parâmetros para que o
TOM crie o projeto desejado. Basicamente o TOM precisa de um código do projeto e do
nome.
Página PAGE 582
Programando com o Centura Team Developer 2000

É neste momento que uma das decisões mais importantes da criação do projeto deve ser
tomada ; O tipo de armazenamento dos componentes do projeto. O TOM pode armazenar
tudo referente ao projeto num repositório (num banco de dados SQL). Mas pode também
armazenar no repositório apenas os ponteiros e informações sobre a equipe e sobre os
projetos, colocando o grande volume de dados num diretório configurado nesta tela. Neste
diretório ficam todos os programas fontes, imagens, relatórios, ou seja todos os itens do
projeto. Essa é uma informação extremamente importante que deve ser decidida neste
momento.

Janela onde são cadastradas as informações sobre o projeto.

O próximo passo é incluir no projeto os seus componentes. Para isso o TOM oferece uma
interface bastante amigável para o armazenamento e organização dos componentes. Isso
pode ser visualizado na figura abaixo, onde facilmente é possível observar que o programa
“app_curso.app” está sendo utilizado pelo usuário “LAIRTON”. Este é o ponto mais
importante da utilização do TOM a ser assimilado neste momento. O mecanismo de
Check-In e Check-Out.

Check-in / Check-out

Estando uma aplicação guardada no repositório do TOM, cada vez que um desenvolvedor
precisa realizar alguma manutenção nesta aplicação ele retira do TOM a cópia mais recente
da aplicação requerida. Esta operação é registrada pelo TOM e todas as informações
referentes a esta tarefa ficam no TOM armazenadas. Basicamente são : O nome do
desenvolvedor que extraiu um determinado módulo do projeto para um diretório. Fica
armazenado o nome do desenvolvedor, o componente, o diretório (para o qual o
Página PAGE 582
Programando com o Centura Team Developer 2000

componente foi extraído) e a data e hora da operação. A esta operação dá-se o nome de
Check-Out, pois um integrante da equipe extraiu um componente do projeto, para
manutenção.

Obs:
Estando um programa em Check-Out, não é possível que nenhum outro desenvolvedor
realize Check-Out novamente. A menos que esta operação esteja habilitada no TOM e que
os integrantes da equipe tenham consciência dos danos que esse tipo de comportamento
pode causar se utilizado de forma incorreta.

Check-In é a operação oposta ao Check-Out. Ocorre quando o desenvolvedor encerrou


suas alterações no componente e está então devolvendo ao repositório o aplicativo
devidamente atualizado. Apenas o desenvolvedor que solicitou o Check-Out pode realizar
o Chek-In do módulo.

Em determinadas ocasiões o programa em Check-Out pode não ter sido modificado. Neste
caso a operação correta não é o Check-In, mas sim o Unlock.

Página PAGE 582


Programando com o Centura Team Developer 2000

Relatórios Gerenciais

O TOM possui também uma série de relatórios que podem e devem ser utilizados para um
melhor gerenciamento dos projetos.

Este recurso e muitos outros que compõem o TOM devem ser analisados atentamente e
delicadamente pelos desenvolvedores quando houver oportunidade.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 15
Desenvolvimento de componentes COM no SQLWindows
Este capítulo mostra como desenvolver componentes COM e COM+ que rodam no
MTS ( Microsoft Transaction Server). Com estes componentes você poderá
desenvolver aplicações, em SQLWindows, utilizando os conceitos e beneficiando-se
do desenvolvimento de aplicações em três ou mais camadas.

Página PAGE 582


Programando com o Centura Team Developer 2000

O MTS

O Microsoft Transaction Server é um ambiente de gerenciamento de objetos COM que oferece uma
infraestrutura para manter aplicações distribuídas sendo executadas por toda a rede.

O MTS faz parte do MS Windows NT 4.0. Neste capítulo todos os exemplos mostrados estão ilustrando o
uso num servidor MS Windows 2000 Advanced Server, versão em inglês. Observe que, no Windows 2000, o
MTS não é encontrado com esta nomenclatura; existe o Component Services, que é a evolução do MTS
presente no Windows NT 4.0.

Nosso foco é mostrar ao leitor como desenvolver componentes com a linguagem SQLWindows, portanto,
não nos prenderemos em descrever os conceitos de COM/DCOM, COM+ e as regras do MTS e do
Component Services. Existem dezenas de livros publicados a este respeito, além da própria internet que é
uma fonte de informação quase que inesgotável.

Através dos recursos disponíveis no Centura Team Developer 2000 é possível a construção de componentes
COM e COM+ que rodem tanto no MTS como no Component Services.

Para acompanhar os exemplos mostrados neste capítulo, você precisará ter instalado o CTD2000 numa
máquina com o MS Windows 2000. É importante saber que os exemplos utilizados são exclusivos do
CTD2000, nenhuma outra versão do Centura Team Developer oferece suporte a componentes COM.

O Component Services

Faz parte do Windows 2000 o Component Services que permite a você configurar e administrar componentes
COM e aplicações COM+. Além de executar tarefas administrativas como configurações, instalações de
aplicações no sistema e configuração e monitoramento dos serviços usados pelas suas aplicações.

A figura abaixo mostra a janela principal do MS Component Services. Observe no quadro direito as
aplicações que estão instaladas. As aplicações que estão rodando são identificadas pelo ícone em movimento.

Observe o ícone da aplicação System Application.

Na figura acima a aplicação System Application está em execução, você pode perceber isso visualmente, pois
o ícone movimenta-se.

No Component Services temos as aplicações que servem basicamente para agrupar componentes que fazem
parte de uma mesma aplicação.

Página PAGE 582


Programando com o Centura Team Developer 2000

Este capítulo mostra como construir uma aplicação com o CTD2000, que será instalada no Component
Services.

A construção dos componentes

Basicamente construiremos dois componentes neste capítulo, os quais ilustram o desenvolvimento de uma
aplicação em três camadas.

Objeto-dado

A primeira camada chamaremos de objeto-dado. Nela devem estar localizados todos os comandos que
realizam algum tipo de acesso aos dados. Essa é a única parte da aplicação que pode ter acesso ao banco de
dados, as demais partes devem trabalhar de forma a serem completamente independentes do banco de dados.

Outra regra importante a ser lembrada é que os objetos-dados jamais devem entrar em algum estado de
espera de alguma operação em tela, vinda do usuário. Um objeto-dado deve liberar o banco de dados o mais
rápido possível, após realizar sua tarefa.

O único local da sua aplicação que deverá conter comandos SQL é justamente no objeto-dado.

No nosso exemplo construiremos um objeto-dado que fará uma inclusão numa tabela do banco de dados. Isso
é extremamente simples, propositalmente, pois, ao invés de desviar sua atenção para diversos comandos
SQL, mantemos nosso foco na geração do componente COM. É bem provável que você jamais tenha uma
aplicação dispondo de apenas uma operação de inclusão, porém, a arquitetura do COM ficará bem clara neste
exemplo de fácil entendimento.

Objeto-negócio

A camada intermediária, ou a segunda camada, chamaremos de objeto-negócio, pois é nela que se concentra
toda a lógica e inteligência da aplicação. Nessa camada não deve, jamais, existir comandos SQL. Deve
funcionar de forma independente do banco de dados. Um objeto-negócio pode fazer uso de outros objetos-
negócio e de objetos-dado. O acesso aos dados deve ser sempre realizado por meio do objeto-dado.

Assim como o objeto-dado, o objeto-negócio jamais deve entrar em estado de espera por alguma ação vinda
da tela, nunca deve esperar pelo usuário. Um objeto-negócio deve instanciar um objeto-dado, utilizá-lo e
liberá-lo logo em seguida.

No exemplo deste capítulo, construiremos um objeto-negócio que instanciará o objeto-dado para fazer uma
inclusão numa tabela do banco de dados.

A estrutura básica do objeto-negócio

Começaremos ilustrando a criação do objeto-negócio, siga as instruções descritas abaixo:

1 Inicie uma nova aplicação no SQLWindows.

2 Ative a janela de assistentes chamada Wizards, pressionando Ctrl+W.

Página PAGE 582


Programando com o Centura Team Developer 2000

3 Na janela Wizards, selecione o assistente de criação de classes COM, conforme mostrado na figura
acima.

O assistente de Classes COM irá guiá-lo no processo de definição de Interfaces, de CoClasses e de


CoClasses feitas para rodar no MTS.

4 Escolha o check box central, conforme ilustrado na figura abaixo.

Na figura acima você informa ao Assistente de Classes COM que a classe a ser gerada deverá ser
executada no MTS.

5 Na próxima janela do Assistente de Classes COM você precisa digitar o nome da classe a ser gerada e o
nome da interface.

Informe CEmpresa para o nome da classe e ICEmpresa como o nome da interface.

Página PAGE 582


Programando com o Centura Team Developer 2000

Se você selecionar o check box chamado Support IObjectControl, uma classe IObjectControl será
gerada pelo assistente com o nome informado por você no campo ao lado do check box. A classe será
gerada com os métodos Activate, CanBePooled e Desactivate.

Para esse exemplo não é necessário marcar essa opção.

6 A figura abaixo ilustra a janela onde você poderá montar a estrutura das interfaces, definindo seus
métodos com parâmetros e tipos de dados de retorno.

Clique no botão Add para adicionar o método chamado Insere que fará a inclusão de uma empresa. Esse
método terá alguns parâmetros, como mostrado na próxima figura.

7 A figura abaixo ilustra a definição do parâmetro psNome do tipo de dado String.

Página PAGE 582


Programando com o Centura Team Developer 2000

Para confirmar a inclusão de cada parâmetro clique no botão OK.

Você deve inserir quantos parâmetros forem necessários para a inclusão.

8 Neste exemplo estamos definindo dois parâmetros, psCodigo e psNome, mas você pode definir quantos
desejar. Sempre lembrando que os tipos de dados permitidos são os quatro tipos básicos: Number,
Date/Time, String e Boolean.

A janela de configuração dos métodos com o método Insere() devidamente configurado.

9 A tela final do Assistente de Classes COM mostra um resumo do que será construído.

Quando você pressionar o botão Finish, o código fonte referente às definições feitas no Assistente de
Classes COM será gerado, e qualquer alteração que necessite ser feita deve ser realizada no próprio
outline do SQLWindows. O Assistente de Classes COM auxilia apenas a criação dos componentes, não
Página PAGE 582
Programando com o Centura Team Developer 2000

a sua manutenção.

Clique no botão Finish para que o código fonte seja gerado.

10 O código fonte gerado pelo Assistente de Classes COM é mostrado na figura abaixo.

A estrutura básica do objeto-negócio está concluída. Ainda resta programar as ações do componente, mas
isso será feito numa outra etapa.

Você deve salvar o seu programa, pois será necessário utilizá-lo posteriormente.

Você pode fazer download dos arquivos fonte presentes no livro diretamente a partir do site
http://www.centuraexplorer.com.br/livro_ctd2000/. Este exemplo chama-se exCap23_01.apl.

A estrutura básica do objeto-dado

Para criar o objeto dado siga as instruções abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

1 Inicie uma nova aplicação no SQLWindows.

2 Execute o Assistente de Classes COM a partir da janela de assistentes (Ctrl+W).

3 Da mesma forma feita no objeto-negócio, você deve escolher o tipo de classe chamada MTS CoClass.

4 Observe na figura abaixo os nomes que devem ser dados à CoClass e à Interface:

CoClass: C_odEmpresa
Interface: IC_odEmpresa

5 O próximo passo é definir o método de inclusão na interface IC_odEmpresa().

Clique no botão Add para adicionar um método.

Página PAGE 582


Programando com o Centura Team Developer 2000

6 Observe na figura abaixo o nome e os parâmetros do método:

Quando informar todos os parâmetros corretamente, clique no botão OK para continuar.

7 Observe na figura que se segue o método odInsere(), da interface IC_odEmpresa, com seus parâmetros
definidos.

Numa aplicação real, é neste momento que devem ser incluídos os demais métodos da interface. Nesse
nosso exemplo utilizaremos apenas um método.

8 A janela final do Assistente de Classes COM.

Página PAGE 582


Programando com o Centura Team Developer 2000

Se estiver tudo correto, clique no botão Finish. Lembre-se de que o Assistente de Classes COM não
suporta alterações numa classe depois que ela já está pronta, devendo ser utilizado apenas para
construção de classes novas.

9 A figura abaixo mostra o código fonte gerado pelo Assistente de Classes COM.

A estrutura básica do objeto-dado está concluída. Ainda resta programar as ações do componente, mas isso
será feito posteriormente.

Você deve salvar o seu programa, pois será necessário utilizá-lo posteriormente.

Você pode fazer download dos arquivos fonte presentes no livro diretamente a partir do site
http://www.centuraexplorer.com.br/livro_ctd2000/. Este exemplo chama-se exCap23_02.apl.

Codificando os componentes

A estrutura dos fontes necessários para que nossa aplicação COM+ funcione está montada.
Página PAGE 582
Programando com o Centura Team Developer 2000

Precisamos agora incluir o código necessário para que a aplicação funcione.

Primeiramente vamos codificar o objeto-dado, pois ele é a base de nossa aplicação. É o objeto-dado que fará
a conexão com o banco de dados. Apenas esse objeto "enxerga" o banco de dados.

O código do objeto-dado é muito simples e bastante parecido com qualquer outra função tradicional de
acesso a dados.

Observe na listagem abaixo o código fonte completo do método odInsere() que deve ser codificado no
objeto-dado.

Function: odInsere
Description:
Attributes
Returns
Boolean:
Parameters
String: psCodigo
String: psNome
Static Variables
Local variables
Session Handle: hSession
String: sParametros
Sql Handle: hSql
Actions
!
Set sParametros = 'Provider=SQLBASEOLEDB; '
Set SqlDatabase = "ISLAND"
Set SqlUser = 'SYSADM'
Set SqlPassword = 'SYSADM'
!
If SqlCreateSession( hSession , sParametros )
If SqlCreateStatement( hSession, hSql )
!
Call SqlPrepareAndExecute ( hSql , "
INSERT INTO COMPANY ( COMPANY_ID , COMPANY_NAME )
VALUES ( :psCodigo , :psNome ) " )
!
Call SqlDisconnect( hSql )
Call SqlFreeSession( hSession )
!
Return TRUE
Else
Call SalMessageBox( "Não foi possível criar comando." ,
"COM Server Objeto-Dado" , MB_Ok )
Else
Call SalMessageBox( "Não foi possível conectar." ,
"COM Server Objeto-Dado" , MB_Ok )
Return FALSE

Como vimos acima, o código fonte é bem parecido com um código normal, já conhecido pela maioria dos
desenvolvedores que um dia escreveram uma função para incluir um registro num banco de dados.

Obs:
A linha de código que indica qual o fornecedor do banco de dados a ser utilizado é a seguinte:
Set sParametros = 'Provider=SQLBASEOLEDB; '

Página PAGE 582


Programando com o Centura Team Developer 2000

Nesse caso, estamos utilizando o próprio SQLBase que acompanha o produto e que está presente no CD
anexo ao livro. Você pode fazer esse componente funcionar com bancos de dados de outros fornecedores,
basta configurar a propriedade Provider adequadamente.
Utilize "MSSQLS" para o MS SQLServer e "MSDAORA" para Oracle.

A geração do componente difere da geração do executável basicamente nas etapas a seguir:

1 Você deve informar ao SQLWndows para que seja gerado um componente do tipo MTS COM Server.
Dessa forma será gerada uma DLL que, posteriormente, será registrada no servidor.

Para fazer isso acione o menu Project | Build Settings.


Isso fará aparecer a janela mostrada abaixo:

Selecione o radio button MTS COM Server (DLL) para que o componente seja gerado corretamente.

2 Nesta mesma janela de configurações acione a propriedade COM Server

Página PAGE 582


Programando com o Centura Team Developer 2000

Selecione o radio button Single Threaded Apartment e clique uma vez no botão New, para que uma nova
chave GUID seja gerada para o componente.
Logo após clique no botão OK.

3 Acione a geração da DLL a partir do menu Project | Build ...


É este o momento da geração do componente.

4 Através do menu Project | Register Server o componente é registrado no registro do Windows, na chave
de registro adequada. Você não precisa entender disso neste momento, necessita apenas saber que o
servidor foi gerado e registrado no seu Windows. Sempre que você precisar alterar seu componente, será
necessário retirar o componente do registro (através do menu Project | Un-register Server), e então
compilar e registrar novamente o componente.

A figura abaixo ilustra o registro do componente.

5 Quando o registro é feito com sucesso a seguinte mensagem é mostrada:

Página PAGE 582


Programando com o Centura Team Developer 2000

Apenas clique no botão OK.

Salve sua aplicação.

Concluímos mais uma etapa. O componente objeto-dado está pronto. Tudo o que é necessário fazer no
CTD2000 para que um componente seja executado no Component Services foi feito. Precisamos agora criar
o componente-negócio.

1 Abra a aplicação exCap23_01.apl que foi salva anteriormente.

2 O primeiro passo é incluir neste programa as definições do objeto-dado que foram feitas na etapa anterior.
Devemos incluir o componente objeto-dado na nossa aplicação.

Para fazer isso acione o menu Tools | ActiveX Explorer.

4 Localize o item chamado “exCap23_02 1.0 Type Library”.


Este é o componente que registramos na etapa anterior, o objeto-dado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Os componentes são mostrados em ordem alfabética, então basta digitar no interior do list box as letras "ex"
(minúsculas).

Quando encontrar o item clique no botão OK.

5 O ActiveX Explorer lê as informações colhidas da type library que foi registrada na etapa anterior e mostra
as classes, interfaces, métodos, eventos e os enums.

Clique com o botão direito do mouse numa área branca do quadro esquerdo. Aparecerá um menu de
contexto, assim como mostrado na figura abaixo:

Selecione os itens Show CoClasses e Show Interfaces para que as mesmas sejam mostradas no ActiveX
Explorer.

6 Neste menu de contexto, clique no item chamado Generate Options para que a próxima janela seja mostrada.

Página PAGE 582


Programando com o Centura Team Developer 2000

Selecione o terceiro radio button para que o código seja gerado com as funções para todas as referências a
classes utilizadas.

7 Observe que, ao clicar numa interface, seus itens são mostrados no quadro direito do ActiveX Explorer. No
caso da nossa interface, apenas o método odInsere() é apresentado.
Nas suas aplicações vida real serão mostrados vários métodos.

8 Acione o menu de contexto do ActiveX Explorer, nele ative o menu Generate Deep para que o código seja
importado.

Página PAGE 582


Programando com o Centura Team Developer 2000

9 Essa importação significa que o ActiveX Explorer irá gerar uma biblioteca com o mesmo nome da type
library, com extensão “.APL”.

Nesta biblioteca são geradas várias classes que fazem referencia à type library. Uma classe em especial
merece nossa atenção, a classe COM Proxy, pois é ela que deverá ser utilizada pelo nosso componente.

Aguarde a conclusão da importação.

10 Após importado, o código gerado é mostrado na seção Classes em letras azuis, conforme ilustrado na figura
abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Uma vez importado o código, podemos codificar nosso método.

11 Localize o método Insere() na interface ICEmpresa.

E digite o código mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

O código fonte completo do método Insere() é o seguinte:

Function: Insere
Description:
Attributes
Returns
Boolean:
Parameters
String: psCodigo
String: psNome
Static Variables
Local variables
ComProxyVar: oEmpresa
Class: exCap23_02_C_odEmpresa
Boolean: bRetorno
Actions
If SalMTSCreateInstance( oEmpresa )
Call oEmpresa.odInsere( psCodigo, psNome, bRetorno )
Call oEmpresa.Release ( )
Return bRetorno

O componente objeto-negócio está concluído, o próximo passo agora é desenvolver a aplicação cliente que o
utilizará.

A aplicação cliente

A aplicação cliente deve ter toda a interface visual, a interação com o usuário final. No momento adequado,
as chamadas aos objetos-negócio devem ser feitas.

A aplicação cliente jamais deve deixar um componente objeto-negócio aguardando por alguma digitação do
usuário final.

Neste ponto precisa ser desenvolvida uma aplicação que servirá de interface visual para a digitação e inclusão
da empresa. A figura abaixo ilustra uma janela que permite a digitação do código, do nome da empresa e um
botão que será pressionado para ativar o objeto-negocio, fazendo então a inclusão.

1 Monte uma aplicação parecida com a mostrada na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

2 Ative o ActiveX Explorer, assim como foi feito na confecção do componente anterior.

Selecione no ActiveX Explorer a type library chamada “exCap23_01 1.0 Type Library”.
Clique no botão OK.

3 Marque todos os itens para a geração do código.


Ative o menu de contexto do ActiveX Explorer e selecione o item Generate Deep para que o código da
type library referente ao objeto-negócio seja gerado.

Esses passos já foram descritos na geração do componente anterior e são exatamente os mesmos, por
isso não os ilustramos. Qualquer dúvida consulte os passos 7 e 8 da confecção do componente anterior,
pois são idênticos.

4 Uma vez importado o componente objeto-negócio, basta codificar o botão incluir para que o programa
funcione.

A figura abaixo ilustra a codificação necessária na camada visual do aplicativo.

Página PAGE 582


Programando com o Centura Team Developer 2000

É necessário instanciar um objeto da classe COM Proxy Class referente ao objeto objeto-negócio.

5 A figura abaixo ilustra todo o código fonte necessário:

A definição do objeto oNegEmpresa se faz necessária para que possamos ter acesso ao objeto-negócio e
aos seus métodos.

Fique atento quando for instanciar o objeto-negócio, ele deve ser uma instância da COM Proxy Class.
Nesse caso, a instância chama-se “exCap23_01_CEmpresa”.

A variável bRetorno é utilizada para que façamos a verificação do valor retornado pelo método Insere().

6 O código fonte completo do botão responsável pela inclusão da empresa é mostrado e explicado abaixo:

Pushbutton: pbInsere
Message Actions
On SAM_Click
Call SalWaitCursor ( TRUE )
If oNegEmpresa.Create ( )
Call oNegEmpresa.Insere( dfCodigo, dfNome, bRetorno )
Call oNegEmpresa.Release ( )

Página PAGE 582


Programando com o Centura Team Developer 2000

Call SalWaitCursor ( FALSE )

Lembre-se, antes de poder utilizar algum objeto é necessário iniciar uma instância deste objeto, isso é
feito através do método Create(). Esse método é padrão para todos os componentes criados no Centura
Team Developer 2000. Você sempre deve utilizar o método Create() assim como, ao encerra a
utilização do objeto, você deve liberar o mesmo através de uma chamada ao método Release().

O método Insere() já é um velho conhecido nosso e sua função é apenas ativar o objeto da camada de
dados que fará a inclusão da empresa.

Qualquer crítica necessária a inclusão da empresa deve ser codificada no método Insere() do objeto-
negócio. Não devemos realizar críticas na camada visual, pois, dessa forma não estaremos
reaproveitando código algum !

Você pode fazer download dos arquivos fonte presentes no livro diretamente a partir do site
http://www.centuraexplorer.com.br/livro_ctd2000/. Este exemplo chama-se exCap23_03.apl.

Agora estamos com toda a parte de codificação dos nossos componentes pronta, resta apenas instalar e
configurar os componentes no Component Services (MTS).

Inserindo uma aplicação no Component Services.

Mostraremos agora como criar uma aplicação no Component Services e acrescentar os nossos componentes a
essa aplicação. Para isso é necessário que você tenha disponível no seu Windows o Microsoft Component
Services, que faz parte do Windows 2000. No Windows NT 4.0, o MTS faz o papel do Component Services,
porém, as instruções descritas a seguir são válidas apenas para o Component Services.

1 Inicie o Component Services. Ele está presente no menu Programs | Administrative Tools do MS
Windows 2000.
2 Conforme mostrado na figura abaixo, clique com o botão direito no item COM+ Applications para ter
acesso a um menu de contexto onde você deve acionar o menu New | Application.

3 Isso dará acesso ao Assistente de Instalação de Aplicações COM, que é mostrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Pressione o botão Next para avançar.

4 Clique no botão que indica uma nova aplicação vazia, é o segundo botão, conforme ilustrado na figura
abaixo:

5 Dê um nome para a sua aplicação. Neste exemplo utilizaremos o nome "AppCTD2000".

6 Nesta janela você configura as propriedades de permissões de usuário. Para efeito de exemplo, deixe o
item default marcado, assim como ilustrado na figura abaixo:

7 A aplicação está criada, o assistente chegou ao final.

Página PAGE 582


Programando com o Centura Team Developer 2000

O próximo passo é a instalação dos componentes da aplicação "AppCTD2000".

A aplicação "AppCTD2000" devidamente instalada no Component Services.

Instalando os componentes da aplicação

As instruções abaixo ilustram todo o processo de instalação dos dois componentes que foram criados neste
capítulo, o objeto-dado e objeto-negócio.

1 Clique com o botão direito do mouse no item Components da aplicação AppCTD2000, no quadro
esquerdo do Component Services, conforme ilustrado na figura abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Ative o menu New | Component para ter acesso ao assistente de Instalação de Componentes COM.

2 Uma vez no Assistente de Instalação de Componentes COM, clique no botão referente ao item Install
new component(s), conforme exemplificado na figura abaixo:

3 Nesta janela você deve escolher as DLLs dos componentes gerados no CTD2000. Navegue até o
diretório onde as DLLs foram geradas e escolha as duas, de uma só vez, seguindo a ilustração abaixo:

Para prosseguir clique no botão Open.

4 Neste momento o Assistente de Instalação de Componentes COM identificará as interfaces contidas nos
componentes selecionados e mostrará a seguinte janela:

Página PAGE 582


Programando com o Centura Team Developer 2000

Agora, basta clicar no botão Next para que os componentes sejam instalados no Component Services.

5 Clique no botão Finish para encerrar.

Os componentes foram adicionados ao Component Services e isso pode ser confirmado na imagem mostrada
abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

Observe na figura abaixo a interface Insere() do objeto-negócio.

A próxima e última etapa a ser concluída, antes que os componentes estejam finalmente instalados e prontos
para utilização, é a configuração das suas propriedades.

Configurando as propriedades do componente

Um componente possui uma série de propriedades, mas neste momento configuraremos as propriedades que
dizem respeito à Transação.

Quanto às transações, você pode configurar seus componentes das seguintes formas:

Disabled Desabilita o recurso de transações para um componente. Este é o atributo normal a um


componente que ainda não foi configurado.
Not Supported Utilize este atributo para evitar que um componente participe de alguma transação.
Supported Utilize este atributo para permitir que um componente participe de alguma transação.
Caso não exista nenhuma transação ativada, o componente não fará parte de nenhuma
transação.
Requires New Utilize este atributo para informar que o componente deve sempre iniciar em uma nova
transação.
Required Utilize este atributo para informar que o componente deve ser iniciado em uma
transação já existente. Caso não exista uma transação ativa no objeto chamado, uma
nova transação será criada.

Página PAGE 582


Programando com o Centura Team Developer 2000

1 Clique com o botão direito do mouse no componente objeto-dado e acione o menu Properties.

2 Na propriedade Transactions do objeto-negócio selecione o item Requires New.


Clique no botão OK para confirmar.

3 Na propriedade Transactions do objeto-dado selecione o item Suported.


Pressione o botão OK para confirmar.

Executando a aplicação cliente

Neste momento os objetos estão devidamente configurados, você pode executar a aplicação cliente
SQLWindows e ver o resultado, simplesmente verificando a linha inserida na tabela, conforme o comando
insert codificado no método odInsere().

Chegamos ao final deste capítulo, onde mostramos como construir componentes COM+ em CTD2000 para
serem executados no Component Services do MS Windows 2000. O assunto não foi esgotado com as
informações supridas aqui, pois por enquanto essa não é a nossa proposta. Você precisa aprofundar-se mais
Página PAGE 582
Programando com o Centura Team Developer 2000

no estudo de construção de aplicações distribuídas, caso isso torne-se uma realidade na sua empresa, o que
fatalmente ocorrerá.

Neste capítulo procuramos fornecer as informações básicas para que você consiga iniciar o processo de
desenvolvimento de aplicações distribuídas com o CTD2000.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Capítulo 16
Desenvolvendo Aplicações SQLWindows para a
Web

Página PAGE 582


Programando com o Centura Team Developer 2000

Apresentação

O Centura Team Developer 2000 possui algumas extensões para a web que permitem aos
desenvolvedores rapidamente fazerem com que suas aplicações escritas em SQLWindows
possam ser executadas no ambiente web, dentro de um browser.

Estas extensões são instaladas na forma de alguns componentes que devem ser utilizados
no desenvolvimento das aplicações no próprio ambiente do SQLWindows. Aplicações
Web são construídas no mesmo ambiente das aplicações tradicionais Windows, o único
diferencial está nos componentes que devem ser utilizados.

O executável de uma aplicação feita para rodar na web também funciona, para propósito de
testes e depuração, no ambiente windows.

Dois módulos distintos compoem as extensões para web da Centura (CWE), o módulo
servidor e o cliente. O Módulo cliente, como já citado acima, é composto dos componentes
para desenvolvimento de aplicações que rodam na web, os QuickObjects para aplicações
Web. O Módulo servidor deve ser instalado no servidor web e sua principal função é
interceptar as chamadas vindas dos usuários para o servidor web e ativar as respectivas
aplicações escritas em Centura SQLWindows. Estas aplicações são executadas no servidor
de aplicações Web, onde deve estar instalado o módulo servidor do CWE.

Esta tarefa de identificar a aplicação requisitada é feita pelo AppConsole. No AppConsole


estão cadastradas todas as aplicações disponibilizadas no servidor, todas as aplicações
desenvolvidas em SQLWindows fazendo uso dos componentes para Web do Centura
Team Developer 2000.

No interior de cada executável estão os forms ou dialogs que devem ser executados
conforme solicitação do usuário. A execução da aplicação em si é feita na própria máquina
servidora que, no momento em que desenharia as telas para que o usuário pudesse vê-las
renderizam esta tela no browser do solicitante em formato html. Ou seja, uma montagem
de página html é feita dinamicamente no momento em que cada tela seria mostrada pela
aplicação windows. Isso indica que, alguns recursos comuns em aplicações tradicionais
windows não estão disponíveis nas aplicações web. Por exemplo, uma aplicação web não
pode ter barras de ferramentas assim como uma aplicação windows, não pode ter um MDI
com menus para ativar cada uma das janelas da aplicação, não pode ter janelas de
visualização de relatórios conforme são disponibilizadas nas aplicações Windows.

Outros artifícios podem ser utilizados para que se consiga construir aplicações equivalentes
às aplicações Windows, mas alguns recursos simplesmente não podem ser utilizados no
aplicativo web por limitação da própria plataforma web.

OBS:
O Centura Team Developer 2000 deve ser instalado conforme instruções presentes no
Apêndice F - Guia de instalação do Centura Team Developer 2000 para que as extensões
do Centura para a web sejam instaladas e configuradas corretamente.

A configuração do Web App Manager e do APP Console

Página PAGE 582


Programando com o Centura Team Developer 2000

No AppConsole é onde ficam cadastradas as aplicações disponibilizadas no servidor web,


as aplicações que estarão acessíveis aos usuários através de seus navegadores web.

A figura abaixo mostra a janela principal do AppConsole:

Obs:
O AppConsole precisa sempre estar no ar para que seus clientes web possam acionar as
aplicações automaticamente. É uma prática comun instalar o AppConsole num servidor
WindowsNT ou Windows2000 como um serviço e configurar sua inicialização para
automática sempre que o servidor foi iniciado.

O Desenvolvimento em SQLWindows

O desenvolvimento das aplicações cujo destino é rodar na web devem fazer uso dos
componentes específicos para web, os QuickObjects para Web. Através destes
componentes o desenvolvimento de aplicações para a web é extremamente simplificado.

Os componentes para Web

Existem duas formas básicas de se desenvolver aplicações web com o SQLWindows:

os QuickObjects DVC para Web oferecem um conjunto de componentes que


simplificam o desenvolvimento de aplicações web. São um conjunto de classes que
trabalham em conjunto, através de janelas de configuração, tornando o desenvolvimento
parecido com a forma demonstrada nos capítulos 6 e 7. Vale a pena desenvolver algumas
aplicações utilizando estes componentes para que se tenha uma idéia de produtividade no
desenvolvimento.

Para que os QuickObjects DVC para Web estejam disponíveis em sua aplicação você
precisa incluir a biblioteca QCKWEBDS.APL em sua aplicação, na seção Libraries.

Página PAGE 582


Programando com o Centura Team Developer 2000

os QuickObjects padrão para Web são os componentes que servem de base para
qualquer tipo de aplicação desenvolvida em SQLWindows cujo destino seja rodar na web.
Estes componentes são a base dos QuickObjects DVC para Web e você deve derivar suas
classes destes componentes para pode adaptá-las ao ambiente web.

Para que os QuickObjects padrão para Web estejam disponíveis em sua aplicação você
precisa incluir a biblioteca QCKWEB.APL em sua aplicação, na seção Libraries.

Obs:
Você não pode fazer uso das duas bibliotecas de componentes para web simultaneamente
na mesma aplicação.

A janela home

Você precisa informar o nome do form window ou dialog box inicial da sua aplicação. Esta
tarefa é muito simples e deve ser realizado da seguinte forma:

1 Após incluir uma das duas bibliotecas de componentes para web defina um novo form
window da classe cWebMgrForm.

2 Através do menu de contexto deste form window ative a opção cWebMgrForm


Properties.

3 Nesta janela de configuração das propriedades você deve selecionar o objeto que será
utilizado como objeto inicial do executável gerado.

É bem mais interessante gerar muitos executáveis pequenos, cada um contendo apenas
algumas poucas janelas, do que trabalhar com poucos executáveis grandes.

Página PAGE 582


Programando com o Centura Team Developer 2000

Objetos Web

A partir deste momento, todos os objetos que você utilizar para montar sua aplicação web
devem ser objetos derivados dos Componentes para a Web, são as classes que inicam pelo
nome cWeb*. Se algum objeto que não for derivado destes componentes for utilizado na
aplicação este objeto não será mostrado na página html que é montada para o usuário final.

O desenvolvimento

Ao desenvolver aplicações que serão executadas na web devemos ter em mente algumas
regras básicas para que a aplicação funcione corretamente. Além das regras básicas de
design de telas, que mudam consideravelmente, temos também que tomar cuidado no
desenvolvimento interno da aplicação, no código fonte, nos recursos utilizados.

Obs:
O código interno das suas regras de negócio não deve sofrer mudança alguma quando o
desenvolvimento é para a web. Podendo inclusive ser utilizada a mesma classe de regras de
negócio nas aplicações web e windows.

Consulte o Capítulo 15 que trata do desenvovimento de componentes para perceber


todo o potencial deste recurso que permite que você desenvolva seus componentes
COM para rodar em servidores de aplicações que são utilizadas tanto por aplicações
windows (como ilustrado no capítulo 15) como por aplicações web. Ou seja, a regra
de negócio estando em componentes COM pode ser utilizada por clientes windows,
web e outros clientes compatíveis com o padrão COM.

Algumas dicas para o desenvolvimento de aplicações para a web com o Centura


SQLWindows:

 Você deve utilizar as classes desenvolvidas para funcionar na web (conforme


citado acima). Sua bibliioteca de classes pode continuar sendo utilizada desde que
cada classe visual derive da respectiva classe cWeb*. Por exemplo, sua classe de
check boxes ccbPadrao precisa derivar da classe cWebCheckBoxBase para que as
instâncias da classe ccbPadrao sejam mostradas na web quando a página for
desenhada no navegador do usuário.
 Você deve utilizar em suas aplicações as mensagens WEB_* ao invés de SAM_*.
Por exemplo, utilize WEB_Create sempre que for utilizar SAM_Create. Além disso
observe que algumas mensagens que funcionam nas aplicações Windows
simplesmente não são processadas na internet, é o caso da mensagem
SAM_AnyEdit.
 Seus MDIs não poderão existir nas aplicações web, pois apenas uma janela de cada
vez pode ser mostrada no browser. Estude o caso de utilizar janelas com frames
caso seja necessário trabalhar com mais de um janela simultâmeamente. No caso
dos menus presentes no mdi das aplicações windows, estes devem ser
reestruturados e distribuídos de outra forma nas aplicações web. Você pode ainda
montar seus menus em Java ou HTML Dinâmico.
 Utilize modal dialog boxes para entrada de dados na web. Dialog Boxes modeless e
system modal não são suportados na web.

Página PAGE 582


Programando com o Centura Team Developer 2000

 Assim como no caso da mensagem SAM_AnyEdit, que não tem efeito quando em
aplicações web, os cliques duplos também não podem ser capturados na web.
 Não podem ser visualizados em aplicações web objetos tipo OLE e custom
controls. Podem existir na aplicação mas não podem ser visualizados.
 Atalhos de teclado e aceleradores não são suportados na web assim como os
eventos de mouse típicos de aplicações Windows, como por exemplo
SAM_DrapAndDrop, WM_MouseMove, SAM_DropDown.

Estes são apenas alguns dos cuidados que devemos tomar no desenvolvimento de
aplicações para web.

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Apêndice A
Guia de referência das funções SAL
O Centura SQLWindows/32 dispõe de cerca de 850 funções nativas que auxiliam no
desenvolvimento das aplicações, tornando o ambiente extremamente produtivo e bastante
poderoso. Essas funções estão classificadas em diversos grupos para facilitar a utilização.

O correto uso das funções do SQLWindows/32 pelo desenvolvedor é de suma importância.


Portanto, neste apêndice apresentamos detalhadamente todas as suas funções.

Obs
Todas as funções para interface com bancos de dados são precedidas pelas letras ‘Sql’, e são explicadas
detalhadamente no Apêndice B – Guia de Referência das Funções SQL.

Página PAGE 582


Programando com o Centura Team Developer 2000

As funções SAL são agrupadas nas seguintes categorias:

Funções ActiveX
SalActiveXAutoErrorMode
SalActiveXClose
SalActiveXCreate
SalActiveXCreateFromData
SalActiveXCreateFromFile
SalActiveXDelete
SalActiveXDoVerb
SalActiveXGetActiveObject
SalActiveXGetData
SalActiveXGetObject
SalActiveXInsertObjectDialog
SalActiveXOLEType

Tratamento de vetores
SalArrayAvg
SalArrayDimCount
SalArrayGetLowerBound
SalArrayGetUpperBound
SalArrayIsEmpty
SalArrayMax
SalArrayMin
SalArraySetUpperBound
SalArraySum

Manipulação de cores e fontes


SalColorFromRGB
SalColorGet
SalColorGetSysColor
SalColorSet
SalColorToRGB
SalFontGet
SalFontGetNames
SalFontGetSizes
SalFontSet

Funções para realizar conversões


SalFormUnitsToPixels
SalGetDataType
SalGetItemName
SalGetMaxDataLength
SalHStringToNumber
SalPixelsToFormUnits
SalSetMaxDataLength

Tratamento de datas
SalDateConstruct
Página PAGE 582
Programando com o Centura Team Developer 2000

SalDateCurrent
SalDateDay
SalDateHour
SalDateMinute
SalDateMonth
SalDateMonthBegin
SalDateQuarter
SalDateQuarterBegin
SalDateSecond
SalDateToStr
SalDateWeekBegin
SalDateWeekday
SalDateYear
SalDateYearBegin

Funções DDE
SalDDEAddAtom
SalDDEAlloc
SalDDEDeleteAtom
SalDDEExtract
SalDDEExtractCmd
SalDDEExtractDataText
SalDDEExtractOptions
SalDDEFindAtom
SalDDEFree
SalDDEGetAtomName
SalDDEGetExecuteString
SalDDEPost
SalDDERequest
SalDDESend
SalDDESendAll
SalDDESendExecute
SalDDESendToClient
SalDDESetCmd
SalDDESetDataText
SalDDESetOptions
SalDDEStartServer
SalDDEStartSession
SalDDEStopServer
SalDDEStopSession

Funções de depuração
SalCompileAndEvaluate
SalContextBreak
SalContextCurrent

Página PAGE 582


Programando com o Centura Team Developer 2000

Manuseio de dialog box


SalDlgChooseColor
SalDlgChooseFont
SalDlgOpenFile
SalDlgSaveFile
SalEndDialog
SalModalDialog
SalModalDialogFromStr

Utilização dos recursos de arrastar e soltar


SalDragDropDisableDrop
SalDragDropEnableDrop
SalDragDropGetSource
SalDragDropGetTarget
SalDragDropStart
SalDragDropStop
SalDropFilesAcceptFiles
SalDropFilesQueryFiles
SalDropFilesQueryPoint

Funções de edição
SalEditCanCopyTo
SalEditCanCut
SalEditCanPaste
SalEditCanPasteFrom
SalEditCanUndo
SalEditClear
SalEditCopy
SalEditCopyString
SalEditCopyTo
SalEditCut
SalEditPaste
SalEditPasteFrom
SalEditPasteString
SalEditUndo

Gerenciamento de arquivos
SalFileClose
SalFileCopy
SalFileCreateDirectory
SalFileGetC
SalFileGetChar
SalFileGetCurrentDirectory
SalFileGetDateTime
SalFileGetDrive
SalFileGetStr
SalFileOpen
SalFileOpenExt

Página PAGE 582


Programando com o Centura Team Developer 2000

SalFilePutC
SalFilePutChar
SalFilePutStr
SalFileRead
SalFileRemoveDirectory
SalFileSeek
SalFileSetCurrentDirectory
SalFileSetDateTime
SalFileSetDrive
SalFileTell
SalFileWrite

Formatação e validação
SalFmtFieldToStr
SalFmtFormatDateTime
SalFmtFormatNumber
SalFmtGetFormat
SalFmtGetInputMask
SalFmtGetPicture
SalFmtIsValidField
SalFmtIsValidInputMask
SalFmtIsValidPicture
SalFmtKeepMask
SalFmtSetFormat
SalFmtSetInputMask
SalFmtSetPicture
SalFmtStrToField
SalFmtUnmaskInput
SalFmtValidateField
SalIsNull
SalIsValidDateTime
SalIsValidDecimal
SalIsValidInteger
SalIsValidNumber
SalStrIsValidCurrency
SalStrIsValidDateTime
SalStrIsValidNumber
SalValidateSet

Tratamento dos objetos list box e combo box


SalListAdd
SalListClear
SalListDelete
SalListFiles
SalListGetMultiSelect
SalListInsert
SalListPopulate
SalListQueryCount

Página PAGE 582


Programando com o Centura Team Developer 2000

SalListQueryFile
SalListQueryMultiCount
SalListQuerySelection
SalListQueryState
SalListQueryText
SalListQueryTextX
SalListQueryTextLength
SalListRedraw
SalListSelectString
SalListSetMultiSelect
SalListSetSelect
SalListSetTabs

Gerenciamento dos recursos dos MDI


SalMDIArrangeIcons
SalMDICascade
SalMDITile

Suporte ao Microsoft Transaction Server


SalMTSCreateInstance
SalMTSDisableCommit
SalMTSEnableCommit
SalMTSGetObjectContext
SalMTSIsCallerInRole
SalMTSIsInTransaction
SalMTSIsSecurityEnabled
SalMTSSetAbort
SalMTSSetComplete

Funções de tratamento de mensagens


SalPostMsg
SalSendClassMessage
SalSendClassMessageNamed
SendSendMsg
SalSendMsgToChildren
SalSendValidateMsg

Funções de uso genérico


SalAbort
SalClearField
SalCursorClear
SalCursorSet
SalCursorSetFile
SalCursorSetString
SalDrawMenuBar
SalGetProfileInt
SalGetProfileString

Página PAGE 582


Programando com o Centura Team Developer 2000

SalGetVersion
SalIdleKick
SalIdleRegisterWindow
SalIdleUnregisterWindow
SalLoadApp
SalLoadAppAndWait
SalMapEnterToTab
SalMessageBeep
SalMessageBox
SalQuit
SalSetProfileString
SalTimerKill
SalTimerSet
SalTrackPopupMenu
SalUseRegistry
SalWaitCursor
SalWinHelp
SalYieldEnable
SalYieldQueryState
SalYieldStartMessages
SalYieldStopMessages

Manuseio de números
SalNumberAbs
SalNumberArcCos
SalNumberArcSin
SalNumberArcTan
SalNumberArcTan2
SalNumberCos
SalNumberCosH
SalNumberExponent
SalNumberHigh
SalNumberHypot
SalNumberLog
SalNumberLogBase10
SalNumberLow
SalNumberMax
SalNumberMin
SalNumberMod
SalNumberPi
SalNumberPower
SalNumberRandInit
SalNumberRandom
SalNumberRound
SalNumberSin
SalNumberSinH
SalNumberSqrt
SalNumberTan

Página PAGE 582


Programando com o Centura Team Developer 2000

SalNumberTanH
SalNumberToChar
SalNumberToHString
SalNumberToStr
SalNumberToStrX
SalNumberToWindowHandle
SalNumberTruncate

Tratamento de imagens
SalPicClear
SalPicGetDescription
SalPicGetImage
SalPicGetString
SalPicSet
SalPicSetFile
SalPicSetFit
SalPicSetImage
SalPicSetHandle
SalPicSetString

Funções de impressão
SalPrtExtractRect
SalPrtGetDefault
SalPrtGetParmNum
SalPrtPrintForm
SalPrtSetDefault
SalPrtSetParmDefaults
SalPrtSetParmNum
SalPrtSetup

Funções para relatórios


SalReportClose
SalReportCmd
SalReportCreate
SalReportDlgOptions
SalReportGetDateTimeVar
SalReportGetNumberVar
SalReportGetObjectVar
SalReportGetStringVar
SalReportPrint
SalReportPrintToFile
SalReportReset
SalReportSetDateTimeVar
SalReportSetNumberVar
SalReportSetObjectVar
SalReportSetStringVar
SalReportTableCreate
SalReportTablePrint

Página PAGE 582


Programando com o Centura Team Developer 2000

SalReportTableView
SalReportView

Tratamento de barras de rolagem


SalScrollGetPos
SalScrollGetRange
SalScrollSetPos
SalScrollSetRange

Funções SQL
SqlClearImmediate
SqlClose
SqlCommit
SqlConnect
SqlContextClear
SqlContextSet
SqlContextSetToForm
SqlDirectoryByName
SqlDisconnect
SqlDropStoredCmd
SqlError
SqlErrorText
SqlExecute
SqlExecutionPlan
SqlExists
SqlExtractArgs
SqlFetchNext
SqlFetchPrevious
SqlFetchRow
SqlGetError
SqlGetErrorPosition
SqlGetErrorText
SqlGetErrorTextX
SqlGetModifiedRows
SqlGetParameter
SqlGetParameterAll
SqlGetResultSetCount
SqlGetRollbackFlag
SqlImmediate
SqlImmediateContext
SqlOpen
SqlPLSQLCommand
SqlPrepare
SqlPrepareAndExecute
SqlRetrieve
SqlSetInMessage
SqlSetIsolationLevel
SqlSetLockTimeout

Página PAGE 582


Programando com o Centura Team Developer 2000

SqlSetLongBindDatatype
SqlSetOutMessage
SqlSetParameter
SqlSetParameterAll
SqlSetResultSet
SqlStore
SqlVarSetup

Tratamento de strings
SalStrCompress
SalStrFirstC
SalStrGetBufferLength
SalStrLeft
SalStrLeftX
SalStrLength
SalStrLop
SalStrLower
SalStrLowerX
SalStrMid
SalStrMidX
SalStrProper
SalStrProperX
SalStrRepeat
SalStrRepeatX
SalStrReplace
SalStrReplaceX
SalStrRight
SalStrRightX
SalStrScan
SalStrSetBufferLength
SalStrToDate
SalStrTokenize
SalStrToNumber
SalStrTrim
SalStrTrimX
SalStrUncompress
SalStrUpper
SalStrUpperX

Tratamento de table window


SalTblAnyRows
SalTblClearSelection
SalTblColumnAverage
SalTblColumnSum
SalTblCopyRows
SalTblCreateColumn
SalTblDefineRowHeader
SalTblDefineSplitWindow

Página PAGE 582


Programando com o Centura Team Developer 2000

SalTblDeleteRow
SalTblDeleteSelected
SalTblDestroyColumns
SalTblDoDeletes
SalTblDoInserts
SalTblDoUpdates
SalTblFetchRow
SalTblFindNextRow
SalTblFindPrevRow
SalTblGetColumnText
SalTblGetColumnTitle
SalTblGetColumnWindow
SalTblInsertRow
SalTblKillEdit
SalTblKillFocus
SalObjectsFromPoint
SalTblPasteRows
SalTblPopulate
SalTblQueryColumnFlags
SalTblQueryColumnID
SalTblQueryColumnPos
SalTblQueryColumnWidth
SalTblQueryContext
SalTblQueryFocus
SalTblQueryLockedColumns
SalTblQueryRowFlags
SalTblQueryRowHeader
SalTblQueryScroll
SalTblQuerySplitWindow
SalTblQueryTableFlags
SalTblQueryVisibleRange
SalTblReset
SalTblScroll
SalTblSetCellTextColor
SalTblSetColumnFlags
SalTblSetColumnPos
SalTblSetColumnText
SalTblSetColumnTitle
SalTblSetColumnWidth
SalTblSetContext
SalTblSetFlagsAnyRows
SalTblSetFocusCell
SalTblSetFocusRow
SalTblSetLockedColumns
SalTblSetRange
SalTblSetRow
SalTblSetRowFlags
SalTblSetTableFlags

Página PAGE 582


Programando com o Centura Team Developer 2000

SalTblSortRows

Gerenciamento de janelas
SalAppDisable
SalAppEnable
SalAppFind
SalBringWindowToTop
SalCenterWindow
SalCreateWindow
SalCreateWindowEx
SalContextMenuSetPopup
SalDestroyWindow
SalDisableWindow
SalDisableWindowAndLabel
SalEnableWindow
SalEnableWindowAndLabel
SalFindWindow
SalFormGetParmNum
SalGetDefButton
SalGetFirstChild
SalGetFocus
SalGetNextChild
SalGetType
SalGetWindowLabelText
SalGetWindowLoc
SalGetWindowSize
SalGetWindowState
SalGetWindowText
SalHideWindow
SalHideWindowAndLabel
SalInvalidateWindow
SalIsButtonChecked
SalIsWindowEnabled
SalIsWindowVisible
SalMoveWindow
SalParentWindow
SalQueryFieldEdit
SalSetDefButton
SalSetFieldEdit
SalSetFocus
SalSetWindowLabelText
SalSetWindowLoc
SalSetWindowSize
SalSetWindowText
SalShowWindow
SalShowWindowAndLabel
SalStatusGetText
SalStatusSetText

Página PAGE 582


Programando com o Centura Team Developer 2000

SalStatusSetVisible
SalTBarSetVisible
SalUpdateWindow
SalWindowClassName
SalWindowGetProperty
SalWindowHandleToNumber
SalWindowIsDerivedFromClass

Página PAGE 582


Programando com o Centura Team Developer 2000

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalAbort
Sintaxe : bOk = SalAbort ( nCodigo )
Descrição : Cancela o processamento atual do menu actions, message actions, ou do
application actions. Use SalAbort quando você quiser encerrar a sequência da chamada atual
sem retornar nenhum valor de status.

Parâmetro :
nCodigo Receive Number. O status de saída. O Centura ignora este parâmetro para entrada.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalActiveXAutoErrorMode
Sintaxe : bOk = SalActiveXAutoErrorMode ( bAcao )
Descrição : Liga/Desliga o tratamento automático de erro.

Parâmetro :
bAcao Boolean - Se for TRUE o tratamento automático de erro é ativado, se
FALSE, é desativado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalActiveXClose
Sintaxe : bOk = SalActiveXClose ( nWndControle , bSalvar )
Descrição : Fecha um objeto e encerra a conexão com a sua aplicação origem.

Parâmetros :
hWndControle Window Handle - O handle do controle ActiveX.
bSalvar Boolean - Se for TRUE, a aplicação origem do objeto irá salvar os dados
antes de encerrar a conexão.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalActiveXCreate
Sintaxe : bOK = SalActiveXCreate ( hWndControle , sID )
Descrição : Cria um objeto de acordo com a descrição da classe ( progID ).

Parâmetros :
hWndControle Window Handle - O handle do controle ActiveX.
sID String - Um identificador OLE da classe ( por exemplo Excel.Sheet.8 ).

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalActiveXCreateFromData
Sintaxe : bOk = SalActiveXCreateFromData ( hWndControle , sDesc )
Descrição : Cria novamente um objeto a partir de dados armazenados em formato binário.

Parâmetros :
hWndControle Window Handle - O handle do controle ActiveX.
sDesc String - Os dados em formato de bytes.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalActiveXCreateFromFile
Sintaxe : bOk = SalActiveXCreateFromFile ( objObjeto , sArquivo )
Descrição : Cria uma instância de um objeto ActiveX.

Parâmetros :
objObjeto Object - Uma referência do objeto criado.
sArquivo String - O nome de um arquivo .doc válido. Por exemplo
'c:\docs\arquivo.doc'.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalActiveXDelete
Sintaxe : bOk = SalActiveXDelete ( hWndControle )
Descrição : Apaga uma instância de um objeto ActiveX.

Parâmetro :
hWndControl Window Handle - O handle do objeto que será apagado.
e

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalActiveXDoVerb
Sintaxe : bOk = SalActiveXDoVerb ( hWndControle , nVerbo , bTam )
Descrição : Abre um objeto para uma operação. Cada objeto possui seu próprio conjunto de
verbos.

Parâmetros :
hWndControle Window Handle - O handle do objeto.
nVerbo Number - Uma constante que identifica um verbo.
Os verbos padrões que devem ser suportados são listados abaixo:

Página PAGE 582


Programando com o Centura Team Developer 2000

salOLEPrimary - A ação padrão do objeto.


salOLEShow - Ativa o objeto para edição. Se a aplicação que criou o
objeto suporta ativação 'no local', o objeto é ativado dentro do
controle ActiveX container.
salOLEOpen - Abre um objeto numa janela separada. Se a aplicação que
criou o objeto suporta ativação 'no local', o objeto é ativado dentro
da sua própria janela.
salOLEHide - Esconde a aplicação que criou o objeto, para o caso de
objetos embutidos.
salOLEUIActivate - Se o objeto suporta ativação 'no local', mostra
alguma ferramenta de interface. Se o objeto não suporta ativação
'no local', um erro ocorre.
salOLEInPlaceActivate - Abre uma nova janela e prepara o objeto para
ser editado. Ocorre um erro se o objeto não suporta ativação
através de um clique do mouse.
bTam Boolean - Se for TRUE redimensiona o objeto para o mesmo tamanho da
janela onde foi ativado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalActiveXGetActiveObject
Sintaxe : bOk = SalActiveXGetActiveObject ( objObjeto , sClasse )
Descrição : Obtém uma instância de um objeto ActiveX quando a aplicação servidora já
estiver sendo executada.

Esta função pesquisa a Tabela de Objetos OLE em Execução para obter uma instância da
classe. Essa tabela contém a referência aos objetos em execução.

Parâmetros :
objObjeto objObjeto - O objeto que foi encontrado.
sClasse sClasse - O nome da classe do objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se o SQLWindows/32 não
conseguir encontrar um processo de automation válido.

Função : SalActiveXGetData
Sintaxe : bOk = SalActiveXGetData ( hWndControle , sBytes )
Descrição : Obtém o armazenamento associado ao objeto como uma linha de dados binários.
Dessa forma, é disponibilizado um mecanismo alternativo de persistência em tempo de
execução, para os objetos embutidos.

Parâmetros :
hWndControle Window Handle - O handle do objeto.
sBytes Receive String - A linha de dados binários do objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalActiveXGetObject
Sintaxe : bOk = SalActiveXGetObject ( hWndControle , objObjeto )
Descrição : Dá acesso à interface automation do objeto especificado.

Parâmetro :
hWndControle Window Handle - O handle do objeto.
objObjeto Object - O objeto que foi recuperado.

Valor de Retorno :
bOk é TRUE se a função conseguir encontrar uma interface automation válida, e FALSE caso
contrário.

Função : SalActiveXInsertObjectDialog
Sintaxe : bOk = SalActiveXInsertObjectDialog ( hWndControle )
Descrição : Mostra a caixa de diálogo padrão chamada Insert Object.

Quando um novo objeto é criado, o aplicativo associado ao nome da classe precisa estar
corretamente registrado no sistema operacional. O programa de instalação do aplicativo
precisa ter realizado adequadamente o seu registro.

Parâmetro :
hWndControl Window Handle - O handle do objeto onde o controle ActiveX será criado.
e

Valor de Retorno :
bOk é TRUE se a função conseguiu incluir o objeto sem erros. É FALSE se algum objeto foi
selecionado, mas não foi incluído corretamente. Quando o usuário, na janela de inclusão de
objetos ActiveX, clica no botão Cancel, bOk é -1.

Função : SalActiveXOLEType
Sintaxe : nRetorno = SalActiveXOLEType ( hWndControle )
Descrição : Obtém o status de um objeto ActiveX.

Parâmetro :
hWndControl Window Handle - O handle do objeto.
e

Valor de Retorno :
nRetorno é uma das seguintes constantes :
salOLEEmbedded - O objeto hWndControle contém um objeto embutido.
salOLENone - O objeto hWndControle não contém um objeto embutido.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalAppDisable
Sintaxe : bOk = SalAppDisable ( )
Descrição : Desabilita a entrada de dados de todas as aplicações que estiverem sendo
executadas. Utilize as funções SalAppDisable e SalAppEnable quando você estiver
executando várias aplicações e quiser controlar qual delas receberá o foco para que o usuário
digite os dados.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalAppEnable
Sintaxe : bOk = SalAppEnable ( )
Descrição : Habilita a entrada de dados de todas as aplicações que estiverem sendo
executadas e que foram desabilitadas pela função SalAppDisable. Utilize as funções
SalAppDisable e SalAppEnable quando você estiver executando várias aplicações e quiser
controlar qual delas receberá o foco para que o usuário digite os dados.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalAppFind
Sintaxe : hWnd = SalAppFind ( sNomeAplic , bAtiva)
Descrição : Encontra a janela top-level da aplicação que você especificou e retorna o handle
da janela. SalAppFind procura primeiro por instâncias de aplicações Centura e depois por
instâncias de outras aplicações Windows. Se você especificar o nome da instância atual,
SalAppFind encontrará apenas outras instâncias sendo executadas, caso existam. Você pode
usar este recurso para evitar que a mesma aplicação seja executada duas ou mais vezes.

Parâmetros :
sNomeAplic String - O nome da aplicação sem a extensão.
bAtiva Boolean - Se você setar bAtiva para TRUE, SalAppFind irá também
ativar a janela encontrada.

Valor de Retorno :
hWnd contém o handle da janela encontrada.

Função : SalArrayAvg
Sintaxe : nMedia = SalArrayAvg ( nArray )
Descrição : Retorna o valor da média de todos os valores do vetor.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
nArray Vetor de números – É o nome do vetor de números.

Valor de Retorno :
nMedia é o valor da média de todos os valores do vetor.

Função : SalArrayDimCount
Sintaxe : bOk = SalArrayDimCount ( Array , nDim )
Descrição : Retorna o número de dimensões num vetor.

Parâmetros :
Array Vetor – É o nome do vetor.
nDim Receive Number – O número de dimensões do vetor.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalArrayGetLowerBound
Sintaxe : nOk = SalArrayGetLowerBound ( aArray , nDim , nIndice )
Descrição : Retorna o menor índice de um vetor.

Parâmetros :
aArray Array – O nome do vetor
nDim Number – O número da dimensão para pesquisar. A primeira dimensão é 1,
a segunda 2 e assim por diante.
nIndice Receive Number – O valor do menor índice do um vetor.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalArrayGetUpperBound
Sintaxe : bOk = SalArrayGetUpperBound ( aArray , nDim , nIndice )
Descrição : Retorna o maior índice de um vetor.

Parâmetros :
aArray Array – O nome do vetor
nDim Number – O número da dimensão para pesquisar. A primeira dimensão é 1,
a segunda 2 e assim por diante.
nIndice Receive Number – O valor do maior índice de um vetor.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalArrayIsEmpty
Sintaxe : bOk = SalArrayIsEmpty ( aArray )
Descrição : Determina se um vetor dinâmico contém dados.

Parâmetro :
aArray Array – O nome do vetor.

Valor de Retorno :
bOk é TRUE se o vetor não contém dados, ou seja, se estiver vazio, e FALSE se o vetor
possuir dados.

Função : SalArrayMax
Sintaxe : nValor = SalArrayMax ( aArray )
Descrição : Retorna o valor do último elemento de um vetor.

Parâmetro :
aArray Array – O nome do vetor.

Valor de Retorno :
nValor é o valor do último elemento do vetor .

Função : SalArrayMin
Sintaxe : nValor = SalArrayMin ( aArray )
Descrição : Retorna o valor do primeiro elemento de um vetor.

Parâmetro :
aArray Array – O nome do vetor.

Valor de Retorno :
nValor é o valor do primeiro elemento do vetor .

Função : SalArraySetUpperBound
Sintaxe : bOk = SalArraySetUpperBound ( aArray, nDimensao, nIndice )
Descrição : Define o índice para o último elemento do vetor. Use esta função para “resetar”
um vetor, para informar ao Centura que o vetor não contém nenhum elemento.

Parâmetros :
aArray Array – O nome do vetor.
nDimensao Number – O número da dimensão.
A primeira dimensão é 1, a segunda 2 e assim por diante.
nIndice Number – O valor do último índice do vetor.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalArraySum
Sintaxe : nSoma = SalArraySum ( aArray )
Descrição : Retorna a soma dos elementos de um vetor numérico.

Parâmetro :
aArray Array – O nome do vetor que terá seus elementos somados.

Valor de Retorno :
nSoma é a soma de todos os elementos do vetor.

Função : SalBringWindowToTop
Sintaxe : bOk = SalBringWindowToTop ( hWndJanela )
Descrição : Traz a janela para a frente de todas as outras janelas.

Parâmetro :
hWndJanela Window Handle – O nome ou o handle da janela a ser mostrada na frente
das demais.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalCenterWindow
Sintaxe : bOk = SalCenterWindow ( hWndJanela )
Descrição : Centraliza uma janela. Se a janela for um top-level, o Centura centraliza
baseando-se na área de trabalho.

Parâmetro :
hWndJanela Window Handle - O handle ou o nome da janela a ser centralizada.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalClearField
Sintaxe : bOk = SalClearField ( hWndCampo )
Descrição : Limpa o valor de um data field, combo box ou column da table window.

Parâmetro :
hWndCampo Window Handle – O handle ou o nome do objeto ( data field, combo box ou
column ) que terá o seu valor apagado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalColorFromRGB
Sintaxe : nCor = SalColorFromRGB ( nVermelho , nVerde , nAzul )
Descrição : Compõe uma cor baseado nos valores numéricos definidos em nVermelho,
nVerde e nAzul.

Parâmetros :
nVermelho Number – Um número entre 0 e 255.
nVerde Number – Um número entre 0 e 255.
nAzul Number – Um número entre 0 e 255.

Valor de Retorno :
nCor é a nova cor gerada.

Função : SalColorGet
Sintaxe : nCor = SalColorGet ( hWndObj , nIndiceCor )
Descrição : Obtém a cor de uma determinada parte de um objeto.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto que você quer saber a cor.
nIndiceCor Number – A parte do objeto que você que saber a cor, é representada pelas
seguintes constantes : COLOR_IndexCellText, COLOR_IndexTransparent,
COLOR_IndexWindow, COLOR_IndexWindowText.

Valor de Retorno :
nCor é a cor retornada, ela pode ser uma cor definida pelo usuário e pode também ser uma das
cores já pré-definidas pelo Centura, estas cores são definidas nas constantes COLOR_*.
Se você especificar no segundo parâmetro COLOR_IndexTransparent e esta cor não tiver sido
definida, a função SalColorGet retornará COLOR_None.

Função : SalColorGetSysColor
Sintaxe : nCor = SalColorGetSysColor ( nIndiceCor )
Descrição : Obtém uma cor do sistema.

Parâmetro :
nIndiceCor Number – É a cor de uma parte do objeto, é representada pelas seguintes
constantes do Centura : COLOR_SysWindow, COLOR_SysWindowFrame
e COLOR_SysWindowText.

Valor de Retorno :
nCor é a cor retornada, ela pode ser uma das cores já pré-definidas pelo Centura, estas cores
são definidas nas constantes COLOR_*.

Função : SalColorSet
Sintaxe : bOk = SalColorSet ( hWndObj , nIndiceCor , nCor )
Descrição : Define a cor de um objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto que você deseja definir a
cor.
nIndiceCor Number – É a parte do objeto que você deseja definir a cor. Você pode
utilizar uma das constantes do Centura para identificar a parte do objeto que
terá sua cor alterada. As constantes podem ser:
COLOR_IndexCellText,
COLOR_IndexTransparent,
COLOR_IndexWindow e
COLOR_IndexWindowText.
nCor Number – É a cor a ser atribuída ao objeto. Pode ser uma cor definida pelo
usuário ou pode ser uma das cores já pré-definidas pelo Centura numa das
constantes COLOR_*.
Para desligar a cor transparente utilize COLOR_None.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalColorToRGB
Sintaxe : bOk = SalColorToRGB ( nCor, nVermelho , nVerde , nAzul )
Descrição : Decompõe uma cor em valores vermelho, verde e azul.

Parâmetros :
nCor Number - A cor definida pelo usuário ou uma das cores já pré-definidas
pelo Centura, estas cores são expressas nas constantes COLOR_*. Você não
pode utilizar aqui as cores COLOR_Default, COLOR_None, e as
constantes COLOR_Sys*.
nVermelho Receive Number – Um número entre 0 e 255 que representa a cor vermelha.
nVerde Receive Number - Um número entre 0 e 255 que representa a cor verde.
nAzul Receive Number - Um número entre 0 e 255 que representa a cor azul.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalCompileAndEvaluate
Sintaxe : nTipo = SalCompileAndEvaluate( sExp, nErro, nPosErro, nRet, sRet, dtRet,
hWndRet, bErro, sContexto )
Descrição : Avalia a expressão e retorna o seu valor um dos tipos de dados que são utilizados
como parâmetros, de acordo como o tipo de dado apropriado. SalCompileAndEvaluate
permite que você obtenha o conteúdo de uma variável, mesmo sem que você saiba o nome
desta.

Parâmetros :
sExp String – A expressão a ser avaliada.
nErro Receive Number – O número do erro, se for retornado algum.

Página PAGE 582


Programando com o Centura Team Developer 2000

nPosErro Receive Number – A posição em sExp que ocorreu o erro, se ocorrer algum.
nRet Receive Number – Este parâmetro terá algum valor se sExp retornar um
valor numérico.
sRet Receive String - Este parâmetro terá algum valor se sExp retornar um valor
string.
dtRet Receive Date/Time - Este parâmetro terá algum valor se sExp retornar um
valor date/time.
hWndRet Receive Window Handle – Este parâmetro terá algum valor se sExp retornar
um handle.
bErro Boolean – Se este parâmetro for TRUE, o Centura não mostrará nenhuma
mensagem caso ocorra algum erro. Especifique TRUE caso a aplicação faça
o seu próprio tratamento de erro. Especifique FALSE para que o Centura
mostre uma caixa de diálogo com a mensagem de erro, quando ocorrer um.
sContexto String – O ponteiro do contexto da execução, retornado pelas funções
SalContextBreak ou SalContextCurrent.

Valor de Retorno :
Se a função for executada com sucesso, nTipo irá conter um valor que pode ser uma das
seguintes constantes : EVAL_Date, EVAL_Handle, EVAL_If, EVAL_Number, EVAL_Set,
EVAL_String e EVAL_Template.

Função : SalContextBreak
Sintaxe : sContexto = SalContextBreak ( )
Descrição : Recupera o contexto do comando break mais recentemente executado. Utilize
esta função com SalCompileAndEvaluate.

Nenhum Parâmetro.

Função : SalContextCurrent
Sintaxe : sContexto = SalContextCurrent ( )
Descrição : Recupera o contexto de execução atual. Utilize esta função com
SalCompileAndEvaluate.

Nenhum Parâmetro.

Função : SalContextMenuSetPopup
Sintaxe : bOk = SalContextMenuSetPopup ( hWndObj , sNomeMenu , nFlags )
Descrição : Define que um popup menu nomeado na seção Global Declarations | Named
Menus será automaticamente mostrado quando o objeto receber a mensagem
SAM_ContextMenu.

Parâmetros :
hWndObj Window Handle – O handle do objeto de mais baixo nível que irá processar
as mensagens que o menu enviará.
sNomeMenu String – O nome de um menu definido numa seção Named Menus do objeto

Página PAGE 582


Programando com o Centura Team Developer 2000

ou do Global Declarations.
nFlags Number – Utilize CM_TableCell para sobrepor o menu padrão mostrado
pelo windows quando o mouse é apontado para um campo de edição ou
uma célula de uma coluna da table window. Utilize Zero para que o menu
padrão do windows seja mostrado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalCreateWindow
Sintaxe : hWndJanelaCriada = SalCreateWindow ( tJanela , hWndPai , Parametro1,
Parametro2 , ..... )
Descrição : Cria janelas dialog box, form window, MDI window e table window tipo top level
em tempo de execução, com o comportamento modeless.
Se você especificar um pai ( hWndPai ) , a janela criada será sempre mostrada por cima da
janela pai. Ao minimizar ou fechar a janela pai, a janela filha é também minimizada ou
fechada.

Você pode também passar um número variável de parâmetros para a janela que está sendo
criada com SalCreateWindow. Estes parâmetros são definidos na seção Window Parameters
da janela que está sendo criada.

SalCreateWindow aceita que o primeiro parâmetro seja o nome da janela a ser criada ou
também pode ser uma variável cujo seu conteúdo é o nome da jenela a ser criada. Neste caso
SalCreateWindow não aceita parâmetros.

Parâmetros :
tJanela Template ou String – O nome da janela a ser criada.
Atenção : se você utilizar uma variável, não poderá passar parâmetros.
hWndPai Window Handle – O handle ou o nome da janela pai. Especifique
hWndNULL para criar uma janela sem janela pai.
Parametro1 Qualquer tipo de dado – Um parâmetro opcional.
Parametro2 Qualquer tipo de dado – Um parâmetro opcional.

Valor de Retorno :
hWndJanelaCriada é o window handle da janela criada.

Função : SalCreateWindowEx
Sintaxe : hWndJanelaCriada = SalCreateWindowEx ( tJanela , hWndPai , nEsquerda ,
nAcima , nLargura , nAltura , nFlags , Parametro1 , Parametro2 , ..... )
Descrição : Cria um dialog box, form window ou table window como objeto filho de outro
dialog box, form window ou barra de ferramentas, em tempo de execução.

Se você especificar um pai ( hWndPai ) , a janela criada será sempre mostrada dentro da
janela pai. Ao minimizar ou fechar a janela pai, a janela filha é também minimizada ou
fechada.

Página PAGE 582


Programando com o Centura Team Developer 2000

Você pode também passar um número variável de parâmetros para a janela que está sendo
criada com SalCreateWindowEx. Estes parâmetros são definidos na seção Window
Parameters da janela que está sendo criada.

SalCreateWindowEx aceita que o primeiro parâmetro seja o nome da janela a ser criada ou
também pode ser uma variável cujo seu conteúdo é o nome da jenela a ser criada. Neste caso
SalCreateWindowEx não aceita parâmetros.

Parâmetros :
tJanela Template ou String – O nome da janela a ser criada.
Atenção : se você utilizar uma variável, não poderá passar parâmetros.
hWndPai Window Handle – O handle ou o nome da janela pai. Especifique
hWndNULL para criar uma janela sem janela pai.
nEsquerda e nAcima Number - Posição da janela em unidades de form.
nLargura e nAltura Number Tamanho da janela em unidades de form.
nFlags Number - Você pode combinar estes flags com o operador “|”.
CREATE_AsChild – Cria a janela como filha da janela hWndPai.
CREATE_Border – Quando utilizado com CREATE_AsChild a janela
possuirá uma borda.
CREATE_Hidden – Cria a janela mas não mostra-a.
Parâmetro1 Qualquer tipo de dado – Um parâmetro opcional.
Parâmetro2 Qualquer tipo de dado – Um parâmetro opcional.

Valor de Retorno :
hWndJanelaCriada é o window handle da janela criada.

Função : SalCursorClear
Sintaxe : bOk = SalCursorClear ( hWndObj , nTipo )
Descrição : Limpa o cursor de um objeto.

Parâmetros :
hWndObj Window Handle – O nome ou o handle de um objeto.
nTipo Number – O tipo do cursor, especifique uma destas constantes :
CURSOR_DisableDrop, CURSOR_DragDrop, CURSOR_Window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalCursorSet
Sintaxe : bOk = SalCursorSet ( hWndObj , tResource, nTipo )
Descrição : Define o cursor de um objeto.

Parâmetros :
hWndObj Window Handle – O nome ou o handle de um objeto.
tResource Template – Um ícone definido na seção Global Declarations | Resources do

Página PAGE 582


Programando com o Centura Team Developer 2000

outline, ou um dos tipos de cursores providos pelo sistema operacional.


CURSOR_Arrow,
CURSOR_Cross,
CURSOR_Ibeam,
CURSOR_Icon,
CURSOR_Size,
CURSOR_SizeNESW,
CURSOR_SizeNS,
CURSOR_SizeNWSE,
CURSOR_SizeWE,
CURSOR_UpArrow ou
CURSOR_Wait.
nTipo Number – O tipo do cursor, especifique uma destas constantes :
CURSOR_DisableDrop, CURSOR_DragDrop ou CURSOR_Window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalCursorSetFile
Sintaxe : bOk = SalCursorSetFile ( hWndObj , sArquivo , nTipo )
Descrição : Define o cursor para um determinado objeto.

Parâmetros :
hWndObj Window Handle – O nome ou o handle de um objeto.
sArquivo String – O nome de um cursor ou o nome de um arquivo de ícone.
nTipo Number – O tipo do cursor, especifique uma destas constantes :
CURSOR_DisableDrop, CURSOR_DragDrop ou CURSOR_Window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalCursorSetString
Sintaxe : bOk = SalCursorSetString ( hWndObj , sBuffer , nTipo )
Descrição : Define o cursor de um objeto baseado numa string.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto.
sBuffer String – A imagem de um cursor ou um arquivo de ícone.
nTipo Number – O tipo do cursor, especifique uma destas constantes :
CURSOR_DisableDrop, CURSOR_DragDrop ou CURSOR_Window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalDateConstruct
Sintaxe : dtData = SalDateConstruct ( nAno, nMes, nDia, nHora, nMinuto, nSegundo )
Descrição : Retorna um valor date/time montado através dos parâmetros nAno, nMes, nDia,
nHora, nMinuto e nSegundo.

Observe que se um dos parâmetros tiver menos algarismos do que o esperado,


SalDateConstruct completará com zeros à esquerda. Por exemplo, se nAno for 99, dtData
começará com o ano 0099.

Parâmetros :
nAno Number – número com 4 dígitos representando um ano.
nMes Number – número representando o mês, são válidos números de 01 até 12.
nDia Number – número representando o dia, são válidos números de 01 até 31.
nHora Number – número representando a hora, são válidos números de 00 até 23.
nMinuto Number – número representando os minutos, são válidos números de 00 até
59.
nSegundo Number – número representando os segundos, são válidos números de 00
até 59.

Valor de Retorno :
dtData é a nova data construída.

Função : SalDateCurrent
Sintaxe : dtDataHora = SalDateCurrent ( )
Descrição : Retorna a data/hora atual do computador.

Nenhum Parâmetro.

Valor de Retorno :
dtDataHora é a data e a hora atual do computador.

Função : SalDateDay
Sintaxe : nDia = SalDateDay ( dtData )
Descrição : Retorna o dia de um valor date/time, retorna –1 se a data for inválida.

Parâmetro :
dtData Date/Time – O valor data.

Valor de Retorno :
nDia é um número entre 1 e 31, ou –1 no caso do valor informado não corresponder a uma
data válida.

Função : SalDateHour
Sintaxe : nHora = SalDateHour ( dtData )
Descrição : Retorna a hora de um valor date/time, retorna –1 se a data for inválida.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
dtData Date/Time – O valor data.

Valor de Retorno :
nHora é um número entre 0 e 23, ou –1 no caso do valor informado não corresponder a uma
data válida.

Função : SalDateMinute
Sintaxe : nMinuto = SalDateMinute ( dtData )
Descrição : Retorna o minuto de um valor date/time, retorna –1 se a data for inválida.

Parâmetro :
dtData Date/Time – O valor data.

Valor de Retorno :
nMinuto é um número entre 0 e 59, ou –1 no caso do valor informado não corresponder a uma
data válida.

Função : SalDateMonth
Sintaxe : nMes = SalDateMonth ( dtData )
Descrição : Retorna o mês de um valor date/time, retorna –1 se a data for inválida.

Parâmetro :
dtData Date/Time – O valor data.

Valor de Retorno :
nMes é um número entre 0 e 12, ou –1 no caso do valor informado não corresponder a uma
data válida.

Função : SalDateMonthBegin
Sintaxe : dtDataInicial = SalDateMonthBegin ( dtData )
Descrição : Retorna a data inicial do mês da data passada como parâmetro. Por exemplo, se
dtData for 25 de janeiro de 1999

Parâmetro :
dtData Date/Time – O valor data.

Valor de Retorno :
nHora é um número entre 0 e 23, ou –1 no caso do valor informado não corresponder a uma
data válida.

Função : SalDateQuarter
Sintaxe : nQuarter = SalDateQuarter ( dtData )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Retorna um número indicando o quadrimestre do ano ao qual a data passada


como parâmetro se enquadra.

Parâmetro :
dtData Date/Time – A data a ser analisada.

Valor de Retorno :
nQuarter poderá conter um número entre 1 e 4 indicando o quadrimestre do ano.

Função : SalDateQuarterBegin
Sintaxe : dtDataInicio = SalDateQuarterBegin ( dtData )
Descrição : Retorna o primeiro dia do quadrimestre a que a data dtData pertence.

Parâmetro :
dtData Date/Time – O valor indicando a data.

Valor de Retorno :
dtDataInicio é o primeiro dia do quadrimestre.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalDateSecond
Sintaxe : nSegundos = SalDateSecond ( dtData )
Descrição : Retorna um valor indicando os segundos da hora passada como parâmetro.

Parâmetro :
dtData Date/Time – O valor data.

Valor de Retorno :
sSegundos é um número entre 0 e 59, ou –1 no caso do valor informado em dtData não
corresponder a uma data válida.

Função : SalDateToStr
Sintaxe : nTamanho = SalDateToStr ( dtData , sData)
Descrição : Converte um valor tipo date/time em seu correspondente do tipo string. Se o valor
em dtData não corresponder a um valor válido date/time, nTamanho será –1.

Parâmetros :
dtData Date/Time – O valor data a ser convertido para string.
sData Receive String – A data em formato string. ( AAAA-MM-DD-
HH:MM:SS.TTTTTT )

Valor de Retorno :
nTamanho é o tamanho do conteúdo de sData.

Função : SalDateWeekBegin
Sintaxe : dtInicioSemana = SalDateWeekBegin ( dtData )
Descrição : Retorna a data da segunda-feira anterior à data especificada em dtData.

Parâmetro :
dtData Date/Time – Um valor date/time.

Valor de Retorno :
dtInicioSemana é a data da segunda-feira anterior à data em dtData. Se esta for uma data
inválida, dtInicioSemana será igual a DATETIME_Null.

Função : SalDateWeekday
Sintaxe : nDiaSemana = SalDateWeekday ( dtData )
Descrição : Retorna o dia da semana em um valor entre 0 e 6. Retorna –1 se o valor em
dtData for inválido ou DATETIME_Null.

Parâmetro :
dtData Date/Time – A data a ser analisada.

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

nDiaSemana é um número entre 0 e 6. Sendo que 0 (zero) representa sábado, 1 representa


domingo e assim por diante.

Função : SalDateYear
Sintaxe : nAno = SalDateYear ( dtData )
Descrição : Retorna o ano da data informada. Se a data for um valor inválido, retorna –1.

Parâmetro :
dtData Date/Time – Um valor para a data.

Valor de Retorno :
nAno é o ano da tada informada.

Função : SalDateYearBegin
Sintaxe : dtInicioAno = SalDateYearBegin ( dtData )
Descrição : Retorna a data do primeiro dia do ano. Retorna –1 se a data informada for
inválida.

Parâmetro :
dtData Date/Time – O valor da data.

Valor de Retorno :
dtInicioAno corresponde à data do primeiro dia do ano.

Função : SalDDEAddAtom
Sintaxe : nAtomo = SalDDEAddAtom ( sStr )
Descrição : Adiciona uma string à tabela global de átomos, criando um novo átomo para
identificar a string. Se a string a ser adicionada à tabela já existir, o contador de átomos será
acrescido de um.

Parâmetro :
sStr String – A string a ser adicionada à tabela global de átomos.

Valor de Retorno :
Se a função for concluída com sucesso, nAtomo é o valor do novo átomo global. Se a string
em sStr já existir, nAtomo é o valor do átomo existente. Em caso de erro, nAtomo é zero.

Função : SalDDEAlloc
Sintaxe : nMemoria = SalDDEAlloc ( )
Descrição : Aloca um handle de memória para :
 Informações nas mensagens EM_DDE_Data ou WM_DDE_Poke.
 Opções numa mensagem WM_DDE_Advise.
 Uma string de comando numa mensagem WM_DDE_Execute.

Página PAGE 582


Programando com o Centura Team Developer 2000

Nenhum Parâmetro.

Valor de Retorno :
nMemoria é o handle global de memória, se a função for executada com sucesso, e zero, se
falhar.

Função : SalDDEDeleteAtom
Sintaxe : nContador = SalDDEDeleteAtom ( nAtomo )
Descrição : Diminui o contador de átomos. Se o contador atingir zero, o átomo e a string
associada serão apagados da tabela global de átomos.
Quando sua aplicação for encerrada, utilize esta função para cada chamada com sucesso à
função SalDDEAddAtom que você tiver feito.

Parâmetro :
nAtomo Number – O átomo a ser apagado.

Valor de Retorno :
nContador é zero se a função for executada com sucesso e é igual a nAtomo se a função
falhar.

Função : SalDDEExtract
Sintaxe : bOk = SalDDEExtract ( nwParam , nlParam , hWndRemetente , nllParam ,
nhlParam )
Descrição : Obtém o window handle do remetente e o valor do parâmetro lParam que foi
recebido.

Parâmetros :
nwParam Number – O parâmetro, tipo word, da mensagem DDE.
nlParam Number – O parâmetro, tipo long, da mensagem DDE.
hWndRemete Receive Window Handle – O window handle de quem enviou a mensagem.
nte
nllParam Receive Number – O valor ( low-order ) da variável lParam.
nhlParam Receive Number – O valor ( high-order ) da variável lParam.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDEExtractCmd
Sintaxe : bOk = SalDDEExtractCmd ( nComando , sComando , nTamanho )
Descrição : Extrai o comando representado pelo valor da variável lParam numa mensagem
WM_DDE_Execute.

Parâmetros :
nComando Number – O handle de memória para o comando.
sComando Receive String – O comando.
nTamanho Number – O tamanho máximo do comando.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDEExtractDataText
Sintaxe : bOk = SalDDEExtractDataText ( nData , nStatus , sDado , nTamanho )
Descrição : Extrai o valor contido na variável lParam numa mensagem WM_DDE_Data ou
WM_DDE_Poke.

Parâmetros :
nDado Number – O handle do objeto que contém o dado ou outra informação.
nStatus Receive Number – O status.
sDado Receive String – O dado.
nTamanho Number – O tamanho do buffer de dados.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDEExtractOptions
Sintaxe : SalDDEExtractOptions ( nwParam , nlParam , hWndRemetente , nllParam ,
nhlParam )
Descrição : Obtém o window handle do remetente e o valor do parâmetro lParam que foi
recebido.

Parâmetros :
nwParam Number – O parâmetro, tipo word, da mensagem DDE.
nlParam Number – O parâmetro, tipo long, da mensagem DDE.
hWndRemete Receive Window Handle – O window handle de quem enviou a mensagem.
nte
nllParam Receive Number – O valor ( low-order ) da variável lParam.
nhlParam Receive Number – O valor ( high-order ) da variável lParam.

Função : SalDDEFindAtom
Sintaxe : nAtomo = SalDDEFindAtom ( sStr )
Descrição : Procura na tabela global de átomos e retorna o átomo associado a string em sStr.

Parâmetro :
sStr String – A string que será procurada.

Valor de Retorno :
nAtomo é o átomo global associado à string sStr. nAtomo é zero se não for encontrado na
tabela.

Função : SalDDEFree

Página PAGE 582


Programando com o Centura Team Developer 2000

Sintaxe : nHandle = SalDDEFree ( nMemoria )


Descrição : Libera um handle de memória que foi alocado pela função SalDDEAlloc.
Quando sua aplicação for encerrada, utilize esta função para cada chamada com sucesso à
função SalDDEAlloc que você tiver feito.

Parâmetro :
nMemoria Number – O handle de memória a ser liberado.

Valor de Retorno :
nHandle é zero se a função for executada com sucesso e é igual ao valor em nMemoria se a
função falhar.

Função : SalDDEGetAtomName
Sintaxe : nTamAtomo = SalDDEGetAtomName ( nAtomo , sNomeDoAtomo , nTamanho )
Descrição : Obtém a string associada a um átomo.

Parâmetros :
nAtomo Number – O número do átomo.
sNomeDoAto Receive String – A string associada ao átomo.
mo
nTamanho Number – Especifica o tamanho máximo de sNomeDoAtomo.

Valor de Retorno :
nTamAtomo é o tamanho da string retornada se a função for executada com sucesso e zero se
a função falhar.

Função : SalDDEGetExecuteString
Sintaxe : sComando = SalDDEGetExecuteString ( nlParam )
Descrição : Uma aplicação servidora utiliza esta função para obter o comando enviado pelo
cliente. Esta função converte o valor de lParam na mensagem SAM_DDE_ClientExecute,
para um valor string, e retorna o valor da string em sComando.

Parâmetro :
nlParam Number – O valor de lParam na mensagem SAM_DDE_ClientExecute.

Valor de Retorno :
sComando é o comando enviado ao servidor pela aplicação cliente.

Função : SalDDEPost
Sintaxe : nRetorno = SalDDEPost ( hWndObj , nMensagem , hWndRemetente , nllParam ,
nhlParam )
Descrição : Envia todas as mensagens WM_DDE_*, com exceção das mensagens
WM_DDE_Initiate e WM_DDE_Ack.
A função SalDDEPost coloca uma mensagem na filha de mensagens do objeto, permitindo
que este processe as mensagens que já estiverem na fila. A função SalDDEPost retorna sem
esperar pelo processamento da mensagem no objeto que a recebeu.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
hWndObj Window Handle – O handle do objeto que recebe a mensagem.
nMensagem Number – A mensagem.
hWndRemete Window Handle – O handle de quem está enviando a mensagem.
nte
nllParam Receive Number – O valor ( low-order ) da variável lParam enviada com a
mensagem.
nhlParam Receive Number – O valor ( high-order ) da variável lParam enviada com a
mensagem.

Valor de Retorno :
nRetorno é um valor diferente de zero se a função for executada com sucesso e zero se a
função falhar.

Função : SalDDERequest
Sintaxe : bOk = SalDDERequest ( hWndCliente, sServiço, sTopico, sItem, nTimeout, sDado
)
Descrição : Uma aplicação cliente utiliza esta função para solicitar ao servidor o envio de
informação.

Parâmetros :
hWndCliente Window Handle – O handle da aplicação cliente, associado a um serviço,
tópico e item.
sServiço String – O nome do serviço DDE.
sTopico String – O nome do tópico DDE.
sItem String – O nome do item DDE.
nTimeOut Number – O valor do tempo limite de espera em milisegundos.
sDado Receive String – Uma variável string ou um objeto na aplicação cliente que
receberá os dados. Se for um objeto, este precisa ter condições de receber
informações ( como por exemplo, um data field, column, multiline text ou
combo box ), além de ter sido definido um tipo de dado compatível com o
tipo de dado da string.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalDDESend
Sintaxe : nRetorno = SalDDESend (hWndReceptor, nMsg, hWndRemetente, nllParam,
nhlParam )
Descrição : Envia uma mensagem WM_DDE_Ack em resposta à mensagem
WM_DDE_Initiate. Diferente da função SalDDEPost, a função SalDDESend não coloca a
mensagem na fila de mensagens do objeto, ou seja, ela faz um envio imediato da mensagem,
não retornando até que o processamento da mesma seja encerrado.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndRecept Window Handle – O handle do objeto que recebe a mensagem.


or
nMensagem Number – O número da mensagem.
hWndRemete Window Handle – O handle do objeto que está enviando a mensagem.
nte
nllParam Receive Number - O valor ( low-order ) da variável lParam enviada com a
mensagem.
nhlParam Receive Number - O valor ( high-order ) da variável lParam enviada com a
mensagem.

Valor de Retorno :
nRetorno é o valor retornado pelo receptor da mensagem.

Função : SalDDESendAll
Sintaxe : nRetorno = SalDDESendAll ( nMsg , hWndRemetente , nllParam , nhlParam )
Descrição : Distribui a mensagem WM_DDE_Initiate e não retorna até que todos os
receptores a tenham processado.

Parâmetros :
nMsg Number – A mensagem.
hWndRemete Window Handle – O handle do objeto que está enviando a mensagem.
nte
nllParam Receive Number - O valor ( low-order ) da variável lParam enviada com a
mensagem.
nhlParam Receive Number - O valor ( high-order ) da variável lParam enviada com a
mensagem.

Valor de Retorno :
nRetorno é um valor diferente de zero se a função for executada com sucesso e igual a zero se
a função falhar.

Função : SalDDESendExecute
Sintaxe : bOk = SalDDESendExecute ( hWndCliente, sServico, sTopico, sItem, nTimeout,
sCmd )
Descrição : A aplicação cliente utiliza esta função para enviar a mensagem
WM_DDE_Execute para o servidor.

Parâmetros :
hWndCliente Window Handle – O handle do objeto cliente associado com o serviço,
tópico e item DDE.
sServico String – O serviço DDE.
sTopico String – O nome do tópico DDE.
sItem String – O nome do item DDE.
nTimeout Number – O valor do tempo limite de espera em milisegundos.
sCmd String – O comando.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalDDESendToClient
Sintaxe : bOk = SalDDESendToClient ( hWndServidor , sDado , nIdCliente , nTimeout )
Descrição : Uma aplicação servidora utiliza esta função para enviar informações à aplicação
cliente.

Parâmetros :
hWndServido Window Handle – O handle do objeto associado ao serviço, tópico e item
r DDE.
sDado String – A informação a ser enviada ao cliente.
nIdCliente Number – O handle do cliente convertido para um valor numérico.
Para uma conversação tipo hot link, especifique zero. O Centura atualizará
todas as aplicações que tiverem estabelecido uma comunicação tipo hot
link.
Para uma conversação tipo cold link, o servidor recebe a mensagem
SAM_DDE_ClientRequest ( em resposta à chamada da função
SalDDERequest pela aplicação cliente ). O valor da variável lParam, na
mensagem SAM_DDE_ClientRequest, identifica o cliente a receber as
informações contidas em sDado.
nTimeout Number – O valor do tempo limite de espera em milisegundos.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalDDESetCmd
Sintaxe : bOk = SalDDESetCmd ( nhlParam , sCmd )
Descrição : Associa um comando ao valor referente à porção high-order da variável lParam
numa mensagem SAM_DDE_Execute.

Parâmetros :
nhlParam Number – O handle para o bloco de comando que contém a string do
comando.
sCmd String – O comando a ser executado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDESetDataText
Sintaxe : bOk = SalDDESetDataText ( nData , nStatus , sDado )
Descrição : Associa um comando ao valor referente à porção low-order da variável lParam
numa mensagem SAM_DDE_Data ou WM_DDE_Poke.

Parâmetros :
nData Number – O handle para o bloco de comando que contém o dado ou outra

Página PAGE 582


Programando com o Centura Team Developer 2000

informação.
nStatus Number – O código de status.
sDado String – O valor a ser associado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDESetOptions
Sintaxe : bOk = SalDDESetOptions ( nOpcoes , nFlags , nFormato )
Descrição : Associa um comando ao valor referente à porção low-order da variável lParam
na mensagem SAM_DDE_Advise.

Parâmetros :
nOpcoes Number – O handle para o objeto que especifica como os dados serão
enviados.
nFlags Number – O código de status.
nFormato Number – O formato do dado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDEStartServer
Sintaxe : bOk = SalDDEStartServer ( hWndServidor , sServico , sTopico , sItem )
Descrição : Uma aplicação servidora utiliza esta função para avisar às aplicações clientes que
ela está pronta para receber conexões. A aplicação servidora deve utilizar esta função, antes
que as aplicações cliente tentem efetuar a conexão.

Parâmetros :
hWndServido Window Handle – O window handle da aplicação servidora, associada à
r aplicação, ao tópico e ao item DDE.
sServico String – O serviço DDE.
sTopico String – O tópico DDE.
sItem String – O nome do item DDE.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDEStartSession
Sintaxe : bOk = SalDDEStartSession ( hWndObj, sServiço, sTópico, sItem, nTimeout )
Descrição : Uma aplicação cliente utiliza esta função para iniciar uma conversação tipo hot
link com o servidor.

Parâmetros :
hWndObj Window Handle – O handle ( ou o nome ) de um objeto que pode
armazenar valores ( como um data field, column, multiline text ou um
combo box )

Página PAGE 582


Programando com o Centura Team Developer 2000

Se a função SalDDEStartSession for bem sucedida, a aplicação servidora


atualiza o objeto associado ao handle hWndObj com o valor de sItem. A
mensagem SAM_DDE_DataChange é enviada ao objeto hWndObj quando
o valor do objeto for alterado.
sServiço String – O serviço DDE.
sTópico String – O nome do tópico DDE.
sItem String – O nome do item DDE.
nTimeOut Number – O valor do tempo limite de espera em milisegundos.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDEStopServer
Sintaxe : bOk = SalDDEStopServer ( hWndServidor )
Descrição : O servidor utiliza esta função para encerrar as atividades de um servidor DDE.
Esta função deve ser chamada o mesmo número de vezes que a função SalDDEStartServer foi
executada com sucesso.

Parâmetro :
hWndServido Window Handle – O handle do servidor associado ao serviço, tópico e item
r DDE.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDDEStopSession
Sintaxe : bOk = SalDDEStopSession ( hWndDest )
Descrição : Uma aplicação cliente utiliza esta função para encerrar uma conversação tipo hot
link com o servidor. Esta função deve ser chamada o mesmo número de vezes que a função
SalDDEStartSection foi executada com sucesso.

Parâmetro :
hWndDest Window Handle – O handle ou o nome do objeto na aplicação cliente, que
está associado a um serviço, tópico e item DDE.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDestroyWindow
Sintaxe : bOk = SalDestroyWindow ( hWndObj )
Descrição : Destrói um form window, dialog box, top-level table window ou mdi criado com
SalCreateWindow.

Parâmetro :
hWndObj Window Handle – O handle ou o nome do objeto a ser destruído.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDisableWindow
Sintaxe : bOk = SalDisableWindow ( hWndObj )
Descrição : Desabilita o acesso do teclado e do mouse a um objeto.
O texto do objeto ficará cinza, e o objeto não poderá receber o foco.

Parâmetro :
hWndObj Window Handle – O nome ou o handle do objeto a ser desabilitado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDisabelWindowAndLabel
Sintaxe : bOk = SalDisableWindowAndLabel ( hWndObj )
Descrição : Desabilita o acesso do teclado e do mouse a um objeto.
O texto do objeto e o background text que o preceder no outline ficarão cinza, e o objeto não
poderá receber o foco.

Parâmetro :
hWndObj Window Handle - O nome ou o handle do objeto a ser desabilitado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDlgChooseColor
Sintaxe : bOk = SalDlgChooseColor ( hWndPai , nCor )
Descrição : Mostra o diálogo de cores do windows para que o usuário escolha ou defina uma
nova cor.

Parâmetros :
hWndPai Window Handle – O nome ou o handle da janela pai.
nCor Number – O valor RGB da cor que o usuário escolheu.

Valor de Retorno :
bOk é TRUE se o usuário escolheu uma cor e saiu da janela clicando no botão Ok, e FALSE
se o usuário saiu da janela de cores clicando no botão Cancel.

Função : SalDlgChooseFont
Sintaxe : bOk = SalDlgChooseFont ( hWndPai , sNomeFonte, nTamanho, nMelhoramento,
nCor )
Descrição : Mostra o diálogo de fontes do Windows para que o usuário escolha uma fonte,
tamanho, melhoramento de fonte ou cor entre as que estão disponíveis.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
hWndPai Window Handle – O nome ou o handle da janela pai.
sNomeFonte Receive String – O nome da fonte escolhida pelo usuário.
nTamanho Receive Number – O tamanho da fonte escolhido pelo usuário.
nMelhoramen Receive Number – O melhoramento de fonte escolhido pelo usuário
to (negrito, itálico...).
nCor Receive Number – A cor escolhida pelo usuário.

Valor de Retorno :
bOk é TRUE se o usuário saiu da caixa de diálogo clicando no botão Ok, e FALSE se o
usuário saiu da janela clicando no botão Cancel.

Função : SalDlgOpenFile
Sintaxe : bOk = SalDlgOpenFile ( hWndPai, sTitulo, sFiltro, nFiltro, nIndice, sArquivo,
sPath )
Descrição : Mostra a caixa de diálogo do Windows onde o usuário poderá escolher um
arquivo para ser aberto.

Parâmetros :
hWndPai Window Handle – O nome ou o handle do objeto pai.
sTitulo String – O título que será mostrado na caixa de diálogo.
sFiltro String – Um vetor com os filtros e suas descrições. Cada filtro precisa ter
uma descrição que deve vir no item imediatamente anterior no vetor. Por
exemplo, o usuário poderá escolher o tipo de arquivo fonte do Centura que
ele deseja abrir, carregue o vetor de filtros assim:
asFiltro [0] = “Fonte Normal”
asFiltro [1] = “*.app”
asFiltro [2] = “Fonte Biblioteca”
asFiltro [3] = “*.apl”
asFiltro [4] = “Fonte Padrão Texto”
asFiltro [5] = “*.apt”
nFiltro Number – O número de elementos em sFiltro.
No exemplo acima o vetor de filtros possui 6 elementos. Para que os três
filtros sejam mostrados especifique o valor 6 em nFiltro.
Você pode limitar o número de filtros mostrados. Por exemplo, para mostrar
apenas os dois primeiros filtros definidos acima ( *.app e *.apl ) especifique
em nFiltro o valor 4.
nIndice Number – Refere-se ao filtro escolhido pelo usuário. Por exemplo, se o
usuário escolheu o segundo tipo de arquivos carregados no filtro, *.apl,
nIndice é 2.
sArquivo Receive String – É o nome do arquivo que o usuário escolheu.
sPath Receive String – É o nome do arquivo que o usuário escolheu com o path
completo.

Valor de Retorno :
bOk é TRUE se o usuário escolher um arquivo e clicar no botão Ok. FALSE se o usuário
clicar no botão Cancel, não escolhendo nenhum arquivo.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalDlgSaveFile
Sintaxe : bOk = SalDlgSaveFile ( hWndPai, sTitulo, sFiltro, nFiltro, nIndice, sFile, sPath )
Descrição : Mostra a caixa de diálogo do Windows onde o usuário poderá especificar um
nome e path para salvar um arquivo.

Parâmetros :
hWndPai Window Handle – O nome ou o handle do objeto pai.
sTitulo String – O título que será mostrado na caixa de diálogo.
sFiltro String – Um vetor com os filtros e suas descrições. Cada filtro precisa ter
uma descrição que deve vir no item imediatamente anterior no vetor. Por
exemplo, o usuário poderá escolher o tipo de arquivo fonte do Centura que
ele deseja salvar, então carregue o vetor de filtros assim :
asFiltro [0] = “Fonte Normal”
asFiltro [1] = “*.app”
asFiltro [2] = “Fonte Biblioteca”
asFiltro [3] = “*.apl”
asFiltro [4] = “Fonte Padrão Texto”
asFiltro [5] = “*.apt”
nFiltro Number – O número de elementos em sFiltro.
No exemplo acima o vetor de filtros possui 6 elementos. Para que os três
filtros sejam mostrados especifique o valor 6 em nFiltro.
Você pode limitar o número de filtros mostrados. Por exemplo, para mostrar
apenas os dois primeiros filtros definidos acima ( *.app e *.apl ) especifique
em nFiltro o valor 4.
nIndice Number – Refere-se ao filtro escolhido pelo usuário. Por exemplo, se o
usuário escolheu o segundo tipo de arquivos carregados no filtro, *.apl,
nIndice é 2.
sArquivo Receive String – É o nome do arquivo que o usuário escolheu.
sPath Receive String – É o nome do arquivo que o usuário escolheu com o path
completo.

Valor de Retorno :
bOk é TRUE se o usuário escolher um arquivo eclicar no botão OK. FALSE se o usuário
clicar no botão Cancel, não escolhendo nenhum arquivo.

Função : SalDragDropDisableDrop
Sintaxe : bOk = SalDragDropDisableDrop ( )
Descrição : Desabilita o recurso de soltar enquanto estiver em modo de arrastar-e-soltar.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalDragDropEnableDrop
Sintaxe : bOk = SalDragDropEnableDrop ( )
Descrição : Habilita o recurso de soltar enquanto estiver em modo de arrastar-e-soltar.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDragDropGetSource
Sintaxe : bOk = SalDragDropGetSource ( hWndObj, nX, nY )
Descrição : Obtém o handle do objeto origem e a localização do mouse no objeto quando
iniciou o modo arrastar-e-soltar.

Parâmetros :
hWndObj Receive Window Handle – O handle do objeto origem.
Os objetos que podem ser objeto origem são : combo box, multiline text,
data field, picture, list box e table window.
nX Receive Number – A posição do mouse no eixo X.
nY Receive Number - A posição do mouse no eixo Y.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDragDropGetTarget
Sintaxe : bOk = SalDragDropGetTarget ( hWndObj, nX, nY )
Descrição : Obtém o handle do objeto destino e a localização do mouse no objeto.

Parâmetros :
hWndObj Receive Window Handle – O handle do objeto destino.
nX Receive Number – A posição do mouse no eixo X.
nY Receive Number - A posição do mouse no eixo Y.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDragDropStart
Sintaxe : bOk = SalDragDropStart ( hWndOrigem )
Descrição : Inicia o modo arrastar-e-soltar.

Parâmetro :
hWndOrigem Window Handle – O handle ou o nome do objeto origem.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalDragDropStop
Sintaxe : bOk = SalDragDropStop ( )
Descrição : Finaliza o modo arrastar-e-soltar.

Nenhum Parâmetro :

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDrawMenuBar
Sintaxe : bOk = SalDrawMenuBar ( hWndJanela )
Descrição : Redesenha o menu de um form window, top-level table window ou mdi window.
Utilize esta função quando você quiser que as condições especificadas na seção Enable When
sejam reavaliadas, habilitando ou desabilitando o menu.

Parâmetro :
hWndJanela Window Handle – O nome ou o handle da janela que terá o menu
redesenhado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDropFilesAcceptFiles
Sintaxe : bOk = SalDropFilesAcceptFiles ( hWndObj , bAceita )
Descrição : Indica quando um objeto poderá receber arquivos vindos do Gerenciador de
Arquivos ou Windows Explorer.

Parâmetros :
hWndObj Window Handle – O nome ou o handle do objeto.
bAceita Boolean – Especifica quando o objeto hWndObj pode receber arquivos do
Gerenciador de Arquivos ou Windows Explorer.
O comportamento padrão para pictures editáveis é TRUE, para os demais
objetos o padrão é FALSE.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalDropFilesQueryFiles
Sintaxe : nArquivos = SalDropFilesQueryFiles ( hWndOrigem , sArquivos )
Descrição : Obtém os nomes dos arquivos que estão sendo arrastados do Gerenciador de
Arquivos ou do Windows Explorer para o objeto hWndOrigem. O recebimento da mensagem
SAM_DropFiles indica que o usuário arrastou arquivos para o objeto hWndOrigem.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndOrigem Window Handle – O nome ou o handle do objeto.


sArquivos Array String – Um vetor com os nomes dos arquivos

Valor de Retorno :
nArquivos é a quantidade de arquivos que está sendo arrastada para o objeto.

Função : SalDropFilesQueryPoint
Sintaxe : bOk = SalDropFilesQueryPoint ( hWndObjeto , nX, nY )
Descrição : Encontra a posição do mouse no objeto no momento em que o usuário arrastou
arquivos para o objeto. O recebimento da mensagem SAM_DropFiles indica que o usuário
arrastou arquivos para o objeto hWndOrigem.

Parâmetros :
hWndObjeto Receive Window Handle – O handle do objeto.
nX Receive Number – A posição do mouse no eixo X.
nY Receive Number - A posição do mouse no eixo Y.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditCanCopyTo
Sintaxe : bOk = SalEditCanCopyTo ( )
Descrição : Esta função retorna TRUE se a picture editável está com o foco e possui um
arquivo que pode ser copiado para um arquivo. Você pode usar esta função na seção Enable
When do item de menu Copiar Para....

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a picture editável está com o foco e possui um objeto, caso contrário, bOk é
FALSE.

Função : SalEditCanCut
Sintaxe : bOk = SalEditCanCut ( )
Descrição : Esta função retorna TRUE se uma picture editável, o texto num data field,
multiline text ou coluna da table window estiver com seu conteúdo selecionado.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se os dados estiverem selecionados. FALSE se a nada estiver selecionado.

Função : SalEditCanPaste
Sintaxe : bOk = SalEditCanPaste ( )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Esta função retorna TRUE se os dados na área de transferência puderem ser
copiados para o objeto com o foco. Você pode usar esta função na seção Enable When do
item de menu Colar.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se os dados na área de transferência puderem ser copiados para o objeto com o
foco e FALSE se não puder.

Função : SalEditCanPasteFrom
Sintaxe : bOk = SalEditCanPasteFrom ( )
Descrição : Esta função retorna TRUE se uma picture editável estiver com o foco.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se uma picture editável estiver com o foco, e FALSE em caso contrário.

Função : SalEditCanUndo
Sintaxe : bOk = SalEditCanUndo ( )
Descrição : Esta função retorna TRUE se a edição feita num data field, multiline text ou
coluna da table window pode ser desfeita.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a edição feita pode ser desfeita, bOk é FALSE quando a edição não pode ser
desfeita.

Função : SalEditClear
Sintaxe : bOk = SalEditClear ( )
Descrição : Apaga o texto selecionado num data field, multiline text ou coluna de uma table
window com o foco.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditCopy
Sintaxe : bOk = SalEditCopy ( )
Descrição : Copia o texto selecionado para a área de transferência.

Nenhum Parâmetro.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditCopyString
Sintaxe : bOk = SalEditCopyString ( sTexto )
Descrição : Copia uma string como texto para a área de transferência .

Parâmetro :
sTexto String – A string a ser copiada para a área de transferência.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditCopyTo
Sintaxe : bOk = SalEditCopyTo ( )
Descrição : Copia um objeto de um arquivo para um objeto picture. O foco precisa estar no
objeto picture.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditCut
Sintaxe : bOk = SalEditCut ( )
Descrição : Recorta o texto selecionado no data field, multiline text, coluna da table window
ou conteúdo de um objeto picture, colocando-o na área de transferência.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditPaste
Sintaxe : bOk = SalEditPaste ( )
Descrição : Cola o conteúdo da área de transferência no data field, multiline text, coluna da
table window ou picture com o foco.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalEditPasteFrom
Sintaxe : bOk = SalEditPasteFrom ( )
Descrição : Copia um arquivo para um objeto picture editável.
Esta função mostra a caixa de diálogo “Paste From” onde o usuário pode escolher um
arquivo para ser colado na picture.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditPasteString
Sintaxe : bOk = SalEditPasteString ( sTexto )
Descrição : Cola o conteúdo da área de transferência no formato texto.

Parâmetro :
sTexto Receive String – A variável que irá receber o conteúdo da área de
transferência.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEditUndo
Sintaxe : bOk = SalEditUndo ( )
Descrição : Desfaz a última edição realizada no objeto data field, multiline text, coluna da
table window ou picture.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEnableWindow
Sintaxe : bOk = SalEnableWindow ( hWndObj )
Descrição : Habilita o mouse e o teclado para entrada de dados no objeto.

Parâmetro :
hWndObj Window Handle – O nome ou o handle do objeto que será habilitado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalEnableWindowAndLabel
Sintaxe : bOk = SalEnableWindowAndLabel ( hWndObj )
Descrição : Habilita o mouse e o teclado para entrada de dados no objeto, habilita também o
background text referente a este objeto.

Parâmetro :
hWndObj Window Handle – O nome ou o handle do objeto que será habilitado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalEndDialog
Sintaxe : bOk = SalEndDialog ( hWndDlg , nRetorno )
Descrição : Destrói o dialog box e retorna a execução para a linha de código imediatamente
posterior à chamada de SalModalDialog.

Parâmetros :
hWndDlg Window Handle – É o nome ou o handle do dialog box a ser destruído.
nRetorno Number – É o valor de retorno da função SalModalDialog.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileClose
Sintaxe : bOk = SalFileClose ( hArquivo )
Descrição : Fecha um arquivo.

Parâmetro :
hArquivo Receive File Handle – O handle do arquivo que será fechado. Quando a
função é executada o valor deste handle passa a ser nulo.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileCopy
Sintaxe : nStatus = SalFileCopy ( sPathOrigem , sPathDestino, bOperacao )
Descrição : Copia o conteúdo de um arquivo para outro.

Parâmetros :
sPathOrigem String – O path completo do arquivo origem.
sPathDestino String – O path completo do arquivo destino.
bOperação Boolean – Quando especificado TRUE, o arquivo origem é gravado por
cima do arquivo destino, caso este já exista. Quando o arquivo já existe e
bOperacao é especificado FALSE, a função SalFileCopy não realiza a
cópia, retornando a constante FILE_CopyExist.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
Dependendo do sucesso ou não da cópia, nStatus assume um dos seguintes valores :
FILE_CopyDest, FILE_CopyExist, FILE_CopyOK, FILE_CopyRead, FILE_CopySrc ou
FILE_CopyWrite.

Função : SalFileCreateDirectory
Sintaxe : bOk = SalFileCreateDirectory ( sDiretorio )
Descrição : Cria um diretório.

Parâmetro :
sDiretorio String – O nome completo do diretório a ser criado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileGetC
Sintaxe : bOk = SalFileGetC ( hArquivo , nCarac )
Descrição : Retorna o próximo caractere de um arquivo aberto ( hArquivo ). Você precisa
utilizar a função SalFileGetChar caso o arquivo contenha caracteres não ASCII, ou caracteres
16-bits.

Parâmetros :
hArquivo File Handle – O handle de um arquivo aberto.
nCarac Receive Number – o próximo caracter do arquivo.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função não conseguir ler o
próximo caractere do arquivo, ou se o handle informado em hArquivo for inválido.

Função : SalFileGetChar
Sintaxe : nCaractere = SalFileGetChar ( hArquivo )
Descrição : Retorna o próximo caractere de um arquivo aberto ( hArquivo ).

Parâmetro :
hArquivo File Handle – O handle de um arquivo aberto,.

Valor de Retorno :
nCaractere é um número que representa um caractere ASCII. Quando SalFileGetChar
encontra o final do arquivo, nCaractere é –1.

Função : SalFileGetCurrentDirectory
Sintaxe : bOk = SalFileGetCurrentDirectory ( sPath )
Descrição : Obtém o path completo do diretório de trabalho atual.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
sPath Receive String – O path completo, incluindo a letra do drive, do diretório de
trabalho atual.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileGetDateTime
Sintaxe : bOk = SalFileGetDateTime ( sArquivo , dtDataHora )
Descrição : Obtém a data e hora em que o arquivo foi modificado pela última vez.

Parâmetros :
sArquivo String – O nome do arquivo que você deseja.
dtDataHora Receive Date/Time – A data e hora em que o arquivo foi modificado pela
última vez.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileGetDrive
Sintaxe : sLetra = SalFileGetDrive ( )
Descrição : Obtém a letra do disco rígido padrão.

Nenhum Parâmetro.

Valor de Retorno :
sLetra é a letra entre A e Z (os “:” são incluídos também) que representa a unidade de disco
rígido padrão no momento de execução da função.

Função : SalFileGetStr
Sintaxe : bOk = SalFileGetStr ( hArquivo , sLinha , nTamanho )
Descrição : Obtém a próxima linha de um arquivo aberto.

Parâmetros :
hArquivo File Handle – O handle do arquivo aberto.
sLinha Receive String – A linha retornada.
nTamanho Number – O número máximo de bytes que poderão ser lidos.

Valor de Retorno :
bOk é TRUE se a função obter sucesso na leitura e FALSE se falhar ou se o final do arquivo
for encontrado.

Função : SalFileOpen
Sintaxe : bOk = SalFileOpen ( hArquivo , sArquivo , nEstilo )
Descrição : Abre , cria ou apaga um arquivo.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
hArquivo Receive File Handle – O handle do arquivo que será aberto.
sArquivo String - O nome do arquivo que será aberto, criado ou apagado.
nEstilo Number – Uma constante que especifica o estilo em que o arquivo deverá
ser aberto. nEstilo pode ser uma das constantes OF_* definidas no Centura.
Você pode utilizar mais de uma constante dispondo do operador bitwise “|”.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileOpenExt
Sintaxe : bOk = SalFileOpenExt ( hArquivo , sArquivo , nEstilo , sAbrir )
Descrição : Abre, cria ou apaga um arquivo. Arquivos com nomes longos (até 260 caracteres)
são suportados.

Parâmetros :
hArquivo Receive File Handle – O handle do arquivo que será aberto.
sArquivo String - O nome do arquivo que será aberto, criado ou apagado.
nEstilo Number – Uma constante que especifica o estilo em que o arquivo deverá
ser aberto. nEstilo pode ser uma das constantes OF_* definidas no Centura.
Você pode utilizar mais de uma constante dispondo do operador bitwise “|”.
sAbrir Receive String – informação utilizada para abrir novamente o arquivo.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFilePutC
Sintaxe : bOk = SalFilePutC ( hArquivo , nCaractere )
Descrição : Grava um caractere num arquivo aberto.

Parâmetros :
hArquivo File Handle – O handle do arquivo.
nCaractere Number – O valor numérico do caractere que será gravado no arquivo.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função não conseguir
gravar no arquivo.

Função : SalFilePutChar
Sintaxe : bOk = SalFilePutChar ( hArquivo , nCaractere )
Descrição : Grava um caractere num arquivo aberto.

Parâmetros :
hArquivo File Handle – O handle do arquivo.

Página PAGE 582


Programando com o Centura Team Developer 2000

nCaractere Number – O valor numérico do caractere que será gravado no arquivo.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função não conseguir
gravar no arquivo.

Função : SalFilePutStr
Sintaxe : bOk = SalFilePutStr ( hArquivo , sString )
Descrição : Grava uma string num arquivo aberto. O Centura acrescenta à string gravada os
caracteres return/line feed.

Parâmetros :
hArquivo File Handle – O handle do arquivo aberto.
sString String – A string a ser gravada.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileRead
Sintaxe : nResultado = SalFileRead ( hArquivo , sBuffer , nTamBuffer )
Descrição : Lê uma série de carateres de um arquivo aberto.

Parâmetros :
hArquivo File Handle – O handle do arquivo aberto.
sBuffer Receive String – A string para onde os dados serão carregados.
nTamBuffer Number – O número de bytes a ser lido.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileRemoveDirectory
Sintaxe : bOk = SalFileRemoveDirectory ( sDiretorio )
Descrição : Apaga um diretório.

Parâmetros :
sDiretorio String – O nome completo do diretório a ser apagado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.
SalFileRemoveDirectory também retorna FALSE se o diretório conter algum arquivo ou sub-
diretório.

Função : SalFileSeek
Sintaxe : bOk = SalFileSeek ( hArquivo , nBytes, nPosicao )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Posiciona o ponteiro do arquivo. A próxima operação no arquivo ( por exemplo


leitura ou gravação ) será a partir desta posição.

Parâmetros :
hArquivo File Handle – O handle do arquivo aberto.
nBytes Number – A posição específica do ponteiro do arquivo.
nPosicao Number – A posição genérica do ponteiro do arquivo, um dos seguintes
valores : FILE_SeekBegin, FILE_SeekCurrent ou FILE_SeekEnd.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileSetCurrentDirectory
Sintaxe : bOk = SalFileSetCurrentDirectory ( sPath )
Descrição : Muda o diretório de trabalho atual.

Parâmetro :
sPath String – O path do novo diretório de trabalho.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileSetDateTime
Sintaxe : bOk = SalFileSetDateTime ( sArquivo , dtData )
Descrição : Altera o atributo data e hora da última atualização do arquivo.

Parâmetros :
sArquivo String – o nome do arquivo.
dtData Date/Time – O novo valor para a data e hora da última modificação do
arquivo.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFileSetDrive
Sintaxe : bOk = SalFileSetDrive ( sLetraDrive )
Descrição : Define o drive padrão.

Parâmetro :
sLetraDrive String – A nova letra de unidade de disco. O Centura considera apenas o
primeiro caracter deste parâmetro, o restante é ignorado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalFileTell
Sintaxe : nPosicao = SalFileTell ( hArquivo )
Descrição : Obtém a posição atual do ponteiro do arquivo.

Parâmetro :
hArquivo File Handle – o handle do arquivo aberto.

Valor de Retorno :
nPosicao é a posição atual do ponteiro do arquivo. Se algum erro ocorrer, nPosicao é –1.

Função : SalFileWrite
Sintaxe : nOk = SalFileWrite ( hArquivo , sBuffer , nTamBuffer )
Descrição : Grava uma cadeia de caracteres num arquivo aberto.

Parâmetros :
hArquivo File Handle – O handle do arquivo.
sBuffer String – A cadeia de caracteres que será gravada no arquivo.
nTamBuffer Number – O número de bytes a ser gravado.

Valor de Retorno :
nOk contém o número de bytes escrito.

Função : SalFindWindow
Sintaxe : hWndEncontrado = SalFindWindow ( hWndJanela , sNome )
Descrição : Esta função procura por um objeto child window e retorna o seu handle.

Parâmetros :
hWndJanela Window Handle – o nome ou o handle do objeto pai para a pesquisa.
sNome String – O nome do objeto a ser encontrado.

Valor de Retorno :
hWndEncontrado é o handle do objeto encontrado. Se a função não encontrar um objeto com
o nome sNome, hWndEncontrado é igual a hWndNULL.

Função : SalFmtFieldToStr
Sintaxe : bOk = SalFmtFieldToStr ( hWndCampo, sValor , bFormato )
Descrição : Copia o conteúdo de um data field ou coluna de uma table window para uma
variável. Esta função também permite copiar a formatação do campo.

Parâmetros :
hWndCampo Window Handle – O handle ou o nome do campo que você quer copiar seu
conteúdo, e, opcionalmente, sua formatação.
sValor Receive String – A variável string que receberá o valor do objeto.
bFormato Boolean – Especifica quando você deseja copiar o conteúdo formatado do
objeto. Se você especificar TRUE, o Centura copia o conteúdo e sua

Página PAGE 582


Programando com o Centura Team Developer 2000

formatação. Se você especificar FALSE, o Centura copia apenas o conteúdo


do objeto, sem a formatação.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFmtFormatDateTime
Sintaxe : sData = SalFmtFormatDateTime ( dtData , sFormatacao )
Descrição : Formata um valor data e hora usando uma determinada formatação. Se você
especificar uma formatação inválida ou se não especificar nehuma formatação, o Centura
utilizará a configuração padrão da seção [INTL] e a configuração definida pelo usuário
[GTITOOLS] do WIN.INI.

Parâmetros :
dtData Date/Time – O valor data e hora para ser formatado.
sFormatacao String – A formatação a ser aplicada no valor data e hora.

Valor de Retorno :
sData é a string formatada com o valor data e hora.

Função : SalFmtFormatNumber
Sintaxe : sNumero = SalFmtFormatNumber ( nNumero , sFormatacao )
Descrição : Formata um valor numérico usando uma determinada formatação. Se você
especificar uma formatação inválida ou se não especificar nehuma formatação, o Centura
utilizará a configuração padrão da seção [INTL] e a configuração definida pelo usuário
[GTITOOLS] do WIN.INI.

Parâmetros :
nNumero Number – O valor numérico a ser formatado.
sFormatacao String – A formatação a ser aplicada no valor numérico.

Valor de Retorno :
sNumero é a string formatada com o valor numérico.

Função : SalFmtGetFormat
Sintaxe : nFormato = SalFmtGetFormat ( hWndCampo )
Descrição : Retorna a formatação que está sendo utilizada no momento pelo data field ou
coluna da table window.

Parâmetro :
hWndCampo Window Handle – O nome ou o handle do data field ou da coluna da table
window.

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

nFormato é um número que indica o formato do objeto. O Valor de retorno é uma das
seguintes constantes :

Campos tipo de dado Data/Hora (Date/Time) podem ser formatados como :


FMT_Format_Date,
FMT_Format_DateTime,
FMT_Format_Picture,
FMT_Format_Time ou
FMT_Format_Unformatted.

Campos do tipo de dado Número (Number) podem ser formatados como :


FMT_Format_Currency,
FMT_Format_Decimal,
FMT_Format_Percentage,
FMT_Format_Picture ou
FMT_Format_Unformatted.

Campos tipo de dado String podem ser formatados como :


FMT_Format_Invisible,
FMT_Format_LowerCase,
FMT_Format_UpperCase ou
FMT_Format_Unformatted.

Função : SalFmtGetInputMask
Sintaxe : bOk = SalFmtGetInputMask ( hWndCampo , sMascara )
Descrição : Obtém a input mask de um data field, combo box e coluna da table window.

Parâmetros :
hWndCampo Window Handle – O handle ou o nome do objeto.
sMascara Receive String – A input mask recuperada.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se o handle do objeto for
inválido, ou se o objeto não possuir uma input mask.

Função : SalFmtGetPicture
Sintaxe : bOk = SalFmtGetPicture ( hWndCampo , sFormatacao )
Descrição : Obtém a formatação de um data field e coluna da table window.

Parâmetros :
hWndCampo Window Handle – O handle ou nome do objeto.
sFormatacao Receive String – A formatação recuperada.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a o handle do objeto for
inválido, ou se o objeto não possuir uma formatação.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalFmtIsValidField
Sintaxe : bOk = SalFmtIsValidField ( hWndCampo )
Descrição : Valida o conteúdo de um data field ou coluna de uma table window usando as
definições ativas.

Parâmetro :
hWndCampo Window Handle – O handle ou o nome do objeto que terá seu conteúdo
validado.

Valor de Retorno :
bOk é TRUE se o conteúdo do campo é válido, e FALSE se o conteúdo do campo é inválido.

Função : SalFmtIsValidInputMask
Sintaxe : bOk = SalFmtIsValidInputMask ( sMascara )
Descrição : Valida a input mask de um data field e coluna da table window.

Parâmetro :
sMascara String – Uma input mask.

Valor de Retorno :
bOk é TRUE se a input mask for válida e FALSE se for inválida.

Função : SalFmtIsValidPicture
Sintaxe : bOk = SalFmtIsValidPicture ( sPicture, nTipo )
Descrição : Valida um formato.

Parâmetros :
sPicture String – A picture.
nTipo Number – Especifica se o formato refere-se a um tipo de dado numérico ou
data/hora. Use uma das constantes : FMT_Pic_DateTime ou
FMT_Pic_Number.

Valor de Retorno :
bOk é TRUE se o formato for válido e FALSE se não for válido.

Função : SalFmtKeepMask
Sintaxe : bOk = SalFmtKeepMask ( bManter )
Descrição : O Centura, por padrão, retira a formatação de input mask quando você copia o
valor de um objeto ( tipo data field, combo box e coluna da table window ) para outro objeto.
Por exemplo, se você definiu a input mask de um data field assim “AAA-AAAA” e copia seu
conteúdo para outro data field, o Centura não copia o hífen.

Parâmetro :
bManter Boolean – Se você especificar FALSE ( o padrão), o Centura remove os

Página PAGE 582


Programando com o Centura Team Developer 2000

caracteres da input mask quando copia o conteúdo do objeto. Se especificar


TRUE, o Centura mantém os caracteres de formatação quando copia o
conteúdo do objeto.

Valor de Retorno :
Retorna o mesmo valor que você especificou em bManter.

Função : SalFmtSetFormat
Sintaxe : bOk = SalFmtSetFormat ( hWndCampo, nFormato )
Descrição : Define o formato de um data field e de colunas da table window.

O formato do campo precisa estar de acordo com o tipo de dado do campo, por exemplo, a
formatação para campos tipo number pode ser decimal, percentage, ou currency values.

Parâmetros :
hWndCampo Window Handle – O handle ( ou o nome ) do data field ou coluna da table
window que você deseja formatar.
nFormato Number – O formato do objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se o formato não puder ser
aplicado para o campo especificado.

Função : SalFmtSetInputMask
Sintaxe : bOk = SalFmtSetInputMask ( hWndObjeto , sMascara )
Descrição : Define a input mask de um data field ou coluna da table window.

Parâmetros :
hWndObjeto Window Handle – O nome ou o handle do objeto a ser formatado
sMascara String – A string contendo a formatação a ser aplicada ao objeto. Se você
especificar uma string vazia “”, o Centura retira a formatação existente no
objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFmtSetPicture
Sintaxe : bOk = SalFmtSetPicture ( hWndObjeto , sPicture )
Descrição : Define a picture de um data field ou coluna da table window.

Parâmetros :
hWndObjeto Window Handle – O nome ou o handle do objeto a ser formatado.
sPicture String - A string contendo a formatação a ser aplicada ao objeto.

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.
A função pode falhar se um dos seguintes eventos ocorrer :
 handle do objeto for nulo.
 tipo de dado do campo não for date/time ou number.
 formato da picture informada não corresponde a um formato válido.

Função : SalFmtStrToField
Sintaxe : bOk = SalFmtStrToField ( hWndCampo, sValor, bFormato )
Descrição : Copia uma string para um data field ou para uma coluna da table window. Após
copiar a string para o objeto, o Centura formata a string.

Parâmetros :
hWndCampo Window Handle – O nome ou o handle do objeto que terá a string
associada.
sValor String – A string a ser copiada.
bFormato Boolean – Especifica se a string terá (TRUE) ou não (FALSE) o mesmo
formato do campo.

Valor de Retorno :
bOk é TRUE se o valor da string possuir o mesmo formato do campo. bOk é FALSE se o
valor da string não estiver formatado.

Função : SalFmtUnmaskInput
Sintaxe : bOk = SalFmtUnmaskInput ( hWndObj , sConteudo )
Descrição : Tira a máscara do conteúdo de um data field ou coluna da table window e coloca
o resultado numa string. Tirar a máscara significa tirar os caracteres de controle de uma string,
mas isso não inclui converter os caracteres de letras minúsculas para maiúsculas e vice-versa.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto.
sConteudo Receive String – O conteúdo ( sem a máscara ) do objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se o handle hWndObj for
inválido ou se este não possuir uma máscara.

Função : SalFmtValidateField
Sintaxe : bOk = SalFmtValidateField ( hWndCampo , nFlag )
Descrição : Valida e formata o conteúdo de um data field ou de uma coluna da table window.

Parâmetros :
hWndCampo Window Handle – O nome ou o handle do data field ou da coluna da table
window.
nFlag Number – Um valor que indicará se o Centura irá mostrar uma caixa de
diálogo caso ocorra algum erro. Utilize FMT_Validate_Dialog ou

Página PAGE 582


Programando com o Centura Team Developer 2000

FMT_Validate_None.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFontGet
Sintaxe : bOk = SalFontGet ( hWndObj, sNomeFonte, nTamFonte, nMelhoramentos )
Descrição : Obtém o nome da fonte, tamanho e melhoramentos de fonte do objeto hWndObj.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto.
sNomeFonte Receive String – O nome da fonte do objeto.
nTamFonte Receive Number – O tamanho da fonte do objeto.
nMelhorament Receive Number – O melhoramento da fonte.
os

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFontGetNames
Sintaxe : nQtd = SalFontGetNames ( nQtdFontes , sVetorFontes )
Descrição : Obtém os nomes das fontes de tela e de impressão.

Parâmetros :
nTipoFonte Number – Uma constante que especifica se você quer obter as fontes de tela
ou de impressora. Use as constantes FONT_GetPrinter ou
FONT_GetScreen.
sVetorFontes Receive String Array – O nome de um vetor tipo string que terá os nomes
das fontes.

Valor de Retorno :
nQtd é a quantidade de fontes carregadas no vetor.

Função : SalFontGetSizes
Sintaxe : nQtd = SalFontGetSizes ( nTipoFonte , sNomeFonte , nVetorTamanhos )
Descrição : Obtém os tamanhos da fonte especificada.

Parâmetros :
nTipoFonte Number – Uma constante que especifica se você quer obter os tamanhos
das fontes de tela ou de impressora. Use as constantes FONT_GetPrinter
ou FONT_GetScreen.
sNomeFonte String – O nome da fonte.
nVetorTamanh Receive Numeric Array – O nome de um vetor numérico que irá conter os
os tamanhos retornados da fonte especificada.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nQtd é a quantidade de tamanhos de fontes carregadas no vetor.

Função : SalFontSet
Sintaxe : bOk = SalFontSet ( hWndObjt , sNomeFonte , nTamanho, nMelhoramento )
Descrição : Define a fonte , o tamanho e os melhoramentos de fonte para um objeto.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto que você quer definir a
fonte.
sNomeFonte String – O nome da fonte.
nTamanho Number – O tamanho da fonte.
nMelhoramen Number – O melhoramento da fonte. Para especificar duas ou mais
to contantes FONT_Enh*, utilize o operador OR (|).

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFormGetParmNum
Sintaxe : bOk = SalFormGetParmNum ( hWndForm, nParametro, nValor )
Descrição : Retorna o valor de um dos três parâmetros do form window: altura ( height),
largura ( width), ou o número de páginas ( number of pages ).

Parâmetros :
hWndForm Window Handle – O nome ou o handle do form window que você deseja
obter os valores dos parâmetros.
nParametro Number – especifique aqui o parâmetro desejado.
Utilize as constantes FORM_nFormHeight , FORM_nFormPages ou
FORM_nFormWidth .
nValor Receive Number – O valor do parâmetro requisitado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalFormUnitsToPixels
Sintaxe : nNumPixels = SalFormUnitsToPixels ( hWndObj , nUnidades, bVertical )
Descrição : Converte de form units para pixels. Form units é a unidade utilizada pelas
funções do Centura para mover e posicionar objetos.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto.
nUnidades Number – O número de unidades de form (form units).
bVertical Boolean – Se as unidades de form se referirem ao eixo X, utilize neste
parâmetro o valor FALSE. Se as unidades de form se referem ao eixo Y,
utilize TRUE.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nNumPixels é o número de pixels retornado caso a função obtenha sucesso. Caso o handle (
hWndObj ) for nulo, nNumPixels é zero (0).

Função : SalGetDataType
Sintaxe : nTipoDado = SalGetDataType ( hWnd )
Descrição : Retorna o tipo de dado de um data field ou de uma coluna da table window.

Parâmetro :
hWnd Window Handle – O nome ou o handle do data field ou da coluna da table
window.

Valor de Retorno :
nTipoDado é um número que indica o tipo de dado do data field ou da coluna da table
window. Este valor é uma das constantes pré-definidas DT_DateTime, DT_LongString,
DT_Number ou DT_String.

Função : SalGetDefButton
Sintaxe : hWnd = SalGetDefButton ( hWndPai )
Descrição : Retorna o handle do pushbutton default em um form window ou dialog box.
O pushbutton que estiver com o foco é o pushbutton default.

Parâmetro :
hWndPai Window Handle – O nome ou o handle do form window ou do dialog box.

Valor de Retorno :
hWnd é o handle do pushbutton default. hWnd é igual a hWndNULL se hWndPai não for um
handle válido ou se o objeto associado ao hWndPai não possuir nenhum pushbutton default.

Função : SalGetFirstChild
Sintaxe : hWndFilho = SalGetFirstChild ( hWndPai, nTipo )
Descrição : Obtém o handle do primeiro objeto child do tipo especificado em nTipo.

Parâmetros :
hWndPai Window Handle – O handle ou o nome do objeto top level que você deseja
procurar pelos seus objetos child.
nTipo Number – O tipo do objeto que você deseja procurar. Você pode combinar
as constantes TYPE_* usando o operador OR (|)
Os objetos tipo TYPE_Line, TYPE_Frame e TYPE_BkgrdText são objetos
estáticos e não implementados como um objeto child normal, não possuem
handles. Para mudar este comportamento defina bStaticsAsWindows como
TRUE.

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndFilho é o handle do primeiro objeto child , do tipo especificado, encontrado em


hWndPai. Será igual a hWndNULL quando hWndPai for inválido, ou quando não houver
objetos child do tipo especificado.

Função : SalGetFocus
Sintaxe : hWndFoco = SalGetFocus ( )
Descrição : Obtém o handle do objeto que está com o foco.

Nenhum Parâmetro.

Valor de Retorno :
hWndFoco contém o handle do objeto que está com o foco no momento.

Função : SalGetItemName
Sintaxe : bOk = SalGetItemName ( hWndObj, sNome )
Descrição : Obtém o nome de um objeto.

Parâmetros :
hWndObj Window Handle – O handle de um objeto.
sNome Receive String – O nome do objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalGetMaxDataLength
Sintaxe : nTam = SalGetMaxDataLength ( hWndObj )
Descrição : Obtém o tamanho máximo de um data field, multiline text ou coluna da table
window.
Utilize esta função antes de associar algum valor ao objeto, para ter certeza que o valor caberá
no objeto.

Parâmetro :
hWndObj Window Handle – O handle de um data field, multiline text, ou coluna de
table window.

Valor de Retorno :
nTam é o tamanho máximo do conteúdo do objeto. Se nTam for igual a -1, significa que o objeto foi definido
como tamanho “Default”.

Função : SalGetNextChild
Sintaxe : hWndProximoFilho = SalGetNextChild ( hWndFilho , nTipo )
Descrição : Retorna o handle do próximo objeto child que combina com a especificação feita
em nTipo.
Utilize essa função após ter usado SalGetFirstChild para obter o primeiro objeto filho. Você
pode usar esta função para obter os objetos filhos do mdi também.

Página PAGE 582


Programando com o Centura Team Developer 2000

Se você quiser que esta função trabalhe também com background text, lines e frames, atribua
TRUE à variável do sistema bStaticsAsWindows.

Parâmetros :
hWndFilho Window Handle – O handle de um objeto filho.
nTipo Number – O tipo do objeto que você deseja procurar. Você pode combinar
as constantes TYPE_* usando o operador OR (|)
Os objetos tipo TYPE_Line, TYPE_Frame, and TYPE_BkgrdText são
objetos estáticos e não implementados como um objeto child normal, não
possuem handles. Para mudar este comportamento, defina
bStaticsAsWindows como TRUE.

Valor de Retorno :
hWndProximoFilho é o handle do próximo objeto filho do tipo que você especificou em
nTipo. SalGetNextChild procura a partir do objeto hWndFilho.

Função : SalGetProfileInt
Sintaxe : nValor = SalGetProfileInt ( sSeção, sEntrada, nDefault, sNome )
Descrição : Recupera um valor inteiro de uma entrada de seção do registro ou de um arquivo
de inicialização.

Parâmetros :
sSeção String – O cabeçalho da seção.
sEntrada String – A entrada que terá o valor recuperado.
nDefault Number – Especifique um valor de retorno (entre 0 e 32.767 ) para o caso
de a função não encontrar a entrada.
sNome String – O nome do arquivo de inicialização ou o nome da empresa
dependendo das configurações feitas utilizando-se a função SalUseRegistry.
Se você estiver utilizando um arquivo “*.INI” e não especificar o path
completo, o Centura procura pelo arquivo no subdiretório do Windows.

Valor de Retorno :
Se a função for executada com sucesso, nValor é o valor inteiro de uma entrada na seção
especificada de um arquivo ou do registro. Se o valor encontrado não for um inteiro, nValue é
zero. Se SalGetProfileInt não conseguir encontrar a entrada especificada, nValue é o valor
nDefault.

Função : SalGetProfileString
Sintaxe : nBytes = SalGetProfileString ( sSeção, sEntrada, sDefault, sValor, sName )
Descrição : Recupera um valor string de uma entrada de seção do registro ou de um arquivo
de inicialização.

Parâmetros :
sSeção String – O cabeçalho da seção.
sEntrada String – A entrada que terá o valor recuperado.

Página PAGE 582


Programando com o Centura Team Developer 2000

sDefault String – Especifique um valor de retorno para o caso de a função não


encontrar a entrada.
sValor Receive String – Um valor para sEntrada. No máximo 1024 bytes.
sNome String – O nome do arquivo de inicialização ou o nome da empresa,
dependendo das configurações feitas utilizando-se a função SalUseRegistry.
Se você estiver utilizando um arquivo “*.INI” e não especificar o path
completo, o Centura procura pelo arquivo no subdiretório do Windows.

Valor de Retorno :
nBytes é o número de bytes copiados para sValor.

Função : SalGetType
Sintaxe : nTipo = SalGetType ( hWnd )
Descrição : Retorna o tipo do objeto.
Para alguns objetos ( como table windows e scroll bar ), SalGetType retorna zero. Não use
SalQueryFieldEdit para um objeto onde SalGetType retorne zero.

Parâmetro :
hWnd Window Handle – O handle de um objeto.

Valor de Retorno :
nTipo é um número que indica o tipo do objeto. O valor retornado é uma das constantes pré-
definidas TYPE_*

Função : SalGetVersion
Sintaxe : nVersao = SalGetVersion ( )
Descrição : Retorna o número da versão atual do Centura.

Nenhum Parâmetro.

Valor de Retorno :
nVersao é o número da versão do Centura. Por exemplo 150 para Centura 1.5.0.

Função : SalGetWindowLabelText
Sintaxe : nTam = SalGetWindowLabelText ( hWnd , sTexto , nTamMax)
Descrição : Obtém o background text de um objeto.

Parâmetros :
hWnd Window Handle – O nome do objeto.
sTexto Receive String – O texto recuperado.
nTamMax Number – O tamanho máximo que o texto poderá ter para ser recuperado.

Valor de Retorno :
nTam é um número que indica o tamanho do texto recuperado ( sTexto ). nTam é zero se o
background text não tiver texto algum.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalGetWindowLoc
Sintaxe : bOk = SalGetWindowLoc ( hWnd, nX, nY )
Descrição : Retorna as coordenadas da posição do objeto atual.

Parâmetros :
hWnd Window Handle – O handle ou o nome do objeto.
nX Receive Number – A posição da janela no eixo X, em form units.
nY Receive Number - A posição da janela no eixo Y, em form units.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalGetWindowSize
Sintaxe : bOk = SalGetWindowSize ( hWnd , nLargura , nAltura )
Descrição : Retorna o tamanho do objeto.

Parâmetros :
hWnd Window Handle – O handle ou o nome do objeto.
nLargura Receive Number – A largura do objeto, especificado em form units.
nAltura Receive Number – A altura do objeto, especificado em form units.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalGetWindowState
Sintaxe : nEstado = SalGetWindowState ( hWnd )
Descrição : Retorna o estado atual do objeto top level.

Parâmetro :
hWnd Window Handle – O nome ou o handle de um objeto top level.
Esta função retornará um erro se você especificar o nome de uma janela que
ainda não foi criada em tempo de execução.

Valor de Retorno :
nEstado é um valor que indica o estado atual de um objeto. nEstado é um dos seguintes
valores : Window_Invalid, Window_Maximized, Window_Minimized, Window_Normal e
Window_NotVisible.

Função : SalGetWindowText
Sintaxe : nTam = SalGetWindowText ( hWnd, sText, nTamMax )
Descrição : Obtém o texto de um objeto.
O texto de um objeto é o título de um form window, dialog box, top level table window, radio
button, check box, background text ou pushbutton. Para um data field, multiline text ou coluna
de uma table window, o texto é o conteúdo do campo em formato string.

Página PAGE 582


Programando com o Centura Team Developer 2000

Obs: Para obter o título de uma coluna de uma table window use a função
SalTblGetColumnTitle.

Parâmetros :
hWnd Window Handle – O nome ou o handle do objeto.
sText Receive String – O texto do objeto.
nTamMax Number – O tamanho máximo do texto a ser recuperado.

Valor de Retorno :
nTam é o tamanho do texto recuperado. Quando o objeto não possui texto, nTam é zero.

Função : SalHideWindow
Sintaxe : bOk = SalHideWindow ( hWnd )
Descrição : Esconde um objeto.
Esta função não destrói o objeto, apenas torna o objeto invisível.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalHideWindowAndLabel
Sintaxe : bOk = SalHideWindowAndLabel ( hWnd )
Descrição : Esconde um objeto e o background text correspondente.
Esta função não destrói o objeto, apenas torna o objeto invisível.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalHStringToNumber
Sintaxe : nHString = SalHStringToNumber ( sString )
Descrição : Converte um ponteiro string para um número possível de ser utilizado como
parâmetro numa mensagem.

Obs : Use esta função apenas para strings que serão passadas por parâmetro nas mensagens
enviadas usando SalSendMsg. Não use esta função para strings passadas como parâmetros em
mensagens enviadas usando SalPostMsg.

Observe também que você deve passar um ponteiro string através do parâmetro lParam, uma
vez que o valor excede o limite do parâmetro wParam.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
sString String – A string cujo ponteiro você quer converter para número.

Valor de Retorno :
nHString é um número cujo valor representa o ponteiro string.

Função : SalIdleKick
Sintaxe : bOk = SalIdleKick ( )
Descrição : Força o processamento de inatividade, normalmente quando um outro programa
envia uma mensagem de aviso.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalIdleRegisterWindow
Sintaxe : bOk = SalIdleRegisterWindow( hWndObj , nMsg , nwParam , nlParam )
Descrição : Use esta função para avisar ao Centura que envie uma mensagem ao objeto
especificado quando for detectado um estado de inatividade. Isto ocorre após um objeto
processar todas as mensagens da sua fila de mensagens.

Parâmetros :
hWndObj Window Handle – O handle do objeto ao qual você deseja enviar a
mensagem.
nMsg Number – A mensagem a ser enviada.
nwParam Number – Você pode utilizar este parâmetro para enviar algum valor ao
objeto.
nlParam Number – Você pode utilizar este parâmetro para enviar algum valor ao
objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalIdleUnregisterWindow
Sintaxe : bOk = SalIdleUnregisterWindow( hWndObj )
Descrição : Use esta função para avisar ao Centura que pare de enviar mensagens ao objeto
especificado.

Parâmetro :
hWndObj Window Handle – O handle do objeto que você, previamente, utilizou como
parâmetro na função SalIdleRegisterWindow.

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalInvalidateWindow
Sintaxe : bOk = SalInvalidateWindow ( hWnd )
Descrição : Faz com que o objeto seja redesenhado.

Parâmetro :
hWnd Window Handle – o handle do objeto a ser redesenhado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalIsButtonChecked
Sintaxe : bLigado = SalIsButtonChecked ( hWnd )
Descrição : Determina se um radio button está ligado ou se um check box está selecionado.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bLigado é TRUE se hWnd estiver checado e FALSE em caso contrário.

Função : SalIsNull
Sintaxe : bNulo = SalIsNull ( hWnd )
Descrição : Verifica quando um data field, multiline text, ou coluna de uma table window está
nulo ou vazia.

Parâmetro :
hWnd Window Handle – O nome ou handle do objeto.

Valor de Retorno :
bNulo é TRUE se o objeto hWnd estiver nulo ou vazio e FALSE se tiver algum valor.

Função : SalStrIsValidCurrency
Sintaxe : bOk = SalStrIsValidCurrency ( sValor , nPrecisao , nEscala )
Descrição : Verifica se a string representa um valor Currency válido.

Parâmetros :
sValor String - Uma string que contém um valor tipo currency.
nPrecisao Number - O número de dígitos a serem mostrados.
nEscala Number - O número de dígitos à direita do ponto decimal.

Valor de Retorno :
bOk é TRUE se o valor contido em sValor corresponder a um valor tipo currency válido.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalIsValidDateTime
Sintaxe : bOk = SalIsValidDateTime ( hWndCampo )
Descrição : Verifica se o objeto hWndCampo possui um valor válido para o tipo de dado
Date/Time. Para objetos tipo multiline text o valor data deve ser o único conteúdo do objeto.

Parâmetro :
hWndCampo Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bOk é TRUE se o conteúdo do objeto hWndCampo for uma data válida e FALSE se o valor
não for uma data válida.

Função : SalIsValidDecimal
Sintaxe : bOk = SalIsValidDecimal ( hWndCampo, nPrecisao, nEscala )
Descrição : Verifica se o objeto hWndCampo possui um valor válido para o tipo de dado
numérico decimal. Para objetos tipo multiline text, o valor numérico decimal deve ser o único
conteúdo do objeto.

Parâmetros :
hWndCampo Window Handle – O handle ou o nome do objeto.
nPrecisao Number – O número de dígitos a serem mostrados.
nEscala Number – O número de dígitos à direita do ponto decimal.

Valor de Retorno :
bOk é TRUE se o conteúdo do objeto hWndCampo for um decimal válido e FALSE se o valor
não for um decimal válido.

Função : SalIsValidInteger
Sintaxe : bOk = SalIsValidInteger ( hWndCampo )
Descrição : Verifica se o objeto hWndCampo possui um valor válido para o tipo de dado
numérico inteiro. Para objetos tipo multiline text, o valor numérico inteiro deve ser o único
conteúdo do objeto.

Parâmetro :
hWndCampo Window Handle – O handle ou o nome do objeto.

Valor de Retorno :

bOk é TRUE se o conteúdo do objeto hWndCampo for um número inteiro válido e FALSE se
o valor não for um número inteiro válido.

Função : SalIsValidNumber
Sintaxe : bOk = SalIsValidNumber ( hWndCampo )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Verifica se o objeto hWndCampo possui um valor numérico válido. Números


válidos são números inteiros ou ponto flutuante, negativos e positivos. Para objetos tipo
multiline text, o valor numérico deve ser o único conteúdo do objeto.

Parâmetro :
hWndCampo Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bOk é TRUE se o conteúdo do objeto hWndCampo for um número válido e FALSE se o valor
não for um número válido.

Função : SalIsWindowEnabled
Sintaxe : bHabilitado = SalIsWindowEnabled ( hWnd )
Descrição : Verifica se um objeto está habilitado para a utilização do mouse e teclado.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bHabilitado é TRUE se o objeto estiver habilitado e FALSE em caso contrário.

Função : SalIsWindowVisible
Sintaxe : bOk = SalIsWindowVisible ( hWnd )
Descrição : Verifica se um objeto está visível.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bHabilitado é TRUE se o objeto estiver visível e FALSE em caso contrário.

Função : SalListAdd
Sintaxe : nNum = SalListAdd ( hWndLista , sTexto )
Descrição : Insere um texto num list box ou combo box.
Se a lista estiver ordenada (o seu estado padrão), o Centura insere o texto de acordo com a
ordenação, no local apropriado. Se a lista não estiver ordenada, o texto é inserido no final da
mesma. Para a ordenação dos elementos, o Centura utiliza o padrão ANSI.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
sTexto String – O texto que será inserido na lista.

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

nNum é o índice onde foi inserido o texto. SalListAdd retorna LB_Err quando um erro
ocorrer, e retorna LB_ErrSpace quando não houver mais memória para armazenar a nova
string.

Função : SalListClear
Sintaxe : bOk = SalListClear ( hWndLista )
Descrição : Apaga todos os elementos presentes numa lista ( list box ou combo box ).

Parâmetro :
hWndLista Window Handle – O handle ou o nome da lista.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalListDelete
Sintaxe : nRestante = SalListDelete ( hWndLista , nIndice )
Descrição : Apaga um elemento de uma lista.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nIndice Number – o número do elemento a ser apagado.

Valor de Retorno :
nRestante é o número de linhas que restam na lista. SalListDelete retorna LB_Err se algum
erro ocorrer.

Função : SalListFiles
Sintaxe : bOk = SalListFiles ( hWndLista, hWndPath, sPath, nFlags )
Descrição : Carrega num list box ou combo box os nomes dos arquivos de um diretório.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista, do combo box ou list box.
hWndPath Window Handle – O handle ou o nome de um data field que mostra o path
dos arquivos carregados na lista.
sPath Receive String - O path dos arquivos carregados na lista.
nFlags Number – O tipo de arquivos a serem carregados. Você pode combinar as
constantes FA_* utilizando o operador OR (|).

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a função falhar.

Função : SalListGetMultiSelect
Sintaxe : bOk = SalListGetMultiSelect ( hWndListBox , nSelecionados )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Retorna um vetor de números que indexam os elemenetos selecionados na lista.


Use a função SalListQueryMultiCount para obter o número de elementos marcado num list
box.

Parâmetros :
hWndListBo Window Handle – O handle ou o nome de um list box.
x
nSelecionado Receive Numeric Array – O nome de um vetor de números que terá os
s índices dos elementos selecionados num list box.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso, e FALSE se hWndListBox ou
nSelecionados forem inválidos, ou se não ouver nenhum elemento selecionado no list box.

Função : SalListInsert
Sintaxe : nNum = SalListInsert ( hWndLista, nIndice, sTexto )
Descrição : Inclui um determinado texto numa posição específica de uma lista.

Parâmetros :
hWndLista Window Handle – O handle ou o nome de um list box ou combo box.
nIndice Number – A posição onde você quer incluir o texto. Se você especificar o
valor –1, o Centura inclui o texto na última posição da lista.
sTexto String – O texto que você deseja incluir.

Valor de Retorno :
nNum é o índice onde foi inserido o texto. SalListInsert retorna LB_Err quando um erro
ocorrer, e retorna LB_ErrSpace quando não houver mais memória para armazenar a nova
string.

Função : SalListPopulate
Sintaxe : bOk = SalListPopulate ( hWndLista, hSql, sSelect )
Descrição : Carrega um list box ou um combo box com o conteúdo de um result set.

Parâmetros :
hWndLista Window Handle – O handle ou o nome de um list box ou combo box.
hSql Sql Handle – O handle de um comando SELECT.
sSelect String – O comando SELECT.
O comando SELECT pode conter variáveis BIND, mas não pode conter
variáveis INTO.
Se o comando sSelect for nulo, o Centura utiliza o comando preparado
anteriormente no handle hSql, evitando que o comando seja preparado
novamente.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se algum parâmetro for
inválido, ou se o comando sSelect conter variáveis INTO.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalListQueryCount
Sintaxe : nNumItens = SalListQueryCount ( hWndLista )
Descrição : Retorna o número de itens presentes na lista.

Parâmetro :
hWndLista Window Handle – O handle ou o nome do list box ou combo box.

Valor de Retorno :
nNumItens é o número de itens presentes na lista hWndLista. SalListQueryCount retorna
LB_Err se algum erro ocorrer.

Função : SalListQueryFile
Sintaxe : bDiretorio = SalListQueryFile ( hWndLista, sTexto )
Descrição : Obtém o texto selecionado no list box ou combo box.

Parâmetros :
hWndLista Window Handle – O handle ou o nome do list box ou combo box.
sTexto String – O texto selecionado.

Valor de Retorno :
bDiretorio é TRUE se sTexto for o nome de um diretório e FALSE se for um nome de
arquivo.

Função : SalListQueryMultiCount
Sintaxe : nNum = SalListQueryMultiCount ( hWndLista )
Descrição : Retorna o número de elementos selecionados num list box configurável para
permitir seleção múltipla.

Parâmetro :
hWndLista Window Handle – O handle ou o nome do list box.

Valor de Retorno :
nNum é o número de elementos selecionados no list box hWndLista.

Função : SalListQuerySelection
Sintaxe : nInd = SalListQuerySelection ( hWndLista )
Descrição : Retorna o índice do item selecionado num list box.

Parâmetro :
hWndLista Window Handle – O handle ou o nome do list box ‘single-selection’

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

nInd é o índice do item selecionado no list box. SalListQuerySelection retorna LB_Err se não
ouver nenhum item selecionado no list box, ou se o list box estiver configurado como
‘multiple-selection’.

Função : SalListQueryState
Sintaxe : bSelecionado = SalListQueryState ( hWndLista, nItem )
Descrição : Determina quando um item específico de um list box ou combo box está ou não
selecionado.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nItem Number – O índice de um item da lista.

Valor de Retorno :
bSelecionado é TRUE se o item nItem estiver selecionado e FALSE se nItem não estiver
selecionado.

Função : SalListQueryText
Sintaxe : nTam = SalListQueryText ( hWndLista, nItem, sTexto )
Descrição : Obtém o texto de um determinado item da lista.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nItem Number – O índice do item que vc quer obter o texto.
sTexto Receive String – O texto do item desejado.

Valor de Retorno :
nTam é o tamanho do texto recuperado.

Função : SalListQueryTextLength
Sintaxe : nTamanho = SalListQueryTextLength ( hWndLista, nIndice )
Descrição : Obtém o tamanho de um determinado item de uma lista.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nIndice Number – O índice do item que você deseja saber o tamanho.

Valor de Retorno :
nTamanho é o tamanho do texto do item indexado por nIndice.

Função : SalListQueryTextX
Sintaxe : sTexto = SalListQueryTextX ( hWndLista, nIndice )
Descrição : Obtém o texto de um determinado item de uma lista.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndLista Window Handle – O handle ou o nome da lista.


nIndice Number – O índice de um item da lista.

Valor de Retorno :
sTexto é o texto referente ao item indexado por nIndice.

Função : SalListRedraw
Sintaxe : bOk = SalListRedraw ( hWndLista, bRedraw )
Descrição : Redesenha itens numa lista, ou evita que seja redesenhado.
Com SalListDraw você pode controlar quando os itens da lista serão mostrados na tela.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
bRedraw Boolean – Se TRUE o Centura redesenha os itens do list box ou combo box,
se for FALSE os itens não são redesenhados.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se hWndLista for um handle
nulo.

Função : SalListSelectString
Sintaxe : nInd = SalListSelectString ( hWndLista, nInicio, sTexto )
Descrição : Procura por um texto numa lista e seleciona o item, caso o encontre.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nInicio Number – O índice a partir de onde você quer começar a pesquisa.
sTexto String – O texto que vc deseja encontrar.

Valor de Retorno :
nInd é o índice do item da lista que contém o texto sTexto.

Função : SalListSetMultiSelect
Sintaxe : bOk = SalListSetMultiSelect ( hWndLista, nItem, bSelecao )
Descrição : Ativa/Desativa a seleção de um determinado item num list box configurado como
‘multiple-selection’

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nItem Number – O índice do item que você deseja ativar/desativar a seleção.
bSelecao Boolean – Especifique TRUE para ativar a seleção e FALSE para desativar.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalListSetSelect
Sintaxe : bOk = SalListSetSelect ( hWndLista, nIndice )
Descrição : Ativa/desativa a seleção de um determinado item de um combo box ou de um list
box configurado como ‘single-selection’.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nIndice Number – O índice do item que você deseja ativar ou desativar a seleção.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalListSetTabs
Sintaxe : bOk = SalListSetTabs ( hWndLista, nTabs )
Descrição : Define a tabulação num list box para o alinhamento das colunas.
Obs : SalListPopulate sobrepõe as configurações feitas com SalListSetTabs.

Parâmetros :
hWndLista Window Handle – O handle ou o nome da lista.
nTabs Numeric Array – O nome de um vetor de números que representa as
tabulações.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalLoadApp
Sintaxe : bOk = SalLoadApp ( sAplicacao , sParametros )
Descrição : Inicia uma aplicação.

Parâmetros :
sAplicacao String – O nome da aplicação a ser executada.
sParametros String – Os argumentos da linha de comando.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalLoadAppAndWait
Sintaxe : bOk = SalLoadAppAndWait ( sAplicacao , nModo , nRetorno )
Descrição : Inicia uma aplicação e espera que essa aplicação termine sua execução, antes de
retornar o controle para a aplicação original.

Parâmetros :
sAplicacao String – O nome da aplicação a ser executada.
nModo Number – O modo de visualização da aplicação. Especifique uma das
constantes abaixo:
Window_Maximixed,
Window_Minimized,
Window_Normal ou
Window_NotVisible.
nRetorno Receive Number – Um status retornado pela aplicação que foi invocada, ou
um código de erro do Windows. Observe abaixo a relação dos códigos de
erros do Windows:

0 Não tem memória. Arquivo executável está corrompido.


2 Arquivo não encontrado.
3 Caminho não encontrado.
5 Violação de compartilhamento.
6 Biblioteca requer segmentos de dados separados para cada tarefa.

Página PAGE 582


Programando com o Centura Team Developer 2000

8 Memória insuficiente para iniciar a aplicação.


10 Versão incorreta do Windows.
11 Arquivo .EXE inválido.
12 Aplicação desenvolvida para um sistema operacional diferente.
13 Aplicação DOS 4.0.
14 Tipo de .EXE desconhecido.
15 Tentativa de carregar uma aplicação desenvolvida para uma versão
antiga do Windows em modo-real.
16 Tentativa de carregar uma segunda instância de um arquivo .EXE
contendo múltiplos segmentos de dados atualizáveis.
19 Tentativa de carregar um arquivo executável compactado. O
arquivo precisa ser descompactado para que possa ser carregado.
20 Uma DLL necessária para executar esta aplicação está corrompida.
21 Aplicação requer extensões do Microsoft Windows 32-bit.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a aplicação não pôde ser
encontrada ou iniciada.

Função : SalMapEnterToTab
Sintaxe : bOk = SalMapEnterToTab ( bModo )
Descrição : Esta função muda o comportamento padrão da tecla Enter. O comportamento
padrão é selecionar o botão default numa tela. Esse comportamento é alterado para mover
para o próximo objeto child.

Parâmetro :
bModo Boolean – Se você usar TRUE, a tecla Enter move o foco para o próximo
objeto child da janela. Se você usar FALSE, a tecla Enter assume o seu
comportamento normal, ou seja, selecionar o botão default numa tela.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalMDIArrangeIcons
Sintaxe : bOk = SalMDIArrangeIcons ( hWndMDI )
Descrição : Organiza os ícones do mdi que estiverem minimizados.

Parâmetro :
hWndMDI Window Handle – O handle da janela mdi.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalMDICascade
Sintaxe : bOk = SalMDICascade ( hWndMDI )
Descrição : Organiza em cascata todas as janelas filhas do mdi que não estiverem
minimizadas.

Parâmetro :
hWndMDI Window Handle – O handle ou o nome do mdi.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalMDITile
Sintaxe : bOk = SalMDITile ( hWndMDI, bPosicao )
Descrição : Ajusta lado-a-lado todas as janelas filhas do mdi que não estiverem minimizadas.
Janelas que não podem ter seu tamanho alterado não serão ajustadas.

Parâmetros :
hWndMDI Window Handle – O handle ou o nome do mdi.
bPosicao Boolean – O modo como as janelas serão ajustadas. Se TRUE, ajusta as
janelas verticalmente, se FALSE, ajusta as janelas horizontalmente.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalMessageBeep
Sintaxe : bOk = SalMessageBeep ( nNivelAlerta )
Descrição : Emite um som padrão wave, que corresponde a uma mensagem do ambiente
Windows. O usuário pode definir o som, para cada um dos níveis de alerta, no Painel de
Controle.

Parâmetro :
nNivelAlerta Number – O nível do alerta.
0xFFFFFFFF (-1) Beep padrão usando o auto-falante interno do
computador.
Você pode também utilizar as constantes pré-definidas para tal:

Página PAGE 582


Programando com o Centura Team Developer 2000

MB_IconAsterisk,
MB_IconExclamation,
MB_IconStop,
MB_IconQuestion ou
MB_Ok.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalMessageBox
Sintaxe : nResultado = SalMessageBox ( sTexto, sTitulo, nFlags )
Descrição : Mostra uma caixa de diálogo e retorna um número indicando a resposta do
usuário.
Você pode personalizar a mensagem, os botões e os ícones.

Parâmetros :
sTexto String – O texto da mensagem. Você pode utilizar múltiplas linhas, basta
utilizar um CONTROL+ENTER para iniciar uma nova linha.
sTitulo String – O título da caixa de diálogo.
nFlags Number – O estilo da caixa de diálogo.
Defina um estilo, combinando as constantes de estilo usando o operador OR
(|).
Você pode combinar apenas uma constante para cada componente do estilo.
Um estilo possui quatro componentes :
1. Os botões
2. O ícone da mensagem (opcional)
3. Um botão default (opcional)
4. Informar se a caixa de diálogo será system modal.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalModalDialog
Sintaxe : nRetorno = SalModalDialog ( tNomeDlg , hWndPai , Param1 , Param2 )
Descrição : Cria uma janela tipo dialog box ( caixa de diálogo).
Esta função aceita um template ou uma variável string no primeiro parâmetro. Se você usar
uma variável não poderá passar parâmetros na criação do dialog box.
Um dialog box desabilita a sua janela pai. Os dialog boxes do tipo system modal desabilitam
todo o sistema Windows. A função SalEndDialog destrói um dialog box e habilita todas as
janelas que estavam desabilitadas.
A função SalModalDialog pode passar um número variável de parâmetros para o dialog box.
Os tipos de dados desses parâmetros precisam ser os mesmos definidos na seção Parameters
do outline.

Você pode utilizar os parâmetros do dialog box para retornar informações para o objeto pai do
mesmo. No entanto, você pode inicializar parâmetros tipo receive apenas com variáveis. Isso
significa que você não pode passar como parâmetro um data field, ou outro objeto, para um
parâmetro tipo receive de uma janela.

Parâmetros :
tNomeDlg Template ou String – O nome do dialog box a ser criado.
hWndPai Window Handle – O handle ou o nome da janela pai. Utilize hWndNULL
para criar um dialog box que não possui janela pai.
Param1 Parâmetros opcionais, podem ser de qualquer tipo de dados do Centura.
Param2

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nRetorno é o valor especificado na função SalEndDialog.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalModalDialogFromStr
Sintaxe : nRetorno = SalModalDialogFromStr ( tNomeDlg , hWndPai )
Descrição : Cria uma janela tipo dialog box ( caixa de diálogo).
Esta função é útil em funções internas que recebem o nome da caixa de diálogo numa
variável.

Um dialog box desabilita a sua janela pai. Os dialog boxes do tipo system modal desabilitam
todo o sistema Windows. A função SalEndDialog destrói um dialog box e habilita todas as
janelas que estavam desabilitadas.

Parâmetros :
tNomeDlg Template ou String – O nome do dialog box a ser criado.
hWndPai Window Handle – O handle ou o nome da janela pai. Utilize hWndNULL
para criar um dialog box que não possui janela pai.

Valor de Retorno :
nRetorno é o valor especificado na função SalEndDialog.

Função : SalMoveWindow
Sintaxe : bOk = SalMoveWindow ( hWndObj, nX, nY )
Descrição : Movimenta um objeto para uma nova posição X e Y especificada em form units.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto.
nX Number – O número de form units para movimentar o objeto no eixo X.
nY Number – O número de form units para movimentar o objeto no eixo Y.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se hWndObj for um handle
nulo.

Função : SalMTSCreateInstance
Sintaxe : bOk = SalMTSCreateInstance ( oObjeto )
Descrição : Cria um novo componente. Dependendo das configurações da transação, o novo
componente poderá participar da transação atual, iniciar uma nova transação ou não suportar a
transação.

A função SalMTSCreateInstance ( ) tem o mesmo efeito da função Create( ) quando for


utilizada para objetos que não estão registrados no MTS.

Parâmetro:
oObjeto Objeto ou Interface - O objeto ou interface que será instanciado.

Valor de Retorno :
bOk é TRUE se o objeto for instanciado com sucesso e FALSE caso contrário.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função: SalMTSDisableCommit
Sintaxe: bOk = SalMTSDisableCommit ( )
Descrição: Indica que as atualizações transacionais do objeto atual não podem ser efetuadas
no presente momento, até que seja feita uma chamada à função SalMTSEnableCommit( ) ou
SalMTSSetComplete( ).

Para componentes não registrados no MTS esta função sempre retorna FALSE.

Nenhum Parâmetro:

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE caso contrário.

Função: SalMTSEnableCommit
Sintaxe: bOk = SalMTSEnableCommit ( )
Descrição: Indica que as atividades do objeto ainda não terminaram, mas que as atualizações
transacionais podem ser efetuadas no objeto pai, objeto que iniciou a transação.

O estado default quando um objeto é ativado é EnableCommit.

Para componentes não registrados no MTS esta função sempre retorna FALSE.

Nenhum Parâmetro:

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE caso contrário.

Função: SalMTSGetObjectContext
Sintaxe: bOk = SalMTSGetObjectContext ( Contexto )
Descrição: Obtém o contexto do objeto atual.

Para componentes não registrados no MTS esta função sempre retorna FALSE.

Nenhum Parâmetro:
Contexto Number - O contexto do objeto atual.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE caso contrário.

Função: SalMTSIsCallerInRole

Página PAGE 582


Programando com o Centura Team Developer 2000

Sintaxe: bOk = SalMTSIsCallerInRole ( sRegra , bEsta )


Descrição: Verifica se o ativador do objeto atual está listado na regra indicada em sRegra.

Parâmetros:
sRegra Number - O contexto do objeto atual.
bEsta Receive Boolean - Será TRUE caso o ativador do objeto seja membro da
regra especificada.

Valor de Retorno :
bOk é TRUE se a regra especificada em sRegra for identificada como uma regra registrada e
FALSE caso contrário.

Função: SalMTSIsInTransaction
Sintaxe: bOk = SalMTSIsInTransaction ( bEsta )
Descrição: Verifica se o objeto está sendo executado no contexto da transação.

Para componentes não registrados no MTS esta função sempre retorna FALSE.

Parâmetro:
bEsta Receive Boolean - Será TRUE se o objeto estiver sendo executado no
contexto da transação.

Valor de Retorno :
bOk é TRUE se o objeto estiver em uma transaçãoa e FALSE caso contrário.

Função: SalMTSIsSecurityEnabled
Sintaxe: bOk = SalMTSIsSecurityEnabled ( bSegHabilitada )
Descrição: Verifica o status da segurança. Se o objeto estiver sendo executado no processo do
cliente, não há verificação de segurança, nesse caso SalMTSIsSecurityEnabled sempre retorna
FALSE.

Para componentes não registrados no MTS esta função sempre retorna FALSE.

Parâmetro:
bSegHabilita Receive Boolean - Será TRUE se a segurança estiver habilitada.
da

Valor de Retorno:
bOk é TRUE se o a segurança estiver habilitada para o componente e FALSE caso contrário.

Função: SalMTSSetAbort
Sintaxe: bOk = SalMTSSetAbort ( )
Descrição: Use esta função para informar que a transação não pode ser aplicada (rollback). A
transação inteira é cancelada. O objeto é desativado retornando para o método que o chamou.

Página PAGE 582


Programando com o Centura Team Developer 2000

Para componentes não registrados no MTS esta função sempre retorna FALSE.

Nenhum Parâmetro:

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE caso contrário.

Função: SalMTSSetComplete
Sintaxe: bOk = SalMTSSetComplete ( )
Descrição: Use esta função para informar que a transação pode ser aplicada (commit). O
objeto é desativado retornando para o método que o chamou.

Para componentes não registrados no MTS esta função sempre retorna FALSE.

Nenhum Parâmetro:

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE caso contrário.

Função : SalNumberAbs
Sintaxe : nNum = SalNumberAbs ( nValor )
Descrição : Calcula o valor absoluto de um número.

Parâmetro :
nValor Number – O número que você deseja obter o seu valor absoluto.

Valor de Retorno :
nNum é o valor absoluto do número.

Função : SalNumberArcCos
Sintaxe : nCos = SalNumberArcCos ( nValor )
Descrição : Calcula o coseno de um valor entre o intervalo de 0 a 1.

Parâmetro :
nValor Number – O número cujo arco coseno você deseja.

Valor de Retorno :
nCos é o arco coseno de nValor.

Função : SalNumberArcSin
Sintaxe : nSeno = SalNumberArcSin ( nValor )
Descrição : Calcula o seno de um valor entre o intervalo de 0 a 1.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
nValor Number - O número cujo arco seno você deseja.

Valor de Retorno :
nCos é o arco seno de nValor.

Função : SalNumberArcTan
Sintaxe : nArcoTan = SalNumberArcTan ( nValor )
Descrição : Calcula o valor do arco tangente.

Parâmetro :
nValor Number - O número cujo arco tangente você deseja obter.

Valor de Retorno :
nArcoTan é o arco tangente do valor nValor.

Função : SalNumberArcTan2
Sintaxe : nArcoTan = SalNumberArcTan2 ( nValor1 , nValor2 )
Descrição : Calcula o arco tangente de dois valores. Esta função utiliza os sinais dos dois
parâmetros para determinar o quadrante do valor retornado.

Parâmetros :
nValor1 Number - Um dos dois valores cujo arco tangente você deseja obter.
nValor2 Number - O outro dos dois valores cujo arco tangente você deseja obter.

Valor de Retorno :
nArcoTan é o arco tangente dos valores nValor1 e nValor2.

Função : SalNumberCos
Sintaxe : nValor = SalNumberCos ( nAngulo )
Descrição : Calcula o coseno de um ângulo. Você deve especificar o ângulo em radianos.

Parâmetro :
nAngulo Number - O valor do ângulo cujo coseno você deseja obter.

Valor de Retorno :
nValor é o coseno do valor especificado em nAngulo.

Função : SalNumberCosH
Sintaxe : nValor = SalNumberCosH ( nAngulo )
Descrição : Calcula o coseno hiperbólico de um ângulo. Você deve especificar o ângulo em
radianos.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
nAngulo Number - O valor do ângulo cujo coseno hiperbólico você deseja obter.

Valor de Retorno :
nValor é o coseno hiperbólico do valor especificado em nAngulo.

Função : SalNumberExponent
Sintaxe : nNum = SalNumberExponent ( nValor )
Descrição : Calcula a potência de um número.

Parâmetro :
nValor Number - O valor cuja potência você deseja obter.

Valor de Retorno :
nNum é a potência de nValor.

Função : SalNumberHigh
Sintaxe : nHigh = SalNumberHigh ( nValor )
Descrição : Obtém os 16bits mais significantes de um número ( high-order ).

Parâmetro :
nValor Number - O número cujo valor high-order você deseja obter.
SQLWindows/32 trata nValor como um número de 32bits sem sinal.

Valor de Retorno :
nHigh é o valor high-order.

Função : SalNumberHypot
Sintaxe : nHypotenuse = SalNumberHypot ( nX, nY )
Descrição : Computes the length of the hypotenuse of a right triangle, given the lengths of the
other two sides.

Parâmetros :
nX Number. The length of one side of a right triangle.
nY Number. The length of another side of a right triangle.

Valor de Retorno :

nHypotenuse is the length of the hypotenuse of a right triangle. If the computation of the
hypotenuse results in an overflow, nHypotenuse is equal to zero (0).

Função : SalNumberLog
Sintaxe : nLog = SalNumberLog ( nValor )
Descrição : Calcula o logarítimo natural de um número.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
nValor Number. O número cujo logarítimo natural você deseja obter.

Valor de Retorno :
nLog é o logarítimo natural de nValor. Se nValor for um número negativo ou for zero, nLog é
igual a zero.

Função : SalNumberLogBase10
Sintaxe : nLog = SalNumberLogBase10 ( nValor )
Descrição : Calcula o logarítimo de base 10 de um número.

Parâmetro :
nValor Number – O número cujo logarítimo de base 10 você deseja obter.

Valor de Retorno :
nLog é o logarítimo de base de nValor. Se nValor for igual a 0 (zero) ou for um número
negativo, nValor é igual a 0 (zero).

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalNumberLow
Sintaxe : nNum = SalNumberLow ( nValor )
Descrição : Obtém o valor low-order de um número ( os 16-bits menos significativos ).

Parâmetro :
nValor Number – O número cujo valor low-order você deseja obter. O Centura
trata nValor como um número de 32-bits sem sinal.

Valor de Retorno :
nNum é o valor low-order obtido.

Função : SalNumberMax
Sintaxe : nNum = SalNumberMax ( nValor1, nValor2 )
Descrição : Retorna o maior valor entre dois números.

Parâmetros :
nValor1 Number – O primeiro dos dois valores.
nValor2 Number – O segundo dos dois valores.

Valor de Retorno :
nNum é o maior valor entre nValor1 e nValor2.

Função : SalNumberMin
Sintaxe : nNum = SalNumberMin ( nValor1, nValor2 )
Descrição : Retorna o menor valor entre dois números.

Parâmetros :
nValor1 Number – O primeiro dos dois valores.
nValor2 Number – O segundo dos dois valores.

Valor de Retorno :
nNum é o menor valor entre nValor1 e nValor2.

Função : SalNumberMod
Sintaxe : nResto = SalNumberMod ( nNum, nDivisor )
Descrição : Retorna o resto entre a divisão de dois números.

Parâmetros :
nNum Number – É o número que será dividido.
nDivisor Number – É o divisor de nNum.

Valor de Retorno :
nResto é o que restar da divisão entre nNum e nDivisor.

Função : SalNumberPi

Página PAGE 582


Programando com o Centura Team Developer 2000

Sintaxe : nNumPi = SalNumberPi ( nValor )


Descrição : Multiplica um número por Pi. Pi é igual a 3.1415926535979323.

Parâmetros :
nValor Number – É o número que será multiplicado por Pi.

Valor de Retorno :
nNumPi é nValor multiplicado por Pi.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalNumberPower
Sintaxe : nNum = SalNumberPower ( nX, nY )
Descrição : Calcula nX elevado à potência de nY.

Parâmetros :
nX Number – É o número para se elevar a potência.
nY Number – É o expoente.

Valor de Retorno :
nNum é igual a nX elevado a potência de nY, com as seguintes condições:
1. Se nX não for igual a 0 e nY for igual a 0, nNum é igual a 1.
2. Se nX for igual a 0 e nY for um número negativo, nNum é igual a zero (0).

Função : SalNumberRandInit
Sintaxe : bOk = SalNumberRandInit ( nInicial )
Descrição : Define o ponto inicial para a geração de uma série de números aleatórios usando
SalNumberRandom.
Use SalNumberRandInit quando você quiser gerar o mesmo conjunto de números aleatórios
várias vezes.

Parâmetro :
nInicial Number – O ponto de partida. Um número qualquer no intervalo entre 0 e
32767.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalNumberRandom
Sintaxe : nNum = SalNumberRandom ( )
Descrição : Gera um número aleatório. Os números gerados pela função SalNumberRandom
são inteiros no intervalo de 0 até 32767 ( 0 até 0x7FFF ).

Nenhum Parâmetro.

Valor de Retorno :
nNum é um número aleatório.

Função : SalNumberRound
Sintaxe : nResultado = SalNumberRound ( nNum )
Descrição : Retorna um número arredondado.
Se a parte decimal de um número for maior ou igual a 0,5, o Centura arredonda o número
acima. Por exemplo, o número 124,33 retorna 124 ; o número 124,56 retorna 125.

Parâmetro :
nNum Number – Um número para ser arredondado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nResultado é o nNum arredondado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalNumberSin
Sintaxe : nSeno = SalNumberSin ( nAngulo )
Descrição : Calcula o seno de um ângulo. Você deve especificar o ângulo em radianos.

Parâmetro :
nAngulo Number - O valor do ângulo cujo seno você deseja obter.

Valor de Retorno :
nSeno é o seno do ângulo nAngulo.

Função : SalNumberSinH
Sintaxe : nSeno = SalNumberSinH ( nAngulo )
Descrição : Calcula o seno hiperbólico de um ângulo. Você deve especificar o ângulo em
radianos.

Parâmetro :
nAngulo Number - O valor do ângulo cujo seno hiperbólico você deseja obter.

Valor de Retorno :
nSeno é o valor do seno hiperbólico do ângulo nAngulo.

Função : SalNumberSqrt
Sintaxe : nRaiz = SalNumberSqrt ( nValor )
Descrição : Calcula a raiz quadrada de um número.

Parâmetro :
nValor Number – O número cuja raiz quadrada você deseja obter.

Valor de Retorno :
nRaiz é o valor da raiz quadrada de nValor. Se nValor for um número negativo, ele está fora
do domínio de números válidos e nRaiz é igual a zero (0).

Função : SalNumberTan
Sintaxe : nTan = SalNumberTan ( nAngulo )
Descrição : Calcula a tangente de um ângulo.

Parâmetro :
Number Number - O valor do ângulo cuja tangente você deseja obter.

Valor de Retorno :
nTan é a tangente de um ângulo.

Função : SalNumberTanH
Sintaxe : nTan = SalNumberTanH ( nAngulo )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Calcula a tangente de um ângulo hiperbólico.

Parâmetro :
Number Number - O valor do ângulo cuja tangente hiperbólica você deseja obter.

Valor de Retorno :
nTan é a tangente hiperbólica do ângulo em nAngulo.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalNumberToChar
Sintaxe : sCararctere = SalNumberToChar ( nNum )
Descrição : Converte um caractere ASCII em seu valor decimal.

Parâmetro :
nNum Number – O número para ser convertido.

Valor de Retorno :
sCaractere é o valor de nNum convertido.

Função : SalNumberToHString
Sintaxe : sString = SalNumberToHString ( nHString )
Descrição : Converte um número para um handle string.

Parâmetro :
nHString Number – Um valor numérico para ser convertido.

Valor de Retorno :
sString é um ponteiro string que representa um número convertido.

Função : SalNumberToStr
Sintaxe : nTam = SalNumberToStr ( nNum, nDecimais, sString )
Descrição : Converte um número em string.

Parâmetros :
nNum Number – O valor numérico que será transformado em string.
nDecimais Number – O número de casas decimais.
sString Receive String – Uma variável string que receberá o valor convertido.

Valor de Retorno :
nTam é o tamanho da string retornada.

Função : SalNumberToStrX
Sintaxe : sStr = SalNumberToStrX ( nNum, nDecimais )
Descrição : Converte um número em string.

Parâmetros :
nNum Number – O valor numérico que será transformado em string.
nDecimais Number – O número de casas decimais.

Valor de Retorno :
sStr é o valor convertido.

Função : SalNumberToWindowHandle
Sintaxe : hWndConv = SalNumberToWindowHandle ( nWnd )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Converte um valor numérico em um valor tipo window handle.

Parâmetro :
nWnd Number – O número que será convertido.

Valor de Retorno :
hWndConv é o window handle convertido de nWnd.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalNumberTruncate
Sintaxe : nResultado = SalNumberTruncate ( nNum, nPrecisão, nEscala )
Descrição : Trunca um número

Parâmetros :
nNum Number – O número que será truncado, a partir da sua posição mais à
esquerda.
nPrecisao Number – É o número de caracteres a serem mostrados.
nEscala Number – É o número de digitos decimais. nPrecisao deve ser maior do que
nEscala.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalParentWindow
Sintaxe : hWndPai = SalParentWindow ( hWnd )
Descrição : Retorna o handle do objeto pai do objeto especificado em hWnd.

Parâmetro :
hWnd Window Handle – O handle ou o nome cujo o handle do pai você deseja

Valor de Retorno :
hWndPai é o handle do objeto pai.

Função : SalPicClear
Sintaxe : bOk = SalPicClear ( hWndPic )
Descrição : Apaga o conteúdo de uma picture.

Parâmetro :
hWndPic Window Handle – O handle ou nome de uma picture.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPicGetDescription
Sintaxe : nTamanho = SalpicGetDescription ( hWndPic , sDesc , nTamMax )
Descrição : Obtém a descrição do conteúdo de uma picture.

Parâmetros :
hWndPic Window Handle – O handle ou o nome de uma picture.
sDesc Receive String – A descrição do conteúdo de hWndPic.
nTamMax Number – O tamanho máximo do texto que será recuperado.

Valor de Retorno :
nTamanho é o tamanho (em bytes) da descrição em sDesc.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalPicGetImage
Sintaxe : nTam = SalPicGetImage ( hWndPicture , sPicture , nTipo )
Descrição : Obtém a imagem contida num objeto tipo picture.

Parâmetros :
hWndPicture Window Handle - O handle ou o nome do objeto picture.
sPicture Receive String - O conteúdo do objeto picture.
nTipo Number - O formato do conteúdo do objeto picture.
Pode ser uma das seguintes constantes:
PIC_ImageTypeNone,
PIC_ImageTypeBMP,
PIC_ImageTypeICON,
PIC_ImageTypeWMF,
PIC_ImageTypeTIFF,
PIC_ImageTypePCX,
PIC_ImageTypeGIF,
PIC_ImageTypeJPEG ou
PIC_ImageTypeNuVEQ.

Valor de Retorno :
nTam é o tamanho em bytes da imagem em sPicture. Se o formato não estiver disponível,
nTam é zero.

Função : SalPicGetString
Sintaxe : nTamanho = SalPicGetString ( hWndPic , nFormato , sPicture )
Descrição : Copia o conteúdo de uma picture para uma variável string.

Parâmetros :
hWndPic Window Handle – O handle ou o nome da picture.
nFormato Number – O formato do conteúdo da picture.
sPicture Receive String – O conteúdo da picture em hWndPic.

Valor de Retorno :
nTamanho é tamanho (em bytes) da variável sPicture. Se o formato não estiver disponível,
nTamanho é zero.

Função : SalPicSet
Sintaxe : bOk = SalPicSet ( hWndPic, tResource, nFormato )
Descrição : Insere um resource numa picture

Parâmetros :
hWndPic Windows Handle – O handle ou o nome da picture.
tResource Template – Um ícone ou um bitmap na seção do Outline chamada
Resources.
nFormato Number – O tipo do resource. Se você especificar zero o Centura

Página PAGE 582


Programando com o Centura Team Developer 2000

determinará o tipo do resource. Se não, especifique um dos tipos


PIC_Formatbitmap ou PIC_FormatIcon.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPicSetFile
Sintaxe : bOk = SalPicSetFile ( hWndPic , sNomeArquivo )
Descrição : insere o conteúdo de um arquivo numa picture.

Parâmetros :
hWndPic Window Handle – O handle ou o nome da picture.
sNomeArqui String – O nome do arquivo cujo conteúdo será inserido na picture
vo hWndPic.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPicSetFit
Sintaxe : bOk = SalPicSetFit ( hWndPic, nAjuste , nLargura , nAltura )
Descrição : Define o ajuste visual de uma picture.

Parâmetros :
hWndPic Windows Handle – o handle ou o nome da picture.
nAjuste Number – O tipo de ajuste. Você pode utilizar uma das eguintes constantes :
PIC_FitBestFit , PIC_FitScale ou PIC_FitSizeToFit.
nLargura Number – O percentual da escala de largura, no caso de nAjuste =
PIC_FitScale.
nAltura Number – O percentual da escala de altura, no caso de nAjuste =
PIC_FitScale.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPicSetImage
Sintaxe : nTam = SalPicSetImage ( hWndPicture , sPicture , nTipo )
Descrição : Insere o conteúdo de uma picture numa imagem, sem o cabeçalho padrão de
imagens do CTD.

Parâmetros :
hWndPicture Window Handle - O handle ou o nome do objeto picture.
sPicture Receive String - O conteúdo do objeto picture.
nTipo Number - O formato do conteúdo do objeto picture.
Pode ser uma das seguintes constantes:
PIC_ImageTypeNone,
PIC_ImageTypeBMP,

Página PAGE 582


Programando com o Centura Team Developer 2000

PIC_ImageTypeICON,
PIC_ImageTypeWMF,
PIC_ImageTypeTIFF,
PIC_ImageTypePCX,
PIC_ImageTypeGIF,
PIC_ImageTypeJPEG ou
PIC_ImageTypeNuVEQ.

Valor de Retorno :
nTam é o tamanho em bytes da imagem em sPicture. Se o formato não estiver disponível,
nTam é zero.

Função : SalPicSetHandle
Sintaxe : bOk = SalPicSetHandle( hWndPic , nTipo , nHandle )
Descrição : Define o handle de uma imagem de um objeto picture como handle de bitmap
(HBITMAP) ou de ícone (HICON). Normalmente, HBITMAPs e HICONs são lidos a partir
de DLLs.

Parâmetros :
hWndPic Window Handle – O handle ou o nome de um objeto picture.
nTipo Number – Atribua PIC_FormatIcon a nTipo se nHandle for um HICON, ou
PIC_FormatBitmap se nHandle for um HBITMAP.
nHandle Number – um HBITMAP ou HICON.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função: SalPicSetImage
Sintaxe: bOk = SalPicSetImage ( hWndPicture , sImagem, nTipo )
Descrição: Insere o conteúdo de uma string num objeto tipo picture sem o header de imagens
do Centura Team Developer.

Parâmetros :
hWndPicture Window Handle – O handle ou o nome de um objeto tipo picture.
sImagem String – A imagem.
nTipo Number - O tipo da imagem.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPicSetString
Sintaxe : bOk = SalPicSetString ( hWndPic , nFormato , sPicture )
Descrição : Insere o conteúdo de uma string numa picture.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndPic Window Handle – O handle ou o nome de um objeto tipo picture.


nFormato Number – O formato do conteúdo da picture.
PIC_FormatBitmap , PIC_FormatIcon , PIC_FormatObject.
sPicture String – A imagem.
Você pode utilizar SalFileRead para ler um arquivo bitmap para uma string.
Você também pode carregar (através do comando SELECT) uma imagem
gravada numa coluna do banco de dados para uma variável string.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPixelsToFormUnits
Sintaxe : nUnForm = SalPixelsToFormUnits ( hWnd , nPixels, bVertical )
Descrição : Calcula o número de unidades de form do Centura, baseado no número de pixels.

Parâmetros :
hWnd Window Handle – O handle ou o nome do objeto cujo número de unidades
de form você deseja calcular.
nNumPixels Number – O número de pixels.
bVertical Boolean – Atribua FALSE a este parâmetro se o número de pixels
corresponder ao eixo X, e TRUE se corresponder ao eixo Y.

Valor de Retorno :
nUnForm é o número de unidades de form se a função for executada com sucesso, e zero se
algum erro ocorrer.

Função : SalPostMsg
Sintaxe : bOk = SalPostMsg ( hWndObj , nMensagem , nwParam , nlParam )
Descrição : Envia uma mensagem para um determinado objeto, e coloca nMensagem na lista
de mensagens pendentes do objeto.

Parâmetros :
hWndObj Window Handle – O handle ou o nome do objeto que irá receber a
mensagem.
nMensagem Number – A mensagem.
nwParam Number – O valor de wParam para a mensagem.
nlParam Number - Ovalor de lParam para a mensagem.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPrtExtractRect
Sintaxe : bOk = SalPrtExtractRect ( nlParam, nEsquerda, nCima, nDireita, nBaixo )
Descrição : Obtém do parâmetro lParam, da mensagem SAM_Print, o retângulo que está
sendo impresso no momento.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
nlParam Number – O valor do parâmetro lParam na mensagem SAM_Print.
nEsquerda Receive Number – A posição no eixo X do lado esquerdo do retângulo.
nCima Receive Number – A posição no eixo Y do lado de cima do retângulo.
nDireita Receive Number – A posição no eixo X do lado direito do retângulo.
nBaixo Receive Number – A posição no eixo Y do lado de baixo do retângulo.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPrtGetDefault
Sintaxe : bOk = SalPrtGetDefault ( sDispositivo , sDriver , sPorta )
Descrição : Obtém as configurações do dispositivo de impressão , driver e porta padrões.

Parâmetros :
sDispositivo Receive String – O dispositivo padrão.
sDriver Receive String – O driver padrão.
sPorta Receive String – A porta padrão.

Valor de Retorno :
bOk é TRUE se a função obter os valores padrões com sucesso e FALSE se falhar.

Função : SalPrtGetParmNum
Sintaxe : bOk = SalPrtGetParmNum ( nParametro, nValor )
Descrição : Obtém o valor de um parâmetro de impressão. Os parâmetros de impressão são
um conjunto de variáveis globais, inicializadas com valores padronizados. Podem ser
alterados utilizando-se a função SalPrtSetParmNum, recuperados com a função
SalPrtGetParmNum ou reinicializados através da função SalPrtSetParmDefaults.

Parâmetros :
nParametro Number – O parâmetro de impressão cujo valor você deseja obter. Use uma
das constantes PRT_nCopyCount ,
PRT_nDraftMode,
PRT_nFromPage,
PRT_nMarginLeft ,
PRT_nMarginTop,
PRT_nPrintAll,
PRT_nShowFormPageRect ou
PRT_nToPage.
nValor Receive Number – o valor do parâmetro de impressão. Para valores lógicos
este parâmetro é TRUE ou FALSE.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalPrtPrintForm
Sintaxe : bOk = SalPrtPrintForm ( hWndObj )
Descrição : Imprime um form window, table window ou dialog box e todo o seu conteúdo e
flags das linhas (para o caso das tabelas). Quando hWndObj for um handle de um form
window ou um dialog box, todo o seu conteúdo visível em tela é impresso.

O Centura tenta imprimir o objeto com a mesma fonte mostrada na tela. Para melhores
resultados, utilize as fontes suportadas pela sua impressora.

Se o objeto for maior do que o tamanho do papel, será impresso em tantas páginas quanto
forem necessárias.

Parâmetro :
hWndObj Window Handle – O handle ou o nome do objeto a ser impresso.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPrtSetDefault
Sintaxe : bOk = SalPrtSetDefault ( sDispositivo , sDriver, sPorta )
Descrição : Define as configurações padrões do dispositivo de impressão , driver e porta.

Parâmetros :
sDispositivo String – O dispositivo padrão.
sDriver String – O driver padrão.
sPorta String – A porta padrão.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPrtSetParmDefaults
Sintaxe : bOk = SalPrtSetParmDefaults ( )
Descrição : Reinicia os parâmetros de impressão para os seus valores default.

Número de cópias : 1
Imprime em modo rascunho : FALSE
Imprime todas as páginas : TRUE
Página inicial : 1
Página final : 1
Margem esquerda : 0
Margem direita : 0
Desenha um retângulo ao redor do form impresso : FALSE

Nenhum Parâmetro.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPrtSetParmNum
Sintaxe : bOk = SalPrtSetParmNum ( nParametro , nValor )
Descrição : Define o valor de um parâmetro de impressão. Os parâmetros de impressão são
um conjunto de variáveis globais, inicializadas com valores padronizados. Podem ser
alterados utilizando-se a função SalPrtSetParmNum, recuperados com a função
SalPrtGetParmNum ou reinicializados através da função SalPrtSetParmDefaults.

Parâmetros :
nParametro Number – Uma constante que representa o parâmetro de impressão.
Use uma das constantes :
PRT_nCopyCount ,
PRT_nDraftMode,
PRT_nFromPage,
PRT_nMarginLeft ,
PRT_nMarginTop,
PRT_nPrintAll,
PRT_nShowFormPageRect ou
PRT_nToPage.
nValor Number – o valor do parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalPrtSetup
Sintaxe : bOk = SalPrtSetup ( sDispositivo , sDriver , sPorta, bMostrar )
Descrição : Mostra na tela o dialog box de configuração de impressão. Inicialmente, a
impressora padrão é mostrada, permitindo ao usuário alterá-la. SalPrtSetup retorna as opções
selecionadas pelo usuário nas variáveis receive.

Parâmetros :
sDispositivo Receive String – O dispositivo ( a impressora ).
sDriver Receive String – O driver.
sPorta Receive String – A porta.
bMostrar Boolean – Indica se é para mostrar as impressoras inativas, ou apenas a
impressora ativa.
Se TRUE todas as impressoras são mostradas, se FALSE, apenas a
impressora default é mostrada.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalQueryFieldEdit

Página PAGE 582


Programando com o Centura Team Developer 2000

Sintaxe : bLigado = SalQueryFieldEdit ( hWndCampo )


Descrição : Retorna o estado do flag de edição de um data field, multiline text, combo box,
picture ou célula de uma table window. O flag de edição está ligado quando o usuário
modifica o valor de um data field, multiline text ou coluna de uma table window. No caso do
objeto picture, o flag de edição é ligado quando a aplicação servidora está aberta para edição
deste objeto.
O flag de edição não é ligado quando você recupera as informações a partir de um banco de
dados.

Esta função apenas consulta o valor do flag de edição do objeto hWndCampo, não o altera.

Importante : No caso de alguns objetos ( por exemplo, o scroll bars de uma table window ) a
função SalGetType retorna zero. Não utilize SalQueryFieldEdit com objetos onde SalGetType
retorne zero.

Parâmetro :
hWndCampo Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bLigado é TRUE se o flag de edição do objeto estiver ligado e FALSE se estiver desligado.

Função : SalQuit
Sintaxe : bOk = SalQuit ( )
Descrição : Encerra a aplicação.
Se você estiver executando a aplicação através do Centura SQLWindows32, a sua aplicação é
encerrada e o SQLWindows32 retorna ao modo de design.

Nenhum Parâmetro.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportClose
Sintaxe : bOk = SalReportClose ( hWndRelatorio )
Descrição : Encerra o relatório. Utilize esta função quando você quiser fechar uma janela de
visualização de relatório.

Parâmetro :
hWndRelator Window Handle – O handle ou o nome de uma janela de visualização de
io relatório.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportCmd

Página PAGE 582


Programando com o Centura Team Developer 2000

Sintaxe : bOk = SalReportCmd ( hWndRelatorio, nComando )


Descrição : Envia um comando para uma janela que permite a visualização de um relatório.
Utilize SalReportCmd para controlá-la.
Quando você utiliza a função SalReportView, o segundo parâmetro é o handle da janela onde
o relatório será mostrado. Use a função SalReportCmd para enviar comandos para esta janela
que controla o Report Builder.

Parâmetros :
hWndRelator Window Handle – O handle ou o nome da janela do relatório.
io
nComando Number – O comando que será enviado para o relatório. Os comandos
disponíveis são:
RPT_CmdFirstPage,
RPT_CmdGotoPage,
RPT_CmdLastPage,
RPT_CmdNextPage,
RPT_CmdPrevPage,
RPT_CmdPrint,
RPT_CmdPrinterSetup,
RPT_CmdSizeAtual e
RPT_CmdSizeFit.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportCreate
Sintaxe : bOk = SalReportCreate ( sQrp, sVariaveis, sInputs, bGerar, nErro )
Descrição : Cria um template de relatório.

Parâmetros :
sQrp String – O nome do modelo do relatório a ser criado.
sVariaveis String – A relação das variáveis do Centura que serão utilizadas para
transportar os dados do banco de dados para o relatório. Os nomes das
variáveis devem estar separados por vírgulas. Os tipos de dados das
variáveis devem ser os mesmos das variáveis de entrada do relatório,
declaradas em sInputs.
sInputs String – A relação de nomes das variáveis de entrada do relatório.
bGerar Boolean – Se TRUE, o Centura gera um relatório padrão e coloca em nErro
os erros que ocorrerem .
nErro Receive Number – Se algum erro ocorrer este parâmetro é uma das
constantes de erro do relatório, uma das constantes RPT_Err*.
Quando o programa é executado através do Centura SQLWindows32 (run
mode), sempre é mostrado um dialog box com a explicação do erro que
ocorrer. No caso de estar executando a aplicação através do executável, o
dialog box de erros é mostrado apenas se este parâmetro for igual a 1.

Valor de Retorno :

Página PAGE 582


Programando com o Centura Team Developer 2000

bOk é TRUE se a função for executada com sucesso, e FALSE se falhar.

Função : SalReportDlgOptins
Sintaxe : bOk = SalReportDlgOptions ( hWndRelatorio, sTitulo, sLinha1, sLinha2, sNome )
Descrição : Configura o dialog box que será mostrado quando o relatório estiver sendo
impresso. Use esta função após criar o relatório, mas antes de começar a imprimir.

Parâmetros :
hWndRelator Window Handle – O handle do relatório.
io
sTitulo String – O texto que é mostrado no título do dialog box.
sLinha1 String – O texto que é mostrado na primeira linha centralizada de texto.
sLinha2 String – O texto que é mostrado na segunda linha centralizada de texto.
sNome String – O nome do documento que é mostrado no gerenciador de
impressão.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportGetDateTimeVar
Sintaxe : bOk = SalReportGetDateTimeVar ( hWndRelatorio , sVariavel , dtValor )
Descrição : Obtém o valor de uma variável do relatório, tipo date/time.

Parâmetros :
hWndRelator Window Handle – O handle ou o nome de uma janela de impressão de
io relatório.
sVariavel String – O nome da variável do relatório.
dtValor Receive Date/Time – O valor obtido do relatório.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportGetNumberVar
Sintaxe : bOk = SalReportGetNumberVar ( hWndRelatorio, sVariavel, nValor )
Descrição : Obtém o valor de uma variável do relatório, tipo number.

Parâmetros :
hWndRelator Window Handle – O handle ou o nome de uma janela de impressão de
io relatório.
sVariavel String – O nome da variável do relatório.
nValor Receive Number – O valor obtido do relatório.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalReportGetObjectVar
Sintaxe : bOk = SalReportGetObjectVar ( hWndRelatorio , sVariavel, sValor )
Descrição : Obtém o valor de uma variável do relatório, tipo objeto.

Parâmetros :
hWndRelator Window Handle – O handle ou o nome de uma janela de impressão de
io relatório.
sVariavel String – O nome da variável do relatório.
sValor Receive String – O valor da variável sVariavel.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportGetStringVar
Sintaxe : bOk = SalReportGetStringVar ( hWndRelatorio , sVariavel, sValor )
Descrição : Obtém o valor de uma variável do relatório, tipo string.

Parâmetros :
hWndRelator Window Handle – O handle ou o nome de uma janela de impressão de
io relatório.
sVariavel String – O nome da variável do relatório.
sValor Receive String – O valor da variável sVariavel.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportPrint
Sintaxe : SalReportPrint( hWndObj, sQrp, sVariaveis, sInputs, nCopias, nOpcoes, nPPag,
nUPag, nErro )
Descrição : Imprime um relatório.
A função SalReportPrint cria uma janela minimizada do Report Builder. Um dialog box é
mostrado enquanto o relatório é impresso. Quando esta função encerra, o Report Builder
automaticamente é fechado.

Obs : Esta função estabiliza um diálogo entre o Report Builder e a aplicação. O


processamento de impressão em si está no tratamento das mensagens SAM_Report*, que são
enviadas pelo Report Builder para a aplicação.

O Centura envia as informações da aplicação para o ReportBuilder, quando a aplicação


retorna TRUE no processamento da mensagem SAM_ReportFetchNext. O Report Builder
continua a enviar mensagens SAM_ReportFetchNext, até que a aplicação retorne FALSE,
quando então o relatório é encerrado.

Parâmetros :
hWndObj Window Handle – O handle do objeto da aplicação que irá receber as
mensagens SAM_Report* , e que fará todo o processamento do relatório.

Página PAGE 582


Programando com o Centura Team Developer 2000

sQrp String – O nome de um arquivo de layout de relatório.


sVariaveis String – A relação das variáveis do Centura que serão utilizadas para
transportar os dados do banco de dados para o relatório. Os nomes das
variáveis devem estar separados por vírgulas. Os tipos de dados das
variáveis devem ser os mesmos das variáveis de entrada do relatório,
declaradas em sInputs.
sInputs String – A relação de nomes das variáveis de entrada do relatório.
nCopias Number – O número de cópias a ser impresso. Se você especificar zero ou
um número negativo, o Centura imprime apenas uma cópia.
nOpcoes Number – Você pode combinar duas ou mais dessas constantes separando-
as com o operador OR (|) :
RPT_PrintAll,
RPT_PrintDraft,
RPT_PrintNoAbort,
RPT_PrintNoErrors,
RPT_PrintNoWarn ou
RPT_PrintRange.
nPPag Number – O número da primeira página do relatório a ser impressa ( se
nOpcoes incluir RPT_PrintRange).
nUPag Number – O número da última página do relatório a ser impressa ( se
nOpcoes incluir RPT_PrintRange).
nErro Receive Number – Se a função for executada com sucesso, este parâmetro é
zero. Se ocorrer algum erro, este parâmetro é um dos valores das constantes
RPT_Err*.

Em modo de execução no tempo de design, o Centura sempre mostra um


dialog box com uma explicação caso ocorra algum erro. No aplicativo final,
*.EXE, o Centura mostra este dialog box, apenas se você atribuir 1 a este
parâmetro, antes de chamar a função SalReportPrint.

Valor de Retorno :
Nada é retornado, para obter informações sobre o sucesso ou não da execução do relatório,
verifique o último parâmetro, nErro.

Função : SalReportPrintToFile
Sintaxe : SalReportPrintToFile ( hWndObj, sQrp, sArquivo, sVariaveis, sInput, nCopias,
nOpcoes, nPPag, nUPag, bFormato, nErro )
Descrição : Imprime um relatório em arquivo no formato RTF ou ASCII.

Parâmetros :
hWndObj Window Handle – O handle do objeto da aplicação que irá receber as
mensagens SAM_Report* , e que fará todo o processamento do relatório.
sQrp String – O nome de um arquivo de layout de relatório.
sArquivo String – O nome do arquivo.
sVariaveis String – A relação das variáveis do Centura que serão utilizadas para
transportar os dados do banco de dados para o relatório. Os nomes das
variáveis devem estar separados por vírgulas. Os tipos de dados das

Página PAGE 582


Programando com o Centura Team Developer 2000

variáveis devem ser os mesmos das variáveis de entrada do relatório,


declaradas em sInputs.
sInputs String – A relação de nomes das variáveis de entrada do relatório.
nCopias Number – O número de cópias a ser impresso. Se você especificar zero ou
um número negativo, o Centura imprime apenas uma cópia.
nOpcoes Number – Você pode combinar duas ou mais dessas constantes separando-
as com o operador OR (|):
RPT_PrintAll,
RPT_PrintDraft,
RPT_PrintNoAbort,
RPT_PrintNoErrors,
RPT_PrintNoWarn e
RPT_PrintRange.
nPPag Number – O número da primeira página do relatório a ser impressa ( se
nOpcoes incluir RPT_PrintRange).
nUPag Number – O número da última página do relatório a ser impressa ( se
nOpcoes incluir RPT_PrintRange).
nErro Receive Number – Se a função for executada com sucesso, este parâmetro é
zero. Se ocorrer algum erro, este parâmetro é um dos valores das constantes
RPT_Err*.

Em modo de execução no tempo de design, o Centura sempre mostra um


dialog box com uma explicação caso ocorra algum erro. No aplicativo final,
*.EXE, o Centura mostra este dialog box apenas se você atribuir 1 a este
parâmetro, antes de chamar a função SalReportPrint.

Valor de Retorno :
Nada é retornado. Para obter informações sobre o sucesso ou não da execução do relatório,
verifique o último parâmetro, nErro.

Função : SalReportReset
Sintaxe : bOk = SalReportReset ( hWndRelatorio )
Descrição : Recarrega uma janela de relatório. Esta função envia novamente a mensagem
SAM_ReportFetchInit, e uma ou mais mensagens SAM_ReportFetchNext para que o
relatório seja re-processado com novas informações.

Parâmetro :
hWndRelator Window Handle – O handle do relatório.
io

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportSetDateTimeVar
Sintaxe : bOk = SalReportSetDateTimeVar ( hWndRelatorio, sVariavel, dtValor )
Descrição : Atribui um valor a uma variável tipo date/time, definida no layout de relatório.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
hWndRelator Window Handle – O handle do relatório.
io
sVariavel String – O nome da variável.
dtValor Date/Time – O valor que será atribuído a variável sVariavel.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportSetNumberVar
Sintaxe : bOk = SalReportSetNumberVar ( hWndRelatorio, sVariavel, nValor )
Descrição : Atribui um valor a uma variável tipo number, definida no layout de relatório.

Parâmetros :
hWndRelator Window Handle – O handle do relatório.
io
sVariavel String – O nome da variável.
nValor Number – O valor que será atribuído a variável sVariavel.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportSetObjectVar
Sintaxe : bOk = SalReportSetObjectVar ( hWndRelatorio, sVariavel, sValor )
Descrição : Atribui um valor a uma variável tipo object definida no layout de relatório.

Parâmetros :
hWndRelator Window Handle – O handle do relatório.
io
sVariavel String – O nome da variável.
sValor String – O valor que será atribuído a variável sVariavel.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportSetStringVar
Sintaxe : bOk = SalReportSetStringVar ( hWndRelatorio, sVariavel, sValor )
Descrição : Atribui um valor a uma variável tipo string, definida no layout de relatório.

Parâmetros :
hWndRelator Window Handle – O handle do relatório.
io
sVariavel String – O nome da variável.
sValor String – O valor que será atribuído a variável sVariavel.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso, e FALSE se falhar.

Função : SalReportTableCreate
Sintaxe : bOk = SalReportTableCreate ( sQrp, hWndTabela, nErro )
Descrição : Cria um arquivo de formato de relatório, baseado numa table window. Os nomes
das colunas da tabela serão os nomes dos itens de entrada (input itens) do relatório e os títulos
das colunas serão os mesmos das colunas do relatório. Para table window do tipo top level, o
título do relatório será o título do formulário. Para table window do tipo child, o relatório será
gerado sem título.

Parâmetros :
sQrp String – O nome do arquivo de formato de relatório que será gerado.
hWndTabela Window Handle – O handle ou o nome do objeto table window.
nErro Receive Number – Se algum erro ocorrer, este parâmetro será igual a uma
das constantes de erro de relatório, RPT_Err*.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalReportTablePrint
Sintaxe : hWndRelatorio = SalReportTablePrint ( hWndTable , sQrp , nParametros , nErro )
Descrição : Imprime um relatório criado a partir de uma determinada table window.

Parâmetros :
hWndTable Window Handle – O handle ou o nome de uma table window.
sQrp String – O nome do layout do relatório.
nParametros Number – Um vetor que você define, contendo as informações sobre a fila
de impressão. Os valores configurados no vetor são :
RPT_PrintParamCopies ,
RPT_PrintParamFirstPage ,
RPT_PrintParamLastPage e
RPT_PrintParamOptions.
nErro Receive Number – Se algum erro ocorrer, este parâmetro será igual a uma
das constantes de erro de relatório, RPT_Err*.

Valor de Retorno :
hWndRelatorio é o handle do relatório gerado.

Função : SalReportTableView
Sintaxe : hWndRelatorio = SalReportTableView ( hWndTable , hWnd , sQrp , nErro )
Descrição : Mostra, em modo de preview, o relatório gerado a partir de uma table window.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndTable Window Handle – O nome ou handle da table window.


hWnd Window Handle – O nome ou handle da janela que será utilizada para
mostrar o preview do relatório.
sQrp String – O nome do layout do relatório.
nErro Receive Number – Se algum erro ocorrer, este parâmetro será igual a uma
das constantes de erro de relatório, RPT_Err*.

Valor de Retorno :
hWndRelatorio é o handle do relatório gerado.

Função : SalReportView
Sintaxe : hWndRelatorio = SalReportView ( hWndFrm, hWnd, sQrp, sVariaveis, sInputs,
nFlags )
Descrição : Mostra um relatório em modo de preview.

Obs : Esta função estabiliza um diálogo entre o Report Builder e a aplicação. O


processamento de impressão está no tratamento das mensagens SAM_Report*, que são
enviadas pelo Report Builder para a aplicação.

O Centura envia as informações da aplicação para o ReportBuilder, quando a aplicação


retorna TRUE no processamento da mensagem SAM_ReportFetchNext. O Report Builder
continua a enviar mensagens SAM_ReportFetchNext, até que a aplicação retorne FALSE,
quando então o relatório é encerrado.

Parâmetros :
hWndFrm Window Handle – O handle do objeto da aplicação que irá receber as
mensagens SAM_Report* , e que fará todo o processamento do relatório.
hWnd Window Handle - O handle da janela onde o preview dor relatório será
mostrado.
sQrp String – O nome de um arquivo de layout de relatório.
sVariaveis String – A relação das variáveis do Centura, que serão utilizadas para
transportar os dados do banco de dados para o relatório. Os nomes das
variáveis devem estar separados por vírgulas. Os tipos de dados das
variáveis devem ser os mesmos das variáveis de entrada do relatório,
declaradas em sInputs.
sInputs String – A relação de nomes das variáveis de entrada do relatório.
nFlags Receive Number – Antes de chamar esta função, você pode atribuir a este
parâmetro uma das constantes abaixo, para configurar algumas
caracteristicas da barra de ferramentas da janela de preview :
RPT_NoPrint Não mostra o botão para imprimir.
RPT_NoToolbar Não mostra a barra de ferramentas.
Se ocorrer algum erro, este parâmetro é uma das constantes RPT_Err*.

Valor de Retorno :
hWndRelatorio é o handle do relatório gerado.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalScrollGetPos
Sintaxe : bOk = SalScrollGetPos ( hWnd, nPosicao )
Descrição : Obtém o valor atual de uma scroll bar.

Parâmetros :
hWnd Window Handle – O nome ou o handle da scroll bar.
nPosicao Receive Number – O valor da posição da scroll bar.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalScrollGetRange
Sintaxe : bOk = SalScrollGetRange ( hWnd, nMin, nMax, nLinha, nPag )
Descrição : Obtém as configurações da scroll bar, o intervalo, o incremento de linha e o
incremento de página.

Parâmetros :
hWnd Window Handle – O nome ou o handle da scroll bar.
nMin Receive Number – O valor da posição mínima.
nMax Receive Number – O valor da posição máxima.
nLinha Receive Number – O valor do incremento de linha. É o valor de incremento
quando o usuário clica na seta da barra de rolagem.
nPag Receive Number – O valor do incremento de página. É o valor de
incremento quando o usuário clica na barra lateral da barra de rolagem.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalScrollSetPos
Sintaxe : bOk = SalScrollSetPos ( hWnd, nPosicao )
Descrição : Define a posição da barra de scroll. Esta função é equivalente a atribuir um
determinado valor à bassra de rolagem.

Parâmetros :
hWnd Window Handle – O handle ou o nome da scroll bar.
nPosicao Number – A posição da scroll bar. Se este número for um número fora do
intervalo configurado para a scroll bar, o Centura posiciona a barra na
primeira posição, ou na última, se ele ficar abaixo do menor valor ou acima
do maior valor, respectivamente.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalScrollSetRange
Sintaxe : bOk = SalScrollSetRange ( hWnd, nMin, nMax, nLinha, nPag )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Define o intervalo ( posição inicial e final) , o incremento de linha e de página de


uma scroll bar.
Quando uma scroll bar é criada, o Centura associa os seguintes valores :
Posição inicial :0
Posição final : 100
Incremento de linha : 1
Incremento de página : 10
Parâmetros :
hWnd Window Handle – O handle ou o nome da scroll bar.
nMin Number – A posição inicial.
nMax Number – A posição final.
nLinha Number - O valor do incremento de linha.
nPag Number - O valor do incremento de página.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSendClassMessage
Sintaxe : nRetorno = SalSendClassMessage ( nMensagem, wParam, lParam )
Descrição : Ativa o código que foi implementado, ou herdado, no message actions de um
objeto da classe.

Parâmetros :
nMensagem Number – O número da mensagem.
wParam Number – O wParam.
lParam Number – o lParam.

Valor de Retorno :
nRetorno é o valor retornado pela mensagem. Se a mensagem não retornar nenhum valor,
nRetorno é zero.

Função : SalSendClassMessageNamed
Sintaxe : nRetorno = SalSendClassMessageNamed ( NomeClasse, nMensagem, wParam,
lParam )
Descrição : Ativa o código que foi implementado, ou herdado, no message actions de um
objeto da classe.
Utilize esta função quando uma classe for o resultado de uma herança múltipla e você quiser
especificar a classe base que possui o message actions a ser executado.
A classe informada em NomeClasse deve ser uma classe base da classe de onde a chamada
está sendo feita.

Parâmetros :
NomeClasse Template – O nome da classe base.
nMensagem Number – O número da mensagem.
wParam Number – O wParam.
lParam Number – O lParam.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nRetorno é o valor retornado pela mensagem. Se a mensagem não retornar nenhum valor
nRetorno é zero.

Função : SalSendMsg
Sintaxe : nRetorno = SalSendMsg ( hWnd, nMensagem, wParam, lParam )
Descrição : Envia uma determinada mensagem para um objeto. O processamento é desviado
para a mensagem enviada, só retornando quando os procedimentos codificados na mensagem
terminarem.

Parâmetros :
hWnd Window Handle – O handle ou o nome do objeto que receberá a mensagem.
nMensagem Number – O número da mensagem.
wParam Number – O wParam.
lParam Number – o lParam.

Valor de Retorno :
nRetorno é o valor retornado pela mensagem. Se a mensagem não retornar nenhum valor,
nRetorno é zero.

Função : SalSendMsgToChildren
Sintaxe : bOk = SalSendMsgToChildren ( hWndPai , nMensagem, wParam, lParam )
Descrição : Envia uma mensagem à todos os objetos filhos de um form window, dialog box,
table window ou mdi.

Parâmetros :
HWndPai Window Handle – O handle ou nome de um form window, dialog box, table
window ou mdi.
nMensagem Number – O número da mensagem.
wParam Number – O wParam.
lParam Number – o lParam.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSendValidateMsg
Sintaxe : nStatus = SalSendValidateMsg ( )
Descrição : Envia uma mensagem SAM_Validate para o objeto com o foco.
Utilize esta função para forçar a validação de um campo, antes de processar a ação de um
menu. O Centura não envia automaticamente aos objetos a mensagem SAM_Validate quando
um menu é acionado.

Nenhum Parâmetro.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nStatus pode ser um dos valores VALIDATE_Cancel, VALIDATE_Ok ou
VALIDATE_OkClearFlag.

Função : SalSetDefButton
Sintaxe : bOk = SalSetDefButton ( hWndBotao )
Descrição : Determina qual é o botão default de um form window ou dialog box.

Parâmetro :
hWndBotao Window Handle – O handle ou o nome de um pushbutton.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSetFieldEdit
Sintaxe : bOk = SalSetFieldEdit ( hWndCampo , bFlag )
Descrição : Liga ou desliga o flag de edição de um data field, combo box, multiline text,
coluna da table window ou picture.
O flag de edição é ligado sempre que o usuário altera o conteúdo de um data field, combo
box, multiline text, ou coluna da table window.
O flag de edição não é ligado quando o conteúdo do objeto é alterado através de um comando
de banco de dados ou do comando Set.

Parâmetros :
hWndCampo Window Handle – O handle ou nome do objeto.
bFlag Boolean – Se TRUE, liga o flag. Se FALSE, desliga.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSetFocus
Sintaxe : hWndFoco = SalSetFocus ( hWnd )
Descrição : Coloca o foco num determinado objeto.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
hWndFoco é o handle do objeto que possuía o foco antes desta função ser executada.

Função : SalSetMaxDataLength
Sintaxe : bOk = SalSetMaxDataLength ( hWndCampo , nTamanho )
Descrição : Configura a quantidade limite de caracteres que podem ser armazenados num
data field, multiline text ou coluna da table window.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
hWndCampo Window Handle – O handle ou o nome do objeto.
nTamanho Number – O número máximo de caracteres.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSetProfileString
Sintaxe : bOk = SalSetProfileString ( sSeção, sEntrada, sValor, sArquivo)
Descrição : Define o valor de uma entrada de uma seção específica num arquivo de
inicialização ou no registro do windows. Todos os valores armazenados devem estar em
formato string. Estes valores podem ser recuperados, utilizando-se a função SalGetProfileInt.

Parâmetros :
sSeção String – A identificação da seção.
sEntrada String – A entrada onde o valor será armazenado.
sValor String – O valor a ser armazenado.
sArquivo String - O nome do arquivo de inicialização ou o nome da empresa,
dependendo da configuração feita, através da função SalUseRegistry. Caso
você esteja utilizando um arquivo de inicialização e não tenha especificado
o path completo, o Centura pesquisa pelo arquivo no subdiretório do
Windows.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSetWindowLabelText
Sintaxe : bOk = SalSetWindowLabelText ( hWnd, sTexto )
Descrição : Define um background text de um objeto. Para ser associado a um objeto, o
background text precisa vir imediatamente anterior ao objeto no outline.

Parâmetros :
hWnd Window Handle – O handle ou o nome do objeto.
sTexto String – O texto do background text associado ao objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSetWindowLoc
Sintaxe : bOk = SalSetWindowLoc ( hWnd, nX, nY )
Descrição : Move um objeto para uma nova posição.

Parâmetros :
hWnd Window Handle – O handle ou nome do objeto.
nX Number – A posição do eixo X ( em unidades de form ).

Página PAGE 582


Programando com o Centura Team Developer 2000

nY Number – A posição do eixo Y ( em unidades de form ).

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSetWindowSize
Sintaxe : bOk = SalSetWindowSize ( hWnd , nLargura , nAltura )
Descrição : Redimensiona um objeto.

Parâmetros :
hWnd Window Handle – O handle ou o nome de um objeto.
nLargura Number – A nova largura do objeto ( em unidades de form ).
nAltura Number – A nova altura do objeto ( em unidades de form ).

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalSetWindowText
Sintaxe : bOk = SalSetWindowText ( hWnd, sTexto )
Descrição : Especifica o texto de um objeto.
O texto de um objeto é o título de um form window, dialog box, table window, radio button,
check box ou pushbutton.
No caso de data field e coluna da table window, o texto é o valor do objeto em formato string.
Considerando-se o tipo de dado do objeto.
Para um combo box, o texto é o valor da sua parte editável. Se o combo box estiver
configurado para não permitir edições, o Centura procura na lista de valores um valor que
corresponda ao texto, selecionando-o, caso encontre. Este mesmo comportamento se aplica
aos objetos do tipo list box.

A função SalSetWindowText desliga o flag de edição do campo.

Parâmetros :
hWnd Window Handle – O handle ou nome do objeto.
sTexto String – O texto do objeto.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalShowWindow
Sintaxe : bOk = SalShowWindow ( hWnd )
Descrição : Torna um objeto visível.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
bOk é TRUE se o estado do objeto, anterior a chamada da função, era visível, e bOk é FALSE
se o estado era invisível.

Função : SalShowWindowAndLabel
Sintaxe : bOk = SalShowWindowAndLabel ( hWnd )
Descrição : Torna um objeto e o seu background text visíveis.

Parâmetro :
hWnd Window Handle – O handle ou o nome do objeto.

Valor de Retorno :
bOk é TRUE se o estado do objeto, anterior a chamada da função, era visível, e bOk é FALSE
se o estado era invisível.

Função : SalStatusGetText
Sintaxe : nTamanho = SalStatusGetText ( hWnd, sText, nTamanho )
Descrição : Obtém o texto mostrado na barra de status de um form window ou mdi.

Parâmetros :
hWnd Window Handle – O handle ou nome do objeto.
sTexto Receive String – O texto mostrado na barra de status.
nTamanho Number – O tamanho máximo do texto do objeto.

Valor de Retorno :
nTamanho é o tamanho do texto recuperado. Se nTamanho for zero, significa que o objeto
não possui texto algum.

Função : SalStatusSetText
Sintaxe : bOk = SalStatusSetText ( hWnd, sTexto )
Descrição : Apresenta um determinado texto na barra de status de um form window ou de um
mdi.

Parâmetros :
hWnd Window Handle – O handle ou o nome de um form window ou mdi.
sTexto String – O texto que será mostrado na barra de status.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalStatusSetVisible
Sintaxe : bOk = SalStatusSetVisible ( hWnd, bMostra )
Descrição : Mostra e esconde a barra de status de um form window ou de um mdi.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWnd Window Handle – O handle ou o nome de um form window ou mdi.


bMostra Boolean – Se TRUE, a barra de status é apresentada, se FALSE, é
escondida.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalStrCompress
Sintaxe : bOk = SalStrCompress ( sString )
Descrição : Comprime uma determinada string. Use esta função para comprimir strings para
armazenamento em disco ou em bancos de dados. Use, também, para armazenamento de
imagens.

Parâmetro :
sString Receive String – A string a ser comprimida.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalStrFirstC
Sintaxe : bOk = SalStrFirstC ( sString, nChar )
Descrição : Extrai o primeiro caractere de uma string e retorna o seu valor decimal.

Parâmetros :
sString Receive String – A string que terá o seu primeiro caractere retirado.
nChar Receive Number – O valor decimal do primeiro caractere em sString.

Valor de Retorno :
bOk é sempre TRUE, a menos que sString seja uma string inválida ou nula.

Função : SalStrGetBufferLength
Sintaxe : nTamanho = SalStrGetBufferLength ( sString )
Descrição : Retorna o tamanho do buffer de uma string.
O Centura armazena as variáveis string em buffers o tamanho do buffer inclui o caractere nulo
de terminação.

Parâmetro :
sString String – A string cujo tamanho você deseja obter.

Valor de Retorno :
nTamanho é o tamanho do buffer da variável.

Função : SalStrIsValidDateTime
Sintaxe : bOk = SalStrIsValidDateTime ( sDataHora )
Descrição : Verifica se a string representa um valor date/time válido.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
sDataHora String – Uma string contendo um valor data/hora.

Valor de Retorno :
bOk é TRUE se sDataHora contém um valor date/time válido. bOk é FALSE se não for um
valor válido do tipo date/time.

Função : SalStrIsValidNumber
Sintaxe : bOk = SalStrIsValidNumber ( sNumero )
Descrição : Verifica se o conteúdo de uma variável string representa um valor numérico
válido.

Parâmetro :
sNumero String – A string que contém um valor numérico.

Valor de Retorno :
bOk é TRUE se sNumero for um número válido e FALSE se não for um valor válido.

Função : SalStrLeft
Sintaxe : nTamanho = SalStrLeft ( sOrigem, nExtrair, sDestino )
Descrição : Extrai o número de caracteres especificado em nExtrair da string em sOrigem,
armazenando o resultado em sDestino. É tomado como base o primeiro caractere mais à
esquerda.

Parâmetros :
sOrigem String – A string origem.
nExtrair Number – O número de caracteres a serem extraídos de sOrigem.
sDestino Receive String – A string retirada de sOrigem.

Valor de Retorno :
nTamanho é o tamanho da nova string em sDestino.

Função : SalStrLeftX
Sintaxe : sDestino = SalStrLeftX ( sOrigem, nExtrair )
Descrição : Extrai o número de caracteres especificado em nExtrair da string em sOrigem. É
tomado como base o primeiro caractere mais à esquerda.

Parâmetros :
sOrigem String – A string origem.
nExtrair Number – O número de caracteres a ser extraído de sOrigem.

Valor de Retorno :
sDestino é a nova string.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalStrLength
Sintaxe : nTamanho = SalStrLength ( sString )
Descrição : Retorna o tamanho de uma string.
O Centura, ao armazenar uma string, coloca um caractere nulo indicando o final da string.
Este caractere não está incluído no seu tamanho.

Parâmetro :
sString String – A string cujo tamanho você quer obter.

Valor de Retorno :
nTamanho é o tamanho da string.

Função : SalStrLop
Sintaxe : nCaractere = SalStrLop ( sString )
Descrição : Retorna o valor numérico decimal, padrão ASCII, do primeiro caractere de uma
string, removendo-o.

Parâmetro :
sString Receive String – A variável string.

Valor de Retorno :
nCaractere é o valor ASCII do primeiro caractere da string. Quando a string é nula,
nCaractere é igual a zero.

Função : SalStrLower
Sintaxe : nTamanho = SalStrLower ( sOrigem, sDestino )
Descrição : Converte uma string para letras minúsculas.

Parâmetros :
sOrigem String – A string a ser convertida.
sDestino String – A string já convertida.

Valor de Retorno :
nTamanho é o tamanho da variável sDestino.

Função : SalStrLowerX
Sintaxe : sDestino = SalStrLowerX ( sOrigem )
Descrição : Converte uma string para letras minúsculas.

Parâmetro :
sOrigem String – A string a ser convertida.

Valor de Retorno :
sDestino é a string sOrigem convertida.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalStrMid
Sintaxe : nTamanho = SalStrMid ( sOrigem , nPosInicial, nQtdCarac, sDestino )
Descrição : Retorna uma parte da string original, iniciando na posição nPosInicial, contendo o
número de caracteres especificado em nQtdCarac.

Parâmetros :
sOrigem String – É a string original.
nPosInicial Number – É a posição inicial da string que você deseja obter.
nQtdCarac Number – É a quantidade de caracteres que você deseja obter, a partir da
posição inicial. Observe que a posição mais à esquerda da string é a posição
zero.
sDestino Receive String – É a porção que foi retirada da string original.

Valor de Retorno :
nTamanho é o tamanho da string obtida.

Função : SalStrMidX
Sintaxe : sDestino = SalStrMidX ( sOrigem , nPosInicial, nQtdCarac )
Descrição : Retorna uma parte da string original, iniciando na posição nPosInicial, contendo
o número de caracteres especificado em nQtdCarac.

Parâmetros :
sOrigem String – É a string original.
nPosInicial Number – É a posição inicial da string que você deseja obter.
nQtdCarac Number – É a quantidade de caracteres que você deseja obter, a partir da
posição inicial. Observe que a posição mais à esquerda da string é a posição
zero.

Valor de Retorno :
sDestino é a porção que foi retirada da string original.

Função : SalStrProper
Sintaxe : nTamanho = SalStrProper ( sOrigem, sDestino )
Descrição : Converte uma string, de modo que todas as palavras iniciem por letras
maiúsculas.

Parâmetros :
sOrigem String – A string a ser convertida.
sDestino String – A string já convertida.

Valor de Retorno :
nTamanho é o tamanho da variável sDestino.

Função : SalStrProperX
Sintaxe : sDestino = SalStrProperX ( sOrigem )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Converte uma string, de modo que todas as palavras iniciem por letras
maiúsculas.

Parâmetro :
sOrigem String – A string a ser convertida.

Valor de Retorno :
sDestino é a string já convertida.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalStrRepeat
Sintaxe : nTamanho = SalStrRepeat ( sOrigem, nQtd, sDestino )
Descrição : Concatena uma string com ela mesma, um determinado número de vezes.

Parâmetros :
sOrigem String – A string origem.
nQtd Number – é o número de vezes que a string será concatenada.
sDestino Receive String – é a nova string gerada.

Valor de Retorno :
nTamanho é o tamanho da nova string obtida.

Função : SalStrRepeatX
Sintaxe : sDestino = SalStrRepeatX ( sOrigem, nQtd )
Descrição : Concatena uma string com ela mesma, um determinado número de vezes.

Parâmetros :
sOrigem String – A string origem.
nQtd Number – é o número de vezes que a string será concatenada.

Valor de Retorno :
sDestino é a nova string gerada.

Função : SalStrReplace
Sintaxe : nTamanho = SalStrReplace ( sOrigem, nPosInicial, nTamanho, sTroca, sDestino )
Descrição : Substitui caracteres de uma string por caracteres de outra string.

Parâmetros :
sOrigem String – A string origem, que contém os caracteres que serão substituídos.
nPosInicial Number – A posição inicial, onde a busca terá início.
nTamanho Number – O número de caracteres a serem substituídos.
sTroca String – A string nova, que será inserida a partir da posição em nPosInicial.
sDestino Receive String – A nova string.

Valor de Retorno :
nTamanho é o tamanho da nova string.

Função : SalStrReplaceX
Sintaxe : sDestino = SalStrReplaceX ( sOrigem, nPosInicial, nTamanho, sTroca )
Descrição : Substitui caracteres de uma string por caracteres de outra string.

Parâmetros :
sOrigem String – A string origem, que contém os caracteres que serão substituídos.
nPosInicial Number – A posição inicial, onde a busca terá início.
nTamanho Number – O número de caracteres a serem substituídos.

Página PAGE 582


Programando com o Centura Team Developer 2000

sTroca String – A string nova, que será inserida a partir da posição em nPosInicial.

Valor de Retorno :
sDestino é a nova string.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalStrRight
Sintaxe : nTamanho = SalStrRight ( sOrigem , nNumCarac, sDestino )
Descrição : Obtém uma string de um determinado tamanho, começando com o último
caractere de sOrigem.

Parâmetros :
sOrigem String – A string origem.
nNumCarac Number – O número de caracteres a ser extraído da variável sOrigem.
sDestino Receive String – A nova string.

Valor de Retorno :
nTamanho é o tamanho da nova string.

Função : SalStrRightX
Sintaxe : sDestino = SalStrRightX ( sOrigem , nNumCarac )
Descrição : Obtém uma string de um determinado tamanho, começando com o último
caractere de sOrigem.

Parâmetros :
sOrigem String – A string origem.
nNumCarac Number – O número de caracteres a ser extraído da variável sOrigem.

Valor de Retorno :
sDestino é a nova string.

Função : SalStrScan
Sintaxe : nPosInicial = SalStrScan ( sOrigem, sBuscar )
Descrição : Pesquisa por sBuscar em sOrigem e retorna a primeira posição onde sBuscar foi
encontrada.

Parâmetros :
sOrigem String – A string origem, cujo caractere inicial é zero..
sBuscar String – É a string que você deseja encontrar em sOrigem.

Valor de Retorno :
nPosInicial é a posicão onde a string sBuscar foi encontrada em sOrigem. Se o Centura não
encontrá-la, nPosInicial será –1.

Função : SalStrSetBufferLength
Sintaxe : bOk = SalStrSetBufferLength ( sString, nTamanho )
Descrição : Define o tamanho do buffer de uma variável string. Este procedimento só se faz
necessário quando precisamos utilizar uma variável tipo Receive String junto com uma
função externa.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

sString String – A variável string cujo tamanho do buffer você deseja definir.
nTamanho Number – O tamanho da variável sString.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalStrToDate
Sintaxe : dtData = SalStrToDate ( sValorData )
Descrição : Converte uma string em um valor tipo Date/Time. Esta função utiliza o formato
de data do sistema operacional. Para utilizar um formato independente, utilize a função
SalDateConstruct.

Parâmetro :
sValorData String – O valor a ser convertido para o tipo de dado Date/Time.

Valor de Retorno :
dtData é a data convertida.

Função : SalStrTokenize
Sintaxe : nQtd = SalStrTokenize ( sOrigem , sInicial , sFinal, sVetor )
Descrição : Divide uma string em partes, baseado nos caracteres delimitadores inicial e final.
O Centura usa os delimitadores para reconhecer o início e fim de cada parte da string.

Parâmetros :
sOrigem String – A string a ser dividida.
sInicial String – A string que contém o delimitador inicial.
sFinal String – A string que contém o delimitador final.
sVetor String Array – Um vetor que será criado com as partes divididas da string
sOrigem.

Valor de Retorno :
nQtd é a quantidade de partes em que a string original foi dividida.

Função : SalStrToNumber
Sintaxe : nNumero = SalStrToNumber ( sString )
Descrição : Converte uma string em um número.

Parâmetro :
sString String – A string a ser convertida.

Valor de Retorno :
nNumero é o número resultado da conversão.

Função : SalStrTrim
Sintaxe : nNovoTamanho = SalStrTrim ( sOrigem, sDestino )
Descrição : Elimina os espaços encontrados no início e no final da variável string. Os espaços
duplos e os tabs encontrados no meio da string são convertidos em um espaço simples.

Parâmetros :
sOrigem String – A string original.
sDestino Receive String – A nova string.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nNovoTamanho é o tamanho da string sDestino.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalStrTrimX
Sintaxe : sDestino = SalStrTrimX ( sOrigem )
Descrição : Elimina os espaços encontrados no início e no final da variável string. Os espaços
duplos e os tabs encontrados no meio da string são convertidos em um espaço simples.

Parâmetro :
sOrigem String – A string original.

Valor de Retorno :
sDestino é a nova string.

Função : SalStrUncompress
Sintaxe : bOk = SalStrUncompress ( sString )
Descrição : Descomprime uma determinada string. Use esta função para descomprimir strings
que foram comprimidas, utilizando-se a função SalStrCompress.

Parâmetro :
sString Receive String – A string a ser descomprimida.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalStrUpper
Sintaxe : nTamanho = SalStrUpper( sOrigem, sDestino )
Descrição : Converte todas as letras de uma variável em suas respectivas letras maiúsculas.

Parâmetros :
sOrigem String – A string a ser convertida.
sDestino Receive String – A string já convertida em letras maiúsculas.

Valor de Retorno :
nTamanho é o tamanho da string sDestino.

Função : SalStrUpperX
Sintaxe : sDestino = SalStrUpperX( sOrigem )
Descrição : Converte todas as letras de uma variável em suas respectivas letras maiúsculas.

Parâmetro :
sOrigem String – A string a ser convertida.

Valor de Retorno :
sDestino é a string convertida.

Função : SalTBarSetVisible
Sintaxe : bOk = SalTBarSetVisible ( hWnd, bVisivel )

Página PAGE 582


Programando com o Centura Team Developer 2000

Descrição : Mostra ou esconde a barra de ferramentas de um top level ou de um mdi.

Parâmetros :
hWnd Window Handle – O handle ou o nome do top level ou do mdi.
bVisivel Boolean – Use TRUE para mostrar a barra de ferramentas e FALSE para
esconder.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblAnyRows
Sintaxe : bOk = SalTblAnyRows ( hWndTabela, nFlagsOn, nFlagsOff )
Descrição : Verifica se alguma linha de uma table window possui os flags indicados.
Se você especificar zero nos parâmetros nFlagsOn e nFlagsOff, a função SalTblAnyRows
retornará TRUE se a table window tiver alguma linha, independente do seu flag.

Parâmetros :
hWndTabela Window Handle – O handle da tabela.
nFlagsOn Number – Os flags que a linha deverá ter. Você pode combinar mais de um
flag usando o operador OR (|) para concatená-los. Os flags que podem ser
utilizados são representados pelas constantes ROW_*
nFlagsOff Number – Os flags que a linha não deverá ter. Você pode combinar mais de
um flag usando o operador OR (|) para concatená-los. Os flags que podem
ser utilizados são representados pelas constantes ROW_*

Valor de Retorno :
bOk é TRUE, se a table window tiver alguma linha com os flags indicados em nFlagsOn e se
não tiver nenhuma linha com os flags em nFlagsOff.

Função : SalTblClearSelection
Sintaxe : bOk = SalTblClearSelection ( hWndTabela )
Descrição : Desmarca todas as linhas de uma table window.

Parâmetro :
hWndTabela Window Handle – O handle ou o nome da table window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblColumnAverage
Sintaxe : nMedia = SalTblColumnAverage ( hWndTabela , nNumColuna, nFlagsOn,
nFlagsOff )
Descrição : Calcula a média dos valores de todas as colunas ou apenas da coluna
especificada.
O Centura utiliza os flags de linha para identificar as linhas que você deseja calcular a média.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nNumColuna Number – O identificador da coluna.
nFlagsOn Number – Os flags que a linha deverá ter. Você pode combinar mais de um
flag usando o operador OR (|) para concatená-los. Os flags que podem ser
utilizados são representados pelas constantes ROW_*
nFlagsOff Number – Os flags que a linha não deverá ter. Você pode combinar mais de
um flag usando o operador OR (|) para concatená-los. Os flags que podem
ser utilizados são representados pelas constantes ROW_*

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nMedia é a média de todos os valores das colunas de uma table window ou apenas da coluna
especificada. Se algum erro ocorrer, nMedia será igual a zero.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblColumnSum
Sintaxe : nSoma = SalTblColumnSum ( hWndTabela , nNumColuna, nFlagsOn, nFlagsOff )
Descrição : Calcula a soma dos valores de todas as colunas ou apenas da coluna especificada.
O Centura utiliza os flags de linha para identificar as linhas que você deseja calcular a soma.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nNumColuna Number – O identificador da coluna.
nFlagsOn Number – Os flags que a linha deverá ter. Você pode combinar mais de um
flag usando o operador OR (|) para concatená-los. Os flags que podem ser
utilizados são representados pelas constantes ROW_*
nFlagsOff Number – Os flags que a linha não deverá ter. Você pode combinar mais de
um flag usando o operador OR (|) para concatená-los. Os flags que podem
ser utilizados são representados pelas constantes ROW_*

Valor de Retorno :
nSoma é a soma de todos os valores das colunas de uma table window ou apenas da coluna
especificada. Se algum erro ocorrer, nSoma será igual a zero.

Função : SalTblCopyRows
Sintaxe : bOk = SalTblCopyRows ( hWndTabela , nFlagsOn, nFlagsOff )
Descrição : Copia o conteúdo das linhas de uma table window para a área de transferência,
em formato texto. Na área de transferência as colunas são separadas pelo caractere TAB, e as
linhas pelo caractere de fim de linha.

Especifique zero em nFlagsOn e zero em nFlagsOff para copiar a tabela inteira.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nFlagsOn Number – Os flags que a linha deverá ter. Você pode combinar mais de um
flag usando o operador OR (|) para concatená-los. Os flags que podem ser
utilizados são representados pelas constantes ROW_*
nFlagsOff Number – Os flags que a linha não deverá ter. Você pode combinar mais de
um flag usando o operador OR (|) para concatená-los. Os flags que podem
ser utilizados são representados pelas constantes ROW_*

Valor de Retorno :
bOk é TRUE se alguma linha da table window foi copiada para a área de transferência e
FALSE se nenhuma linha foi copiada, ou se alguma linha não pôde ser copiada para a área de
transferência.

Função : SalTblCreateColumn
Sintaxe : nColuna = SalTblCreateColumn ( hWndTabela, nPosicao, nLargura, nTamMax,
sTitulo )
Descrição : Cria uma coluna numa table window em tempo de execução. A coluna criada é do
tipo string.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nPosicao Number – A posição visual da coluna na table window. Especifique 1 para
que a coluna seja criada na posição mais à esquerda da tabela. Especifique 2
para que a coluna seja a segunda, e assim por diante.
nLargura Number – É a largura da coluna em polegadas.
nTamMax Number – É o maior número de caracteres que a coluna pode armazenar.
sTitulo String – O título da coluna.

Valor de Retorno :
nColuna é o identificador da coluna. Se algum erro ocorrer, nColuna é igual a zero.

Função : SalTblDefineRowHeader
Sintaxe : bOk = SalTblDefineRowHeader ( hWndTabela, sTitulo, nLargura, nFlag,
hWndColuna )
Descrição : Define a aparência e o comportamento do cabeçalho da linha ( row header ). O
cabeçalho da linha é a área não editável situada à esquerda da table window, que é usada
normalmente para mostrar informações sobre o estado da linha. Pode ser também usado para
mostrar o número da linha.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
sTitulo String – O título da coluna do cabeçalho da linha (row header).
nLargura Number – A largura do cabeçalho da linha (row header).
nFlag Number – Os atributos do cabeçalho da linha. Você pode combinar estes
flags utilizando o operador OR ( | ). Entre os possíveis valores para o flag
estão : TBL_RowHdr_MarkEdits, TBL_RowHdr_ShareColor,
TBL_RowHdr_Sizable ou TBL_RowHdr_Visible.
hWndColuna Window Handle – Opcionalmente, o cabeçalho da linha pode mostrar
informações de alguma coluna da table window, então, você pode informar
neste parâmetro o handle da coluna. Caso informe hWndNULL, a coluna do
cabeçalho da linha ficará vazia.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblDefineSplitWindow
Sintaxe : bOk = SalTblDefineSplitWindow ( hWndTabela , nLinhas, bDimensionavel )
Descrição : Divide uma table window horizontalmente em duas partes.
Você pode inserir linhas numa metade menor da table window. Isto é conveniente quando não
se tem conhecimento do número total de linhas de uma table window. Esta área da table
window também pode ser usada para mostrar um resumo de informações, totais etc.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.

Página PAGE 582


Programando com o Centura Team Developer 2000

nLinhas Number – O número de linhas que a nova área dividida da table window
terá.
bDimensiona Boolean – Se você informar TRUE, o usuário poderá redimensionar o
vel tamanho desta nova área criada. Se informar FALSE, o usuário não podera
alterar o tamanho.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblDeleteRow
Sintaxe : bOk = SalTblDeleteRow ( hWndTabela , nLinha , nAjustar )
Descrição : Apaga uma linha da table window, mas não apaga a linha correspondente no
banco de dados.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da tabela.
nLinha Number – O número da linha que você deseja apagar.
nAjustar Boolean – Se você especificar TBL_Adjust, o Centura apaga a linha da
table window e do result set do SQLBase. Se você especificar
TBL_NoAdjust, a sincronização entre a table window e o result set não é
feita.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblDeleteSelected
Sintaxe : bOk = SalTblDeleteSelected ( hWndTabela , hSql )
Descrição : Aplica um comando SQL DELETE para todas as linhas da table window
marcadas com o flag ROW_Selected. Antes de ser utilizado nesta função, o comando
DELETE precisa ser preparado.
Assim que a linha for apagada do banco de dados, o Centura apaga também da table window.
Como esta função não executa um comando COMMIT, você deverá executá-lo para garantir
que a operação de DELETE não será perdida, no caso de um ROLLBACK.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
hSql Sql Handle – O handle com o comando DELETE previamente preparado.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblDestroyColumns
Sintaxe : bOk = SalTblDestroyColumns ( hWndTabela )
Descrição : Esta função destrói todas as colunas que foram criadas automaticamente, através
da função SalTblCreateColumn, e as colunas criadas em tempo de execução pela função
SalTblPopulate. Funciona apenas nas table window que possuem apenas colunas criadas
dinamicamente.

Parâmetro :
hWndTabela Window Handle – O handle (ou o nome) da table window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se a tabela possuir colunas
criadas em tempo de design, ou se o handle informado for inválido.

Função : SalTblDoDeletes
Sintaxe : bOk = SalTblDoDeletes ( hWndTabela , hSql , nFlagsOn )
Descrição : Aplica um comando SQL DELETE para todas as linhas da table window
marcadas com o flag especificado em nFlagsOn. Antes de ser utilizado nesta função, o
comando DELETE precisa ser preparado.
Assim que a linha for apagada do banco de dados, o Centura apaga também da table window.
Como esta função não executa um comando COMMIT, você deve executá-lo para garantir
que a operação de DELETE não será perdida no caso de um ROLLBACK.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
hSql Sql Handle – O handle sql com o comando DELETE previamente
preparado.
nFlagsOn Number – O Centura usa este flag para determinar quais linhas da table
window serão apagadas.
Você pode especificar um dos seguintes flags : ROW_MarkDeleted e

Página PAGE 582


Programando com o Centura Team Developer 2000

ROW_Selected.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se o handle da tabela, ou o
handle sql, forem inválidos.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblDoInserts
Sintaxe : bOk = SalTblDoInserts ( hWndTabela , hSql , bLimparFlags )
Descrição : Executa um comando SQL INSERT para todas as linhas da table window que
tiverem o flag ROW_New ligados. O comando INSERT precisa ser preparado antes de
utilizar esta função.
Como esta função não executa o comando COMMIT, você precisa executá-lo para garantir
que a operação de INSERT não será perdida no caso de um ROLLBACK.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
hSql Sql Handle – O handle com o comando INSERT preparado.
bLimparFlags Boolean – Se você especificar TRUE, o Centura limpa o flag ROW_New de
cada linha inserida no banco de dados. Se você especificar FALSE o
Centura não limpa o flag.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso, e FALSE se o handle da tabela ou o
handle sql forem inválidos.

Função : SalTblDoUpdates
Sintaxe : bOk = SalTblDoUpdates ( hWndTabela , hSql , bLimparFlags )
Descrição : Executa um comando SQL UPDATE para todas as linhas da table window que
tiverem o flag ROW_Edited ligados. O comando UPDATE deverá ser preparado antes de
utilizar esta função.
Como esta função não executa um comando COMMIT, você precisa executá-lo para garantir
que a operação de UPDATE não será perdida, no caso de um ROLLBACK.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
hSql Sql Handle – O handle com o comando UPDATE preparado.
bLimparFlags Boolean – Se você especificar TRUE, o Centura limpa o flag ROW_Edited
de cada linha inserida no banco de dados. Se você especificar FALSE, o
Centura não limpa o flag.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso, e FALSE se falhar.

Função : SalTblFetchRow
Sintaxe : nResultado = SalTblFetchRow ( hWndTabela , nLinha )
Descrição : Se a linha especificada em nLinha não estiver no cache da table window, o
Centura envia uma mensagem SAM_FetchRow para a table window, permitindo que a linha
seja recuperada do banco de dados ou de alguma outra fonte de dados.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
nLinha Number – O número da linha.

Página PAGE 582


Programando com o Centura Team Developer 2000

Valor de Retorno :
nResultado é um dos seguintes valores:
 TBL_RowDeleted – Se a linha especificada não pôde ser recuperada porque foi apagada
por outra transação;
 TBL_RowFetched – Se a linha foi recuperada com sucesso ;
 TBL_NoMoreRows - Se a linha especificada não pôde ser recuperada porque não foi
encontrada, e quando não existem mais linhas além da linha informada.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblFindNextRow
Sintaxe : bOk = SalTblFindNextRow ( hWndTabela , nLinha , nFlagsOn , nFlagsOff )
Descrição : A partir da linha especificada, pesquisa por uma linha que atenda as
configurações dos flags informados. A pesquisa pára na primeira linha encontrada que
contenha um dos flags especificados em nFlagsOn, e não contenha nenhum dos flags em
nFlagsOff.
Utilize esta função num loop ( comandos While e Loop... ) para encontrar todas as linhas que
satisfaçam uma condição.
Você não precisa incrementar o número da linha, o Centura continua a pesquisa iniciando na
próxima linha. Para iniciar a pesquisa na primeira linha, especifique TBL_MinRow em
nLinha.

Atenção : Você não pode utilizar TBL_MinRow, se antes associar este valor a uma variável.
Isto porque TBL_MinRow é uma constante do Centura, e o parâmetro nLinha é um parâmetro
tipo receive, assim, seu valor poderá ser alterado na função.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da tabela.
nLinha Receive Number – A linha onde o Centura irá iniciar a pesquisa. A busca
inicia no valor informado em nLinha + 1. Quando o Centura encontra uma
linha, ele retorna o número desta neste parâmetro.
nFlagsOn Number – O flag que a linha deverá ter.
nFlagsOff Number – O flag que a linha não pode ter.
Você pode especificar os flags ROW_* em ambos os parâmetros (
nFlagsOn e nFlagsOff ). Se quiser, pode especificar mais de um flag,
separando-os com o operador OR ( | ).

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se nenhuma linha for
encontrada.

Função : SalTblFindPrevRow
Sintaxe : bOk = SalTblFindPrevRow ( hWndTabela , nLinha , nFlagsOn , nFlagsOff )
Descrição : A partir da linha especificada, pesquisa em ordem decrescente, por uma linha que
atenda as configurações dos flags informados. A pesquisa pára na primeira linha encontrada
que contenha um dos flags especificados em nFlagsOn, e não contenha nenhum dos flags em
nFlagsOff.
Utilize esta função num loop (comandos While , Loop... ) para encontrar todas as linhas que
satisfaçam a condição especificada.
Você não precisa decrementar o número da linha, o Centura continua a pesquisa iniciando na
linha anterior. Para iniciar a pesquisa na última linha, especifique TBL_MaxRow em nLinha.

Atenção : Você não pode utilizar TBL_MaxRow se antes associar este valor a uma variável.
Isto porque TBL_MaxRow é uma constante do Centura, e o parâmetro nLinha é um
parâmetro tipo receive, assim, seu valor poderá ser alterado na função.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndTabela Window Handle – O handle (ou o nome) da tabela.


nLinha Receive Number – A linha onde o Centura irá iniciar a pesquisa. A busca
inicia no valor informado em nLinha - 1. Quando o Centura encontra uma
linha, ele retorna o número desta neste parâmetro.
nFlagsOn Number – O flag que a linha deverá ter.
nFlagsOff Number – O flag que a linha não pode ter.
Você pode especificar os flags ROW_* em ambos os parâmetros (
nFlagsOn e nFlagsOff ). Se quiser, pode especificar mais de um flag,
separando-os com o operador OR ( | ).

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se nenhuma linha for
encontrada.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblGetColumnText
Sintaxe : bOk = SalTblGetColumnText ( hWndTabela , nColuna , sTexto )
Descrição : Recupera os dados contidos numa coluna da table window. Será recuperado o
valor da linha que estiver com o contexto.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
nColuna Number – O identificador da coluna. É a ordem da coluna no outline.
sTexto Receive String – Os dados da coluna.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblGetColumnTitle
Sintaxe : nTamanho = SalTblGetColumnTitle ( hWndColuna , sTexto , nTamanho )
Descrição : Obtém o título de uma table window.

Parâmetros :
hWndColuna Window Handle – O handle (ou o nome) de uma coluna da table window.
sTexto Receive String – O título da coluna.
nTamanho Number – O tamanho máximo do título a ser recuperado.

Valor de Retorno :
nTamanho é o tamanho do título recuperado em sTexto.

Função : SalTblGetColumnWindow
Sintaxe : hWndColuna = SalTblGetColumnWindow ( hWndTabela , nColuna , nFlags )
Descrição : Obtém o handle de uma coluna da table window.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
nColuna Number - O identificador da coluna. É a ordem da coluna no outline.
nFlags Number – Uma constante que mostra quando o valor em nColuna identifica
a posição da coluna no outline, ou a posição visual da coluna. Os possíveis
valores são COL_GetID e COL_GetPos.

Valor de Retorno :
hWndColuna é o handle da coluna recuperada. hWndColuna é hWndNULL, se o Centura não
conseguir encontrar a coluna.

Função : SalTblInsertRow
Sintaxe : nNovaLinha = SalTblInsertRow ( hWndTabela , nLinha )
Descrição : Inclui uma linha em branco numa table window.

Parâmetros :

Página PAGE 582


Programando com o Centura Team Developer 2000

hWndTabela Window Handle – O handle (ou o nome) da table window.


nLinha Number – O número da nova linha.
Se este valor for um valor válido de uma linha existente na table window, o
Centura insere a linha na localização exata. Se você especificar
TBL_MaxRow, o Centura inclui a linha no final da table window.
Se a table window estiver dividida, ou seja, se a split window estiver ativa, e
você especificar TBL_MinSplitRow, o Centura adiciona a linha na primeira
linha da split window.

Valor de Retorno :
nNovaLinha é o número da nova linha, se a função for executada com sucesso. Será igual a
TBL_Error, se ocorrer algum erro.

Função : SalTblKillEdit
Sintaxe : bOk = SalTblKillEdit ( hWndTabela )
Descrição : Tira a linha do modo de edição, selecionando-a. Isto faz com que a linha receba
as mensagens SAM_Validate e SAM_KillFocus.

Parâmetro :
hWndTabela Window Handle – O handle (ou o nome) da table window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblKillFocus
Sintaxe : bOk = SalTblKillFocus ( hWndTabela )
Descrição : Desliga o focus frame de uma table window, ou seja, tira o foco da table window.

Parâmetro :
hWndTabela Window Handle – O handle (ou o nome) de uma table window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblObjectsFromPoint
Sintaxe : bOk = SalTblObjectsFromPoint ( hWndTabela, nX, nY, nLinha, hWndColuna,
nFlags )
Descrição : Obtém a parte da table window localizada numa determinada coordenada.

Parâmetros :
hWndTabela Window Handle – O handle da table window.
nX Number – As coordenadas referentes ao lado esquerdo superior da table
window.
nY Number – As coordenadas referentes ao lado esquerdo superior da table
window.

Página PAGE 582


Programando com o Centura Team Developer 2000

nLinha Receive Number – Se nY estiver por cima de uma linha da tabela, nLinha é
o número dessa linha.
hWndColuna Receive Window Handle - Se nY estiver por cima de uma coluna da tabela,
hWndColuna é o handle dessa coluna.
hFlags Receive Number – A parte da table window. Mostra a posição em que a
coordenada X está localizada.
Pode ser uma das seguintes constantes :
TBL_XOverLockedColumns
TBL_XOverLockedColumnsBorder
TBL_XOverRowHeader
TBL_XOverUnlockedColumns

No caso da coordenada Y, pode ser uma das seguintes constantes :


TBL_YOverColumnHeader
TBL_YOverNormalRows
TBL_YOverSplitBar
TBL_YOverSplitRows

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso, e FALSE se falhar.

Função : SalTblPasteRows
Sintaxe : bOk = SalTblPasteRows ( hWndTabela )
Descrição : Cola o conteúdo da área de transferência na table window especificada.
O Centura assume que as informações contidas na área de transferência estão separadas por
tabulações, e em formato texto. O Centura inclui as novas linhas na table window, sem
sobrepor as linhas já existentes, e converte aos tipos de dados correspondentes às colunas da
table window.

Parâmetro :
hWndTabela Window Handle – O handle (ou nome) da table window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblPopulate
Sintaxe : bOk = SalTblPopulate ( hWndTabela , hSql, sSelect, nMetodo )
Descrição : Compila e executa um comando SELECT, recupera as linhas do result set e
carrega-as na table window. Além de gerenciar a navegação na tabela.
Esta função também trabalha com table windows que não possuem colunas. O Centura cria as
colunas em tempo de execução, baseado na lista de colunas do comando SELECT, utilizando
os tipos de dados e os nomes das colunas, como títulos das colunas. Se você chamar a função
SalTblPopulate novamente, durante a mesma seção, o Centura destruirá as colunas criadas
automaticamente pelo último comando SELECT executado e criará novas colunas.

Página PAGE 582


Programando com o Centura Team Developer 2000

A função SalTblPopulate também trabalha com comandos SELECT que não possuem a
cláusula INTO. A table window precisa ter o mesmo número de colunas do comando
SELECT, e seus tipos de dados precisam ser correspondentes.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
hSql Sql Handle – O handle sql que será utilizado para executar o comando
SELECT informado em sSelect.
sSelect String – O comando SELECT. Se você passar como parâmetro uma string
nula (STRING_Null) o Centura utiliza o último comando preparado em
hSql. Com isto, evita-se a necessidade de reprocessar o mesmo comando
SELECT a cada chamada desta função.
nMetodo Number – O modo como a table window será populada. Especifique um dos
valores:
TBL_FillAll – Carrega todos os dados retornados no comando SELECT, de
uma só vez. Só libera o acesso ao usuário quando todas as linhas do result
set forem carregadas na table window.
TBL_FillAllBackground – Carrega os dados necessários para ocuparem a
parte visível da table window. Passa então o controle para a aplicação,
enquanto continua a trazer as linhas restantes em segundo plano (
background ).
TBL_FillNormal - Carrega os dados necessários para ocuparem a parte
visível da table window. O restante só é carregado quando o usuário
solicitar, clicando na barra de rolagem.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se o handle da tabela, ou o
handle sql, forem inválidos.

Função : SalTblQueryColumnFlags
Sintaxe : bLigado = SalTblQueryColumnFlags ( hWndColuna , nFlags )
Descrição : Testa o estado dos flags de uma coluna de uma table window.

Parâmetros :
hWndColuna Window Handle – O handle (ou o nome) da table window.
nFlags Number – os flags da coluna para serem testados. Você pode combinar os
flags de coluna ( COL_* ) utilizando o operador OR ( | ).

Valor de Retorno :
bLigado é TRUE, se um dos flags indicados em nFlags estiver ativo, e FALSE, se nenhum
dos flags indicados em nFlags estiver ativo.

Função : SalTblQueryColumnID
Sintaxe : nColID = SalTblQueryColumnID ( hWndColuna )
Descrição : Obtém o identificador de uma coluna de uma table window. A posição da coluna
no outline.

Página PAGE 582


Programando com o Centura Team Developer 2000

Parâmetro :
hWndColuna Window Handle – O handle ou o nome da table window.

Valor de Retorno :
nColID é o identificador da coluna, será –1 se o handle em hWndColuna for inválido.

Função : SalTblQueryColumnPos
Sintaxe : nPosicao = SalTblQueryColumnPos ( hWndColuna )
Descrição : Obtém a posição relativa da coluna na table window. A posição visual.

Parâmetro :
hWndColuna Window Handle – O handle da table window.

Valor de Retorno :
nPosicao é a posição visual da coluna na table window.

Função : SalTblQueryColumnWidth
Sintaxe : bOk = SalTblQueryColumnWidth ( hWndColuna , nFormUnits )
Descrição : Obtém a largura ( em form units) de uma coluna da table window.

Parâmetros :
hWndColuna Window Handle – O handle da coluna.
nFormUnits Receive Number – A largura da coluna.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblQueryContext
Sintaxe : nLinha = SalTblQueryContext ( hWndTabela )
Descrição : Retorna a linha com o contexto numa table window. Esta, normalmente, é a linha
que está com o foco.

Parâmetro :
hWndTabela Window Handle – O handle ou o nome da table window.

Valor de Retorno :
nLinha é o número da linha que está com o contexto.

Função : SalTblQueryFocus
Sintaxe : bOk = SalTblQueryFocus ( hWndTabela , nLinha , hWndColuna )
Descrição : Identifica a célula que está com o foco, numa table window.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da tabela.

Página PAGE 582


Programando com o Centura Team Developer 2000

nLinha Receive Number – O número da linha que está com o foco.


hWndColuna Receive Window Handle – O handle da coluna que está com o foco.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblQueryLinesPerRow
Sintaxe : bOk = SalTblQueryLinesPerRow ( hWndTabela , nLinhas )
Descrição : Obtém a altura em linhas das linhas da table window. Com a função
SalTblSetLinesPerRow você pode definir a altura das linhas da table window, essa altura é a
expressa em número de linhas.

Parâmetro :
hWndTabela Window Handle – O handle (ou o nome) da table window.
nLinhas Receive Number - Um número que equivale a altura das linhas da table
window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblQueryLockedColumns
Sintaxe : nNum = SalTblQueryLockedColumns ( hWndTabela )
Descrição : Obtém o número de colunas travadas de uma table window. As colunas travadas
não são roladas horizontalmente numa table window, quando o usuário aciona as setas da
barra horizontal.

Parâmetro :
hWndTabela Window Handle – O handle (ou o nome) da table window.

Valor de Retorno :
nNum é o número de colunas travadas da table window especificada.

Função : SalTblQueryRowFlags
Sintaxe : bOk = SalTblQueryRowFlags ( hWndTabela , nLinha , nFlags )
Descrição : Consulta os flags da linha.

Parâmetros :
hWndTabela Window Handle – O handle (ou o nome) da table window.
nLinha Number – O número da linha, cujo o flag você deseja consultar.
nFlags Number – Os flags de linha que se quer cosultar. Você pode combinar os
flags ROW_* com o operador OR ( | ) .

Valor de Retorno :
bOk é TRUE se a linha possuir um dos flags citados em nFlags.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblQueryRowHeader
Sintaxe : bOk = SalTblQueryRowHeader( hWndTabela, sTitulo, nMax, nLargura, nFlags,
hWndColuna )
Descrição : Obtém as definições do header da linha.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
sTitulo Receive String – O título do cabeçalho da linha.
nMax Number – O tamanho máximo do título.
nLargura Receive Number – A largura do cabeçalho em pixels.
nFlags Receive Number – Os atributos do cabeçalho da linha. Especifique um
desses atributos: TBL_RowHdr_MarkEdits,
TBL_RowHdr_ShareColor,
TBL_RowHdr_Sizable ou
TBL_RowHdr_Visible.
hWndColuna Receive Window Handle – A coluna a que o cabeçalho da linha está
associada.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblQueryScroll
Sintaxe : bOk = SalTblQueryScroll ( hWndTabela , nPosicao, nMin, nMax )
Descrição : Retorna a posição atual do scroll da table window e os limites da table window.
O scroll da table window é o número da linha superior da janela.
Você pode definir os limites da table window com a função SalTblSetRange, e o Centura
muda estes valores quando linhas são incluídas ou excluídas na table window.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nPosicao Receive Number – A posição de scroll.
nMin Receive Number – O limite inicial da table window.
nMax Receive Number – O limite final da table window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblQuerySplitWindow
Sintaxe : bOk = SalTblQuerySplitWindow ( hWndTabela , nNumLinhas , bAjuste )
Descrição : Obtém as especificações de como a table window está dividida horizontalmente.
São as configurações da split window.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nNumLinhas Receive Number – O número de linhas visíveis na split window. Retorna
zero quando a split window não estiver ativa.

Página PAGE 582


Programando com o Centura Team Developer 2000

bAjuste Receive Boolean – Indica se o usuário pode ajustar o tamanho da split


window, acionando o mouse numa das suas laterais.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblQueryTableFlags
Sintaxe : bOk = SalTblQueryTableFlags ( hWndTabela, nFlags )
Descrição : Testa o status dos flags da table window.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nFlags Number – O flag a ser testado na table window. Você pode combinar os
flags TBL_* utilizando o operador OR ( | ) .

Valor de Retorno :
bOk é TRUE se a tabela possuir um dos flags informados em nFlags.

Função : SalTblQueryVisibleRange
Sintaxe : bOk = SalTblQueryVisibleRange ( hWndTabela , nMin, nMax )
Descrição : Recupera o intervalo atual de linhas visíveis na table window.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window.
nMin Receive Number – A primeira linha visível.
nMax Receive Number – A última linha visível.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblReset
Sintaxe : bOk = SalTblReset ( hWndTabela )
Descrição : Limpa uma table window, descartando todas as linhas contidas no seu cache, e
redefinindo seus limites para 0 e –1.

Parâmetro :
hWndTabela Window Handle – O handle ou o nome da table window.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblScroll
Sintaxe : bOk = SalTblScroll ( hWndTabela, nLinha, hWndColuna, nTBLScroll )
Descrição : Posiciona a table window numa determinada coluna e linha.

Parâmetros :
hWndTabela Window Handle – O handle da table window.
nLinha Number - O número da linha para posicionar. Se você especificar –1,
apenas a coluna é posicionada.
hWndColuna Window Handle – O handle da coluna que será posicionada. Se você
especificar hWndNull, apenas a linha é posicionada.
nTBLScroll Number – O indicador para posicionar. Especifique uma das constantes:
TBL_AutoScroll,
TBL_ScrollBottom ou
TBL_ScrollTop.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se o número da linha, ou o
handle da coluna, forem inválidos.

Função : SalTblSetCellTextColor
Sintaxe : bOk = SalTblSetCellTextColor ( hWndColuna , nCor, bDescatavel )
Descrição : Muda a cor do texto de uma célula da table window.

Obs : Para obter a cor da célula de uma table window, utilize a função SalColorGet, tomando
como parâmetro o handle da coluna e a cor COLOR_IndexCellText.

Parâmetros :
hWndColuna Window Handle – O handle ou o nome da coluna.
nCor Number – A cor do texto da célula.
bDescartavel Boolean – Determina se o Centura irá manter esta cor, mesmo após os
dados serem lidos novamente para a table window. Se você usar TRUE, o
Centura descarta as configurações de cor, após uma nova carga dos dados.
Se você especificar FALSE, o Centura mantém as definições de cor.
Observe que isso requer recursos adicionais do sistema que permitam ao
Centura manter as configurações na memória.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblSetColumnFlags
Sintaxe : bOk = SalTblSetColumnFlags ( hWndColuna , nFlags , bAcao )
Descrição : Ativa ou desativa os flags de uma coluna da table window.

Parâmetros :
hWndColuna Window Handle – O handle ou o nome da coluna da table window.
nFlags Number – O flag da coluna.

Página PAGE 582


Programando com o Centura Team Developer 2000

Você pode combinar os flags COL_* usando o operador OR ( | ).


bAcao Boolean – Se TRUE, o Centura liga o flag. Se FALSE desliga-o.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.
Para definir uma coluna como multiline text, use o flag COL_MultilineCell ( 0x008000000 ).

Página PAGE 582


Programando com o Centura Team Developer 2000

Função : SalTblSetColumnPos
Sintaxe : bOk = SalTblSetColumnPos ( hWndColuna , nPosicao )
Descrição : Move uma coluna da table window para uma nova posição.

Parâmetros :
hWndColuna Window Handle – O handle ou o nome da coluna a ser movida.
nPosicao Number – A nova posição da coluna da table window. Especifique 1 para a
primeira posição, 2 para a Segunda e assim por diante.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblSetColumnText
Sintaxe : bOk = SalTblSetColumnText ( hWndTabela , nColuna , sTexto )
Descrição : Associa um determinado valor a uma coluna da table window, a linha com o foco.

Parâmetros :
hWndTabela Window Handle – O handle ou o nome da table window
nColuna Number – A posição da coluna no outline.
sTexto String – A informação a ser associada à coluna.

Valor de Retorno :
bOk é TRUE se a função for executada com sucesso e FALSE se falhar.

Função : SalTblSetColumnTitle
Sintaxe : bOk = SalTblSetColumnTitle ( hWndColuna , sTitulo )
Descrição : Define o título de uma determinada coluna da table window.

Parâmetros :
hWndColuna Window Handle – O handle ou onome de uma coluna da table window.
sTitulo String – O título da coluna.

Valor de Retorno :