Sunteți pe pagina 1din 73

CA-CLIPPER + FIVEWIN

Curso de Iniciao
A documentao entregue neste curso propriedade de Ortiz de Ziga, S.L. Nenhuma parte deste documento pode ser reproduzida ou transmitida de nenhuma forma, nem por nenhum meio, seja eletrnico ou mecnico, com nenhum propsito, sem a previa autorizao por escrito de Ortiz de Ziga, S.L. 1997 Ortiz de Ziga, S.L. Reservados todos os direitos Traduo para o portugus do Brasil por Maurcio Ventura Faria Janeiro de 2001

INTRODUO.....................................................................................................................1

O QUE FIVEWIN?....................................................................................................................1COMPILAR ..................................................................................................................................2LINKAR.... ..................................................................................................................................2ARQUITET URA.............................................................................................................................2UTILIT RIOS NECESSRIOS............................................................................................3COMO


ORGANIZAR SEU TRABALHO COM

WINDOWS............................................................................3INSTALAO DO FIVEWIN.............................................................................................................4COMPATIBILIDADE
COM

FIVEWIN..................................................................................................5EXERCCIOS.................. ...............................................................................................................5 ELEMENTOS FUNDAMENTAIS DE UMA APLICAO DE GESTO EM WINDOWS............................................................................................................................6 JANELA PRINCIPAL.......................................................................................................................6MENUS. .....................................................................................................................................9BARRA DE BOTES.....................................................................................................................10BARRA DE MENSAGENS:..............................................................................................................11CAIXAS DE DILOGO..................................................................................................................11NOSSO
PRIMEIRO PROGRAMA COM

FIVEWIN..................................................................................12EXERCCIOS................................ ...............................................................................................13 CONTROLES DO WINDOWS.........................................................................................14 O QUE SO OS CONTROLES..........................................................................................................14 TIPOS DE CONTROLES..................................................................................................................17 Botes...............................................................................................................................17B arras de rolagem...........................................................................................................17List boxes..........................................................................................................................18Group boxes.....................................................................................................................18Gets (Edit text).................................................................................................................18Says (Text)........................................................................................................................18Boxes.. ..............................................................................................................................19Radio buttons...................................................................................................................19Check boxes......................................................................................................................19Combo boxes....................................................................................................................19 CONTROLES AVANADOS............................................................................................................20 Browses............................................................................................................................20M eters...............................................................................................................................22Bit map (Control)..............................................................................................................23Boto Bar (Button bar)....................................................................................................23Uso de BWCC.DLL..........................................................................................................24 EXERCCIOS...............................................................................................................................25 RECURSOS DO WINDOWS............................................................................................26

O
RECURSOS

QUE

SO

OS

?.........................................................................................................26RCO U DLL?..........................................................................................................................27TIPOS DE RECURSOS....................................................................................................................28 Dilogos...........................................................................................................................28M enus...............................................................................................................................28Atal hos.............................................................................................................................28Matriz es de Cadeias de Caracteres (String Tables)........................................................28Bitmaps............................................................ .................................................................28cones.................................................................. .............................................................29 Cursores...........................................................................................................................29 Fontes...............................................................................................................................30 RESOURCE WORKSHOP...............................................................................................................30 Caixas de Dilogo............................................................................................................32Trabalhando com controles.............................................................................................32Tab Stop...........................................................................................................................32Agrup ando controles........................................................................................................32Ordem dos controles........................................................................................................33Ferramentas de alinhamento e ajuste de tamanho..........................................................33Experimentando uma caixa de dilogo............................................................................33Controles criados pelo usurio........................................................................................33Bitmaps, cones e cursores...............................................................................................34 EXERCCIOS...............................................................................................................................34 IMPRESSO EM FIVEWIN.............................................................................................35 IMPRESSO EM MICROSOFT WINDOWS..........................................................................................35O GERADOR DE RELATRIOS........................................................................................................36EXERCCIOS...... .........................................................................................................................40 MANIPULAO DE BASES DE DADOS......................................................................41 MUDANAS NA PROGRAMAO....................................................................................................41OO BJ ETO DATABASE.................................................................................................................41EXERCCIO S...............................................................................................................................42 O DEBUGGER DO FIVEWIN..........................................................................................43 UTILIZAO DO DEBUGGER..........................................................................................................43 EXERCCIOS...............................................................................................................................43 PROGRAMAO AVANADA......................................................................................44 REFRESH DO SISTEMA.................................................................................................................44MANIPULA O DE JANELAS MDI................................................................................................44MENUS FLUTUANTES..................................................................................................................46OS BRUSHES.............................................................................................................................47O CLIPBOARD...........................................................................................................................47A
RQUIVOS

INI..........................................................................................................................48TIMERS..... ...............................................................................................................................48MULTIMDI A.............................................................................................................................49CONTROLE


S

VBX.....................................................................................................................49ODBC....... .............................................................................................................................51MANIPULA

DE DLLS...........................................................................................................53DYNAMIC DATA EXCHANGE (DDE)............................................................................................54MANIPULAO DE ARQUIVOS O DE

HELP..........................................................................................55EXERCCIOS............................. ..................................................................................................56 OBJECTS: MECANISMO OOPS DO FIVEWIN...........................................................57 HIERARQUIA DE CLASSES.............................................................................................................57A CESSO AOS DADOS E MTODOS...................................................................................................58CRIAO DE
NOVAS CLASSES.......................................................................................................59EXERCCIOS............

...................................................................................................................60 CONECO COM A API DO WINDOWS....................................................................61 COMO CONECTAR?....................................................................................................................61 UM PROGRAMA EM C.................................................................................................................62 EXERCCIOS...............................................................................................................................62

Curso CA-Clipper + FiveWin

INTRODUO

O Que FiveWin?
FiveWin uma biblioteca para CA-Clipper que permite a execuo de programas sobWindows. Dentro do pacote existe muito mais do que pode-se imaginar a primeira vista, jque FiveWin proporciona ao CA-Clipper um autntico ambiente orientado a objetos comcriao de novas classes, herana, polimorfismo, etc. FiveWin utiliza este potencial OOPS para criar suas prprias classes e acessar toda a APIdo Windows sem que o programador tenha necessidade de se comunicar com a mesma,alm disso, devido ao fato que o FiveWin incorpora no pacote todos os fontes dessasclasses realmente simples modificar ou subclassificar qualquer delas para atender nossasnecessidades. Ademais o uso de todas as classes pode ser feito utilizandose comandos aomais puro estilo Dbase, pelo que a utilizao do FiveWin realmente simples. FiveWin nos d acesso a quase a totalidade de recursos do Windows como por exemplo:

Ambiente MDI (Multiple Document Interface) Menus pop-up Barras de Botes Bitmaps (Imagens) Fontes True Type Cu rs o res co n es Caixas de dilogo Acesso a DLL

Controles VBX Cl i p b o ard Enlaces DDE Arquivos INI M et afi l es M et ers B ru s h es Som (Arquivos WAV, MID) Vdeo (AVI)

ODB C Ademais FiveWin incorpora a classe TWBrowse para poder produzir browse sob Windows e a classe TReport para produzir qualquer relatrio.
Ortiz de Ziga, S.L. 1 1

Curso CA-Clipper + FiveWin

Compilar
Para compilar uma aplicao produzida com FiveWin compile como fazia normalmente: CLIPPER Teste /n/w Quase todas as aplicaes escritas com FiveWin necessitam que se inclua a seguinte linha: #include "FiveWin.ch"

Linkar
FiveWin consiste das seguintes LIBs:

F W

i i

v n

e A

W p

i i

n .

. L

L I

I B

5 0 1 _ 5 2 0 A LIB 501_502 s necessria se for utilizar Microsoft LINK. necessrio um linker para aplicaes Windows, o qual no fornecido com o CA-Clipperpelo que dever adquiri-lo a parte. Pode-se utilizar o linker da Microsoft LINK.EXE verso5.3 ou posterior, ou Blinker 3.0 ou posterior sendo este ltimo o mais recomendado. Sintaxe para Microsoft LINK: Link //se:700 //NOE <Aplicao>,,nul, FiveWin WinApi ; Clipper501_520,..\include\FiveWin.def Sintaxe

para Blinker 3.0: Blinker fi Aplicao @FiveWin.lnk O arquivo Fivewin.lnk vem incorporado ao FiveWin.

Arquitetura
A arquitetura do FiveWin est baseada nos seguintes nveis: 1 C o m a n d o s x B a s e 2 C l a s s e s e o b j e t o s 3 F u n e s 4 W i n d o w s A P I Utilizando os comandos xBase poderemos rapidamente produzir nossos primeirosprogramas. Quando necessitar um pouco mais de controle ter que descer um pouco maisde nvel, tenha em mente que quanto mais baixo nvel mais controle porm diminui suaprodutividade. FiveWin faz um uso extensivo de novos objetos, porm graas ao preprocessador do CAClipper o uso dos mesmos est disfarado em forma de comandos cuja sintaxe mais
Ortiz de Ziga, S.L. 2 2

Curso CA-Clipper + FiveWin

natural, assim sendo possvel acessar diretamente as classes sem necessidade de utilizar os comandos xBase. As Classes incorporadas ao FiveWin para o desenvolvimento de aplicaes Windows fazcom que no seja necessrio em quase nenhum caso ter que se aprofundar at o ltimo nvelda API do Windows, porm, se o desejar poder acess-lo sem problemas.

UTILITRIOS NECESSRIOS
Alm do FiveWin e CA-Clipper sero necessrias uma srie de utilitrios:

l c e G e

i o c e c

n m u r u

k p r a r

e i s d s

r l o o o a s r s

p d

a o

r r

a d

W e

v (

i R

s e

u s

a o

l u r

d c

e e

r W

o r k s h o p d a B o r l a n d ) O linker de recursos necessrio j que o fornecido com o CA-Clipper no capaz de produzir executveis para Windows. O compilador de recursos permitir incluir em seu executvel final recursos gerados atravsdo Resource Workshop, por exemplo, so recursos as imagens, os cones que se encontramem quase todos os programas para Windows. Tambm recomendado mas no imprescindvel a obteno de um compilador de Helpsse desejar produzir Helps sob Windows e documentao sobre a API do Windows emformato Help da Microsoft para sua consulta quando queiramos acessar a API. Por exemplo o cone que possuem todas as aplicaes Windows quando se minimizam um recurso que normalmente se guarda em um arquivo com extenso ICO, porm,

comoveremos em captulos posteriores pode-se encontrar em um arquivo de extenso RC ouincluso dentro de uma DLL. Para juntar este cone ao executvel dever ser criado umarquivo RC com o Resource WorkShop e utilizar a ferramenta RC.EXE para inclulodefinitivamente no executvel.

Como organizar seu trabalho com Windows


Os programas que voc vai produzir com FiveWin sero autnticos executveis tipoWindows, porm a maioria das ferramentas que vai utilizar so tipo DOS, como ocompilador do CA-Clipper, o linker Blinker 3.0 e provavelmente seu editor de programaofavorito. No necessrio adquirir nenhum editor para Windows, e de fato pode seguir utilizando omesmo de sempre, recomendamos que organize seu ambiente de programao da seguintemaneira:

Crie um grupo novo no Gerenciador de programas no qual incluir todas as aplicaes que esteja desenvolvendo.

Execute seu editor a partir de uma janela DOS para isso dever carregar oeditor atravs de um arquivo PIF indicando no mesmo que ser executado emuma janela DOS.
Ortiz de Ziga, S.L. 3 3

Curso CA-Clipper + FiveWin

Se no puder executar o compilador e o linker a partir de seu editor crieum novo cone de programa no gerenciador de programas para executar ocompilador e o linker a partir do Windows. De qualquer maneira, para desenvolver comodamente a partir do Windows praticamente necessrio um computador 486 com 4Mb de RAM.

Instalao do FiveWin
FiveWin se instala automaticamente em seu computador sob a seguinte estrutura:

C:\Clipper5 Fwxxx Onde xxx a verso do FiveWin

Bitmaps algumas imagens para incluir em suas prprias aplicaes

Cursors alguns cursores para incluir em suas prprias aplicaes

Dll DLL vazia p/ utilizar como armazenador de seus recursos

Icons alguns cones para incluir em suas prprias aplicaes

Ide Ambiente IDE do FiveWin (no operativo pelo momento)

Include Arquivos de Cabealho tanto para CA-Clipper como para C

Lib LIBs do FiveWin

Manual Guia Norton

Samples Tutoriais e exemplos

Source Fontes

Classes Classes

Function Funes

Tools Utilitrios

Winapi Coneco CA-Clipper e Windows API

Por padro FiveWin instalado no diretrio do CA-Clipper, porm pode-se modifica-lo se o desejar.

prefervel que cada vez que instale FiveWin o faa em um diretrio diferente, e experimente a nova verso antes de destruir a j existente.

Leia a informao contida no arquivoWh atsn ew .txt para conhecer asltimas melhorias produzidas no FiveWin assim como os possveis erroscorrigidos.

Se voc possui a verso protegida por contra-senha (como o caso daverso existente na Espanha) ser necessrio registrar sua verso do FiveWin, paraisso dever pedir a seu distribuidor que proporcione uma chave de registro. Antesde registrar-se certifique-se de que tem somente uma verso do Fivewin.lib que aque quer registrar.

possvel que seja necessrio modificar o arquivoS amples\B uild.bat para acomoda-lo aos paths e sets de seu computador.

Se a instalao realizou-se corretamente v ao diretrioSam pl es e tente criar sua primeira aplicao realizando a seguinte instruo:
SAMPLES\Build Tutor01

Ser criado um programa de nomeTu t or01.E xe que funciona realmente em Windows. V ao Windows e tente execut-lo.
Ortiz de Ziga, S.L. 4 4

Curso CA-Clipper + FiveWin

Compatibilidade com FiveWin


Quando falamos de compatibilidade temos que distinguir entre compatibilidade comFiveWin e compatibilidade com Windows, a principio se uma LIB compatvel comWindows tambm compatvel com FiveWin, para que uma LIB seja compatvel comWindows tem que rodar em modo protegido e alm disso no deve acessar o hardwarediretamente nem deve utilizar o vdeo j que domnio exclusivo do Windows e para tantodeve-se utilizar os servios que o Windows proporciona para acessar estes recursos.

Devido ao FiveWin incorporar seu prprio mecanismo OOPS incompatvel com outrosmecanismos OOPS existentes como Class(y), que utilizado por algumas LIBs comerciais,logo FiveWin incompatvel com Class(y) e com todas aquelas funes de outras LIBs queutilizem um run-time Class(y), por exemplo a LIB Funcky II o utiliza, porm, pode-se usarperfeitamente com FiveWin, sempre e quando no se utilize as classes que vemincorporadas na LIB Funcky II. So compatveis com FiveWin as LIBs Comix, Six 2.0 e parte de Funcky entre outras.Quando comear a programar sob Windows se dar conta que grande quantidade das LIBsque estava usando j no so necessrias porque o prprio Windows lhe d suporte paraproduzir o mesmo , como por exemplo LIBs grficas, de acesso a redes locais, envio defaxes, etc. Ademais descobrir novas formas de LIBs como o so os controles VBX e asDLLs os quais se podem utilizar perfeitamente a partir do FiveWin e sem nenhumalimitao.

Exerccios
1. Que flags so necessrios e quais so recomendveis para o uso do compilador do CA-Clipper com FiveWin? 2. ModificarBu i l d.B at para o seguinte ambiente: CA-Clipper em diretrio D:\CLP 3. Prepare seu ambiente de programao sob Windows.
Ortiz de Ziga, S.L. 5 5

Curso CA-Clipper + FiveWin

ELEMENTOS FUNDAMENTAIS DEUMA APLICAO DE GESTO EMWINDOWS


Janela Principal
Toda aplicao Windows deve ter uma janela principal. Geralmente esta janela ter umttulo ou Caption, um menu, uma barra de botes e uma barra de mensagens em sua parteinferior, entretanto, como veremos mais adiante, no necessria a existncia de todosestes componentes. Existem dois tipos diferentes de janela principal, que so: Janela SDI Janela MDI SDI significa Single document interface, ou seja, um nico documento ou janela para toda a aplicao eMDI que significa Multiple document interface, no qual existem mltiplosdocumentos ou janelas dentro da janela principal. Exemplos de janelas MDI so ogerenciador de programas e o gerenciador de arquivos ( Windows 3.x ), nos quais podeseobservar que existe uma janela principal e dentro da mesma existem outras janelas filhas.No caso do Gerenciador de programas cada janela filha corresponde a um grupo dogerenciador de programas. O projetoMDI mais apropriado quando o programa deve abrir mltiplas instncias domesmo tipo de documento, ou seja, num programa para editar arquivos DBF genrico prefervel produzi-lo com um projetoMDI, no resto dos casos recomendamos um projeto SDI, que mais simples de manter e de compreender por parte do usurio. Ao criar uma aplicao importante ter em mente que ela ser utilizada por um usurio que muitas vezesdesconhece a interface do Windows e a complexidade da aplicao em sua

totalidade,assim sendo, se permitir mltiplas janelas abertas, cada uma delas diferente, ser difcil ousurio aprender a utilizar sua aplicao. As janelas podem ter vrios estilos ou propriedades, como por exemplo uma que tenhattulo, que possa ser movida, que se possa ser redimensionada, etc.. FiveWin permiteindicar, na criao da janela, o estilo que a mesma deve ter. A partir de nossa janela principal poderemos, utilizando um menu, abrir novas janelas,porm o habitual abrir caixas de dilogo que na realidade so janelas que possuemcaractersticas especiais que as diferenciam do resto das janelas, que so:
Ortiz de Ziga, S.L. 6 6

Curso CA-Clipper + FiveWin

Sua execuo modal, ou seja, no possvel voltar janela principal atque a caixa de dilogo seja fechada, por exemplo pressionando um boto deAceitar na caixa de dilogo. Tambm pode-se construir caixas de dilogono modais, porm no o habitual.

As caixas de dilogo podem ser definidas em recursos externos. Os construtores visuais de recursos s manipulam caixas de dilogo, no janelas.

Todos os controles do Microsoft Windows podem ser colocados em caixas de dilogo e quase nunca em janelas.

As caixas de dilogo no podem ser redimensionadas As caixas de dilogo no podem conter menus. As caractersticas das caixas de dilogo sero vistas com mais detalhes num captulo separado. A sintaxe para criar uma janela no FiveWin a seguinte:
#include Fivewin.ch

Static oWnd

Function Main() DEFINE WINDOW oWnd TITLE "Meu programa" ACTIVATE WINDOW oWnd MAXIMIZED return nil

Neste exemplo estamos gerando a janela mais comum, com coordenadas e estilo prefixados, que quando ativada abre-se em modo maximizado, ocupando todo o vdeo. Nota:Para mais informao sobre a diferena entre janela em estado normal ou maximizado consulte o tutorial do Microsoft Windows. Se desejar colocar a janela numa posio predefinida:
... FROM nAcima, nEsquerda TO nAbaixo, nDireita ...

Desta forma, simulamos as coordenadas tipo texto que utilizamos normalmente comCAClipper de linha e coluna, j que Microsoft Windows utiliza coordenadas em pixels. Sedesejar utilizar coordenadas em pixels, como o Microsoft Windows faz, simplesmenteintroduza a clusula PIXELS no comando. Podemos aplicar uma grande variedade de estilos a uma janela. Por padro, a janela possuio estilo definido na API do Windows como OVERLAPPED-WINDOW, que significa quepossui as seguintes caractersticas:

C M

a e

p n

t u

o d

n e

o s

u i s

T t

t m

u a

R B

e o

d t

m e

e s

n d

s e

n m i

v n i

l m i z a r

m a x i m i z a r Se desejar especificar outros estilos o FiveWin oferece as seguintes clusulas:


N N N N

O O O O

S C I Z

Y A C O

S P O O

M T N M

E I I

N O Z

U N E

Ortiz de Ziga, S.L. 7 7

Curso CA-Clipper + FiveWin

Tambm podemos especificar qualquer combinao delas utilizando diretamente os flags da API do Windows e utilizando a funo nOr() do FiveWin:
... STYLE nOr( WS_BORDER, WS_MAXIMIZE, ... )

Os diferentes estilos possveis podem ser encontrados no arquivoIn cl u de\ Win api .ch que automaticamente carregado pelo FiveWin quando se carregaF ivew in .ch ou tambm nohelp on-line da API do Windows que pode ser encontrada em vrios produtos comerciais deprogramao Windows ou na internet. Se desejar que a janela principal seja uma janelaMDI simplesmente especifique a clusula ao criar a janela:DEFINE WINDOW oWnd TITLE "A MDI environment" MDI O FiveWin controla automaticamente todas as mensagens que a janela principal recebe evoc s deve processar aquelas que lhe interessem utilizando uma linguagem de comandossimples que sempre comea pela clusulaO N, atribudos quando a janela ativada.
ACTIVATE WINDOW oWnd ; ON PAINT ... ; ON LEFT CLICK ... ; ON RESIZE ... ;

Cada uma das clusulas que podemos controlar o que chamaremos umE ven to, ou seja,quando se produz o evento de pressionamento do boto esquerdo do mouse e este seencontre dentro de nossa janela se executar o cdigo que especificarmos na clusula ONLEFT CLICK. A princpio no ser necessrio manipular quase nenhum evento, mas quando tiver mais experincia com FiveWin possvel que sejam de grande utilidade. Tambm podemos incluir barras de rolagem na janela. Para isso devemos incluir a clusula VSCROLL para barras verticais e HSCROLL para as horizontais.
DEFINE WINDOW oWnd ... VSCROLL oDEFINE WINDOW oWnd ... HSCROLL o as dos DEFINE WINDOW oWnd ... VSCROLL HSCROLL

Ao colocar barras de rolagem tambm ser possvel interceptar as mensagens ou eventos que elas recebem da mesma forma que o resto das clusulas ON ...
ACTIVATE WINDOW oWnd ... ON UP ... ON DOWN ... ON LEFT ... ON RIGHT ...

ON PAGEUP ... ON PAGEDOWN ...

Nosso objeto janela oWnd ter por sua vez definidos os objetos Scrollbar que sero:
oWnd:oVScroll e oWnd:oHScroll

Assim ser possvel manipular diretamente os eventos cada um desses objetos recebe. Para finalizar a execuo da janela utilize o mtodoE nd .
Ortiz de Ziga, S.L. 8 8

Curso CA-Clipper + FiveWin oWnd:End()

Esta instruo indica ao objeto janela que ele deve finalizar. Se for especificada a clusulaVALID quando a janela for ativada, ento a instruo indicada ser avaliada e seretornar .T. a janela terminar mas no se retornar .F. . Por exemplo:
ACTIVATE WINDOW oWnd ; VALID MsgYesNo( "Deseja Terminar?" )

Quando tentar fechar a janela a partir do menu de sistema ou pressionando Alt+F4 oprograma mostrar uma caixa de dilogo na qual haver dois botes Sim e No com amensagem Deseja terminar?, se pressionar Sim a funo devolver .T. e a janela serfechada, pelo contrario, se pressionar No a funo devolver .F. e a janela no serfechada.

Menus
A estrutura tpica de um programa Windows criar uma janela principal e associar um menu mesma a partir do qual acessaremos todas as opes da aplicao. A partir do menu o usurio pode acessar todos os processos do programa. Deve-se tentar produzir previamente um projeto de seu menu sem faze-lo demasiadocomplicado, o mais simples possvel e criando submenus para englobar opes do mesmotipo. Com o FiveWin no necessrio a seqncia tpica DO CASE para controlar que opofoi selecionada, quando um elemento do menu definido, se especifica diretamente a aoque ser produzida quando da escolha.
MENU oMenu MENUITEM <cItem> MESSAGE <cMessage> ACTION <uActio n> MENUITEM <cItem> MESSAGE <cMessage> MENU MENUITEM <cItem> MESSAGE <cMessage> ACTION <uAction> ENDMENU ... SEPARATOR MENUITEM <cItem> MESSAGE <cMessage> ACTION <uAction> ENDMENU

MESSAGE e ACTION so clusulas opcionais. Se no se especifica nenhuma ao entonada ocorrer quando da escolha desse elemento do menu a no ser de que haja umsubmenu que se encarregue desta opo. Podemos especificar todos os submenus que desejarmos e com o aninhamento que sejanecessrio, para cria-lo s dever aninhar dentro de uma estrutura MENU ... ENDMENUuma nova estrutura MENU ... ENDMENU

MENUITEM <cItem> MESSAGE <cMessage> MENU MENUITEM <cItem> MESSAGE <cMessage> ACTION <uAction> ... ENDMENU MENUITEM <cItem> MESSAGE <cMessage> ACTION <uAction> Ortiz de Ziga, S.L. 9 9

Curso CA-Clipper + FiveWin

Para ativar o menu dever-se- primeiro associa-lo a uma janela. A forma mais simples de faze-lo :
DEFINE WINDOW <oWnd> <otherClauses> ; MENU BuildMenu() ... ... Function BuildMenu() local oMenu MENU oMenu MENUITEM <cItem> MESSAGE <cMessage>... ... ENDMENU return oMenu SET MENU OF <oWnd> TO <oMenu>

ou podemos produzi-lo quando a janela esteja criada com o comando:

Barra de botes
A barra de botes se tornou um padro dentro dos componentes que podemos encontrar em quase todas as aplicaes para Windows. O propsito desta barra no outro que oferecer um acesso rpido s opes mais utilizadas de sua aplicao. Uma barra de botes bem projetada ajuda enormemente no aprendizado e uso de qualqueraplicao. No utilize imagens sem sentido, pelo contrario, tente utilizar imagens que deuma forma intuitiva indiquem a ao a produzir quando seja pressionada com o mouse. A barra de botes uma rea da janela na qual se vo alojar uma serie de botes comimagens em seu interior. As aes que estes botes realizam podem ser opes duplicadasj existentes em opes de menu visto que a as barras de botes no pode ser acessada apartir do teclado. Existe a possibilidade de selecionar um aspecto 3D barra de botes simplesmente adicionando a clusula 3D na criao da mesma. Normalmente a barra de botes deve estar na parte superior da janela abaixo do menu,porm, o FiveWin tem a habilidade de colocar a barra de botes onde se desejasimplesmente pressionando o boto direito do mouse. Todas as janelas possuem um objeto:oB tnB ar que onde se guarda a referencia barra de botes. Para incluir uma barra de botes em qualquer janela se utiliza o seguinte comando:
#xcommand DEFINE BUTTONBAR [ <oBar> ] ; [ <size: SIZE, BUTTONSIZE, SIZEBUTTON > <nWidth>, <nHeight> ] ; [ <_3d: 3D, 3DLOOK> ] ; [ <mode: TOP, LEFT, RIGHT, BOTTOM, FLOAT> ] ; [ <wnd: OF, WINDOW, DIALOG> <oWnd> ] ; [ CURSOR <oCursor> ] ; Ortiz de Ziga, S.L. 10 10

Curso CA-Clipper + FiveWin

Barra de mensagens:
A barra de mensagens tambm um padro que podemos encontrar em quase todas as aplicaes para Windows . Uma barra de mensagens um controle que se coloca na parte inferior da janela que mostrainformao relacionada com o elemento de menu que este atualmente selecionado ou, nocaso de uma barra de botes, com o boto sobre o qual se encontre o cursor do mouse. FiveWin mostra a barra de botes com efeito 3D sem necessidade de ter que especifica-lo e opcionalmente lhe permite colocar as mensagens centralizadas na barra de mensagens. Atualmente em fase Beta e provavelmente disponvel quando estiver lendo este documento,a barra de botes implementar a possibilidade de ter mltiplas colunas com informao detempo, setas, estado do teclado, etc.

Caixas de Dilogo
Em Windows a introduo de qualquer dado por parte do usurio em uma aplicao se fazatravs das caixas de dilogo. As caixas de dilogo so janelas especializadas em recolherinformao atravs de controles padro do Windows. No uma prtica recomendvel utilizar a janela principal de uma aplicao para recolher dados. FiveWin suporta dois mtodos de utilizao de caixas de dilogo: Construdas com cdigo fonte A partir de recursos gerados com um editor de recursos para Windows O segundo mtodo o mais aconselhvel j que permite definir as caixasvisualmente de uma forma muito rpida e intuitiva, para utilizar este mtodo sernecessrio um editor de recursos como o Resource WorkShop da Borland, ouAppStudio da Microsoft ou o Resource Studio da Symantec. No Windows as caixas de dilogo podem ser de duas categorias: Modais No modais As modais so aquelas que no permitem ao usurio produzir nenhuma ao atque se feche esta caixa de dilogo, em MSDOS sempre utilizamos caixas dedilogo modais. As caixas de dilogo no modais permitem ao usurio fazeroutras coisas enquanto esto ativas. A principio e at que esteja um pouco maisfamiliarizado com o Windows utilize unicamente caixas modais j que temos quesaber muito bem o que se est fazendo quando se utilizam caixas no modais. Uma caixa de dilogo um objeto e para cria-la utilizaremos a sintaxe tpica tambm utilizada na criao de janelas porm com algumas variaes:
DEFINE DIALOG oDlg ; [ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ] ; [ NAME <cName> ] ; Ortiz de Ziga, S.L. 11 11

Curso CA-Clipper + FiveWin

A clusula NAME indica o nome desse dilogo se criado atravs de um editor de recursos. Depois se est desenhando diretamente a partir de cdigo fonte dever associar todos oscontroles que esta caixa de dilogo vai ter, pelo contrario se criada com um editor derecursos os controles j estaro criados e s ser necessriored efin i-os para modificaralguma caracterstica dos mesmos se assim o desejar. Se esta criando a caixa de dilogo diretamente a sintaxe muito parecida dos comandos do CA-Clipper.
@ <nRow>, <nCol> ... OF oDlg

Lembre-se de especificar sempre OF oDlg , desta forma o controle saber a quem ele pertence (seu armazenador). Se esta criando a caixa de dilogo a partir de recursos possvel que necessite redefinir algum controle, para isso dever utilizar o comando
REDEFINE ID ... OF oDlg

que ser explicado em profundidade mais adiante. Para ativar a caixa de dilogo utilize o comando Activate
ACTIVATE DIALOG oDlg

Nosso primeiro programa com FiveWin


Vamos produzir nosso primeiro programa com FiveWin que ter as seguintes caractersticas:

J D M p a B o A e

a I e n a s

n e r t m

u o l r r e r a a a n o

c d

o e

m f e

u c

m h

a a r

n a

o j

d n s d d a

e o g a e

m n m j a

e o

n s t n e

s s l

a o p a

e n

n o a

s m n M c e o e o u m

c p

r i m e i r o p r o g r a m a FiveWin Validao de abandono da aplicao mediante a caixa de dilogo predefinida MsgYesNo O cdigo fonte deste pequeno programa pode ser encontrado no disquete com o nome: tutor2\exemplo1.prg. Ser reproduzido aqui por comodidade.
#include FiveWin.ch

STATIC oWnd

FUNCTION Main() DEFINE WINDOW oWnd TITLE Meu primeiro programa FiveWin ; Ortiz de Ziga, S.L. 12 12

Curso CA-Clipper + FiveWin MENU BuildMenu() SET MESSAGE OF oWnd TO Meu nome CENTERED

ACTIVATE WINDOW oWnd VALID MsgYesNO(Deseja sair?)

return nil

//-----------------------------------------------------//

Function BuildMenu() local oMenu MENU oMenu MENUITEM Fim ACTION oWnd:End() ENDMENU Return oMenu

Exerccios
1. Tente adicionar ao programa de exemplo uma barra de botes estilo 3D. 2. Faa um programa com uma opo de menu em sua janela principal que aoexecutar-se abra uma caixa de dilogo com o ttulo Minha primeira caixa dedilogo. 3. Faa um programa no qual cada vez que se pressionar o boto esquerdo do mouse soe um bip.
Ortiz de Ziga, S.L. 13 13

Curso CA-Clipper + FiveWin

CONTROLES do Windows
O que so os controles
Os controles na realidade so janelas com caractersticas especiais para facilitar a entradade dados e a comunicao da aplicao com o usurio. Dizemos que so janelas j quetodos eles so objetos herdados da classe Janela (tWindow) mesmo que primeira vista separecem muito pouco, mas o importante a se levar em conta que so objetos e que muitasde suas caractersticas so herana da classe genrica janela. Os controles devem ser incorporados apenas nas caixas de dilogo, porm, tambm podemser includos nas janelas se necessrio. CA-Clipper (sob MSDOS) s possui dois tipos decontroles que seriam o controle GET e o controle SAY que em Windows se chamam EDITTEXT e TEXT. O Windows inclui mais controles que melhoram substancialmente a interface com o usurio. Todos os controles herdam suas propriedades da classe tControl que por sua vez umaclasse herdada de tWindow. Cada controle do Windows est implementado no FiveWincom uma nova classe para fazer com que seu uso seja realmente simples. Voc no temporque saber a princpio como a hierarquia de classes do FiveWin porm recomendvelque desde o principio v adquirindo a sensao de compreender como realmente FiveWinpor dentro, j que isso permitir explora-lo ao mximo.

Os controles devem estar contidos sempre em uma janela ou caixa de dilogo e no podemter nenhum menu associado. Todos os controles tem um nmero identificador do mesmopelo qual podemos acessar quando utilizamos controles criados atravs de um editor derecursos. Neste captulo se faz uma relao dos controles padro e os mais importantes que se podemutilizar com FiveWin indicando as caractersticas de cada um deles, sua funcionalidade ealguns conselhos para sua utilizao, porm no se d uma explicao exaustiva sobre asdistintas clusulas de criao de cada um deles com comandos xBase, nem tampouco umarelao de todos os mtodos e dados dos mesmos. Para obter maior informao sobre cadaum destes controles utilize o guia Norton que acompanha a LIB FiveWin. Em uma caixa de dilogo onde se encontrem vrios controles somente um deles recebeinformao do usurio, se diz que esse controle temFocu s, quando um controle tem foco facilmente reconhecvel, no caso de um Get poder observar o cursor do teclado e no casode um boto observar um retngulo fino ao redor do ttulo do mesmo e uma marca maisescura que no resto dos botes. Nem todos os controles podem ter foco por no fazersentido, o caso de um Say ou Text. Para acessar um controle s temos que posicionar o mouse encima dele e fazer um click do boto esquerdo, com o teclado h duas formas de acessar, a primeira consiste em pressionar
Ortiz de Ziga, S.L. 14 14

Curso CA-Clipper + FiveWin

a tecla TAB com o que se passa o foco para o controle seguinte at que cheguemos aocontrole desejado, pressionando TAB avanamos at o controle seguinte e comAlt+TAB retrocedemos ao controle anterior; o segundo mtodo consiste em pressionar oatalho desse controle, se ele o tiver. Um atalho um pressionamento de teclado que diretamente nos leva ao controle desejado.Para criar um atalho temos que definir no ttulo ou caption do controle o smbolo & dianteda letra que queremos que atue como atalho e pressionando a tecla Alt mais a letraindicada saltaremos diretamente ao controle. No caso dos controles botes quandopressionarmos o atalho se produzir o pressionamento do mesmo. Deve-se ter a precauode no definir o mesmo atalho a dois controles j que sempre se saltar ao primeiro deles.Ha botes que podem receber foco porm no tem nenhum ttulo ou caption, pelo que aprincipio no possvel estabelecer nenhum atalho para os mesmos, porm isso possvel.O truque consiste em colocar o atalho no controle SAY que pode existir bem encima ou aolado e indicar que esse controle SAY tem a propriedade de grupo. No prximo captuloquando se estudar o Editor de Recursos ser possvel observar com maior clareza ofuncionamento. Aqueles controles que podem ter vrios estados, como por exemplo um boto: pressionadoou no pressionado, um checbox: verdadeiro ou falso, etc., podem ter seu estadomodificado pressionando-se o controle com o boto esquerdo do mouse ou tambmpressionando a tecla de espao quando esse controle tiver foco. Um controle pode estar habilitado (Enabled) ou desabilitado (Disabled), no primeiro casopoderemos dar foco a esse controle com o mouse ou pressionando o tabuladorsucessivamente at chegar ao mesmo e no segundo caso o controle ser mostradonormalmente em uma cor gris para indicar que no est disponvel. Neste captulo encontraremos muitas aluses possibilidade de criar controles a partir derecursos que possivelmente no compreenda como funcionam realmente, no sepreocupe por que no prximo captulo sero estudados em profundidade, simplesmentetenha em mente que um recurso um arquivo externo onde se guarda parte do programaexecutvel que so osd ad os, assim, por exemplo, a definio de uma caixa

dilogo comtodos os controles que incorpore podem ser definidos em um recurso e nosso arquivoexecutvel no tem por que produzir a criao dos mesmos, a idia fundamental que deveassimilar que qualquer controle pode ser criado diretamente a partir de programa outambm redefinido a partir de um recurso externo criado com um editor de recursos. Os controles podem ser criados diretamente ou tambm a partir de recursos, no primeirocaso devemos criar o controle utilizando comandos estilo xBase e indicando ascaractersticas principais do mesmo como o so coordenadas, texto, etc.
@ <nRow>, <nCol> GET oGet VAR uVAr ; OF oDlg ; PICTURE .... ; VALID.... ; WHEN.... ; ....

Porm, se o controle foi criado com recursos (explicar-se-a a forma de faze-lo no captuloseguinte) possvel que no necessite fazer nada com o controle como por exemplo umcontrole SAY com o qual no existe muito mais a fazer que apresenta-lo dentro da caixa dedilogo, porm pode ser que seja necessrio modificar o comportamento desse controlepara acomod-lo a suas necessidades, por exemplo, se for um campo Get devemos teralguma forma de saber que valor tem esse campo uma vez terminada a edio do mesmo,ou utilizar uma determinada mascara de edio, para todos esses casos se utiliza o comando REDEFINE que existe para todos os controles do FiveWin. Com este comando podemos
Ortiz de Ziga, S.L. 15 15

Curso CA-Clipper + FiveWin

no s obter uma referencia ao controle desenhado via recursos como tambm modificarseu comportamento e aparncia. Como comentado antes, todo controle tem umidentificador e graas a ele podemos acessar o mesmo, a sintaxe a seguinte:
REDEFINE CONTROL oControl ID.... OF oDlg

Por exemplo, para modificar a mscara de um Get e, alm disso, guardar o resultado de sua edio na varivel cData faramos o seguinte:
REDEFINE GET oGet VAR cData ID 101 PICTURE !!!!!! OF oDlg

Lembre-se bem o que acaba de ler porque esta uma das bases do FiveWin e uma de suas caractersticas mais poderosas. A diferena de outras linguagens que elasconstantemente subclassificam qualquer classe quando necessitam modificar qualquer dadoou comportamento da mesma. FiveWin utiliza a tcnica de redefinir que acreditamosque em muitos casos mais adequada e rpida. importante que ao criar os controles, indique sempre a que dilogo ou janela eles pertencem com a clusula OF:
... CONTROL ... OF oDlg

Ao criar controles diretamente a partir de cdigo fonte dever indicar a linha e coluna ondedeseja que apaream, igual s janelas ou aos dilogos, esta linha e coluna pode ser oequivalente a coordenadas tipo texto, ou tambm pode-se introduzir as coordenadasdiretamente em pixels incluindo a clusula PIXELS ao criar o controle. Se utilizarcoordenadas tipo texto tenha em mente que possvel introduzir valores decimais na linha ena coluna. possvel que o dado representado por um determinado controle varie durante a edio, oupor outro controle ou, por exemplo, por ser o campo de uma base de dados e o ponteiro denavegao do mesmo foi movido, nestes caso necessrio atualizar a informao contidanesses controles e, para isso, se utiliza um mtodo genrico do FiveWin implementado naclasse base tWindow que refresh.

oGet:Refresh()

Uma tcnica pouco usada pela maioria dos programadores FiveWin, porm muito prtica, utilizar a clusula UPDATE ao criar o controle. Quando inclumos esta clusula,podemos atualizar todos os controles com esta clusula simplesmente mandando o mtodoUpdate a seu dilogo armazenador.
oDlg:Update()

possvel controlar a dinmica da introduo de dados atravs dos eventos produzidos emcada controle. Por exemplo, quando um controle recupera foco voc pode indicar aexecuo de certa instruo simplesmente inicializando o dado bGotFocus que um code-block desse controle, bGotFocus um DADO da classe tControl que se for diferente deNIL avaliado quando o controle recebe foco. Por exemplo, se queremos que soe um bipquando um controle recebe foco, faramos o seguinte:
oControl:bGotFocus := {|| tone(100,2)}

Assim como o dado bGotFocus existem outros dados da classe para manipular o resto doseventos que podem ser produzidos. FiveWin inicializa para voc os code-blocks maisusuais dependendo do tipo de controle. Por exemplo, se em um check box queremoscontrolar quando seu estado alterado, existe uma clusula na criao do mesmo que ONCLICK, na realidade, o que o FiveWin faz via preprocessador associar ao dadobClicked da classe tCheckbox a instruo que voc introduziu no comando.
Ortiz de Ziga, S.L. 16 16

Curso CA-Clipper + FiveWin

nRow, nCol CHECKBOX oChk VAR lData ; OF oDlg ; ON CLICK MinhaFuncao()

Se no fosse utilizada a clusula ON CLICK poderamos fazer o seguinte:


oChk:bClicked := {|| MiFuncion()}

e o resultado seria o mesmo.

Tipos de controles
O Windows implementa de maneira padro, a partir de a verso 3.0, os seguintes controles:

Botes
Os botes do Windows permitem estabelecer determinadas operaes que so executadasquando estes so pressionados, sua funcionalidade muito parecida s opes de menu nosentido de que tem uma clusula ACTION na qual se indica a instruo a ser executadaquando o boto pressionado. Um boto pode levar a clusula DEFAULT que indica que a ao desse boto se executarquando se pressionar a tecla Enter, a no ser que esse controle no tenha foco nessemomento. Logicamente, s deve haver um boto com esta clusula em uma mesma caixade dilogo. Se o boto criado a partir de cdigo fonte possvel indicar uma imagem ou arquivo bitmap, isto uma caracterstica do FiveWin que no padro do Windows.

Barras de rolagem
As barras de rolagem o scrollbars so controles que podem ser usados numa infinidadede ocasies, por exemplo, podem servir-nos para navegar por um arquivo de texto, umabase

de dados ou uma imagem bitmap que no caiba em sua totalidade em uma caixa dedilogo. A caracterstica principal das barras de rolagem so as instrues que podem ser executadas ao produzir determinadas operaes com as mesmas (eventos), estas so as principais:

O O O O

n n n n

u d p p

p o a a w g g n e e u d p o w n

O n T h u m b p o s Os eventos Up e Down so produzidos quando se pressiona com o mouse osbotes superior e inferior da barra de rolagem. Page up e Page down soproduzidos quando se pressiona com o mouse no interior da barra de rolagemacima do boto-indicador ou por baixo do mesmo. O evento Thumbpos produzido quando realizamos um drag do boto indicador.
Ortiz de Ziga, S.L. 17 17

Curso CA-Clipper + FiveWin

Ao criar uma barra de rolagem deve-se indicar valores mximos e mnimos para amesma, assim como o incremento que se produzir no valor quando um eventotipo Page up o Page down produzido. As barras de rolagem podem ser horizontais ou verticais.

List boxes

Um listbox um controle que manipula listas que logicamente esto implementadas sob FiveWin como matrizes. Um listbox tem associado a si uma matriz com todos os elementos da lista e sempre ha um elemento que o ativo, a no ser que a matriz esteja vazia. Uma vez criado o listbox, pode-se adicionar, modificar, eliminar os elementos do mesmo utilizando os mtodos que o FiveWin proporciona para a manipulao desta classe. Na ltima verso do FiveWin foi incorporada a possibilidade de incluir algum bitmap ou imagem a cada um dos elementos.

Group boxes
Um Group box um controle que simplesmente engloba outros controles ou para que suaapresentao seja mais intuitiva, ou tambm por que os controles agregados atuam comoum nico controle, este o caso dos Radio buttons que so controles que mostram doisestados: ON|OFF . Quando vrios radio buttons esto contidos em um group box somenteum deles pode estar ON simulando efetivamente os botes dos antigos rdios.

Gets (Edit text)

Um Edit text o equivalente a um Get do CA-Clipper. Devido ao fato do Edit text padrodo Windows no manipular nenhum tipo de mscara ou picture ao estilo CA-Clipper,FiveWin implementa os gets utilizando um objeto Get genuno do CA-Clipper, includocomo dado dentro do objeto tGet, para efeitos prticos, isto significa que se alguma vezvoc manipulou diretamente a classe Get original do CA-Clipper pode seguir fazendo-ocom a simples precauo de atualizar o controle para que as modificaes sejamvisualizadas. A edio de um campo memo realizada atravs de um Get multi-line j que para oWindows o controle o mesmo. A diferena que o CA-Clipper no capaz de mostrarum campo memo como um get mltiplo. Esse get multi-line pode ter barras de scroll tantoverticais como horizontais. Um dos feitos do FiveWin foi a implementao das clusulas VALID e WHEN tpicas do CA-Clipper, j que estas duas clusulas no esto implementadas no Windows. As diferenas do CA-Clipper que se podem definir a justificao do texto: esquerda, centralizado o direita.

Says (Text)
Ortiz de Ziga, S.L. 18 18

O controle Say ou Text um texto fixo que pode ser ou no multi-linha e que pode estar justificado esquerda, centralizado ou direita.

Curso CA-Clipper + FiveWin

Sua funcionalidade muito parecida ao Say do CA-Clipper com a diferena de que por tratar-se de um objeto agora pode ser manipulado, alterado seu texto, etc.

Boxes

Os boxes so retngulos que permitem melhorar a apresentao de caixas de dilogo, dando um efeito 3D quando o comando a seguir utilizado no inicio do programa
SET 3D LOOK ON

Para que esse efeito seja efetivo deve existir a LIBCt rl 3d.dll , se possvel, no diretrio Windows\System de seu computador.

Radio buttons
Os Radio buttons so controles que mostram dois estados: ON|OFF, porm, quando vriosradio buttons esto contidos em um group box somente um deles pode estar ON simulandoefetivamente os botes dos rdios antigos. So utilizados quando se deseja umi nput de um nmero compreendido entre vrios valores.Por exemplo, se utilizarmos a varivel nCartao para armazenar o possvel carto a utilizar,1 poderia ser Visa, 2 Americam Express e 3 Dinners, cada uma das opes estariarepresentada por um radio button porm, logicamente, quando um deles estiver selecionadoo resto dever estar em OFF. Realmente so trs controles que atuam como um s. Por este motivo, talvez seja ocontrole mais complicado de utilizar. Quando definido via recursos no se deve esquecerde inclu-os em um group box. Se definido a partir de cdigo fonte ento se

comportacomo um nico controle e, da mesma forma, ao estabelecermos o REDEFINE paraFiveWin passam a ser um nico controle. A criao de um radiobutton a partir de cdigo fonte seria:
PROMPT Visa,Americam Express,Dinners ; OF oDlg

Row, nCol RADIO oRadioCart VAR nCartao ;

O redefine de um radiobutton a partir de recursos seria:


REDEFINE RADIO oRadioCart VAR nCartao ; ID 101,102,103 ; OF oDlg

Check boxes

Um check box um controle que pode ter dois estados: verdadeiro ou falso, e portanto se utiliza uma varivel lgica para recuperar seu valor. muito recomendvel seu uso em vez dos tpicos Gets que se faz com CA-Clipper de Sim/No.

Combo boxes
Um combo box um listbox drop down, ou seja, um listbox que quando no tem foco nosmostra o elemento ativo, porm, quando recebe foco, se abre como se se tratasse de ummenu tipo persiana.
Ortiz de Ziga, S.L. 19 19

Curso CA-Clipper + FiveWin

A vantagem fundamental deste tipo de controle que o mesmo necessita muito menosespao que o listbox, porm, s podemos ver todas as opes possveis quando acessamos omesmo. Sua operao exatamente igual ao listbox.

Controles Avanados
Os controles avanados so todos aqueles que no so padro do Windows. FiveWin implementa diretamente alguns controles que no existem no Windows, como ocontrole tWbrowse que permite manipular bases de dados, ou o controle tMeter que utilizado para mostrar barras de progresso de, por exemplo, uma reindexao. A Borland atravs de seu editor de Recursos permite tambm utilizar os j famosos BWCC(Borland Window Common Control) para isso temos que utilizar em nossos programas aLIB da Borland BWCC.DLL. FiveWin permite tambm utilizar controles criados por outros fabricantes como o so os controles VBX.

Browses
Os browses so controles especializados na edio de bases de dados, seu funcionamento parecido ao browse original do CA-Clipper, porm, sua implementao distinta j que adiferena deste que os browses do FiveWin no contm por sua vez objetos colunas, oque uma das limitaes do FiveWin, e o motivo pelo qual com a ultima verso seintroduziu um novo browse com objetos colunas porm manteve-se o original. Recomendamos utilizar o original do FiveWin sempre que possvel j que muito mais

rpido. A sintaxe muito parecida do controle List box com a diferena de que se utiliza a clusula FIELDS para indicar que campos de uma base de dados sero editados:
Ortiz de Ziga, S.L. 20

Barra de rolagem Barra de rolagem Boto Radio button Combo box List box Say (Text) Retngulo (box) Menu do sistema
20

Curso CA-Clipper + FiveWin

nCol> LISTBOX [ <oBrw> ] ; FIELDS <cFields,...> ; [ FIELDSIZES <aColSizes,...> ] ; [ HEAD | HEADER | HEADERS <aHeaders,...> ] ; [ ID <nId> ] ; [ SIZE <nWidth>, <nHeigth> ] ; [ ON CHANGE | ON CLICK <uChange> ] ; [ ON RIGHT CLICK <uRClick> ] ; [ ON LEFT DBLCLICK <uLDblClick> ] ; [ OF | DIALOG <oDlg> ]

A clusula HEADERS permite indicar o cabealho de cada uma das colunas. A clusula SIZE permite indicar o tamanho que ter o controle, opcional e se no for introduzida ser calculada automaticamente. A clusula FIELDSIZES permite indicar a largura de cada coluna em pixels, se omitidaesta clusula o controle se ajustar automaticamente, mas nem sempre de forma corretaporque como o Windows utiliza fontes ou tipos de letra proporcionais, um campo de 20caracteres nem sempre ocupa o mesmo em vdeo j que o i por exemplo ocupa muitomenos que o M, o controle browse calcula a largura de coluna baseando-se no tamanhodo campo multiplicado pela largura da letra B, possvel que ao mostrar campos todosem maisculas no seja possvel observar em algum campo a descrio completa, por outrolado, em campos muito compridos com letras minsculas parecer que se desperdia umagrande quantidade de espao. Uma soluo para este problema seria examinar todos osregistros da base de dados para ver qual o mais largo porm isto levaria uma grandequantidade de tempo, de qualquer maneira, este problema no to grave j que pode-semodificar a largura de qualquer coluna em tempo de execuo simplesmente fazendo um drag com o mouse. A partir do comando podemos manipular os eventos mais tpicos que um controle Browsepode ter como ON CHANGE que quando fazemos um clique sobre o objeto browse ealteramos o elemento ativo e portanto o ponteiro da base de dados, ON RIGHT CLICKquando pressionamos o boto direito do mouse ou o ON LEFT DBLCLICK que quandorealizamos um clique duplo com o boto esquerdo do mouse. habitual, sobretudo em ambientes MDI, fazer com que um browse ocupe toda a superfciede uma janela filha (Child), e que quando redimensionamos esta janela se redimensione ocontrole Browse, para isso FiveWin implementa um mtodo na classe tMdiChild, que omtodo :SetControl().
oChildWnd:SetControl(oBrowse)

A manipulao de janelas MDI ser explicado no captulo de programao avanada.

Tambm podemos criar browses a partir de recursos, porm, devido a esse controle no serum controle padro nem do Windows nem do Resource Workshop, temos que indicar aoWorkShop que queremos criar um controle de usurio (custom control). No prximocaptulo ser mostrado como produzi-lo a partir do Resource Workshop, porm uma vezrealizado, para implementa-lo em nosso programa faramos:
REDEFINE LISTBOX [ <oBrw> ] ; FIELDS [ <cFields,...>] ; [ FIELDSIZES <aColSizes,...> ] ; [ HEAD | HEADER | HEADERS <aHeaders,...> ] ; [ ID <nId> ] ; [ ON CHANGE | ON CLICK <uChange> ] ; [ ON RIGHT CLICK <uRClick> ] ; [ ON DBLCLICK <uDblClick> ] ; [ OF | WINDOW | DIALOG <oDlg> ] Ortiz de Ziga, S.L. 21 21

Curso CA-Clipper + FiveWin

O browse tem uma srie de mtodos especficos para bases de dados, como a possibilidadede estabelecer um filtro na mesma, a possibilidade de utilizar umarray em vez de uma basede dados, etc.. Um mtodo muito utilizado da browse o mtodo lEditCol que permite editaron- li ne ocampo onde se encontre o cursor. Por exemplo, se desejarmos editar o campo quando umclique duplo feito:
oBrowse:blDblClick := {|nRow, nCol, nFlags| ; oBrowse:lEditCol(nCol,...)

Consulte o guia Norton para obter maior informao sobre seu uso. Outro mtodo muito utilizado da classe Browse o mtodo :Report() que nos permite produzir um relatrio impresso do browse, realmente prtico para pequenos relatrios.

Meters
O controle Meter utilizado para mostrar barras de progresso e sua utilizao pode sermuito variada: um processo de reindexao, clculo complexo sobre uma base de dados,etc. FiveWin torna realmente simples o uso de barras de progresso sendo sua sintaxe a seguinte:
[ TOTAL <nTotal> ] ; [ SIZE <nWidth>, <nHeight> ]; [ OF <oWnd> ] ; [ UPDATE ] ; [ PIXO ] ; [ FONT <oFont> ] ; [ PROMPT <cPrompt> ] ; [ NOPERCENTAGE ] ; [ COLOR | COLORS <nClrPane>, <nClrText> ] ; [ BARCOLOR <nClrBar>, <nClrBText> ]

nCol> METER [ <oMeter> VAR ] <nAtual> ;

As caractersticas fundamentais de um Meter so o total que vai representar e o nmeroatual representado, ou seja, o total em uma reindexao seriam o nmero de registros e onmero atual seria o Recno, ou seja,
local nRecno := Recno() ,; nTotal := LastRec()

nCol> METER oMeter VAR nRecno ; TOTAL nTotal ; OF oDlg

Quando desejarmos atualizar o meter fazemos os seguinte:


nRecno += 1 oMeter:Refresh()

ou
oMeter:Set(nRecno+1)

Tambm podemos criar o Meter a partir de recursos, a sintaxe de REDEFINE a seguinte:


[ TOTAL <nTotal> ] ; [ ID <nId> ] ; [ OF <oWnd> ]; Ortiz de Ziga, S.L. 22 22

NE METER [ <oMeter> VAR ] <nAtual> ;

Curso CA-Clipper + FiveWin [ UPDATE ] ; [ FONT <oFont> ] ; [ PROMPT <cPrompt> ] ; [ NOPERCENTAGE ] ; [ COLOR | COLORS <nClrPane>, <nClrText> ] ; [ BARCOLOR <nClrBar>, <nClrBText> ] ;

Bitmap (Control)
O controle bitmap tem como misso a manipulao de imagens em formato bitmap, estecontrole nos permite colocar em uma caixa de dilogo qualquer imagem bitmap e dequalquer resoluo e nmero de cores. A imagem pode ser carregada a partir de um arquivo ou tambm de recursos. O controle Bitmap nos permite ajustar o bitmap s dimenses que desejamos utilizando omtodo Stretch ou a clusula Adjust no comando, da mesma forma se o bitmap maior quenosso controle podemos incluir barras de rolagem simplesmente adicionando a clusulaScroll. Sua sintaxe a seguinte:
[ NAME | RESNAME | RESOURCE <cResName> ] ; [ FILE | FILENAME | DISK <cBmpFile> ] ; [ NOBORDER | NO BORDER ] ; [ SIZE <nWidth>, <nHeight> ] ; [ OF | WINDOW | DIALOG <oWnd> ] ; [ ON CLICK | ON LEFT CLICK <uLClick> ] ; [ ON RIGHT CLICK <uRClick> ] ; [ SCROLL ] ; [ ADJUST ] ; [ CURSOR <oCursor> ] ;

w>, <nCol> BITMAP [ <oBmp> ] ;

[ PIXO ] ; [ MESSAGE <cMsg> ] ; [ UPDATE ] ; [ WHEN <WhenFunc> ]

Tambm podemos criar o controle a partir de recursos, a sintaxe de REDEFINE a seguinte:


BITMAP [ <oBmp> ] ; [ ID <nId> ] ; [ OF | WINDOW | DIALOG <oWnd> ] ; [ NAME | RESNAME | RESOURCE <cResName> ] ; [ FILE | FILENAME | DISK <cBmpFile> ] ; [ ON ClICK | ON LEFT CLICK <uLClick> ] ; [ ON RIGHT CLICK <uRClick> ] ; [ SCROLL ] ; [ ADJUST ] ; [ CURSOR <oCursor> ] ; [ MESSAGE <cMsg> ] ; [ UPDATE ] ; [ WHEN <WhenFunc> ]

Boto Bar (Button bar)


O boto Bar permite mostrar botes com uma imagem em seu interior dentro das barras debotes que se implementam com a classe Button Bar que como recordar servem paracolocar uma barra de botes em uma janela para ter um acesso mais rpido s opes demenu mais usadas.
Ortiz de Ziga, S.L. 23 23

Curso CA-Clipper + FiveWin

A imagem pode ser carregada a partir de um arquivo bitmap ou a partir de recursos. Se inclusa a clusula GROUP ser criado um separador entre o boto definidoanteriormente e o atual, da mesma forma se inclusa a clusula TOOLTIP mensagem serapresentada uma mensagem em uma janela flutuante logo abaixo do boto quando o cursorfor posicionado encima do mesmo. Sua sintaxe a seguinte:
[ OF | BUTTONBAR <oBar> ] ; [ NAME | RESNAME | RESOURCE <cResName1>; [,<cResName2>] ] ; [ FILE | FILENAME | DISK <cBmpFile1>; [,<cBmpFile2>] ] ; [ ACTION | EXEC <uAction> ] ; [ GROUP ] ; [ MESSAGE <cMsg> ] ; [ ADJUST ] ; [ WHEN <uWhen> ] ; [ TOOLTIP <cToolTip> ]

NE BUTTON [<oBtn>] ;

Tambm podemos criar o controle a partir de recursos, a sintaxe de REDEFINE a seguinte:

REDEFINE BUTTON [<oBtn>] ; [ ID <nId> ] ; [ OF | BUTTONBAR <oBar> ] ; [ NAME | RESNAME | RESOURCE <cResName1> [,<cResName2>] ] ; [ FILE | FILENAME | DISK <cBmpFile1> [,<cBmpFile2>] ] ; [ ACTION | EXEC <uAction> ] ; [ MESSAGE <cMsg> ] ; [ ADJUST ] ; [ WHEN <uWhen> ] ; [ UPDATE <lUpdate> ]

No faz muito sentido redefinir este controle j que no possvel cri-lo a partir derecursos visto que as barras de botes ainda que possam ser colocadas em dilogos no habitual (s em janelas), porm, este redefine pode ser usado para colocar um bitmap emum boto convencional do Windows que de outra forma no seria possvel seno usando oscontroles avanados da Borland (Bwcc.dll) explicados na continuao.

Uso de BWCC.DLL
No Resource Workshop da Borland podemos observar que alm disso dos controlesstandard do Windows existem outros adicionais que se autodenominam Borland ... stylesendo os pontos o equivalente controle padro, ou seja existe um Borland RadiobuttonSytle por exemplo, tambm existem outros controles que no tem seu controle padrocorrespondente como o controle Bitmap que nada tem que ver com o do FiveWin pormque de certo modo tem a mesma funcionalidade, porm, o do FiveWin mais potente. Seu funcionamento exatamente igual ao de seu controle padro correspondente e a nicaprecauo que temos que ter a de carregar a LIBB w cc.dll quando executarmos aaplicao.
LoadLibrary( "BWCC.dll" )

Por suposio, esta LIB deve encontrar-se no diretrio onde se executa a aplicao ou nos diretrios\ Win dow s ouWi n dow s\ S yst em .
Ortiz de Ziga, S.L. 24 24

Curso CA-Clipper + FiveWin

Exerccios
1. Faa um programa que inicie com uma caixa de dilogo com dois botes, um para iniciar uma segunda caixa de dilogo e outro para abandonar a aplicao. 2. Faa um programa que inicie com uma caixa de dilogo que contenha um listboxcom os nomes de todos os alunos e que quando selecionar um deles o contedo deoutro controle tipo Get seja atualizado com o aluno selecionado, da mesma formase se edita o Get e se modifica o aluno que a alterao tambm se reflita no listbox. 3. Faa um programa que contenha trs Gets e um boto de Aceitar, quandopressionar o boto verificar que nenhum dos Gets esteja em branco e se algumestiver, o programa dever dar um bip e dar foco ao primeiro controle que estejaem branco, caso contrario dever fechar o dilogo e mostrar uma mensagem comos dilogos predefinidos abaixo das funes Msg indicando que o processoterminou corretamente.

4. Faa um programa que contenha um controle Browse para editar a base de dados Alunos.Dbf e alm disso permita a edio on-line de qualquer de seus campos.
Ortiz de Ziga, S.L. 25 25

Curso CA-Clipper + FiveWin

RECURSOS DO WINDOWS
O que so os recursos ?
Os Recursos so uma das partes mais importantes na programao Windows. Podemosdefinir os recursos como o conjunto de dados que complementam qualquer aplicao paraseu funcionamento correto, ou seja, qualquer programa consta de uma lgica implementadaatravs de processos e dados que nos permitem dar corpo a toda a aplicao. A parte de dados de qualquer aplicao pode ser armazenada completamente ou em parteem uma LIB de carga dinmica (DLL) ou inclusa dentro do executvel, estes dados sotambm chamados recursos os quais podem ser manipulados e modificados externamente,fora do programa. A separao entre cdigo e dados o que permitiu o comeo da Programao visual, quepermite desenhar todos os dados que uma aplicao vai manipular visualmente para depoisinclui-os em nossa aplicao final. FiveWin est projetada para fazer uso extensivo dos recursos do Windows pelo que o usode um editor de recursos essencial na programao com FiveWin porm no absolutamente necessrio (lembre-se do comando REDEFINE). Graas a esta tecnologia podemos produzir autnticos programas Data-Driven, o quesignifica que podemos modificar os dados do programa sem necessidade de voltar acompilar ou relinkar a aplicao. O mais importante deste processo compreender como podemos criar um objeto a partir de um recurso e como definir o redefinir seu comportamento. Existem trs mtodos para criar um objeto com FiveWin: 1. @ nRow, nCol ...: Este o mtodo original do CA-Clipper que criaum objeto e imediatamente o mostra em vdeo, por exemplo o casode @ nRow, nCol GET. Neste caso o CA-Clipper que cria o objeto eno est baseado em recursos. 2. DEFINE <ObjectClass> <ObjectName>: Este segundo mtodo oprincipal para criar objetos no FiveWin, porm, esse objeto no apresentado, para isso temos que ativa-lo posteriormente com ocomando ACTIVATE... Este sistema tambm no est baseado emrecursos. 3. REDEFINE.... ID ...: Neste caso estamos utilizando recursos, o objetoest criado com antecedncia, porm voc necessita modificar oudefinir seu comportamento. Uma vez que tenha redefinido seu
Ortiz de Ziga, S.L. 26 26

Curso CA-Clipper + FiveWin

comportamento o objeto pode ser ativado utilizando o comando ACTIVATE... Se deseja utilizar recursos em suas aplicaes este o processo a segui:

Consiga um editor de recursos como o Borland Resource Workshop.

Este editor de recursos pode ser encontrado com quase todos oscompiladores da Borland para Windows, como Turbo C++, BorlandC++ ou Turbo Pascal. Comece a desenhar as caixas de dilogo de sua aplicao com o editor de recursos. Os recursos desenhados podem ser guardados dentro deuma DLL ou em um arquivo RC (os arquivos RC so arquivos ASCIIque podem ser compilados e agregados ao executvel). No diretrio \FiveWin\dll existe uma DLL vazia que pode ser utilizada para guardar recursos (faa uma copia da DLL vazia para cada projeto). Ao desenhar suas caixas de dilogo dever fornecer um nome distinto a cada uma delas, esse nome permitir selecion-las a partir doprograma. Cada controle incluso em suas caixas de dilogo dever terum identificador nico para esse dilogo e ser tambm atravs desseidentificador que poder redefinir cada um dos controles Se os recursos forem criados numa DLL dever indicar ao programa que vai utiliz-la com o seguinte comando:
SET RESOURCES TO <Arquivo.DLL>

Se os recursos forem criados em um arquivo RC, ele dever ser compilado com um compilador de recursos (RC.EXE) e includo no executvel. Uma vez criado o executvel realize o seguinte:
RC -K Programa.Exe

RC ou DLL?
Os dois sistemas so vlidos para guardar recursos, porm existem diferenas importantes entre eles: A principal vantagem de usar arquivo .RC que podemos utilizar DEFINES para renomear aos identificadores dos controles, o quesignifica que no temos necessidade de memorizar os identificadoresde todos os controles existentes, ou seja, pode criar um arquivo .CHcom os DEFINES necessrios e indicar ao arquivo .RC que tambmutilize esse arquivo. Outra vantagem que no necessrio utilizar o comando: SET RESOURCES TO ... O nico inconveniente do arquivo .RC que ter que compilar os recursos cada vez que o executvel gerado, porm este processo muito rpido. A principal vantagem de guardar recursos em uma DLL que possvel produzir autnticas aplicaes Data-driven e que uma mesma DLL pode ser compartilhada por varias aplicaes. O principal inconveniente das DLL que no possvel usar DEFINES para identificar cada controle.
Ortiz de Ziga, S.L. 27 27

Curso CA-Clipper + FiveWin

Tipos de recursos
Os recursos so dados que definem a parte visvel de um programa. Por exemplo, quandovoc abre uma caixa de dilogo e clica em um boto para produzir uma determinada tarefaem seu programa, voc esta utilizando na realidade recursos. Alm das caixas de dilogo ebotes seu programa pode incluir cones, cursores, bitmaps (imagens), menus e atalhos deteclado.

Dilogos
Um dilogo uma janela que comunica informao ao usurio e permite ao mesmoselecionar uma dentre varias opes, como abrir um arquivo, selecionar um cor, buscar umtexto, etc.

Menus

Os programas Windows podem incorporar uma barra de menu. Cada elemento de menu pode por sua vez incluir outro submenu. Por exemplo, quase todos os programas doWindows incorporam uma opo de menu Arquivo que inclui comandos para criar ou abrirum arquivo existente. Recomendamos produzir os menus diretamente a partir de cdigo j que muito mais rpido.

Atalhos
Os atalhos so combinaes de teclado que o usurio pressiona para produzir determinadastarefas. Por exemplo a combinao de teclado Alt+F4 um atalho para fechar a janelaou dilogo ativo. Em geral os programadores Windows utilizam os atalhos para duplicar funes de menu, permitindo ao usurio acessar estas funes de uma forma mais rpida.

Matrizes de Cadeias de Caracteres (String Tables)


Os string tables contm textos, como descries, perguntas, mensagens de erro, etc. que somostradas nos programas. A principal vantagem de utilizar string tables que possveltraduzir facilmente a aplicao para outro idioma por exemplo.

Bitmaps
Um bitmap uma representao binaria de uma imagem grfica. O Windows utiliza grandequantidade de bitmaps. Por exemplo, so bitmaps as imagens tpicas de qualquer janelacomo as barras de rolagem, o smbolo do menu de controle ou os botes de minimizar oumaximizar. FiveWin incorpora a classe tBitmap para facilitar a manipulao dos mesmos. Para introduzir um bitmap o mais prtico utilizar o comando BITMAP:
[ NAME | RESNAME | RESOURCE <cResName> ] ; [ FILE | FILENAME | DISK <cBmpFile> ] ; [ NOBORDER | NO BORDER ] ; [ SIZE <nWidth>, <nHeight> ] ; [ OF | WINDOW | DIALOG <oWnd> ] ; Ortiz de Ziga, S.L. 28 28

, <nCol> BITMAP [ <oBmp> ] ;

Curso CA-Clipper + FiveWin [ ON CLICK | ON LEFT CLICK <uLClick> ] ; [ ON RIGHT CLICK <uRClick> ] ; [ SCROLL ] ; [ ADJUST ] ; [ CURSOR <oCursor> ] ; [ PIXO ] ; [ MESSAGE <cMsg> ] ; [ UPDATE ] ; [ WHEN <WhenFunc> ]

Como podemos observar, no comando a clusula RESOURCE permite indicar o nome queo bitmap tem no arquivo de recursos, e a clusula FILE permite indicar o nome doarquivo .BMP, logicamente, deve-se utilizar uma ou outra clusula.

cones

Os cones so pequenos bitmaps, geralmente de 32x32 pixels de tamanho, utilizados para representar as aplicaes quando esto minimizadas. Toda janela que possa ser minimizada nos mostrar seu cone se o mesmo estiverincorporado ao executvel. Para indicar que uma janela tem um determinado cone issodever ser feito quando ela definida. FiveWin implementa um comando para criar o objeto tIcon e deve-se utilizar o jconhecido comando DEFINE WINDOW para criar a janela e associar o cone recmcriado.
DEFINE ICON oIcon RESOURCE "Meu_Icone" DEFINE WINDOW oWnd ICON oIcon

Se o cone da janela principal, este dever necessariamente ser criado a partir de recursose com um arquivo .RC. No resto dos casos o cone pode ser criado a partir de um arquivo.ICO. Tambm pode-se incluir um cone na sesso de controle em qualquer caixa de dilogo, tambm a partir de recursos ou criando-o diretamente a partir do FiveWin.
A partir de recursos: REDEFINE ICON <oIcon> ; [ ID <nId> ] ; [ <resource: NAME, RESOURCE, RESNAME> <cResName> ] ; [ <file: FILE, FILENAME, DISK> <cIcoFile> ] ; [ ON CLICK <uClick> ] ; [ <of: OF, WINDOW, DIALOG> <oWnd> ] ; [ <update: UPDATE> ] ; [ WHEN <uWhen> ] ; A partir de cdigo: @ <nRow>, <nCol> ICON [ <oIcon> ] ; [ <resource: NAME, RESOURCE, RESNAME> <cResName> ] ; [ <file: FILE, FILENAME, DISK> <cIcoFile> ] ; [ <border:BORDER> ] ; [ ON CLICK <uClick> ] ; [ <of: OF, WINDOW, DIALOG> <oWnd> ] ; [ <update: UPDATE> ] ; [ WHEN <uWhen> ]

Cursores
Ortiz de Ziga, S.L. 29 29

Um cursor um pequeno bitmap de 32x32 pixels de tamanho que representa a posio do mouse no vdeo. Os programas Windows utilizam os cursores para indicar o tipo de tarefa

Curso CA-Clipper + FiveWin

que est sendo executada em cada momento. Exemplos tpicos de cursores so a flecha, o relgio de areia ou o Hi-Beam de edio. Toda janela pode ter seu prprio cursor, que ser mostrado quando colocarmos o cursor domouse em seu interior. Tenha em mente que quando nos referimos a janela o estamosfazendo em sentido amplo, ou seja, dilogos e controles tambm podem ter seu prpriocursor j que tambm so janelas. FiveWin implementa um comando para criar o objeto tCursor e dever ser utilizado o jconhecido comando DEFINE WINDOW para criar a janela e associar o cursor recmcriado. Da mesma maneira quase todos os controles tem a possibilidade de ter um objetotCursor associado.
DEFINE CURSOR oCurosr RESOURCE "Meu_Cursor" DEFINE WINDOW oWnd CURSOR oCursor

Os cursores s podem ser utilizados a partir de recursos.

Fontes

Os programas Windows utilizam fontes para definir o tipo de letra, o tamanho e estilo do texto a utilizar. FiveWin utiliza a classe tFont para fazer seu uso mais prtico. Para criar uma fonte utilize o seguinte comando:
DEFINE FONT oFont NAME ARIAL SIZE 10,10

Pode-se especificar varias clusulas ao criar uma fonte como: NAME: O nome da fonte, Arial, System, Times, etc.. SIZE: O tamanho da fonte indicando largura e altura. Recomendamos que sempre indique um 0 para a largura e um nmero negativo para aaltura, desta maneira Microsoft Windows se encarrega deproporcionar a largura para altura dada.

B o I o U e u F t l a

O n T n N s b R i l t

L e

: e I e C

S m : m L r h U a S d l t a e a , I a d

e n S i N t E f a E R e a s e e

d g

e r

s i

e t

j o s c e e o

A t D e l O i

L e E j i M z s o a n

e : o n l

d i S t

d s

: s t c f

S a r a

u c d

u f

u n

i r

o e

forma iterativa mostrando-se ao usurio uma caixa de dilogo com todas as possibilidades de criao da fonte. Toda janela pode ter sua prpria fonte para todos os textos que mostre, tenha em mente quequando nos referimos a janela o estamos fazendo em sentido amplo, ou seja, um dilogo eum controle tambm podem ter sua prpria fonte j que tambm so janelas para isso pode-se especificar a clusula FONT na criao dos mesmos.
DEFINE FONT oFont NAME ARIAL SIZE 0,-12 @ 2, 2 GET cText OF oWnd FONT oFont

Resource Workshop
Neste ponto ser feita uma breve discusso sobre o Resource Workshop da Borlandobjetivando unicamente que o aluno se encontre confortvel o quanto antes possvel comesta potentssima ferramenta e portanto no tem inteno de mostrar todas e cada uma de
Ortiz de Ziga, S.L. 30 30

Curso CA-Clipper + FiveWin

seus possibilidades. Se desejar mais informao sobre este programa recomendamos queleia em profundidade o manual que acompanha o Workshop, sobretudo o captulo dedicado criao de caixas de dilogo. A partir deste editor de programas poderemos criar todos os recursos anteriormente enunciados atravs de um ambiente visual de uso muito fcil. Como se comentou anteriormente os recursos podem ser guardados em uma DLL outambm em um arquivo RC, no primeiro caso a descrio de cada um dos recursos guardada no prprio arquivo DLL, porm, quando se trata de arquivos RC, s se guarda adescrio de parte dos recursos que uma aplicao vai utilizar, assim sendo, o contedo decertos recursos estaro guardados em arquivos separados, assim, por exemplo, as imagensso guardadas em arquivos .BMP, os cones em arquivos .ICO e os cursores em arquivos.CUR. Os programas sob Windows utilizam nmeros para identificar cada um dos recursos. Vocutiliza estes nmeros em seus programas para acessar cada um dos recursos, porm, osnmeros no so muito descritivos e por isso se utilizam diretivas #DEFINE para associara cada nmero uma definio simblica. Normalmente sob CA-Clipper se guardam asdiretivas DEFINE dentro de um arquivo com extenso .CH. importante que cada vez que crie um projeto novo inclua em seu arquivo .RC a seguinte instruo:
#include "winapi.ch"

Esta instruo permite ao compilador de recursos (RC.EXE) resolver todas as referencias a identificadores e os possveis estilos de qualquer recurso ou controle. Em Winapi.chesto inclusos quase todos os possveis estilos de cada um dos controles, mas possvel quealgum no esteja, nesse caso o compilador de recursos avisar dizendo que no conhece umdeterminado identificador como por exemplo o identificador BBS_BITMAP que identificaum controle como do tipo Borland Bitmap Style, quando isto ocorrer quer dizer que noarquivo Winapi.ch no existe nenhum define que identifique BBS_BITMAP com nenhumnmero pelo que deve-se incluir no arquivo .RC manualmente a definio desseidentificador da seguinte maneira:
#define BBS_BITMAP 0x8000L

Para encontrar este nmero dever busca-lo no arquivo de nomeWi n dow s.h que se encontra no diretrio\ In clu de de seu compilador C que acompanha o Resource Workshop. A partir do Resource WorkShop pode-se abrir um projeto criado com um arquivo .RC ouatravs de uma DLL, mas tambm pode-se abrir simplesmente um arquivo bitmap, umcone o um cursor, simplesmente para edit-lo.

Recomendamos que no utilizem o Resource Workshop para criar seus menus e atalhos j que muito mais prtico cri-los diretamente a partir do FiveWin. muito fcil copiar recursos entre projetos. Para isso dever carregar o ResourceWorkshop varias vezes, abrir um projeto distinto em cada um deles e utilizar as opes deCopiar e Colar para ir copiando recursos de um projeto para outro. A melhor forma de aprender a utilizar o editor de recursos praticando e quando tiver alguma dvida consulte o help On-line que acompanha o programa.
Ortiz de Ziga, S.L. 31 31

Curso CA-Clipper + FiveWin

Caixas de Dilogo

Para criar uma caixa de dilogo dever ser utilizada somente a opo novo recurso, dilogo e na continuao introduzir todos os controles que sua nova caixa vai ter. Para introduzir controles dever selecionar primeiro o controle que deseja com o mousedentro da janela de controles disponveis e na seqncia clicar na rea da caixa de dilogoonde deseja colocar o controle. Uma vez criado o dilogo, poder modificar seu tamanho ou move-lo com o mouse. Paramodificar o estilo do dialogo realize um double-click em qualquer parte da caixa de dilogoe ser mostrada a janela de estilos da caixa de dilogo, no se assuste com a quantidade deestilos possveis j que no necessita conhecer mais que alguns deles, pelo menos noprincipio e, alm disso, a maioria deles so muito intuitivos. Para obter informaes sobre cada um dos estilos consulte o help On-line. Inclusive, alguns dos estilos no so manipulados pelo FiveWin pelo que no faz sentido utiliz-los.

Trabalhando com controles


Os controles se incluem dentro das caixas de dilogo para passar e acessar informao aosusurios. Se desejar obter mais informao a respeito dos controles consulte o captuloanterior deste Curso. No Resource Workshop existe uma paleta de controles, disponvel sempre que editamoscaixas de dilogo, que permitem de uma maneira simples e intuitiva a incluso de qualquercontrole na caixa de dilogo nas coordenadas e com as dimenses que desejarmos. Cada um dos controles tem por sua vez estilos que podem ser mostrados realizando um double-click em cada um deles.

Tab Stop
Uma vez introduzidos todos os controles em nossa caixa de dilogo poderemos identificarquais recebero foco quando se pressionar o tabulador e quais no, por padro o ResourceWorkshop, dependendo do controle, dar o estilo Tab Stop ao controle, sendo que omesmo pode ser alterado se o desejar. Por exemplo, um texto fixo no tem sentido quetenha este estilo.

Para estabelecer este estilo em cada controle pode-se acessar a janela de estilo de cada umdos controles ou tambm utilizar a ferramenta incorporada ao Resource Workshop na paletade ferramentas a qual simplifica tremendamente o trabalho.

Agrupando controles
O agrupamento de controles uma tcnica que permite ao usurio mover-se entre um grupode controles com as setas de cursor, por exemplo, o caso dos radio buttons. Quando seestabelece um agrupamento de controles, apenas o primeiro controle do grupo dever ter oestilo Tab Stop. Para definir um grupo de controles,
Ortiz de Ziga, S.L. 32 32

1. Se for necessrio mova os controles at que se encontrem todos juntos. 2. Clique sobre a paleta de ferramentas que mostra um G, ento, ocursor se converter em um G e cada um dos controles que oprimeiro membro de um grupo ser marcado com um retngulo. 3. Para cada grupo que queira definir, clique no primeiro membro de cada um deles de tal forma que seja marcado por um retngulo. No necessrio que se identifique o ltimo membro de um grupo. Esta tcnica de grupo tambm utilizada quando se quer proporcionar um atalho a umcontrole que no tem ttulo, como por exemplo um Get. Neste caso, se estabelece umgrupo entre esse Get e o Say associado, se associa um atalho ao Say e se d a propriedadeao Say do primeiro membro de grupo, alm disso, o Get deve ser o controle seguinte depoisdo Say na ordem em que se acessa.

Curso CA-Clipper + FiveWin

Ordem dos controles


Com esta ferramenta podemos modificar a ordem em que se acessa os controles. A ordem especialmente importante quando esto definidos grupos com os controles. Se os controlesno so ordenados perfeitamente, o usurio pode ficar muito confuso com a utilizao doprograma. Para estabelecer a ordem, utilize a ferramenta de ordenao que se encontra na paleta deferramentas representada por um boto com os nmero 1,2, ao pressionar esse boto oResource Workshop mostrar o nmero de ordem de cada controle, simplesmente cliquesobre cada controle para estabelecer a nova ordem, o primeiro controle clicado seconverter no controle nmero 1, e cada novo clique aumentar sucessivamente o contadorde ordenao at que todos os controles sejam clicados.

Ferramentas de alinhamento e ajuste de tamanho


O Resource Workshop inclui algumas ferramentas para alinhamento ou ajuste de tamanhode controles, esta ferramenta muito simples e economiza trabalho j que permite, porexemplo, forar que vrios controles tenham a mesma altura, a mesma

largura, estejamseparados vertical ou horizontalmente no mesmo espaamento, estejam centralizadosvertical ou horizontalmente na caixa de dilogo, etc. Durante o curso ser mostrado como produzir todas estas operaes.

Experimentando uma caixa de dilogo


No necessrio que compile e linque seu programa para observar como funciona suacaixa de dilogo recm criada j que o Resource Workshop proporciona uma ferramentapara testa-la. Simplesmente pressione o boto Test da paleta de ferramentas.

Controles criados pelo usurio


possvel indicar ao Resource Workshop que vamos utilizar controles que a princpio noesto disponveis no editor de recursos. Para isso, temos que pressionar o boto CustomControl representado por uma chave na paleta de ferramentas e indicar o nome de classeque vai ter o novo controle. Uma vez introduzido um controle customizado, faa umdouble-click para indicar o estilo do mesmo. Por exemplo, para incluir um controlebrowse do FiveWin o nome de classe seriatWb rows e e o estilo:
Ortiz de Ziga, S.L. 33 33

Curso CA-Clipper + FiveWin 0|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|WS_VSCROLL|WS_HSCROLL

Bitmaps, cones e cursores

A criao de bitmaps, cones e cursores realmente intuitiva e se parece muito ao PaintBrush do Windows pelo que acreditamos que no vale a pena nos expendermos nisso.

Exerccios
1. Faa um programa que acesse uma caixa de dilogo mediante um arquivo .RC e o mesmo programa acessando o dilogo atravs de uma DLL. 2. Faa um programa com uma janela principal que ao ser minimizada mostre umcone criado em uma DLL e, quando o cursor se encontrar dentro da janela seconverta no smbolo +. 3. Faa um programa com uma caixa de dilogo com um controle browse para acessar base de dadosAl un os.dbf. 4. Faa um programa com uma caixa de dilogo que contenha todos os tipos de controles disponveis no Resource Workshop atravs de um arquivo .RC.
Ortiz de Ziga, S.L. 34 34

Curso CA-Clipper + FiveWin

IMPRESSO EM FIVEWIN
Impresso em Microsoft Windows
A principal diferena existente entre Microsoft Windows e MSDOS no que diz respeito impresso, que sob Microsoft Windows se manipula a impressora de forma grfica. Issosignifica que podemos utilizar fontes de tamanhos distintos, poderemos produzir todo tipode figuras geomtricas como linhas, crculos, retngulos, etc. e inclusive incluir bitmaps(imagens) dentro de nossos relatrios.

FiveWin automatiza todo o processo oferecendo o mximo de potncia e flexibilidade e a mnima complexidade possvel. FiveWin implementa a impresso atravs de um objeto tPrinter o que faz com que a tarefaseja realmente simples. Alm disso, o FiveWin incorpora tcnicas para criar algunsrelatrios rapidamente sem necessidade de programar, como por exemplo:

Para gerar um relatrio da base de dados ativa simplesmente faa uma chamada funo Report().

Se desejar gerar um relatrio de um browse execute o mtodo :Report() desta classe.

Se quer produzir uma impresso de qualquer controle, dilogo ou janela, execute o mtodo :HardCopy(nZoom) do objeto. Se desejar produzir tarefas mais sofisticadas dever utilizar diretamente o objeto tPrinter ou utilizar o gerador de Relatrios que acompanha o FiveWin. Para criar um objeto tPrinter simplesmente utilize os seguintes comandos xBase:
PRINT oPrn NAME Meu primeiro relatrio PREVIEW PAGE ... oPrn:Say(nRow, nCol, cText, ...) ... ENDPAGE ENDPRINT

O comando PRINT cria um objeto tPrinter, e, a partir desse momento, j se pode manipular a impresso que os mtodos e dados desta classe oferecem. Podemos incluir a clusula FROM USER que mostra uma caixa de dilogo com todas asimpressoras disponveis para que o usurio escolha a que deseja. Se esta clusula no forincluda, a impressora selecionada ser a definida como padro no painel de controle, ou sefor utilizada a funo PrinterSetup() aquela que for definida.
Ortiz de Ziga, S.L. 35 35

Curso CA-Clipper + FiveWin

A funo PrinterSetup() permite selecionar uma impressora com todas as suas opes deresoluo, dimenso de pgina, etc.. porm somente para a aplicao atual, ou seja, no segravaro as alteraes realizadas. Esta mesma funo usada por uma multiplicidade deprogramas como por exemplo o Notepad na opo Especificar impressora. A clusula PREVIEW permite ver em vdeo cada uma das pginas a imprimir, podendo-se fazer Zoom de qualquer delas e imprimir as que se desejar. Normalmente criar varias pginas com as seqncias
PAGE ... ... ENDPAGE

E dentro das mesmas far chamadas ao mtodo Say da classe tPrinter para imprimir o textoque se deseja, tenha em mente que os parmetros de linha e coluna que recebe o mtodoSay temos que d-los em pixels e, dependendo da resoluo da impressora, os resultadossero distintos, por este motivo a classe tPrinter oferece vrios mtodos para resolver esteproblema:

:nVertSize() devolve a altura da pgina em milmetros :nHorizSize() devolve a largura da pgina em milmetros :nVertRes() devolve a resoluo vertical da pgina em milmetros

:nHorizRes() devolve a resoluo horizontal da pgina em milmetros

:nLogPixelY() devolve a resoluo por polegada vertical (por exemplo 300 ppp tpico das laser)

:nLogPixelX() devolve a resoluo por polegada horizontal :Cmtr2Pix(nRow, nCol): que transforma coordenadas em centmetros em coordenadas em pixels

:Inch2Pix(nRow, nCol): que transforma coordenadas em polegadas em coordenadas em pixels Na realidade, os mais usados sero estes dois ltimos. O problema das resolues distintas de cada impressora tambm nos afetaro com as fontes j que quanto maior a resoluo da impressora menores elas sero impressas, para isso o FiveWin inclui no comando de criao da fonte a clusula OF.
PRINTER oPrinter DEFINE FONT oFont NAME ARIAL SIZE 0,-10 OF oPrinter

Se depois disso verificarmos aos valores nHeight e nWidth do objeto tPrinter dar-se- conta que so valores muito superiores por terem sido redimensionados automaticamente. Lembre-se de destruir a fonte uma vez terminada a impresso com o mtodo End()
oFont:End() O RELEASE FONT oFont

O gerador de relatrios
O gerador de relatrios do FiveWin permite produzir quase qualquer relatrio de umaforma muito simples, entendendo por relatrio qualquer lista baseada em colunas deinformao.
Ortiz de Ziga, S.L. 36 36

Curso CA-Clipper + FiveWin

O gerador de relatrios faz um uso muito extensivo de classes, porm, graas aos comandos seu uso realmente simples. A sintaxe para criar qualquer relatrio a seguinte:
REPORT.... COLUMN ... COLUMN ... [ GROUP ... ] ENDREPORT ACTIVATE REPORT ...

Primeiramente deve-se fornecer toda a informao geral do relatrio como o ttulo, cabealho, rodap, fontes que sero utilizadas, etc.
REPORT [ <oReport> ] ; [ TITLE <bTitle, ...> [< LEFT | CENTER | CENTERED | RIGHT > ] ]; [ HEADER <bHead, ...> [< LEFT | CENTER | CENTERED | RIGHT > ] ]; [ FOOTER <bFoot, ...> [< LEFT | CENTER | CENTERED | RIGHT > ] ]; [ FONT <oFont, ...> ] ; [ PEN <oPen, ...> ] ; [ < SUMMARY > ] ; [ < FILE | FILENAME | DISK > <cRptFile> ] ; [ < NAME | RESNAME | RESOURCE > <cResName> ] ; [ < TO PRINTER > ] ;

[ < PREVIEW > ] ; [ TO FILE <toFile> ] ; [ TO DEVICE <oDevice> ] ; [ CAPTION <cName> ]

A clusula TITLE indicar o ttulo do relatrio sendo que pode-se incluir vrios ttulosseparados por vrgulas, o que permite que o ttulo ocupe mais de uma linha, alm dissopode-se incluir a clusula LEFT, CENTER o RIGHT, por padro o ttulo se mostrarcentralizado. As clusulas HEADER e FOOTER tm o mesmo funcionamento da clusula TITLE e servem para especificar o cabealho e o rodap do relatrio. Pode-se utilizar qualquer expresso que devolva uma cadeia de caracteres para definir ottulo, o cabealho ou o relatrio e, a cada impresso, a expresso ser avaliada, desta forma possvel indicar por exemplo que o rodap de pgina oReport:nPage e cada vez que seimprima o rodap de pgina oReport:nPage ser avaliado e portanto indicar perfeitamenteo nmero de pgina do relatrio. Em ltima anlise, o texto que voc introduzir comodescritor do ttulo, cabealho ou rodap de pgina convertido em codeblocks, para quepossam ser avaliados cada vez que o mesmo impresso. A clusula FONT permite indicar, separados por vrgulas, todos os objetos Fontes quesero utilizados no Report, no necessrio incluir a clusula OF oPrinter ao criar a fontej que o prprio gerador de relatrios se encarrega de redimensionar as fontes dependendoda resoluo da impressora. Uma vez indicadas as fontes para indicar por exemplo queuma coluna utilizar a primeira fonte da lista, simplesmente temos que fazer:
COLUMN DATA... TITLE... FONT 1

Lembre-se de que deve-se destruir as fontes quando terminar o relatrio. A clusula PEN permite indicar, separados por vrgulas, todos os objetos PEN utilizados noReport, um PEN um objeto que permite identificar a espessura e cor de uma linha, crculoou retngulo, ou seja, o equivalente a uma caneta. Como ver mais adiante possvel
Ortiz de Ziga, S.L. 37 37

Curso CA-Clipper + FiveWin

indicar ao gerador de relatrios que imprima linhas verticais de margem de colunas. Para criar um PEN utilize o seguinte comando:
DEFINE PEN oPen WIDTH 2

Lembre-se que deve-se destruir os Pens quando terminar o relatrio. Assim como no caso dos fontes se queremos que uma coluna tenha traos de margem dever utilizar a clusula GRID indicando o nmero de PEN a utilizar
COLUMN DATA... TITLE... GRID PEN 1

A clusula SUMMARY permite imprimir s um sumario do relatrio, ou seja, somente ainformao dos grupos. Logicamente no faz sentido utilizar esta clusula se no houvernenhum grupo criado. A clusula TO PRINTER permite mandar diretamente o relatrio impressora, PREVIEWnos mostra primeiramente o relatrio no vdeo e TO FILE exporta o relatrio para umarquivo ASCII. Se o objeto tPrinter sobre o qual se vai produzir o relatrio j tiver sidocriado podemos indic-lo utilizando a clusula TO DEVICE oPrinter. A clusula CAPTION permite indicar o ttulo do relatrio que ser mostrado na janela de pr-visualizao e a partir do administrador de impresso (Spooler). O prximo passo ser indicar as colunas desse relatrio com o comando:
COLUMN [ <oRptCol> ] ; [ TITLE <bTitle, ...> ] ; [ AT <nCol> ] ; [ DATA <bData, ...> ] ;

[ SIZE <nSize> ] ; [ PICTURE <cPicture, ...> ] ; [ FONT <uFont> ] ; [ < TOTAL > [ FOR <bTotalExpr> ] ] ; [ < LEFT | CENTER | CENTERED | RIGHT > ] ; [ < SHADOW > ] ; [ < GRID > [ <nPen> ] ]

A clusula TITLE permite indicar o ttulo da coluna, que pode ocupar varias linhas, separando-as por vrgulas. A clusula DATA utilizada para indicar os dados a serem impressos. No necessrioque sejam convertidos em cadeias de caracteres e podemos utilizar qualquer expresso.Assim como o ttulo, pode ocupar varias linhas. A clusula SIZE permite indicar a largura da coluna. Esta largura no em pixels e simem caracteres. No necessrio introduzir este valor j que o gerador de relatrios ocalcula para voc. A clusula PICTURE permite estabelecer uma mscara a ser utilizada para os dados. muito importante que se utilize a clusula Picture para os campos numricos que queiratotalizar em vez de fazer um Transform() do dado. A clusula FONT permite indicar que nmero de fonte deve ser utilizada para a coluna, dentre todas as indicadas quando se criou o Report. Aqui, podemos fornecer umaexpresso que devolva um nmero em vez do nmero diretamente. Por exemplo,poderamos fazer os seguinte:
COLUMN TITLE... DATA... FONT iif(Salario>100000,1,2) Ortiz de Ziga, S.L. 38 38

Curso CA-Clipper + FiveWin

desta forma o dado seria impresso com a fonte 1 quando o salrio for menor ou igual a 100.000 e com a fonte 2 quando for superior. A clusula TOTAL permite especificar se desejamos totais desta coluna e, alm disso, possvel incluir um condio de totalizao. Por exemplo:
COLUMN TITLE... DATA... TOTAL FOR NOME=INACIO

A clusula LEFT|CENTER|RIGHT permite indicar como se visualizar o texto tanto do ttulo como dos dados. A clusula SHADOW faz com que o fundo da coluna seja impresso em uma cor cinza claro e a clusula GRID permite colocar linhas de borda na coluna. Se necessrio, podemos estabelecer grupos de quebra para imprimir totais parciais das colunas com totais. Para isso devemos utilizar o comando:
GROUP [ <oRptGrp> ] ; [ ON <bGroup> ] ; [ HEADER <bHead> ] ; [ FOOTER <bFoot> ] ; [ FONT <uFont> ] ; [ < EJECT > ]

Lembre-se que podemos incluir tantos grupos quantos forem necessrios.


GROUP ON Empregado->Idade

A clusula ON permite indicar a expresso de quebra , ou seja, se queremos uma quebra quando mudar a idade, a expresso seria:
GROUP ON Empregado->Idade

As clusulas HEADER e FOOTER permitem indicar um cabealho e um rodap por cada grupo (s uma linha). A clusula FONT funciona exatamente igual as colunas. Com elas, indicamos a fonte utilizada na impresso da quebra.

A clusula EJECT permite produzir um salto de pgina a cada quebra. Para comear a impresso devemos utilizar o comando ACTIVATE REPORT que podeincluir uma srie de clusulas que permitem especificar condies de impresso e modificaro relatrio enquanto esta sendo gerado. nas clusulas ON onde se encontra o verdadeiro poder do gerador de relatrios e quando tiver experincia no uso delas, poder produzir absolutamente qualquer relatrio. A melhor forma de aprender a utilizar o gerador de relatrios executar e analisar em profundidade o tutorial que acompanha a FiveWin. O gerador de relatrios utiliza 4 classes para produzir seu contedo:

C C C C

l l l l

a a a a

s s s s

s s s s

e e e e

t t t t

R R R R

e L C G

p i o r

o n l o

r e u u

m p

Ortiz de Ziga, S.L. 39 39

Curso CA-Clipper + FiveWin

A classe tReport contm toda a informao geral de relatrio e armazenador do resto das classes. A classe tRLine utilizada para todas as impresses feitas horizontalmente em todo o corpo do relatrio, como por exemplo o ttulo, o cabealho ou o rodap de pgina. A classe tRColumn armazena toda a informao de cada uma das colunas do relatrio. Aclasse tReport tem um dado de nome ::aColumns no qual se guardam todos os objetostRColumn. Por ltimo, a classe tRGroup engloba todas as definies de grupo inseridas no relatrio. O gerador de relatrios foi criado em sua totalidade por Ortiz de Znhiga, S.L. e em concreto por Ignacio Ortiz de Znhiga.

Exerccios
1. Faa um programa que contenha um browse com o arquivo Alunos.dbf e um boto para imprimir a base de dados utilizando o mtodo que a classe browse incorpora. 2. Faa um programa que imprime uma ficha completa de um aluno manipulando diretamente a classe tPrinter. 3. Gere um relatrio com o gerador de relatrios de todos os campos do arquivo Alunos.dbf ordenando-o por nome e estabelecendo um grupo no campo sexo. 4. Tente incluir nesse relatrio um bitmap no canto superior esquerdo.
Ortiz de Ziga, S.L. 40 40

Curso CA-Clipper + FiveWin

MANIPULAO DE BASES DE DADOS

Mudanas na programao
FiveWin no impe nenhum tipo de restrio ou alterao no projeto habitual de bases dedados a partir do CA-Clipper e, assim sendo, podemos continuar trabalhando da mesmaforma que em MSDOS. Porm h certos pontos que devem ser levados em considerao:

Por padro, o Windows permite um mximo de 20 arquivos abertos poraplicao. Para conseguir abrir mais arquivos devemos utilizar a funoSetHandleCount() que pertence ao FiveWin e que recebe como nicoparmetro o nmero de arquivos que desejamos abrir e devolve os querealmente o Windows pde oferecer. O nmero mximo de arquivos abertos 255, porm, recomendamos que indique a quantidade que sua aplicaorealmente necessita.

Se desejar mostrar uma base de dados em duas janelas distintas isso sser possvel abrindo-a duas vezes com Alias diferentes. Alm disso,dever programar como se fosse um ambiente de rede, ou seja, no poderabrir as bases de dados em modo exclusivo e dever bloquear os registros cadavez que realizar uma operao sobre eles. Se estiver utilizando Windows 3.1ser necessrio carregar o programa SHARE.EXE antes de carregar Windows,para Windows 3.11 (trabalho em grupo) ou Windows 9x no necessrio.

FiveWin incorpora uma poderosa classe DataBase que pode lhe economizar muito tempo de programao.

Se estiver trabalhando com verses do CA-Clipper anteriores verso5.2d poder ter srios problemas com alguns RDDs, sobretudo com o driverDbfCdx. De qualquer maneira recomendamos que utilize o driver Comix ouSix os quais so excelentes.

O objeto Database
O objeto database foi desenhado com o nico propsito de tornar mais fcil a manipulaodos arquivos DBF, reduzindo consideravelmente a quantidade de cdigo necessrio parasua manipulao. O objeto DataBase no tem como objetivo substituir completamente a forma normal de se acessar os arquivos DBF, j que muitas vezes inclusive aconselhvel seu uso. Um objeto DataBase essencialmente um buffer em onde voc manipula os dados do arquivo e que posteriormente grava no arquivo fisicamente.
Ortiz de Ziga, S.L. 41 41

Curso CA-Clipper + FiveWin

Para cri-lo, s necessita utilizar o comando DATABASE depois de abrir a base de dados.
Local oDbf USE Alunos DATABASE oDbf

O objeto oDBF ter como dados todos os campos desse arquivo, ou seja, se a base de dadostiver um campo de nome CODIGO existir tambm no arquivo DBF um campo com omesmo nome. Quando for necessrio que o objeto database carregue novos valores deveremos utilizar omtodo :Load(). Podemos ento modificar qualquer campo utilizando os dados do objeto egravar as alteraes com o mtodo :Save(). Tradicionalmente qualquer programador CA-Clipper necessitava criar variveis locais queatuam como buffer para armazenar cada um dos valores de cada campo,

principalmentequando se programa em ambientes de rede. Outra alternativa era utilizar uma matrizcomo buffer e utilizar funes para carregar e gravar, cujos nomes mais usados devido aimplementao em FoxPro so Scatter() e Gather(). O inconveniente de usar matrizes que no podemos usar os nomes de campos diretamente e portanto temos que produzirDEFINES indicando que campo corresponde a cada elemento do array.
#define CODIGO aDbf[1] #define NOME aDbf[2]

O objeto database resolve completamente este problema, j que no ser mais necessriocriar variveis locais para cada campo, s ser necessrio criar uma nica varivel localpara guardar o objeto database. Infelizmente o objeto database tem uma limitao que no poder manipular nomes decampo com mais de 9 caracteres, j que internamente o CA-Clipper coloca uma imposiosob qualquer dado de classe e estes no podem ter mais de 10 caracteres de comprimento.De qualquer maneira, no uma limitao muito importante.

Exerccios
1. Faa um programa que contenha um browse do arquivo Alunos.dbf e um botopara editar o registro atual utilizando um objeto database, ao terminar a edio obrowse dever refletir as alteraes efetuadas. 2. Modifique o programa anterior para que funcione em rede local. 3. Faa um programa que abra duas janelas de uma vez, uma com o browse e outracom os dados do registro atual e que ao mover o browse automaticamente sejaatualizada a janela de registro. (utilizar um objeto database para a janela deregistro) .
Ortiz de Ziga, S.L. 42 42

Curso CA-Clipper + FiveWin

O DEBUGGER DO FIVEWIN
Utilizao do debugger
FiveWin oferece seu prprio debugger ou depurador. Para usa-lo, s temos que incluir oflag /b ao compilar os programas e ao executar a aplicao o debugger aparecerautomaticamente no vdeo. O debugger requer uma DLL para seu funcionamento chamadaF w dbf.dll. muito mais difcil depurar uma aplicao sob Windows que sob MSDOS, j que impossvel parar a atividade que o Windows realiza para interagir com o usurio. Porexemplo, cada vez que movemos o mouse o Windows manda mensagens a aplicaoindicando o movimento e a aplicao deve processar estas mensagens. De qualquer maneira, o depurador do FiveWin no de muita utilidade j que lhe faltamuita operacionalidade. Por isso, recomendamos utilizar a funo MsgInfo() nas partesdo programa onde seja necessrio um Watch-point. Esta soluo muito vlida, j queo processo compilar-linkar do FiveWin com Blinker muito rpido. Cada vez que um erro produzido no FiveWin, um arquivo de nomeE rro.l og gerado, no qual se mostra uma grande quantidade de informao.

Exerccios

1. Faa um programa com o debugger e inspecione o objeto janela alterando seus ttulos e, alm disso, execute um break-point ao fechar a janela.
Ortiz de Ziga, S.L. 43 43

Curso CA-Clipper + FiveWin

PROGRAMAO AVANADA
Refresh do sistema
Ao realizar processos que ocupem uma grande quantidade de tempo, como por exemplorastrear uma informao em uma grande base de dados, devemos levar em conta que oWindows no poder atualizar todo o sistema at que o processo termine. Por exemplo, seexistisse um relgio no vdeo, este ficaria completamente parado at que a buscaterminasse. Para resolver este problema, o FiveWin incorpora uma funo SysRefresh() que pode serchamada tantas vezes quantas forem necessrias e que permitir atualizar o sistema aoexecutar processos longos:
DO WHILE !Eof() .... SysRefresh() ... SKIP ENDDO

Manipulao de janelas MDI


Uma janela MDI aquela que por sua vez contm outras janelas em seu interior. Asjanelas filhas nunca podem sair do escopo da janela me, porm, podem ser movidas,redimensionadas, iconizadas, destrudas e criadas. Na realidade, uma janela MDI como o ambiente do Windows, porm para a sua aplicao. Se tivssemos que desenhar pessoalmente o ambiente MDI seria realmente um trabalho enorme, porm, o Windows nos oferece tudo o necessrio para produzi-lo. Para entender como funciona uma janela MDI temos que saber que na realidade existe umajanela invisvel que a janela cliente, ou seja, em um ambiente MDI existem trs classes dejanelas: Janela principal: tMdiFrame que a janela armazenadora da janelas filhas e a que por exemplo contm a barra de menu. Janela cliente: tMdiClient que a janela que realmente manipula as janelas filhas. uma janela invisvel. Janelas filhas: tMdiChild que so as janelas filhas da janela MDI.
Ortiz de Ziga, S.L. 44 44

Curso CA-Clipper + FiveWin

Criar janelas MDI realmente uma trabalho simples, o realmente complicado levar emconta que nos encontramos em um ambiente no-modal puro e portanto devemos manipula-lo com muita precauo. Por exemplo, se uma janela filha tem um arquivo de texto e outraum arquivo DBF quando selecionarmos a opo imprimir que possa existir no

menuprincipal nosso programa dever saber qual janela a que est ativa quando se seleciona aao de menu e atuar de acordo. Da mesma forma, se no existe nenhuma janela filha, aopo de menu imprimir deveria estar desabilitada. Enfim, um ambiente MDI supe maistrabalho para o programador para controlar todas as possveis situaes que podem serproduzidas num ambiente no-modal. Por todo isso recomendamos que s sejamproduzidos ambientes MDI quando todas as janelas filhas que sero abertas sejam domesmo tipo, como por exemplo, de tratamento de textos. Em um ambiente MDI podesedisparar uma determinada opo com uma caixa de dilogo e no uma janela filha. Recomendamos que no comece a utilizar janelas MDI at que se encontre realmente prtico com o FiveWin. FiveWin permite indicar um menu diferente para cada janela filha criada, porm,sinceramente no recomendamos que o faa j que consome uma grande quantidade derecursos do Windows e, alm disso, os atalhos de menu deixam de funcionar enquanto hajaalgum duplicado. Porm, se quer fazer um bom projeto, dever criar um menu paraquando no haja nenhuma janela filha e outro menu quando elas existirem. Tenha emmente que ao alternar de janela filha, o menu dever ser atualizado, o que pode ser umgrande trabalho. A nica diferena ao criar uma janela MDI que dever incluir a clusula MDI ao utilizar o comando de criao da janela.
DEFINE WINDOW <oWnd> ; [ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ] ; [ TITLE <cTitle> ] ; [ STYLE <nStyle> ] ; [ MENU <oMenu> ] ; [ BRUSH <oBrush> ] ; [ ICON <oIcon> ] ; [ MDI ] ; [ COLOR | COLORS <nClrFore> [,<nClrBack>] ] ; [ VSCROLL | VERTICAL SCROLL ] ; [ HSCROLL | HORIZONTAL SCROLL ] ; [ MENUINFO <nMenuInfo> ] ; [ NONE | SINGLE ] ; [ OF <oParent> ]

Uma clusula que s as janelas MDI (frame) possuem MENUINFO. Normalmente todasas janelas MDI devem ter incorporado como opo de menu a possibilidade de colocar asjanelas em cascada, lado a lado, iconiz-las ou selecionar uma delas a partir de menu. Comesta clusula indicaremos em qual nmero do menu principal queremos adicionar as novasopes. A medida que as janelas vo abrindo ou fechando, a opo de menu selecionadarefletir as alteraes. Para criar cada uma das janelas filhas temos que adicionar a clusula MDICHILD e indicar qual sua janela armazenadora com a instruo OF:
DEFINE WINDOW [<oWnd>] ; [ MDICHILD ] ; [ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ] ; [ TITLE <cTitle> ] ; [ BRUSH <oBrush> ] ; [ CURSOR <oCursor> ] ; [ MENU <oMenu> ] ; [ ICON <oIco> ] ; [ OF <oParent> ] ;

Ortiz de Ziga, S.L. 45 45

Curso CA-Clipper + FiveWin [ VSCROLL ] ; [ HSCROLL ] ; [ COLOR | COLORS <nClrFore> [,<nClrBack>] ] ; [ PIXO ]

As janelas filhas no podem ter um menu prprio, porm, podem ter uma barra de botes. Uma janela filha poder ter um browse ou um get multi-line e, alm disso, ao serredimensionada, queremos que se redimensione o browse ou o get. Para isso existe ummtodo na classe tMdiChild que :SetControl()
@ 0,0 GET oControl... MEMO OF oWndChild o @ 0,0 LISTBOX oControl BROWSE ... OF oWndChild oWndChild:SetControl( oControl )

Menus flutuantes
Como seu nome indica um menu flutuante um menu que pode aparecer em qualquer lugar de uma janela. Para criar um menu flutuante temos que indicar a clusula POPUP da seguinte forma
MENU oMenu POPUPMENUITEM ...MENUITEM ... ENDMENU ACTIVATE POPUP oMenu OF oDlg AT nRow, nCol

Normalmente menus pop-up so utilizados ao se pressionar o boto direito do mouse eportanto as coordenadas nRow, nCol seriam as coordenadas do mouse ao se pressionar oboto direito.
Static oWnd

Function Main()

DEFINE WINDOW oWnd... ACTIVATE WINDOW oWnd ON RIGHT CLICK PopuMenu(nRow,nCol) .... Function PopupMenu() local oMenu MENU oMenu POPUP MENUITEM ... MENUITEM ... ENDMENU ACTIVATE POPUP oMenu OF oWnd AT nRow, nCol Return NIL

Isso no funciona porque nRow e nCol tem as coordenadas relativas janela e o menu pop-up utiliza as coordenadas do vdeo (Windows desktop) ,assim sendo, temos que fazer umapequena converso de coordenadas de janela para coordenadas de vdeo:
local aCoors := {nRow, nCol} ... ClientToScreen(::oWnd:hWnd, aCoors) ... ACTIVATE POPUP oMenu OF oWnd AT aCoors[1], aCoors[2] Ortiz de Ziga, S.L. 46 46

Curso CA-Clipper + FiveWin

Os Brushes
Os brushes so objetos grficos que automaticamente preenchem a superfcie de outro objeto. Podemos criar brushes de uma determinada cor, com um estilo que corresponda a uma textura j definida e, inclusive com base em um arquivo bitmap. Seu uso consiste em primeiro defini-lo e depois inclui-lo na definio da janela ou dilogo.
DEFINE BRUSH <oBrush> ; [ STYLE <Style> ] ; [ COLOR <nRGBColor> ] ; [ FILE | FILENAME | DISK <cBmpFile> ]; [ RESOURCE | NAME | RESNAME <cBmpRes> ] ... DEFINE WINDOW oWnd BRUSH oBrush

Existe uma grande variedade de estilos predefinidos com os quais pode-se experimentar:

D H V F B C D B T B

i o e d d r i o i r

a r r i i o a r l i

g i t a a s g l e c

o z i g g s c a d k

n o c o o

a n a n n l

l t a l

a a

l l

r n

o d

O Clipboard
O clipboard um buffer onde se guarda informao que pode ser acessada por todas as aplicaes do Windows . FiveWin tem uma classe para acessar ao Clipboard que facilita bastante o seu uso. Uma das limitaes do FiveWin que ele s capaz de manipular informao de tipo texto. O primeiro passo definir o objeto clipboard e ativa-lo
DEFINE CLIPBOARD oClp OF oWnd ACTIVATE CLIPBOARD oClp

Uma vez definido poderemos utilizar os mtodos desta classe para produzir todas as operaes necessrias, que so:

o i o a

C m C n

l p l d

p a p a

: r : r

l o

a c

r l a o

( i t s

) p a b ( a

p o ) o

a a

r r p

a d a r a

e d

t a

D d

l o e

i C c

p l u

b p p

o : e

a G r

r e a

d t r D d a a t a d ( o ) s p d a o r a

r c

l i p b o a r d No esquea de fechar o clipboard uma vez que tenha terminado de usa-lo.


Ortiz de Ziga, S.L. 47 47

Curso CA-Clipper + FiveWin

Arquivos INI
Os arquivos INI so arquivos de texto que o Windows utiliza como arquivos deconfigurao de forma extensiva e que, alm disso, permite que qualquer aplicao crieseus prprios arquivos INI ou modifique os prprios do Windows. Como certamente deve saber, o Windows utiliza um arquivo INI para guardar sua configurao que o arquivoWi n .In i que se encontra no diretrio do Windows. Os arquivos INI esto divididos em sees e dentro de cada seo se incluem chaves seguidas pelo sinal de igual e pelo dado que deve ser guardado nesta chave.
// Arquivo WIN.INI [Intl] sLanguage=por

Neste exemplo a seo Internacional de nome abreviado Intl tem uma chave que sLanguage cujo valor atual por. Como pode-se imaginar, esta linha do arquivo Win.Ini esta indicando o idioma selecionado na configurao do painel de controle para a representao de nmeros e datas. Podemos observar que todo o trabalho que pode-se produzir com arquivos INI carregar ou gravar um determinado valor em uma chave dentro de uma seo especfica. FiveWin tem implementada uma classe tIni para manipular estes arquivos. Primeiramentedever abrir o arquivo desejado, se no for indicado nenhum nome que quer acessardiretamente oWi n .I ni . Na continuao fazemos todas as operaes que desejarmos e porltimo fechamos o arquivo.
INI oIni FILE "Arquivo.ini" GET cTitulo ; SECTION "Principal" ; ENTRY "Ttulo" ; OF oIni ; DEFAULT "Ttulo da janela" SET SECTION "Principal" ; ENTRY "Ttulo" ; OF oIni ; TO cTitulo DEFAULT

A clusula GET pode indicar um valor padro se o desejar. Outra caracterstica fundamental que o dado pode ser uma cadeia, um nmero, uma data ou um valor lgico, o que evita ter que fazer alguma transformao nos dados. Os arquivos INI podem ser de grande utilidade para guardar parmetros de seu programa.

Timers

Os timers so temporizadores que permitem executar uma instruo cada certo tempo. No aconselhvel o uso indiscriminado dos mesmos e as tarefas que executam devem sermuito rpidas e curtas.
Ortiz de Ziga, S.L. 48 48

Curso CA-Clipper + FiveWin

Um timer sempre associado a uma janela, ou seja, se se destri a janela se destri o timer. Para criar um timer temos primeiro que defini-lo e posteriormente ativa-lo. Pode-se desativa-lo com o comando Deactivate ou destrui-lo com o comando Release
DEFINE TIMER <oTimer> ; [ INTERVAL <nInterval> ] ; [ ACTION <uAction> ] ; [ OF | WINDOW | DIALOG <oWnd> ] ... ACTIVATE TIMER <oTimer> ... DEACTIVATE TIMER <oTimer> RELEASE TIMER <oTimer>

O intervalo dos timers se refere sempre em milsimos de segundo, ou seja, se indicado que o intervalo 1000 se produzir a instruo indicada na clusula ACTION a cada segundo.

Multimdia
FiveWin incorpora algumas capacidades multimdia como a possibilidade de reproduzir arquivos de som e de vdeo. Para reproduzir um arquivo de som de extenso WAV se utiliza a funo SndPlaySound() com o nome do arquivo que se quer reproduzir. Para reproduzir um arquivo de vdeo de extenso AVI FiveWin possui uma classe que tVideo com seus correspondentes comandos
@ 0,0 VIDEO oVideo FILE MeuVideo.avi SIZE 200,200 OF oWnd @ 2,0 BUTTON Play OF oWnd ACTION oVideo:Play(1)

Para reproduzir sons e vdeo necessrio que o computador tenha capacidades multimdia.

Controles VBX
Os controles VBX so controles especficos de Visual Basic especializados na realizao de determinadas tarefas. Estes controles se tornaram muito populares j que atualmente existem controles paraproduzir um grande nmero de tarefas de uma forma muito prtica. Por exemplo VisualBasic tem um controle para visualizar bitmaps, outro para produzir crculos, etc. Estapopularidade fez com que quase todas as linguagens de programao Windows tenhamsuporte para sua utilizao. Porm, os dias dos controles VBX esto contados j que sero substitudos por novoscontroles de nome OCX que s funcionaro em sistemas de 32 bits e sero baseados nautilizao de OLE de forma extensiva. De qualquer maneira, no parece que esse diaesteja muito perto j que novos controles VBX continuam sendo criados por muitascompanhias. Ha trs nveis de controles VBX devido ao fato que ha trs verses de Visual Basic nomercado, FiveWin e quase todas as outras linguagens, inclusive o Visual C++ da

Microsofts suportam o primeiro nvel, pelo que ao comprar um controle VBX assegure-se que de
Ortiz de Ziga, S.L. 49 49

Curso CA-Clipper + FiveWin

nvel 1. Quase todos os fabricantes de controles intentam ser de nvel 1 j que assim seu mercado potencial de venda muito maior. Grande quantidade dos controles Visual Basic j esto implementados diretamente pelo FiveWin pelo que no ser necessrio us-los. FiveWin se apoia no arquivoB iV bx.DLL da Borland para implementar o acesso aoscontroles VBX. Esse arquivo se encontra nos ltimos compiladores da Borland paraWindows e no fornecido com FiveWin. A ltima verso do Resource Workshop da Borland permite tambm trabalhar comcontroles VBX e para isso incorpora uma opo para adicionar estes controles. FiveWinpermite usar controles VBX tanto a partir de cdigo como a partir de recursos. Os controles VBX so armazenados em arquivos com a mesma extenso e para poderutiliz-los em nossos programas necessrio entregar estes arquivos ao futuro usurio egrav-los em seu diretrio\Wi n dow s\ S yst em. Sua funcionamento muito parecida ao de qualquer outro controle porm dependendo desua funcionalidade muito possvel que tenham propriedades e eventos muito especficosque no existam em nenhum outro controle visto antes. Antes de trabalhar com qualquer VBX importante que tenha a documentao do mesmo j que se no a tiver, muito provvel que seja incapaz de faze-lo funcionar corretamente. FiveWin incorpora um pequeno utilitrio para inspecionar os controles VBX. Esse programa se encontra em cdigo fonte que dever ser compilado e linkado. Seu nome VbxClass.prg e se encontra no diretrio \fw\Samples. Para criar um controle VBX a partir de cdigo:
@ <nRow>, <nCol> VBX [<oVbx>] ; [ OF <oWnd> ] ; [ SIZE <nWidth>, <nHeight> ] ; [ <file: FILE, FILENAME, DISK> <cVbxFile> ] ; [ CLASS <cVbxClass> ] ; [ ON <cClause1> <uAction1> ; [ ON <cClauseN> <uActionN> ] ]

Como pode observar sua sintaxe muito parecida de qualquer controle porm com uma serie de diferenas: Deve especificar o arquivo VBX a usar. Deve especificar a classe do controle, informao que deve ser proporcionada pelo fabricante do controle. Pode coincidir ou no como nome do arquivo, se no conhecer o nome no inclua esta clusula jque opcional. Se seu controle no executa corretamente, possvelque tenha que indicar o nome de classe. As clusulas ON permitem qualquer verbo, ou seja, voc pode incluir no comando a clusula ON LUNES porm possivelmente noservir para nada. Temos que nos concentrar nos eventos que ocontrole possui pois so eles que devem ser includos na clusula ON.Por exemplo muito provvel que seu novo controle responda clusula ON CLICK.
Ortiz de Ziga, S.L. 50 50

Curso CA-Clipper + FiveWin

Alguns controles no funcionam bem dentro de uma janela e s funcionam em caixas dedilogo. Sempre que utilizar um controle VBX em uma caixa de dilogo utilize um editorde recursos porque isso evitar uma grande quantidade de problemas. Para criar (redefinir) um controle VBX a partir de recursos:
REDEFINE VBX [<oControl>] ; [ ID <nId> ] ; [ OF <oDlg> ] ; [ COLOR <nClrFore> [,<nClrBack>] ] ; [ ON <cClause1> <uAction1> ; [ ON <cClauseN> <uActionN> ] ]

como podemos observar a sintaxe muito parecida de qualquer controle.

ODBC
ODBC o padro proposto pela Microsoft para acessar bases de dados a partir de aplicaes Windows. ODBC para o Windows o que o RDD para o CA-Clipper. CA-Clipper RDD uma arquitetura aberta para utilizar uma multiplicidade de drivers queacessam bases de dados. ODBC uma arquitetura aberta para utilizar em todas asaplicaes Windows. De a mesma maneira que CA-Clipper tem um mecanismo interno para a manipulao dosRDD, o Windows possui seu prprio mecanismo cujo nome Odbc.dl l o qual permite quequalquer driver ODBC se comunique com ele, fazendo que para o programador s existaum nico driver, ou seja, o mesmo cdigo independentemente do sistema de arquivos quese utilize, inclusive acesso a dados atravs de servidores SQL. ODBC impe suas prprias regras de utilizao pelo que ter que ajustar-se s mesmas. Seest familiarizado com linguagens SQL no ser muito difcil, porm, se s tiverexperi6encia programando com bases de dados navegacionais (Cobol, dBase, Paradox) oprocesso de aprendizagem pode ser acentuado j que dever aprender SQL. ODBC no a panacia. S temos que comparar a rapidez de qualquer driver RDD doCAClipper com o driver de manipulao de arquivos DBF proporcionado pela Microsoftem Visual Basic ou Access. Realmente as diferenas so tremendas, no obstante estclaro que ODBC o futuro e que com o tempo os drivers para ODBC sero melhores e asmquinas mais potentes. FiveWin + ODBC permite fazer algo que at agora era impossvel que acessar servidoresSQL sob ambiente cliente-servidor, j que da mesma forma que seu programa capaz deacessar dados locais com um driver ODBC para arquivos Dbase, s temos que modificar odriver para indicar que agora os dados sero encontrados em um servidor UNIX com ummecanismo SQL de Oracle por exemplo. Se os sistemas que voc vai desenvolver vo ser utilizados em empresas mdias ou grandes,recomendamos que comece j a desenvolver sob ODBC. Em qualquer outro caso utilizeos RDD do CA-Clipper. FiveWin utiliza uma classe para acessar qualquer base de dados via ODBC que a classetDbOdbc na qual esto implementados comandos principalmente um para criar umaconeco ODBC e outro para estabelecer as consultas.
Ortiz de Ziga, S.L. 51 51

Curso CA-Clipper + FiveWin

Para fazer uma transio mais simples a partir de arquivos Dbase para ODBC, FiveWinimplementou a classe ODBC de forma que prossigamos utilizando o mesmo esquemadBase para acessar os dados. Para utilizar ODBC a partir de qualquer aplicao Windows deve-se assegurar que todos osusurios que vo utilizar a aplicao tenham carregado em seu computador o driver ODBCe que alm disso este esteja configurado corretamente. ODBC necessita saber a priori quebases de dados sero utilizadas via ODBC e que drivers vo utilizar, pelo que deve-seconfigura-lo em cada uma das mquinas. Para estabelecer uma coneco ODBC deveremos incluir no arquivo .Prg a instruo
#include sql.ch

e utilizaremos o seguinte comando:


DEFINE ODBC <oDbc> ; [ NAME <cName> ] ; [ USER <cUser> ] ; [ PASSWORD <cPassword> ] ; [ CONNECT <cConnect> ] ; [ FROM USER ]

oDbc a varivel que carrega o objeto recm criado. A clusula NAME o nome da base de dados a utilizar e que corresponde com o nome queconsta na configurao do ODBC e no com o nome de nenhum arquivo DBF. Uma nicaconeco ODBC pode acessar mltiplos arquivos DBF, assim sendo, quando configuramosODBC devemos indicar que arquivos sero acessados atravs de um determinado NAME. As clusulas User e Password so utilizadas em algumas conexes ODBC e nem sempre so necessrias. A clusula CONNECT utilizada no caso de uma coneco a um mecanismo SQL e temos que introduzir o Data Source Name que pode ser por exemplo Oracle-Serv1. Como podemos observar no comando permitido selecionar a coneco ODBC de forma interativa. Se ocorrer algum erro na coneco, podemos verificar com o dado :nRetCode do objeto oDbc que ter um valor diferente de zero. Uma vez estabelecida a coneco, poderemos produzir qualquer consulta com o comando
ODBC oDbc EXECUTE cCommand

O cCommand uma cadeia com qualquer instruo SQL que seja suportada pelo driver utilizado, como por exemplo:
ODBDC oDbc EXECUTE SELECT * FROM CLIENTES

Temos notado que este comando no funciona ao menos na ltima verso do FiveWin eque foi implementada uma classe nova de nome OdbcStmt que se encarrega de fazer asconexes fsicas e manter a informao de cada consulta que se faa ao objeto oDbc. Estenovo objeto se encarrega de estabelecer a coneco fsica com o driver ODBC da seguinteforma:
oStmt := OdbcStmt:New(oDbc) Ortiz de Ziga, S.L. 52 52

Curso CA-Clipper + FiveWin

da mesma forma deveremos verificar o dado oSmt:nRetcode para ver se a coneco foi correta. Uma vez estabelecida a coneco pode-se utilizar o mtodo :Execute() para produzirqualquer consulta. No caso de uma instruo SELECT o objeto oStmt ter toda ainformao do Cursor. Um cursor em SQL um handle a uma tabela temporria

criadaatravs da instruo SELECT, com a instruo Fetch obtemos em SQL todas as colunas databela temporria. Para mais informao consulte qualquer livro sobre SQL. Recomendamos que analise em profundidade o programa de exemploOdbc1.prg no qual se mostra a atual forma de utilizar ODBC.

Manipulao de DLLs
A partir do FiveWin podemos acessar qualquer biblioteca de ligao dinmica para utilizala em seus prprios programas. Para poder utilizar qualquer funo que se encontre em uma DLL devemos primeiramente defini-la com o seguinte comando
[ <Param1> AS <Type> ] ; [ <ParamN> AS <Type> ] ) ; AS <return> [PASCAL] LIB <DllName>

LL [STATIC] FUNCTION <FunName>( ;

este comando dever ser includo no princpio ou final de seu .Prg e nunca dentro de uma funo o procedimento. FunName o nome da funo, recorde que no pode ter mais de 10 caracteres, Paramx indica o nome dos parmetros que a funo receber etyp e indica o tipo destes parmetros que pode ser:

B e W W o L t o D

t c

e o r d p d , r g ( p r b

, m , h i , 4 i l m e m p

c r B D e S b e

h i o C n t y n (

a m o

r e l ( t o i e t o b n s ) , 2 ) n

( t

1 o H b ) a y

o n m o r m o

n t

d e

l s

, d e

h c

r t

, d e

P c

c o m p r i m e n t o ) Return indica o tipo de dado que a funo devolver. Os valores podem ser os mesmos

que o tipo. A clusulaLi b indica o nome da LIB a ser utilizada. Por ltimo, a clusulaPascal indica se a funo acessada utiliza conveno Pascal o no,normalmente todas as funes da API do Windows utilizam conveno Pascal. (quando emC uma funo definida como tipo Pascal ela no distingue entre maisculas nemminsculas e alm disso no coloca o underscore no princpio da funo). Uma das melhorias introduzidas na ltima verso do FiveWin a possibilidade de passar ponteiros a estas funes. Para isso s temos que passar o parmetro por referncia. Se sua aplicao faz uso extensivo de funes que se encontrem em uma DLL prefervelproduzir um pequeno mdulo em C para acessar as mesmas j que a velocidade aumentaconsideravelmente. No captulo de coneco com a API ser mostrada a forma de faze-lo.
Ortiz de Ziga, S.L. 53 53

Curso CA-Clipper + FiveWin

Dynamic Data Exchange (DDE)


DDE um sistema de comunicao entre aplicaes. Para poder estabelecer umacomunicao entre duas aplicaes necessrio que uma delas seja DDE cliente e a outraDDE servidor ou vice-versa. O DDE cliente o que iniciar a conversao e pedir aoservidor que execute uma srie de aes. A sintaxe dessas aes ou verbos dependero doservidor DDE. FiveWin pode atuar tanto como cliente ou como servidor DDE. Para poder estabelecer a comunicao com um servidor DDE necessrio conhecer todosos verbos que esse servidor admite e embora parea mentira muito poucos fabricantes desoftware fornecem informao exaustiva sobre DDE. Por exemplo, a documentao queacompanha o SDK do Windows s oferece informao DDE do gerenciador de programas(Progman.exe). Se deseja utilizar a partir do FiveWin qualquer ferramenta de gerao de relatriosproduzido por outro fabricante como CA-Ret, Crystal Reports, R&R, Report Smith, etc.no ter como faz-lo seno atravs de uma ligao DDE. Tenha em mente que DDE tem limitaes e exige que ambas aplicaes estejam carregadas na memria. FiveWin incorpora uma classe e um conjunto de comandos para produzir ligaes DDE. Os passos necessrios em qualquer ligao DDE so os seguintes:

E o e A P o F

s n r t r m t i

t e v i o u o n

a c i v d n d a

b d a u i o l

e o r z c

l o r

c c D

e o D c a

r m E o n

a o

c s

a i a E r x a r e

c m

o c a u

c t

o e

m ( )

o n e c o . Para estabelecer a coneco utilizamos o seguinte comando


DEFINE <dde:DDE,LINK> <oDde> ; [ SERVICE <cService> ] ; [ TOPIC <cTopic> ] ; [ ITEM <cItem> ] ; [ VALID <uEnd> ]

A clusulaS ervice indica a aplicao que vai atuar como DDE server, devemos ter a precauo de que esta aplicao esteja carregada utilizando a funo WinExec()
#DEFINE SW_MINNOACTIVE 7 ... nStatus := WinExec(Server.Exe,SW_MINNOACTIVE) IF nStatus < 32 .and. nStatus != 16 MsgStop(Erro - no foi possvel disparar Server.exe) QUIT ENDIF

As clusulasTop i c eI tem so opcionais e seu uso depende do servidor DDE o requerer. A clusulaVal id utilizada para produzir qualquer operao ao finalizar a coneco DDE.
Ortiz de Ziga, S.L. 54 54

Curso CA-Clipper + FiveWin

Manipulao de arquivos de Help


Neste captulo se dar informao de como acessar um arquivo de help para Windows, em nenhum caso se explicar como confeccion-lo. Existem no mercado produtos muito bons para desenhar arquivos de help, dos quais sepodem destacar dois deles, o primeiro e mais espetacular Visual Help da WinWare Inc.(CIS: 70272,1656) o qual tem um ambiente visual muito atrativo, e o segundo o Quickand dirty help de Phil Allen software. Ambos produtos so shareware e podem serencontrados em vrios BBS e CD-Roms. Existem produtos mais profissionais pormcremos que para a maioria dos programadores so excessivamente complexos e de umadificuldade desnecessria. FiveWin incorpora uma srie de funes para acessar helps do Windows, no princpio de sua aplicao dever designar qual seu arquivo de help com a instruo
SET HELP TO Ajuda.hlp

Uma vez realizada esta instruo poder utilizar uma srie de funes para invoc-lo, as mais importantes so as seguintes: HelpIndex() que ativa o help mostrando o ndice do mesmo. Pode-se invocar HelpIndex() a partir de uma opo de menu HelpContedo. HelpSearch(cTexto) que ativa o help e busca a cadeia cTexto. Se no for introduzido nenhum texto, o programa solicitar ao operador. HelpTopic(nTopic) que permite ativar em um determinado tpico. O FiveWin, em sua ltima verso, melhorou substancialmente seu sistema de help.Atualmente s necessrio estabelecer o arquivo de help a utilizar, do resto o FiveWin seencarrega. O sistema funciona da seguinte maneira, ao criar uma janela, um dilogo ou um controle,poder indicar, se o desejar, um nmero para identificar o tpico correspondente de seuhelp (oWnd:nHelpId) e quase todos os controles e janelas tem a possibilidade de associ-lodiretamente com seu comando. Quando o usurio pressionar F1 em qualquer parte daaplicao o FiveWin buscar o identificador do help na janela ou controle que tenha foco,e, se o identificador for zero, ir ascendendo a sua classe me at encontrar umidentificador diferente de zero. Se no encontrar nenhum identificador diferente de zeromostrar o ndice do help. Quase todos os programas que implementam Helps para Windows criam um arquivo decabealho com os defines de todos os tpicos existentes cuja extenso costuma ser .hhh,pelo que s ter que fazer um INCLUDE desse arquivo em seus arquivos .PRG e ao indicaro identificador de help no utilize o nmero e sim o smbolo descritor do mesmo no arquivo.HHH que o mesmo utilizado com a ferramenta de gerao de helps. Se deseja incluir um boto de help para um dilogo na clusula ACTION desse boto ponha s
oDlg:HelpTopic()

Tambm possvel associar um identificador de help a cada opo de menu.


Ortiz de Ziga, S.L. 55 55

Curso CA-Clipper + FiveWin

Exerccios
1. Faa um programa que abra uma base de dados qualquer com um browse sob um ambiente MDI com uma opo de menu para imprimi-la. 2. Faa uma janela que quando pressionar o boto direito mostre um menu Pop-up com as opes Um, dois e trs 3. Coloque um brush qualquer no programa produzido anteriormente 4. Faa uma caixa de dialogo com um get e dois botes, um para fazer um copy do dado do Get ao Clipboard e outro que faa um Paste do clipboard ao Get. 5. Faa um programa que guarde em um arquivo INI o Ttulo da janela e suas coordenadas ao abandonar a aplicao. 6. Faa um janela que mostre a hora atual utilizando um timer 7. Crie uma caixa de dilogo na qual se utilize o controleSw i t ch .V bx. 8. Faa um programa que crie um novo grupo no gerenciador de programas de nome Prova e com um elemento que execute o Notepad com o arquivo Autoexec.bat.
Ortiz de Ziga, S.L. 56 56

Curso CA-Clipper + FiveWin

OBJECTS: MECANISMO OOPS DO FIVEWIN


O FiveWin incorpora ao CA-Clipper um mecanismo para programao orientada a objetos de nome OBJECTS. Como pode-se observar at agora temos utilizado uma vasta gama de objetos novos que no existem normalmente em CA-Clipper e que logicamente foram criados pelo FiveWin. A grande vantagem que o FiveWin oferece que, alm disso, voc pode criar suas prpriasclasses, herdar das j existentes e inclusive modificar as atuais j que FiveWin oferecetodos os fontes das classes que utiliza. At o momento no construmos nenhuma classe nova nem modificamos nenhum dado oumtodo de nenhuma j que no foi necessrio. Porm seria uma lstima no aproveitarem benefcio prprio as possibilidades que a OOPS nos oferece. Quando tiver prticacom a programao orientada a objetos se perguntar como alguma vez pde programarsem ela.

Hierarquia de classes
No que concerne manipulao de janelas, o FiveWin utiliza uma classe base tWindowque herdada pelo resto das janelas e dilogos e uma classe intermediria de nome tControlque por sua vez herdada por todos os controles. Do resto das classes, quase nenhumatem classe superior.
TDDE Dynamic Data Exchange Tfont Font Class Twindow Window base Class Tdialog Dialog Boxes Tbar

Button bar TMdiFrame MDI support TMdiClient MDI support TMdiChild MDI support TMsgBar Messages bar Tcontrol Base Class for controls Tbitmap Pictures in Bitmaps Tbutton PushButtons TCheckBox Logical checkboxes TComboBox Get + ListBox functionality Tget Typical Clipper GET Ticon Icons as controls TListBox ListBox selection list Tmeter Meter controls Ortiz de Ziga, S.L. 57 57

Curso CA-Clipper + FiveWin TMultiGet Gets for Memo editing Tradio Radio controls TScrollBar ScrollBars controls TVbX Visual Basic controls TWBrowse Browse controls Tmenu Menu Class TMenuItem Menu MenuItems Tblock FiveWin disk-storable codeblocks TMCI Media Control interface Tvideo AVI Video controls TRadMenu Radio Controls Menu Tprinter Printer Class Treport Report engine TrColumn Report engine TrGroup Report engine TrLine Report engine Ttimer Timer Class

Acesso aos dados e mtodos


Podemos acessar qualquer dado ou mtodo de uma classe desde que no esteja protegido erealmente no FiveWin ha muito poucos dados protegidos, j que foi construdo com ainteno de oferecer a mxima flexibilidade possvel. Se for necessrio modificar um dado de uma classe, podemos faz-lo, porm devemos saber muito bem o que estamos fazendo.

O FiveWin utiliza os comandos para ocultarprecisamente a complexidade de algumas construes de objetos que recebem uma grandequantidade de parmetros. Porm h dados que sem dvida teremos que modificarquando comearmos a programar com FiveWin. Por exemplo, se desejarmos modificar ovalor de um controle Get deveremos utilizar o mtodo cText() desta classe, podemosmodificar os dados e a seguir utilizar o mtodo Refresh() porm recomendamos que antesde modificar qualquer dado de uma classe certifique-se de que no h nenhum mtodo paraproduzir esta tarefa j que possivelmente ao alterar o dado seja feito algo mais quepossivelmente voc no tenha percebido ou desconhea. Por exemplo, a classe Listboxtem um dado que so os itens desse listbox que so guardados em uma matriz. Voc podeadicionar elementos matriz porm possivelmente produza um erro de execuo. Observecomo, alm disso, a classe Listbox possui um mtodo de nome AddItem() que, logicamentedever ser utilizado para adicionar novos elementos. importante que analise todos os dados e mtodos de cada classe que queira manipular,seu arquitetura muito simples e em pouco tempo ser capaz de tirar o mximo proveitodo FiveWin acessando diretamente os mtodos e dados de cada classe. Quando uma classe herdada de outra superior esta classe tem seus prprios dados e almdisso os de suas classes superiores, e o mesmo ocorrer com os mtodos. Quando ummtodo de uma classe coincidir com outro de sua classe superior sempre tem precedncia omtodo da classe filha, porm, podemos fazer que a partir do mtodo da classe filha seexecute tambm o mtodo da classe me como veremos mais adiante. Por exemplo,podemos criar um objeto janela herdado da classe tWindow que s verifique se a tecla F4foi pressionada e, caso contrario, que seja sua classe superior a que processa opressionamento de teclado.
Ortiz de Ziga, S.L. 58 58

Curso CA-Clipper + FiveWin

Criao de novas classes


Pode-se criar todas as classes que se desejar, porm, s uma por .PRG. Para criar uma nova classe esta a sintaxe que deve utilizar:
#include "Objects.ch" ou #include Fivewin.ch CLASS <NovaClasse> [ FROM <ClasseMe> ] DATA <NomeDado1> DATA <NomeDado2> ... METHOD <NomeMetodo1>( [ <params,...> ] ) ; [ CONSTRUCTOR | SETGET | VIRTUAL | BLOCK ] METHOD <NomeMetodo2>( [ <params,...> ] ) ; [ CONSTRUCTOR | SETGET | VIRTUAL | BLOCK ] ENDCLASS

NovaClasse o nome da nova classe que vamos criar. Seu nome no pode exceder 10

caracteres. ClasseMe o nome da classe superior que pertence se uma classe herdada. NomeDadox o nome de cada um dos dados que a classe vai Ter. Pode-se colocar tantos nomes quantos forem necessrios, separando-os por vrgulas ou colocando vrias sentenas DATA. NomeMetodox o nome de cada um dos mtodos que a classe vai ter. Pode-se colocar tantos mtodos quantos forem necessrios com vrias sentenas METHOD. Paramx uma lista de possveis parmetros que o mtodo pode receber.

Os mtodos podem receber varias clusulas:

Constructor que indica o mtodo utilizado para construir uma instncia

da classe, ou seja, o objeto. caracterizado por devolver uma referncia de si mesmo.


Virtual que um mtodo que no faz nada, porm, muito til para

herana ou quando se est criando e experimentando um classe.

Inline um mtodo definido na mesma linha de definio.

Os mtodos que no so em linha devem ser codificados na seqncia da definio da classe. Para codific-los se utiliza a seguinte sintaxe:
METHOD <NomeMetodo>( [<params,...>] ) CLASS <Classe> .... .... return

Dentro de qualquer mtodo podemos acessar qualquer dado da classe simplesmenteutilizando a varivel Self. Por exemplo, para acessar um dado de nome nOrdem faramos:Self:nOrdem, por comodidade OBJECTS permite substituir a palavra Self: por :: peloque ficaria ::nOrdem. Se desejar acessar um dado ou mtodo de sua classe superior utilize a varivelParent(NomeMe), se desejar acessar a sua classe me principal dever utilizar Super.Por exemplo, se uma classe tem um mtodo do mesmo nome que sua classe me principal
Ortiz de Ziga, S.L. 59 59

Curso CA-Clipper + FiveWin

para que ao terminar de executar seu prprio mtodo se execute o de sua classe me faramos:
METHOD KeyDown(nKey) CLASS Janela ... IF nKey == KEY_F4 RETURN ... ENDIF RETURN Super:KeyDown(nKey)

Exerccios
1. Faa um programa que mostre numa janela constantemente a posio do cursor do mouse. 2. Crie uma nova classe de nome retngulo com os dados largura e altura e com o mtodo constructor New e o mtodo rea 3. Crie um mtodo para a classe Get de forma que inverta o sentido de suas letras, ouseja, se no Get h ao valor 123 ao executar o mtodo :Inverter() passar a valer321.
Ortiz de Ziga, S.L. 60 60

Curso CA-Clipper + FiveWin

Coneco com a API do Windows


Como Conectar?

A princpio, o FiveWin incorpora uma srie de funes para conectar com a API que vocpode utilizar dentro de seus programas. No tem implementadas todas, porm como verem seguida, muito fcil implementar aquelas que necessite. Conectar com a API do Windows a partir de sua aplicao uma tarefa muito simples, s necessrio um pequeno conhecimento de programao em C, mas no demasiado. A primeira coisa que deve-se Ter em mente que o CA-Clipper utiliza seu prprio sistemade Stack para as variveis e portanto no pode-se passar parmetros diretamente a partir doCA-Clipper a uma funo em C e tampouco poder esta funo em C devolver parmetrosao CA-Clipper. Para resolver este problema o CA-Clipper proporciona o que eles chamamExtended system of CA-Clipper, que consiste em funes _par...() para recuperar a partirde C parmetros passados a partir do CA-Clipper e funes _ret...() para devolver valores apartir de C para o CA-Clipper. O CA-Clipper utiliza smbolos PASCAL com um mximo de 10 caracteres. Assim sendo,se vai utilizar identificadores do Windows com menos de 10 caracteres possvel queobtenha smbolos duplicados, este o motivo pelo qual o FiveWin renomeou todas asfunes da API de menos de 10 caracteres colocando um underscore no comeo delas. Sesua funo tem menos de 10 caracteres lembre-se de redefini-la com um underscore noarquivo Wi nt en .h. Para compilar sua pequena funo em C pode utilizar qualquer compilador porm deverutilizar o modelo largo de memria e indicar ao compilador que no linque, para isso seutilizam por exemplo a partir da Borland C++ os flags: -c -ml Todos seus programa em C devero comear pelos seguintes includes:
#include <Winten.h> #include <Windows.h> #include <Clipapi.h>

Como cabealho de funes se utiliza a palavra CLIPPER


CLIPPER Funcao(params) {...... }

FiveWin incorpora todos os fontes de coneco com a API onde poder observar o quo simples .
Ortiz de Ziga, S.L. 61 61

Curso CA-Clipper + FiveWin

Um programa em C
Por exemplo a funo que nos permite reproduzir um arquivo .wav seria da seguinte forma:
#include <WinTen.h> #include <Windows.h> #include <MMSystem.h> #include <ClipApi.h> //--------------------------------------------------------// CLIPPER SNDPLAYSOU() // ND( <cArquivo>, <nModo> )--> <lExito> { _retl( sndPlaySound( _parc( 1 ), _parni( 2 ) ) ); }//--------------------------------------------------------//

Observe os detalhes de nossa funo:

Colocamos o include de MMSystem.h que aonde est a funo SndPlaySound() prototipada

Utilizamos a cadeia CLIPPER no comeo da funo.


Utilizamos at 10 caracteres para a definio da funo um bom costume colocar como comentrio os possveiscaracteres a partir do 10 e, alm disso, dos parmetros que vaimanipular e o que vai retornar

Como pode-se observar _parc( 1 ) uma funo que recolhe oprimeiro parmetro passado funo que de tipo caracter, e _parn(2) o segundo parmetro que de tipo numrico.

A funo devolve um valor lgico atravs da funo _retl() Se desejar obter mais informao recomendamos que analise todos os fontes queacompanham o FiveWin no diretrio\F w \S ou rce\Win api e consultar a documentaooferecida pelo CA-Clipper sobre seu Extended System.

Exerccios
1. Faa uma funo em C que devolva o diretrio do Windows.
Ortiz de Ziga, S.L. 62 62

FiveWin - Manual Em Portugus


Baixar este documento gratuitamenteImprimirCelularColeesDenunciar documento Informar sobre este documento? Diga-nos a(s) razo(es) para denunciar este documento
Parte superior do formulrio

bc6876949a15de doc

Spam ou lixo eletrnico Contedo pornogrfico adulto Detestvel ou ofensivo If you are the copyright owner of this document and want to report it, please follow these directions to submit a copyright infringement notice. Relatrio Cancelar
Parte inferior do formulrio

Este documento particular.

Informaes e classificao
Leituras: 1,092 Carregado: 08/25/2010 Categoria: No classificado. Classificao:

false

false

Copyright: Atribuio no comercial Seguir DaviREv

Compartilhar e integrar Documentos relacionados


AnteriorPrximo 1.

p.

p.

p. 2.

p.

p.

p. 3.

p.

p.

p.

Mais coisas deste usurio


AnteriorPrximo 1.

7 p.

13 p.

7 p. 2.

66 p.

418 p.

Readcasters recentes Adicionar comentrio


Parte superior do formulrio

bc6876949a15de

Enviar Caracteres: 400


document_comme 4gen
Parte inferior do formulrio

Imprimir este documento Alta qualidade


Open the downloaded document, and select print from the file menu (PDF reader required). Baixar e imprimir

You Must be Logged in to Download a Document


Use seu registro do Facebook e veja o que seus amigos esto lendo e compartilhando. Outras opes de registro Login with Facebook
Parte superior do formulrio

http://pt.scribd.co 36418169 Scribd.logged_in

http://pt.scribd.co dow nload Scribd.logged_in 36418169 dow nload

Parte inferior do formulrio

Registre-se
No tenho conta no Facebook
Parte superior do formulrio

bc6876949a15de 36418169 dow nload Scribd.logged_in

endereo de email (obrigatrio) criar nome de usurio (obrigatrio) senha (obrigatria) Quero receber a Newsletter Scribd e eventuais comunicados sobre a conta. Registre-sePoltica de privacidade Voc receber notificaes por email sobre a atividade da sua conta. Essas notificaes podem ser gerenciadas nas configuraes da conta. Prometemos respeitar sua privacidade.
Parte inferior do formulrio

Por que se inscrever?


Descubra e se conecte com pessoas de interesses semelhantes. Publique seus documentos rpida e facilmente. Compartilhe seus interesses em leitura no Scribd e em sites sociais.

J tem uma conta Scribd?


Parte superior do formulrio

bc6876949a15de 36418169 dow nload Scribd.logged_in

endereo de email ou nome de usurio senha Logon Est com problema para se conectar?
Parte inferior do formulrio

O logon teve xito


Trazendo voc de volta...

Voltar para o logon

Redefina sua senha


Insira seu endereo de email abaixo para redefinir sua senha. Enviaremos um email para voc com instrues sobre como continuar.
Parte superior do formulrio

bc6876949a15de

Endereo de email: Voc tambm precisa criar um logon para esta conta. Logon: Enviar
Parte inferior do formulrio

Carregar um documento
Parte superior do formulrio

Pesquisar Documentos
Parte inferior do formulrio

Siga-nos! scribd.com/scribd twitter.com/scribd facebook.com/scribd Sobre Imprensa Blog Parceiros Scribd 101 Material da web Loja Scribd Suporte Perguntas frequentes Desenvolvedores/API Vagas Termos Copyright Privacidade

Copyright 2011 Scribd Inc. Idioma: Portugus (Brasil) Escolha o idioma com o qual quer usar o Scribd: English Espaol Portugus (Brasil)

scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd. <a href="http://www.quantcast.com/p-13DPpb-yg8ofc" target="_blank"><img src="http://pixel.quantserve.com/pixel/p-13DPpb-yg8ofc.gif" style="display: none;" border="0" height="1" width="1" alt="Quantcast" /></a> <img src="http://b.scorecardresearch.com/p?c1=2&c2=9304646&cv=2.0&cj=1" />

S-ar putea să vă placă și