Escolar Documentos
Profissional Documentos
Cultura Documentos
Captulo 1.
1.1
1.2
1.3
1.4
WINDOWS..............................................
2
2
3
1.4.1
1.4.2
6
6
Funciones internas
WinApi
Ventana inicial
Men
Cajas de dilogo
6
7
7
7
Programas propuestos
1.
2.
3.
4.
5.
Generacin de clases
Utilizacin de clase generada
Derivacin de clases I
Derivacin de clases II
9
13
15
17
4.1
4.2
4.3
4.4
17
18
18
19
Captulo 2.
2.1
2.2
2.3
2.4
2.5
2.6
2.7
VENTANAS
19
21
Qu es una ventana ?
Partes de una ventana
Contenedora de objetos
Sintxis FiveWin de creacin de ventanas
Activar ventanas
Clusulas 'ON'
Ventanas MDI
21
22
23
23
26
27
28
2.7.1
28
Programacin Windows
2.7.2
Introduccin a FIVEWIN
29
29
29
Programas propuestos
1.
2.
3.
4.
5.
6.
7.
Captulo 3.
MENUS
Encapsulamiento de opciones
Variables y mtodos ms utilizados
Ventanas y mens
Barra de iconos
Men del sistema
Mens flotantes
Mens de herramientas
36
36
36
37
37
38
38
41
41
42
44
45
46
46
48
48
48
Programas propuestos
1.
2.
3.
4.
5.
6.
7.
8.
Captulo 4.
CAJAS DE DIALOGO
50
51
52
52
53
54
55
56
57
57
58
59
II
Programacin Windows
Introduccin a FIVEWIN
Principales variables
Principales mtodos
60
60
61
63
64
65
66
68
69
70
71
72
72
74
75
75
76
Programas propuestos
1.
Captulo 5.
RESOURCE WORKSHOP
PushButton
RadioButton
Barras de Scroll
ListBox
ComboBox
Check Box
Static Text
Edit Text
TWBrowses
Bitmaps
Bitmaps, iconos y cursores
77
87
87
88
88
90
90
92
96
98
99
101
102
104
105
108
110
112
Programas propuestos
III
Programacin Windows
1.
2.
3.
4.
5.
Captulo 6.
6.1
6.2
6.3
6.4
6.5
GENERADOR DE INFORMES
123
123
125
126
127
128
6.5.1
6.5.2
6.5.3
128
129
6.5.4
6.5.5
6.5.6
6.6
6.7
6.8
6.9
Introduccin a FIVEWIN
129
130
132
133
134
135
136
137
6.9.1
El objeto TReport
137
6.9.1.1
6.9.1.2
137
139
6.9.2
6.9.3
6.9.4
Principales datos
Principales mtodos
El objeto TRLine
140
6.9.2.1
141
Principales datos
El objeto TRColumn
141
6.9.3.1
142
Principales datos
El objeto TRGroup
143
6.9.4.1
6.9.4.2
143
143
Principales datos
Principales mtodos
Programas propuestos
1.
Listado n 1
144
IV
Programacin Windows
2.
3.
Introduccin a FIVEWIN
Listado n 2
Listado n 3
Captulo 7.
FICHEROS DE AYUDA
145
146
149
149
150
151
152
153
154
155
156
157
157
159
160
161
162
164
171
Programas propuestos
1.
182
Programacin Windows
Introduccin a FIVEWIN
1
WINDOWS
____________________________________________________________________
1
Programacin Windows
1.1
Introduccin a FIVEWIN
1.2
____________________________________________________________________
2
Programacin Windows
Introduccin a FIVEWIN
Este puede ser un dilogo que mantiene Windows y FiveWin. Windows esta
permanentemente alerta de lo que sucede con el equipo y FiveWin le
responde con acciones a tomar en cada caso. Adems FiveWin nos deja una
serie de oportunidades para que nosotros seamos los que digamos que cosas
hacer cuando se produzcan determinados sucesos o eventos. Ms adelante
veremos como hacerlo.
____________________________________________________________________
3
Programacin Windows
Introduccin a FIVEWIN
DATA componente
DATA componente
DATA componente
.
.
METHOD nombre de mtodo CONSTRUCTOR
METHOD nombre de mtodo
METHOD nombre de mtodo
.
.
.
ENDCLASS
____________________________________________________________________
4
Programacin Windows
Introduccin a FIVEWIN
pudiendo adems rechazar las variables que no nos sirvan y aadir las
nuevas. Esto mismo sirve tambin para los mtodos.
CLASS nombre de clase FROM clase antiga
DATA componente nuevo
METHOD nombre de mtodo CONSTRUCTOR
METHOD nombre de mtodo
ENDCLASS
La clase as definida hereda todas las caractersticas de la clase de la cual
proviene y adems agrega nuevos componentes que harn los objetos
distintos de los que haca la clase anterior.
1.4
Los autores de FiveWin han apostado por una sintaxis intuitiva a base de
comandos preprocesados que hacen del manejo de las clases una tarea muy
sencilla. El potente preprocesador de CA-Clipper va a convertir una serie de
comandos preprocesados en llamadas a las clases de FiveWin. Algunas
personas piensan que esta forma de obrar es enmascarar realmente lo que
se hace. No creo que sea esta la cuestin pues lo nico que no est
enmascarado en programacin sera el lenguaje mquina de un ejecutable.
Lo que hacen los autores de FiveWin es facilitar el trabajo.
Una gran parte de los comandos preprocesados van a servir para conseguir
un objeto de un tipo concreto. As cuando digamos DEFINE BRUSH oBrush lo
que estamos realmente pidiendo es un objeto del tipo TBrush. Cuando
digamos DEFINE WINDOW oWnd estaremos solicitando un objeto de la clase
TWindow. Cuando digamos @ 10,10 BUTTON oBoton ... estaremos pidiendo
a la clase TButton que nos suministre un objeto botn. A medida que
avancemos en los temas iremos profundizando en los comandos
preprocesados. Igualmente el
alumno puede comprobar la
sintaxis de los comandos en el
CodeCar
que
sirve
de
complemento a este manual.
Podemos utilizar en caso de
duda, los ficheros cabecera
almacenados en el directorio
INCLUDE donde podemos ver
por una parte los comandos
preprocesados y por otra la
conversin a las diferentes
llamadas de las clases. En caso
de duda podemos compilar
nuestro programa con la opcin '/P' que sirve para conservar el fichero con
extensin .PPO que crea CA-Clipper en el proceso de compilacin. En el
veremos la 'cruda realidad' de los programas. Todos los comandos de CAClipper y de FiveWin traducidos a sus ltimas consecuencias.
____________________________________________________________________
5
Programacin Windows
Introduccin a FIVEWIN
1.4.2 WinApi
CA-Clipper esta escrito en lenguaje 'C'. FiveWin tambin pero adems
estamos trabajando en Windows lo cual supone que utilizaremos el API de
Windows. En las diferentes versiones de CA-Clipper hemos visto que este
compilador se entenda a las mil maravillas con 'C'. Lo haca a travs del
sistema Extendido. Todo porque CA-Clipper y 'C' no trabajan con la misma
'pila' (no pueden hacerse llamadas directas a 'C'). En este nuevo entorno
sucede que tenemos a nuestra disposicin todas las funciones del API de
Windows pero sigue existiendo el mismo problema de paso de parmetros a
travs de la dichosa pila. Haciendo la correspondiente funcin puente para
pasarle los parmetros a Windows las funciones del API estn a nuestro
servicio. Lo nico que hay que hacer es fabricar esa funcin puente, compilar
el fichero .C y lincarlo con nuestro programa.
El fabricante de FiveWin ha realizado un montn de funciones puente para
que gran parte de las funciones del API puedan ser llamadas desde FiveWin.
El cdigo fuente de las mismas lo encontraremos en el directorio
SOURCE\WINAPI y el listado de ellas en el CodeCar.
1.5
No debemos de olvidarnos nunca que FiveWin es una librera para CAClipper, lo que significa que seguimos programando en CA-Clipper al igual
que lo hemos venido haciendo siempre. Antes utilizbamos libreras de
terceros tales como las Nantucket Tools, Funcky, Nanford, etc. Ahora
FiveWin, por lo tanto vamos a seguir conservando la estructura de nuestros
programas, lo nico es que como dijimos al principio, se introduce un nuevo
estilo de programacin que es la orientacin al evento, Se potencia el trabajo
con clases y se remoza el viejo interface de nuestros programas con el
usuario. Se sustituye el modo texto por el modo grfico que proporciona
Windows. Tendremos que empezar a pensar en 'modo Windows'. En este
nuevo entorno todo funciona por mdulos, todo son unidades independientes
con caractersticas propias. Bueno... porque no decirlo, todo son objetos.
Unos objetos preciosos, llenos de variables y de mtodos que nos van a
resultar maravillosos. Estos objetos tienen una particularidad y es que si
pensamos en un botn este va a llevar asociada la accin a realizar cuando
se pulse. S pensamos en un men cada opcin del mismo llevar asociada
una determinada accin. Vamos a comprobar que tenemos un
'empaquetamiento' que nos har ver nuestra programacin de una forma
____________________________________________________________________
6
Programacin Windows
Introduccin a FIVEWIN
1.5.2 Men
Esta ventana inicial, al igual que nuestras viejas pantallas iniciales, tienen un
men para que el usuario elija el camino a seguir. Antes sudbamos tinta
china para dotar a nuestros programas de un men tipo 'Pull-down'. Esos
tiempos quedaron atrs! Afortunadamente FiveWin incorpora una serie de
comandos preprocesados que nos permitirn fabricar mens del tipo
reseado, del tipo 'barra de iconos' y algn otro ms. En ellos
las opciones llevan asociadas las acciones que se ejecutarn
al elegirse, el mensaje que se mostrar en la barra de
mensajes, el color ... toda una serie de datos que facilitarn la
vida al programador y que se irn especificando a medida que
se va definiendo el propio men.
____________________________________________________________________
7
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
8
Programacin Windows
Introduccin a FIVEWIN
PROGRAMAS PROPUESTOS
1. Programa de generacin de clases
Sencillo programa de generacin de clases en modo texto donde podemos
apreciar la forma en que se crea una clase con sus variables de instancia y
mtodos.
#include 'Objects.ch'
// Ejemplo de definicin de una clase Botn con apariencia 3D
CLASS TBoton3D
DATA cTexto
// Texto del Botn
DATA nArriba, nIzquierda
// Coordenadas del botn
DATA cColorLetra, cColorSombra // Color de las letras y de la sombra
DATA cAntiguaPantalla
// Pantalla bajo el botn
DATA lEsVisible
// Es visible ?
DATA lEstaPulsado
// Est pulsado ?
// Indicamos los mtodos que contendr la clase
// Constructor para los objetos de la clase
METHOD New ( cTexto , nArriba , nIzquierda , cColorLetra ,;
cColorSombra ) CONSTRUCTOR
// Mtodo para mostrar los botones
METHOD Mostrar ( lEstaPulsado )
// Mtodo para ocultar los botones
METHOD Ocultar ()
// Mtodo para mover los botones
METHOD Mover (nlinea, nColumna)
// Mtodo para pulsar un botn
METHOD Pulsar ()
// Mtodo para soltar un botn
METHOD Soltar ()
ENDCLASS
//----------------------------------------------------------------------//
// Comenzamos a codificar cada uno de los mtodos de la clase
//
// Creacin de un botn
METHOD New ( cTexto , nArriba , nIzquierda ,;
cColorLetra , cColorSombra) CLASS TBoton3D
// OJO Hay que indicar a que
// clase pertenece el mtodo
// Definimos los valores por defecto para los parmetros
____________________________________________________________________
9
Programacin Windows
DEFAULT
Introduccin a FIVEWIN
cTexto
nArriba
nIzquierda
cColorLetra
cColorSombra
:= "Botn" , ;
:= ROW() , ;
:= COL() , ;
:= "W/G" , ;
:= "N/B"
Parmetro de la funcin
::cTexto
::nArriba
::nIzquierda
::lEsVisible
::cColorLEtra
::cColorSombra
::lEstaPulsado := .F.
:= cTexto
:= nArriba
:= nIzquierda
:= .F.
:= cColorLetra
:= cColorSombra
RETURN nil
// Mostrar un botn
METHOD Mostrar ( lEstaPulsado ) CLASS TBoton3D
LOCAL nRow, nCol
DEFAULT
lEstaPulsado := ::lEstaPulsado
:= ROW()
:= COL()
// Pintamos el botn
IF ::lEstaPulsado
@ ::nArriba, ::nIzquierda+1 SAY ::cTexto COLOR ::cColorLetra
ELSE
@ ::nArriba , ::nIzquierda SAY ::cTexto COLOR ::cColorLetra
@ ROW() , COL() SAY "_" COLOR ::cColorSombra
@ ::nArriba+1 , ::nIzquierda+1 SAY REPLICATE ("_", LEN (::cTexto)) ;
COLOR ::cColorSombra
ENDIF
____________________________________________________________________
10
Programacin Windows
Introduccin a FIVEWIN
// Ocultar el botn
METHOD Ocultar() CLASS TBoton3D
// Solo lo ocultamos si el botn es visible
IF ::lEsVisible
DispBegin()
// Restablecemos la pantalla
IF ::lEstaPulsado
RESTSCREEN ( ::nArriba, ::nIzquierda + 1, ;
::nArriba, ::nIzquierda + LEN (::cTexto) ,;
::cAntiguaPantalla )
ELSE
RESTSCREEN ( ::nArriba, ::nIzquierda, ;
::nArriba+1, ::nIzquierda + LEN (::cTexto)+1 ,;
::cAntiguaPantalla )
ENDIF
// Indicamos que ya no es visible
::lEsVisible := .F.
DispEnd()
ENDIF
RETURN NIL
____________________________________________________________________
11
Programacin Windows
Introduccin a FIVEWIN
// Pulsar el botn
METHOD Pulsar() CLASS TBoton3D
// Solo lo pulsamos si es visible
IF ::lEsVisible
DispBegin()
::Ocultar()
// Lo ocultamos
::Mostrar(.T.)
// y lo redibujamos pulsado
DispEnd()
ENDIF
::lEstaPulsado := .T.
RETURN NIL
____________________________________________________________________
12
Programacin Windows
Introduccin a FIVEWIN
Programa que muestra tres botones en la pantalla con aspecto 3D. Los
mueve de derecha a izquierda, los pulsa y posteriormente los oculta.
#include "Objects.ch"
FUNCTION Main()
LOCAL oBoton1, oBoton2, oBoton3 // Definimos tres variables que contendrn
// los objetos botn que vamos a crear
// Creamos los botones mediante llamadas al mtodo de la clase
// que hemos definido como CONSTRUCTOR (en nuestro caso New() )
oBoton1 := TBoton3D():New("Primero",5,60,"W+/G","N/B")
oBoton2 := TBoton3D():New("Segundo",12,60,"W/R","N/B")
oBoton3 := TBoton3D():New("Tercero",17,60,"GR+/R","N/B")
// Limpiamos la pantalla
SETCOLOR("W/B")
CLS
@ 1, 0 TO MAXROW(), MAXCOL() DOUBLE
// Mostramos los botones
@ 0,0 CLEAR TO 0,MAXCOL()
____________________________________________________________________
13
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
14
Programacin Windows
Introduccin a FIVEWIN
LOCAL nI
FOR nI := oBoton:nIzquierda TO 1 STEP -1
oBoton:Mover(oBoton:nArriba,nI)
NEXT nI
// Podramos haber hecho oBoton:Mover(oBoton:nArriba,0),
// pero esto queda ms bonito
RETURN NIL
//----------------------------------------------------------------------//
____________________________________________________________________
15
Programacin Windows
Introduccin a FIVEWIN
// Salvamos la pantalla
::cAntiguaPantalla := SAVESCREEN (::nArriba, ;
::nIzquierda, ;
::nArriba, ;
::nIzquierda+LEN(::cTexto)+2 )
nRow := ROW()
nCol := COL()
// Pintamos el botn
IF ::lEstaPulsado
@ ::nArriba, ::nIzquierda SAY " "+::cTexto COLOR ::cColorLetra
ELSE
@ ::nArriba , ::nIzquierda SAY "" COLOR cBackGround+"+/"+cBackGround
@ ::nArriba , ::nIzquierda+1 SAY ::cTexto COLOR ::cColorLetra
@ ::nArriba , COL() SAY "" COLOR "N/"+cBackGround
ENDIF
// Restauramos el cursor a su sitio
DEVPOS(nRow,nCol)
// Indicamos que el botn est visible
::lEsVisible := .T.
DispEnd()
ENDIF
RETURN NIL
//-----------------------------------------------------------------------//
// Ocultar el botn
METHOD Ocultar() CLASS TBoton3D2
// Solo lo ocultamos si el botn es visible
IF ::lEsVisible
DispBegin()
// Restablecemos la pantalla
RESTSCREEN (::nArriba, ::nIzquierda, ::nArriba, ::nIzquierda + ;
LEN (::cTexto)+2 , ::cAntiguaPantalla )
// Indicamos que ya no es visible
::lEsVisible := .F.
DispEnd()
ENDIF
RETURN NIL
____________________________________________________________________
16
Programacin Windows
Introduccin a FIVEWIN
#include "Objects.ch"
CLASS TFigura
DATA nX, nY
// Constructor de la clase
METHOD New( nX, nY) CONSTRUCTOR
// Calculo del rea de la figura
METHOD Area() VIRTUAL
ENDCLASS
//----------------------------------------------------------------------//
METHOD New( nX, nY) CLASS TFigura
DEFAULT nY := nX // Si no pasamos el segundo parmetro, se asume
// igual al primero
::nX := nX
::nY := nY
RETURN NIL
//----------------------------------------------------------------------//
____________________________________________________________________
17
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
18
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
19
Programacin Windows
Introduccin a FIVEWIN
GestorDeEventos()
RETURN NIL
FUNCTION GestorDeEventos()
LOCAL nI, nTecla
// Entramos en el bucle de espera.
DO WHILE .T.
nTecla := INKEY()
IF nTecla != 0 // Si se ha pulsado una tecla se comprueba si
// se ha colocado un evento asociado
FOR nI := 1 TO LEN(aListaDeEventos)
IF nTecla == aListaDeEventos[nI,1]
// Si lo encontramos, ejecutamos el
// Codeblock asociado
EVAL(aListaDeEventos[nI,2])
EXIT
ENDIF
NEXT nI
ENDIF
// Aqu ejecutamos la accin por defecto del programa
EVAL(bSinEventos)
ENDDO
RETURN NIL
// Funcin a la que llaman los eventos. Para este ejemplo hemos usado una
// sola funcin en lugar de varias.
FUNCTION Procesa(nCual)
aBotones[nCual]:Pulsar()
@ MAXROW(),0 CLEAR TO MAXROW(),MAXCOL()
@ MAXROW(),0 SAY "Ha pulsado la tecla F"+alltrim(str(nCual))
CLEAR TYPEAHEAD
Inkey(1)
aBotones[nCual]:Soltar()
@ MAXROW(),0 CLEAR TO MAXROW(),MAXCOL()
RETURN NIL
FUNCTION FinPrograma()
SET COLOR TO "W/N"
CLS
? "Fin del Programa"
CANCEL
RETURN NIL
FUNCTION Reloj()
@0,MAXCOL()-10 SAY TIME()
RETURN nil
____________________________________________________________________
20
Programacin Windows
Introduccin a FIVEWIN
TEST DE EVALUACIN
Por favor, marque con una seal la respuesta o respuestas vlidas para cada
pregunta.
1.
Cmo se llaman los materiales con que construimos los
objetos?
Variables estticas
Variables importadas
Variables de instancia
2.
3-
4.
5.
Qu partcula sirve para
proceso de creacin?
CLASS
CONSTRUCTOR
FROM
6.
______
____________________________________________________________________
21
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
22
Programacin Windows
Introduccin a FIVEWIN
2
VENTANAS
2.1
Qu es una ventana?
Programacin Windows
Introduccin a FIVEWIN
2.2
Por fin vemos lo que es realmente una ventana. Ya habamos visto alguna
otras veces cuando entramos en Windows, ahora vamos a observar los
elementos que la forman.
Programacin Windows
2.3
Introduccin a FIVEWIN
Contenedora de objetos
2.4
Como dijimos anteriormente, los creadores de FiveWin han apostado por una
forma de trabajar a base de comandos preprocesados. Estos sern
convertidos por el preprocesador de CA-Clipper en llamadas a las clases
correspondientes. En este caso la llamada ser a la clase TWindow y se le
pasarn una serie de parmetros que configurarn a nuestro gusto la ventana
resultante.
La sintaxis completa de definicin de ventana se puede encontrar en el
CodeCar. Tenemos que ver el proceso de creacin de ventanas en dos
partes:
la primera ser la definicin de la ventana.
la segunda ser la activacin de la misma.
Estos dos procesos son como cuando estamos preparando un plato en
nuestra cocina. Primero lo fabricamos y cuando llega el momento nos lo
comemos.
En una primera fase vamos a definir la ventana con todos sus componentes.
Utilizaremos el comando preprocesado DEFINE WINDOW que quiere decir
Define ventana. Estas dos palabras tendrn que acompaarse por el nombre
de un objeto ventana que habremos declarado como Static fuera del
programa principal:
Programacin Windows
Introduccin a FIVEWIN
#include "fivewin.ch"
static oWnd
function main( )
DEFINE WINDOW oWnd ...
El hecho de declarar el nombre del objeto ventana como static es para poder
manejar con ms soltura la ventana desde otras funciones del mismo mdulo.
Una vez definido el nombre de la ventana tendramos que definir el ttulo de la
misma. Lo haremos con la clusula TITLE acompaada de una cadena de
texto que aparecer en la barra de ttulo cuando ejecutemos el programa.
Seguirn las coordenadas de la ventana especificadas por la clusula FROM
x,y TO x1, y1 siendo x e y las coordenadas de la esquina superior izquierda y
x1 e y1 las coordenadas de la esquina inferior izquierda. Estas coordenadas
simulan modo texto por lo cual podemos seguir ventanas del mismo modo
que lo hacamos con CA-Clipper en modo texto.
DEFINE WINDOW oWnd TITLE "Mi primera ventana" FROM 1,1 TO 20,70
Podemos seguir especificando caractersticas como son los colores para el
fondo de la ventana y la tinta con que se escribir en ella. Se especifica si se
quiere, no es obligatorio. Lo haramos por medio de la clusula COLORS.
Esta clusula ir acompaada por dos valores separados por comas. El
primer valor para el color del texto y el segundo valor para el color del papel.
Los colores los podemos conseguir con una funcin al efecto que nos
mezclar pintura de tres colores: rojo, verde y azul. La funcin devuelve el
color resultante a cambio de que nosotros le digamos la proporcin de color
que queremos de cada.
COLORS RGB(128,128,128), RGB(255,255,255)
Esta proporcin nos proporcionara un color gris para el texto y un color
blanco para el papel. S no deseamos quebrarnos la cabeza, disponemos de
los colores ms utilizados en formado de constantes predefinidas en el fichero
de cabecera COLORS.CH ubicado en el directorio INCLUDE: CLR_WHITE,
CLR_BLUE, CLR_GRAY, CLR_BLACK...
Algo que seguro que nos interesar ser el dotar a nuestra ventana de un
men. Es normal ya que s hacemos la ventana ser para acceder desde ella
a otras partes de nuestro programa. El men lo estudiaremos en un captulo
especifico pero anticiparemos que mediante la clusula MENU indicaremos el
nombre de un objeto men del tipo pull-down que ser devuelto por una
funcin
... MENU MiMenu( )
.
.
Programacin Windows
Introduccin a FIVEWIN
Function MiMenu( )
LOCAL oMenu
.
.
.
Return oMenu
El men es el tpico de Windows de una barra de men donde aparecern al
seleccionar, diversos mens desplegables.
S quisiramos terminar de dar un aire super profesional a nuestra ventana
nos gustara ponerle un fondo bonito como hace Windows con el tapete del
escritorio. No-problem' . FiveWin nos proporciona herramientas para tapizar
nuestra ventana con dibujos. Utilizaremos lo mismo que utilizamos para pintar
nuestras paredes: una brocha. Mediante la clusula BRUSH especificaremos
un objeto brocha con el colorear el fondo de nuestra ventana. S en lugar de
pintura lisa queremos un 'papel pintado' lo podemos conseguir tambin
simplemente especificando al definir la brocha, un pequeo dibujo con
formato .BMP para que forme el dibujo de nuestro papel pintado. La brocha la
definiremos con anterioridad mediante el comando DEFINE BRUSH
acompandolo del nombre de un obrero brocha que bien pudiera ser oBrush
DEFINE BRUSH oBrush STYLE BORLAND
Seguro que tambin nos gustara que nuestra ventana tuviese una buena
representacin cuando se minimizase y se convirtiera en icono.
Mediante la clusula
ICON
podemos asociar a nuestra
ventana un icono que le
represente
cuando
este
minimizada o cuando se est
cambiando de tarea mediante la
pulsacin de CTRL+ TAB.
Anteriormente tendremos que
definir el icono de la misma forma
que
venimos
haciendo
ltimamente. En efecto se trata
del comando DEFINE ICON y el
nombre del objeto icono.
Programacin Windows
Introduccin a FIVEWIN
2.5
Activar ventanas
Llego el momento esperado. Por fin vamos a ver nuestra ventana actuando.
Una vez definida la ventana con todas sus caractersticas tenemos que
activar la ventana para que esta se muestre.
La activacin de la ventana se va a producir de una manera muy simple. El
comando utilizado va a ser precisamente ACTIVATE WINDOW y el nombre
del objeto ventana a activar.
ACTIVATE WINDOW oWnd
Programacin Windows
2.6
Introduccin a FIVEWIN
Clusulas 'ON'
Programacin Windows
Introduccin a FIVEWIN
2.7
Ventanas MDI
Programacin Windows
Introduccin a FIVEWIN
2.8
Clase TWindow
2.9
bLClicked
bRClicked
bLDblClick
Programacin Windows
Introduccin a FIVEWIN
bKeyDown
Ttulo de la ventana
Cadena de mensaje asociado a la ventana
Tiene el foco esta ventana?
Estilo de la ventana. Podemos variar el estilo de la siguiente
forma:
Declaramos nuestra ventana, dialogo, control o la clase de
objeto derivada de la clase TWindow, aprovechndonos de la
manera estandard que proporciona FiveWin con los
comandos preprocesados. Una vez realizado y antes de que
se active la ventana o la caja de dilogo con el
correspondiente ACTIVATE, llamamos a la variable nStyle del
objeto correspondiente y le decimos: oWnd:nStyle := nOr ( ...
). Puede ser oWnd , oDlg o lo que sea. El truco est en poner
entre los parntesis del 'nOr', las constantes preprocesadas
correspondientes al estilo que deseamos. Podemos encontrar
todas estas constantes en el fichero de cabecera
WINDOWS.H de los lenguajes C++. Una vez realizado esto
se activa la ventana o la caja de dilogo.
nChrHeight
nChrWidth
nLastKey
nClrPane
nClrText
aControls
oBar
10
Programacin Windows
oBrush
oCursor
oFont
oIcon
oMenu
oSysMenu
oPopup
oMsgBar
oWnd
oVScroll
oHScroll
Introduccin a FIVEWIN
Objeto Brocha.
Objeto Cursor.
Objeto Font.
Objeto Icono que representar a la ventana minimizada o en
cambio de tarea.
Objeto men de la ventana.
Objeto men del sistema.
Objeto PoPup.
Objeto barra de mensajes.
Objeto Ventana.
Objeto scroll bar vertical.
Objeto scroll bar horizontal.
Mtodos ms utilizados
Box ( nTop, nLeft, nBottom, nRight )
Dibuja una caja en las coordenadas especificadas y el color actual.
Circle ( nRow, nCol, nWidth )
Dibuja un circulo en las coordenadas y con el radio especificado.
Line ( nTop, nLeft, nBottom, nRight )
Dibuja una lnea en las coordenadas determinadas.
Say ( nRow, nCol, cText, nClrFore, nClrBack, oFont, lPixel )
Pinta una cadena de texto con los colores y el font especificado. S el
parmetro lPixel es verdadero las coordenadas sern en pixels.
SayBitmap ( nRow, nCol, coBitmap, nWidth, nHeight )
Dibuja un bitmap correspondiente a un objeto Bitmap.
SayRect ( nRow, nCol, cText, nClrFore, nClrBack, nWidth )
Dibuja una cadena de texto rodeada de un rectngulo con los colores
especficos y el ancho concreto.
SetPixel ( nX, nY, nColor )
Pintar un pixel en las coordenadas y el color especificados.
SetText ( cText )
Cambiar el texto de la barra de ttulo u obtenerlo.
EraseBkGnd (hDC)
Borra el fondo de una ventana. El dispositivo de contexto lo obtenemos
con el mtodo GetDC. Ejemplo: EraseBkGnd (oWnd:GetDC() ) .
FloodFill ( nFila, nColumna, nRGBcolor)
Rellena un contorno cerrado del color especificado.
Capture ()
Captura toda la actividad del ratn en la ventana.
CoorsUpdate ()
11
Programacin Windows
Introduccin a FIVEWIN
12
Programacin Windows
Introduccin a FIVEWIN
nGetChrHeight ()
Obtener el ancho de los caracteres en uso.
GetWidth ( cText, oFont )
Obtener el ancho de una cadena de texto con un font determinado.
GetRect ()
Devuelve un objeto TRect de coordenadas iguales a las coordenadas
de la ventana.
nVertRes ()
Obtener la resolucin vertical en curso.
nHorzRes ()
Obtener la resolucin horizontal en curso.
GetDC ()
Obtener el dispositivo de contexto de la ventana.
ReleaseDC ()
Deshacerse del dispositivo de contexto obtenido con GetDC.
HandleEvent ( nMsg, nWParam, nLParam )
Manejador de eventos.
HardCopy ( nScale, lFromUser )
Impresin de ventana con escala determinada. S hacemos que
lFromUser sea verdadero, aparecer la caja de dilogo de impresin.
13
Programacin Windows
Introduccin a FIVEWIN
Refresh ( lErase )
Obliga a repintarse a la ventana.
Update ()
Obliga a repintar, simplemente, los controles que incluyan en su
definicin la variable lUpdate con un valor verdadero.
SendMsg ( nMsg, nWParam, nLParam )
Enviar mensajes a una ventana para que los ejecute inmediatamente.
PostMsg ( nMsg, nWParam, nLParam )
Enviar mensajes a una ventana para que los ejecute cuando le
corresponda. Se ponen los mensajes en una pila de mensajes y se van
ejecutando por orden.
SetBrush ( oBrush )
Poner una brocha determinada a la ventana.
SetColor ( nClrFore, nClrBack, oBrush )
Poner unos colores determinados y una brocha determinada a la
ventana.
SelColor ( lFore )
Obtener colores desde una caja de dilogo de colores.
SetCoors ( oRect )
Cambiar las coordenadas de la ventana que correspondern con las
del objeto rectngulo obtenido con anterioridad.
SelFont ()
Obtener un font determinado eligindolo de la caja de dilogo de
fuentes.
SetFont ( oFont )
Poner una font determinada.
GetFont ()
Obtener la font que se est utilizando.
SetMenu ( oMenu )
Poner un men determinado a la ventana.
SetMsg ( cText )
Poner un texto determinado en la barra de mensajes.
14
Programacin Windows
Introduccin a FIVEWIN
PROGRAMAS PROPUESTOS
1. Programa de creacin de una ventana
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWnd
// Nuestra ventana
DEFINE WINDOW oWnd ;
FROM 2,2 TO 20,20 ;
TITLE "Mi Ventana"
ACTIVATE WINDOW oWnd
// Definimos la ventana
// Coordenadas
// Titulo
// Activamos la ventana
RETURN NIL
#include "FiveWin.ch"
#include "Winapi.ch"
FUNCTION Main()
LOCAL oWnd
// Nuestra ventana
LOCAL oBrush // Brocha
// Definimos la ventana
// Coordenadas
// Titulo
// Brocha para la pantalla
// Activamos la ventana
RETURN NIL
FUNCTION Main()
LOCAL oWnd
// Nuestra ventana
15
Programacin Windows
LOCAL oBrush
Introduccin a FIVEWIN
// Brocha
// Activamos la ventana
RETURN NIL
#include "FiveWin.ch"
#include "Winapi.ch"
FUNCTION Main()
LOCAL oWnd
// Nuestra ventana
LOCAL oBrush // Brocha
// Definimos la brocha
// de un fichero en disco
// Definimos la ventana
// Coordenadas
// Titulo
// Brocha para la pantalla
// Activamos la ventana
RETURN NIL
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWnd
// Nuestra ventana
LOCAL oIcon // Nuestro icono
DEFINE ICON oIcon FILE "MIICONO.ICO"
16
Programacin Windows
Introduccin a FIVEWIN
// Definimos la ventana
// Coordenadas
// Titulo
// Mensajito
// Activamos la ventana
RETURN NIL
FUNCTION Main()
LOCAL oWnd
DEFINE WINDOW oWnd FROM 0,0 TO 20,70 ;
TITLE "Clusulas ON"
ACTIVATE WINDOW oWnd ;
ON CLICK MsgInfo("Botn Izquierdo");
ON RIGHT CLICK MsgInfo("Botn Derecho");
ON MOVE MsgInfo("Moviendo") ;
ON RESIZE MsgInfo("Redimensionando") ;
ON PAINT MsgInfo("Pintando") ;
ON KEYDOWN MsgInfo("Pulsado un tecla") ;
ON INIT MsgInfo("Inicializando")
RETURN NIL
17
Programacin Windows
Introduccin a FIVEWIN
TEST DE EVALUACIN
Por favor, marque con una seal la respuesta o respuestas vlidas para cada
pregunta.
1.
Qu es una brocha?
Un instrumento de pintor
El objeto con el que coloreamos el fondo
de una ventana.
Un objeto para destruir ventanas
2.
3.
4.
5.
6.
______
18
Programacin Windows
Introduccin a FIVEWIN
3
MENUS
3.1
Mens Pop-Up
Programacin Windows
Introduccin a FIVEWIN
La gran diferencia con respecto a los mens tradicionales es que cada opcin
es un objeto que lleva incluido la accin que va a ejecutar cuando se le pulse,
y adems, otra serie de datos que veremos ms adelante.
3.2
La forma de confeccionar el listado es muy simple. Muy simple una vez que
hayamos hecho el primero pero, el primero...
Vamos con el primero que es el difcil.
Como era de esperar, un men es tambin un objeto y lo vamos a crear de
una forma estructurada. Lo haremos a base de 'bucles' MENU - ENDMENU:
MENU oMenu
....
ENDMENU
Con esta estructura tenemos garantizada la barra horizontal. Ahora le
agregaremos las diferentes opciones dentro de ella. Vamos a llamar ITEMS a
las diferentes opciones tanto de los mens horizontales como de los mens
verticales. Sern ITEMS del MENU o ms concretamente MENUITEMS.
Programacin Windows
Introduccin a FIVEWIN
Queda bien verdad? Ahora tendremos que acoplarle a cada opcin un men
vertical. Veamos:
MENU oMenu
MENUITEM "Primera opcin"
MENU
MENUITEM "Primero 1"
MENUITEM "Primero 2"
MENUITEM "Primero 3"
ENDMENU
MENUITEM "Segunda opcin"
MENUITEM "Tercera opcin"
ENDMENU
Programacin Windows
Introduccin a FIVEWIN
ENDMENU
MENUITEM "Segunda opcin"
MENUITEM "Tercera opcin"
ENDMENU
Una marca ' ' de activacin. > > > > > > >
Un dibujo.
Una accin asociada.
Teclas aceleradoras.> > > > > > > > > > >
Opciones habilitadas o deshabilitadas.
Programacin Windows
Introduccin a FIVEWIN
y falsa s no lo est.
Verdad s est marcada con
Verdad s esta activa y falsa s no lo est.
SetCheck ( lOnOff )
Enable()
Disable()
oMenuItem1:SetCheck (.t.)
oMenuitem2:Enable ( ) , oMenuitem2:Disable ( )
3.3
Ventanas y mens
Programacin Windows
Introduccin a FIVEWIN
Todo esto esta muy bien, pero... cmo lo ensamblamos con nuestra
ventana?
Muy sencillo. Al definir nuestra ventana y mediante nuestra clusula MENU,
llamamos a una funcin donde construiremos el men. Despus esta funcin
devolver el objeto men que ella misma fabrique:
...
...
DEFINE WINDOW oWnd TITLE "Prueba de menu" FROM 1,1 TO ;
20,70 MENU mimenu( )
3.4.
Barra de iconos
Programacin Windows
Introduccin a FIVEWIN
Programacin Windows
Introduccin a FIVEWIN
.....................
.....................
3.5
3.6
Mens flotantes
Es una prctica cada vez ms utilizada el utilizar el botn derecho del ratn
para editar las caractersticas de los objetos que tenemos en pantalla. Para
ello, cuando detectamos la pulsacin, desplegamos un men tipo pop-up en
el sitio en que se encontraba la flecha del ratn. Este tipo de men flotante lo
construiremos con una sintaxis de comandos preprocesados. Utilizamos el
comando ACTIVATE MENU y el nombre del objeto men y las coordenadas
con la clusula AT fila, columna. Tambin en este caso tenemos que declarar
el dueo del men con las clusulas OF, WINDOW o DIALOG y el nombre
del propietario. Al final del captulo veremos un programa de ejemplo.
3.7
Mens de herramientas
FiveWin nos ofrece dos formas de hacer los mens de herramientas. Los dos
dibujos de la parte inferior son dos barras de botones un tanto especiales. En
la primera barra, los botones son
autnticos. En la segunda no. La segunda
barra de herramientas es un bitmap
completo. Vamos a invertir los colores de
los botones para producir el efecto de
hundimiento.
La primera barra la conseguimos mediante
la definicin de una barra de botones y la
clusula ADJUST o mediante la funcin
MsgToolBar pasndola como parmetros el
objeto ventana o dialogo donde se va a
mostrar, el ttulo de la barra, un array de
codeblocks que contengan las acciones a
realizar con cada pulsacin y por ltimo
uno o dos arrays de dibujos para los
botones. El segundo array sera para la animacin de los botones.
Programacin Windows
Introduccin a FIVEWIN
La segunda barra tiene que simular la pulsacin del botn calculando las
coordenadas de los botones en funcin del sitio donde se pulso. Una vez
calculado las coordenadas se utilizara la funcin InvertRect. Esta funcin
tiene como parmetros el dispositivo del contexto donde estamos pintando
(por ejemplo oWnd:hDC ) y un array de coordenadas del rectngulo a invertir.
Una nueva llamada a la funcin con las mismas coordenadas supondra que
el botn volvera a su posicin original.
Programacin Windows
Introduccin a FIVEWIN
PROGRAMAS PROPUESTOS
1.
El programa crea una ventana que incorpora una clusula MENU. Esta
clusula tiene que estar acompaada de un objeto men que se obtendr
como retorno de la funcin CreaMenu( ). En esta funcin se utilizan los
mtodos Enable y Disable para habilitar y deshabilitar opciones, y el mtodo
SetCheck para marcar y desmarcar opciones del men. Este ltimo mtodo
se apoya en el dato lChecked
para saber s la opcin est marcada o no.
#include "Fivewin.ch"
// Creacin de mens desde cdigo
STATIC oWindow
FUNCTION Main()
DEFINE WINDOW oWindow FROM 5,5 TO 24,70 ; // Coordenadas
TITLE OemToAnsi("Probando los mens") ;
// Ttulo
MENU CreaMenu()
// Men
ACTIVATE WINDOW oWindow
RETURN NIL
//-------------------------------------------------------------------------//
// Funcin que crea el men para la aplicacin
FUNCTION CreaMenu()
LOCAL oMenu
// Menu de la aplicacin
LOCAL oPrimero, oSegundo, oMarcado // Items para el men
MENU oMenu
// Creamos el men
MENUITEM "&Primero"
MENU
MENUITEM "&Calculadora" ACTION WinExec("Calc.exe")
MENUITEM "&Block de notas" ACTION WinExec("Notepad.exe")
SEPARATOR
MENUITEM "&Salir" ACTION oWindow:End()
ENDMENU
MENUITEM "&Segundo"
MENU
MENUITEM oPrimero PROMPT "&1.- Activar 2";
ACTION (oPrimero:Disable(), oSegundo:Enable())
MENUITEM oSegundo PROMPT "&2.- Activar 1" ;
ACTION (oPrimero:Enable(), oSegundo:Disable())
SEPARATOR
MENUITEM oMarcado PROMPT "Item marcable" ;
ACTION oMarcado:SetCheck( ! oMarcado:lChecked)
ENDMENU
ENDMENU
10
Programacin Windows
Introduccin a FIVEWIN
oSegundo:Disable()
RETURN oMenu
//-------------------------------------------------------------------------//
2.
#include "Fivewin.ch"
// Creacin de mens con dibujo
STATIC oWindow // Ventana del programa
FUNCTION Main()
DEFINE WINDOW oWindow FROM 5,5 TO 24,70 ; // Coordenadas
TITLE OemToAnsi("Probando los mens") ;
// Ttulo
MENU CreaMenu()
// Men
ACTIVATE WINDOW oWindow
RETURN NIL
//-------------------------------------------------------------------------//
// Funcin que crea el men para la aplicacin
FUNCTION CreaMenu()
LOCAL oMenu
// Menu de la aplicacin
MENU oMenu
// Creamos el men
MENUITEM "&Primero"
MENU
MENUITEM FILE "calc.bmp" ;
ACTION WinExec("Calc.exe")
MENUITEM "&Block de notas" ACTION WinExec("Notepad.exe")
SEPARATOR
MENUITEM FILE "Exit.bmp" ;
ACTION oWindow:End()
ENDMENU
ENDMENU
RETURN oMenu
//-------------------------------------------------------------------------//
3.
11
Programacin Windows
Introduccin a FIVEWIN
Este programa crea una ventana y define una barra de iconos que sacamos
de ficheros .BMP almacenados en el disco.
#include "FiveWin.ch"
// Utilizacin de barras de iconos
STATIC oWindow
STATIC oBarra
// Ventana de la aplicacin
// Barra de botones
FUNCTION Main()
// Definimos la ventana
DEFINE WINDOW oWindow FROM 5,5 TO 24,70 ;
TITLE "Probando barras de iconos "
// Coordenadas
// Ttulo
4.
#include "Fivewin.ch"
// Cambio del bitmap de un botn
STATIC oWindow
STATIC oBoton1, oBoton2
STATIC nDibujo := 1
// Ventana de la aplicacin
// Los botones
// Controlamos el dibujo del botn
FUNCTION Main()
// Definimos la ventana
DEFINE WINDOW oWindow FROM 5,5 TO 24,70 ;
TITLE "Probando los botones "
// Coordenadas
// Ttulo
12
Programacin Windows
Introduccin a FIVEWIN
OF oWindow ;
SIZE 300,20 ;
ACTION Cambiar()
@40 , 40 BUTTON oBoton2 FILE "Boton1.bmp" ;
SIZE 50,50 ;
OF oWindow
ACTIVATE WINDOW oWindow
RETURN nil
//------------------------------------------------------------------------//
// Cambiar el dibujo del botn
FUNCTION Cambiar()
nDibujo := IF (nDibujo == 3, 1, ++nDibujo)
oBoton2:SetFile("Botn"+alltrim(str(nDibujo))+".BMP")
oBoton2:Paint()
RETURN NIL
// Definimos la ventana
DEFINE WINDOW oWindow FROM 5,5 TO 24,70 ;
TITLE "Probando los botones "
// Ttulo
// Coordenadas
13
Programacin Windows
Introduccin a FIVEWIN
// usamos esta funcin del API para obtener las coordenadas de la ventana
// actualizadas.
aCoord := GetWndRect(oWindow:hWnd)
ACTIVATE POPUP oMenu WINDOW oWindow AT nRow+aCoord[1] , nCol+aCoord[2]
14
Programacin Windows
Introduccin a FIVEWIN
return nil
//----------------------------------------------------------------------------//
#include "Fivewin.ch"
// Redefinicin del men de sistema
STATIC oWindow // Ventana del programa
FUNCTION Main()
DEFINE WINDOW oWindow FROM 5,5 TO 24,70 ;
// Coordenadas
TITLE OemToAnsi("Probando los mens de sistema") // Ttulo
// al empezar a crearse la ventana se llama a la funcin
// cambiaMenu donde modificaremos el men del sistema
ACTIVATE WINDOW oWindow ON INIT CambiaMenu()
RETURN NIL
//-------------------------------------------------------------------------//
// Funcin que cambia el men de sistema
FUNCTION CambiaMenu()
LOCAL oMenu // Menu de systema
REDEFINE SYSMENU oMenu OF oWindow // Cambiamos el men
SEPARATOR
MENUITEM "&Opciones"
MENU
MENUITEM "&Calculadora" ACTION WinExec("Calc.exe")
MENUITEM "&Block de notas" ACTION WinExec("Notepad.exe")
SEPARATOR
MENUITEM "&Salir del programa" ACTION oWindow:End()
ENDMENU
SEPARATOR
MENUITEM OemToAnsi("&Informacin") ACTION MsgInfo("Prueba de SysMenu")
ENDSYSMENU
// resetearamos lo hecho ahora volviendo al men original del sistema
// utilizando el mtodo Reset ----> oMenu:Reset( )
RETURN NIL
//-------------------------------------------------------------------------//
15
Programacin Windows
Introduccin a FIVEWIN
STATIC oWindow
FUNCTION Main()
LOCAL aBit1 := { "BOTTON.BMP",;
"TOP.BMP",;
"FORWARD.BMP",;
"REWIND.BMP",;
"NEXT.BMP",;
"PREV.BMP",;
"REC.BMP",;
"BOX.BMP" }
LOCAL aBit2 := aBit1
LOCAL aAcciones := {{|| .T. },{||.T.},{||.T.},{||.T.},{||.T.},{||.T.},{||.T.},{||.T.}}
DEFINE WINDOW oWindow FROM 0,0 TO 20,70 ;
TITLE "Probando las barras de herramientas"
// Creamos la barra de herramientas
ACTIVATE WINDOW oWindow ON INIT ;
MsgToolBar(oWindow,; // Ventana
"Tools",; // Ttulo
aAcciones,; // Acciones
aBit1,;
// 1er Bitmap del boton
aBit2,;
// Segundo bitmap
)
RETURN NIL
16
Programacin Windows
Introduccin a FIVEWIN
TEST DE EVALUACIN
Por favor, marque con una seal la respuesta o respuestas vlidas para cada
pregunta.
1.
2.
3.
4.
5.
6.
______
17
Programacin Windows
Introduccin a FIVEWIN
18
Programacin Windows
Introduccin a FIVEWIN
4
CAJAS DE DIALOGO
4.1
Programacin Windows
Introduccin a FIVEWIN
Programacin Windows
Introduccin a FIVEWIN
Programacin Windows
Introduccin a FIVEWIN
derecho sobre la caja de dilogo y ejecutar una funcin. Se prepara todo con
ON RIGHT CLICK y el nombre de una funcin.
4.2
4.3
Tipos de controles
Texto esttico
Cajas de edicin
Radio botones
Checkbox
Push button
Listbox
Combo box
Iconos
Cursores
Bitmaps
ScrollBars
TwBrowses
Controles VBX
Programacin Windows
Introduccin a FIVEWIN
FiveWin propone dos formas de abordar el trabajo para confeccionar las cajas
de dilogo:
4.4
Static Text
Programacin Windows
Introduccin a FIVEWIN
Los Static Text en Windows son lo que los Say's en CA-Clipper. Mostramos
texto por pantalla. En nuestra caja de dilogo pueden aparecer como una
cadena de texto normal y corriente o con un tipo de letra y un color
determinado. Tambin podemos rodearlo de un borde o hacer que el texto se
centre o se alinee a izquierda o derecha. Podemos mostrar en pantalla, como
en CA-Clipper, cadenas de texto o variables.
Programacin Windows
4.5
Introduccin a FIVEWIN
Edit text
Programacin Windows
Introduccin a FIVEWIN
4.6
Radio Button
Programacin Windows
Introduccin a FIVEWIN
4.7
Check Box
Programacin Windows
Introduccin a FIVEWIN
4.8
Pushbutton
10
Programacin Windows
Introduccin a FIVEWIN
11
Programacin Windows
4.9
Introduccin a FIVEWIN
Listbox
Utilizamos la misma forma de declarar el control como hemos hecho con los
dems controles: @ fila, columna y la clusula correspondiente en este caso
LISTBOX. S vamos a necesitar posteriormente referirnos a algn mtodo o
variable de la clase TListbox tendremos que especificar el nombre de un
objeto y despus la clusula VAR seguida de la variable que nos servir para
recoger la eleccin hecha en el LISTBOX. Acto seguido tendremos que
especificar el dueo del control con OF, DIALOG o WINDOW y el nombre del
propietario.
Como siempre, s no ponemos el nombre del objeto tampoco hace falta poner
la clusula VAR ya que se entender perfectamente cual es la variable. Dado
12
Programacin Windows
Introduccin a FIVEWIN
que el LISTBOX nos sirve para mostrar un array, tiene que existir una
clusula para ello. Se trata de la clusula ITEMS a la que acompaaremos
del nombre de un array. Despus tendremos que dar forma a nuestro control
como siempre (es opcional):
Tamao con clusula SIZE ancho y alto, color con la clusula COLOR o
COLORS y el color del texto y el color del papel, el tipo de letra que queremos
para el listbox especificando un objeto FONT, una cadena de texto para que
se muestre en la barra de mensaje con la clusula MESSAGE, si queremos
que disponga de un borde redimensionable y se pueda arrastrar con el ratn.
Si queremos ajustar al mximo la ubicacin del control, utilizaremos la
clusula PIXEL para que las medidas sean en puntos o pixels.
Disponemos de varias oportunidades de interceptar el dialogo de Windows y
FiveWin desviando el mismo hacia las funciones que nosotros
especifiquemos.
Podemos hacer que se ejecute una funcin cuando:
Cambie la opcin elegida (ON CHANGE)
Se efecte una doble pulsacin del botn izquierdo (ON DBLCLICK)
Por ltimo podemos validar la perdida de foco del control mediante una
funcin especificada con la clusula VALID y como siempre disponemos de
una clusula UPDATE de refresco selectivo.
4.10
ComboBox
13
Programacin Windows
Introduccin a FIVEWIN
4.11
Iconos
14
Programacin Windows
Introduccin a FIVEWIN
4.12
Bitmaps
15
Programacin Windows
Introduccin a FIVEWIN
4.13 Cursores
FiveWin nos proporciona la posibilidad de cambiar el apuntador del ratn de
una forma sencilla.
DEFINE CURSOR objeto Cursor
cResName
4.14
Scroll Bar
Las Barras de Scroll son unos controles que vamos a utilizar para representar
un valor determinado que estar comprendido entre un rango de valores
dados. Se trata de un rectngulo horizontal o vertical con un botn en cada
uno de sus extremos y otro que se ir deslizando a lo largo de ella y que
representar, visualmente el valor del que hemos estado hablando.
Tenemos un comando para situar una barra de scroll en una caja de dilogo.
Se trata del comando preprocesado @ fila, columna SCROLLBAR .
Los comandos que vamos a utilizar desde el cdigo de nuestro programa
para definir las barras de scroll son los siguientes:
16
Programacin Windows
Introduccin a FIVEWIN
17
Programacin Windows
Introduccin a FIVEWIN
4.15
Controles VBX
18
Programacin Windows
Introduccin a FIVEWIN
4.16
Clase TDialog
4.16.1
Principales variables
bStart
bMoved
bPainted
bValid
bInit
bRClicked
bLClicked
bLDblClick
bWhen
bMMoved
19
Programacin Windows
bKeydown
nChrHeight
nChrWidth
Cargo
aControls
lFocused
lActive
lVisible
oFont
4.16.2
Introduccin a FIVEWIN
Principales mtodos
Disable()
Enable()
Hide()
Display()
End()
Destroy()
Copy()
cTitle (cTitle)
EraseBkGnd()
GetItem (nId)
FocusNext()
GoPrevCtrl (hCtrl)
GoNextCtrl (hCtrl)
GotFocus()
LostFocus()
cGenPrg()
Refresh()
HardCopy (nScale,lUser)
impresora
20
Programacin Windows
Introduccin a FIVEWIN
PROGRAMAS PROPUESTOS
1. Ejemplo de utilizacin de comandos 'arroba'
Se simula un editor de recursos creando una ventana MDICHILD y
cambiando a una caja de dilogo con los controles copiados de la
ventana. Se borra los controles de la ventana MDICHILD usando el botn
derecho del mouse.
#include "fivewin.ch"
static oWnd, oMenu, MdiCh
static oMenuIt1 , oMenuIt2 , oMenuIt3, oMenuIt4, oMenuIt5
static oMenuIt6 , oMenuIt7 , oMenuIt8, oMenuIt9, oMenuIt10
static oMenuIt11, oMenuIt12
static CtrlActivo := 0
static oDlg
function main()
DEFINE WINDOW oWnd TITLE "Utilidad de comandos 'arroba' " ;
FROM 0,0 TO 20,79 MENU MiMenu() MDI
// Creamos una ventana MDI con su correspondiente men
RETURN nil
****************************
Function MiMenu()
*****************
*
* Creamos el men principal de la aplicacin y asignamos acciones
*
MENU oMenu
MENUITEM oMenuIt1 PROMPT "Say"
MENUITEM oMenuIt2 PROMPT "Get"
MENUITEM oMenuIt3 PROMPT "CheckBox"
MENUITEM oMenuIt4 PROMPT "ListBox"
MENUITEM oMenuIt5 PROMPT "ComboBox"
MENUITEM oMenuIt6 PROMPT "Button"
MENUITEM oMenuIt7 PROMPT "Scr V"
MENUITEM oMenuIt8 PROMPT "Scr H"
MENUITEM oMenuIt9 PROMPT "Icono"
MENUITEM oMenuIt10 PROMPT "Bitmap"
MENUITEM oMenuIt11 PROMPT "Test"
ACTION Desac(1 )
ACTION Desac(2 )
ACTION Desac(3 )
ACTION Desac(4 )
ACTION Desac(5 )
ACTION Desac(6 )
ACTION Desac(7 )
ACTION Desac(8 )
ACTION Desac(9 )
ACTION Desac(10)
ACTION Test()
21
Programacin Windows
Introduccin a FIVEWIN
ACTION
RETURN oMenu
**************************
Function Desac (nMenos)
*************
* Desactivamos las opciones de men de 1 a 10 menos
* la actual.
* Si existe alguna opcin deshabilitada las habilitamos todas
* Lo hacemos para que cuando elijamos una opcin esta indique
* que control estamos en disposicin de colocar en la ventana de diseo
FOR nIndice := 1 TO 10
IF !oMenu:aItems [nIndice]:lActive
CtrlActivo := 0
EXIT
ENDIF
NEXT
FOR nIndice := 1 TO 10
oPcion := oMenu:aItems [nIndice]
IF CtrlActivo == 0
oPcion:Enable()
ELSE
IF nIndice == nMenos
LOOP
ENDIF
oPcion:Disable()
ENDIF
NEXT
22
Programacin Windows
Introduccin a FIVEWIN
oMenu:Refresh()
RETURN nil
*************************************
FUNCTION CreaMdiCh()
**************
*
* Crea la ventana MdiChild
*
*
DEFINE WINDOW MdiCh MDICHILD OF oWnd;
TITLE OemToAnsi("Caja de di logo de diseo") ;
FROM 4,10 TO 23,70
MdiCh:bLClicked := { |fila,columna| PonCtrl (fila,columna) }
// cuando se presione el botn izquierdo del ratn vamos a poner un control
// en la ventana MDICHILD en las coordenadas especificadas.
// El control vendr determinado por la variable CtrlActivo
RETURN nil
*******************************
Function PonCtrl (fila,columna)
****************
*
* Pone controles en la ventana de diseo
*
*
Local nFila := fila
Local nColumna := columna
Local oIcon, oBitmap
Local oSay
// En la fase de diseo todos los controles situados son de la clase TSay. Diferenciamos unos
// de otros por el texto mostrado en cada uno de ellos.
// Este texto se acumula en la variable de instancia del objeto llamada cCaption
DO CASE
23
Programacin Windows
Introduccin a FIVEWIN
CASE CtrlActivo == 1
@ nFila,nColumna SAY oSay PROMPT "TSay" OF MdiCh ;
PIXEL ;
// para especificar las coordenadas en puntos
DESIGN ;
// para poder redimensionar y mover el control
SIZE 90,30
oSay:bRClicked := {|| oSay:End()}
// cuando pulsemos el botn derecho del ratn sobre el control, este desaparecer
// de la ventana gracias a que se ejecutar el mtodo End() para ese control
CASE CtrlActivo == 2
@ nFila,nColumna SAY oSay PROMPT "TGet" OF MdiCh ;
PIXEL ;
DESIGN ;
SIZE 90,30
oSay:bRClicked := {|| oSay:End()}
CASE CtrlActivo == 3
@ nFila,nColumna SAY oSay PROMPT "TCheck" OF MdiCh ;
PIXEL ;
DESIGN ;
SIZE 90,30
oSay:bRClicked := {|| oSay:End()}
CASE CtrlActivo == 4
@ nFila,nColumna SAY oSay PROMPT "TListbox" OF MdiCh ;
PIXEL ;
DESIGN ;
SIZE 100,100
oSay:bRClicked := {|| oSay:End()}
CASE CtrlActivo == 5
@ nFila,nColumna SAY oSay PROMPT "TComboBox" OF MdiCh ;
PIXEL ;
DESIGN ;
SIZE 100,100
oSay:bRClicked := {|| oSay:End()}
CASE CtrlActivo == 6
@ nFila,nColumna SAY oSay PROMPT "TButton" OF MdiCh ;
PIXEL ;
DESIGN ;
24
Programacin Windows
Introduccin a FIVEWIN
SIZE 100,40
oSay:bRClicked := {|| oSay:End()}
CASE CtrlActivo == 7
@ nFila,nColumna SAY oSay PROMPT "TScrv" OF MdiCh ;
PIXEL ;
DESIGN ;
SIZE 20,100
oSay:bRClicked := {|| oSay:End()}
CASE CtrlActivo == 8
@ nFila,nColumna SAY oSay PROMPT "TScrh" OF MdiCh ;
PIXEL ;
DESIGN ;
SIZE 100, 20
oSay:bRClicked := {|| oSay:End()}
CASE CtrlActivo == 9
@ nFila,nColumna SAY oIcon PROMPT "TIcon" OF MdiCh ;
PIXEL ;
DESIGN ;
SIZE 32,32
// Cuando pulsemos el botn derecho sobre un Icono accedemos a la caja de
// dilogo Abrir para elegir un fichero .ICO cuando elijamos el fichero, el nombre
// de este se acumula en la variable de instancia cargo
OTHERWISE
RETURN nil
25
Programacin Windows
Introduccin a FIVEWIN
ENDCASE
RETURN nil
***********************
FUNCTION Test ()
********************
LOCAL nTop
LOCAL nLeft
LOCAL nBottom
LOCAL nRight
:= MdiCh:nTop + 20
:= MdiCh:nLeft
:= MdiCh:nBottom - 10
:= MdiCh:nRight - 10
ON INIT AddCtrl()
return nil
****************************
FUNCTION AddCtrl()
****************************
*
*
* Aade los controles a la caja de dilogo en funcin de lo definido
* en la caja de dilogo de diseo
* En el array aControls de las cajas de dilogo y ventanas, se depositan los
* controles que pertenezcan a ellas.
LOCAL nInd := 0
LOCAL nLenaCtr := LEN (MdiCh:aControls)
LOCAL oBjeto, oIcon, oBitmap
LOCAL cCaption, nTop, nLeft, nBottom, nRight, nWidth, nHeight
LOCAL cVar := SPACE (30)
LOCAL lVar := .f.
LOCAL aItems := {"Uno","Dos","Tres","Cuatro","Cinco","Seis","Siete"}
// mientras que no se acaben los controles de la ventana de diseo
// se sigue en el proceso de creacin de controles
26
Programacin Windows
Introduccin a FIVEWIN
nInd ++
oBjeto := MdiCh:aControls[nInd]
// Los objetos TSay de la ventana de diseo nos proporcionan las
// coordenadas de los nuevos controles de la caja de dilogo y la variable
// cargo para los iconos y bitmaps
oBjeto:CoorsUpdate()
// con este mtodo refrescamos las coordenadas de cada objeto
nTop
nLeft
nWidth
nHeight
cCaption
:= oBjeto:nTop
:= oBjeto:nLeft
:= oBjeto:nRight - oBjeto:nLeft
:= oBjeto:nBottom - oBjeto:nTop
:= oBjeto:cCaption
DO CASE
CASE cCaption == "TSay"
@ nTop,nLeft SAY cCaption PIXEL OF oDlg ;
SIZE nWidth , nHeight
CASE cCaption == "TGet"
@ nTop,nLeft GET cVar PIXEL OF oDlg ;
SIZE nWidth , nHeight
CASE cCaption == "TCheck"
@ nTop,nLeft CHECKBOX lVar PROMPT cCaption PIXEL OF oDlg ;
SIZE nWidth , nHeight
CASE cCaption == "TListbox"
@ nTop,nLeft LISTBOX cVar ITEMS aItems PIXEL OF oDlg ;
SIZE nWidth , nHeight
CASE cCaption == "TComboBox"
@ nTop,nLeft COMBOBOX cVar ITEMS aItems PIXEL OF oDlg ;
SIZE nWidth , nHeight
CASE cCaption == "TButton"
@ nTop,nLeft BUTTON cCaption PIXEL OF oDlg ;
SIZE nWidth , nHeight
CASE cCaption == "TScrv"
@ nTop,nLeft SCROLLBAR VERTICAL PIXEL OF oDlg ;
27
Programacin Windows
Introduccin a FIVEWIN
ENDCASE
ENDDO
return nil
28
Programacin Windows
Introduccin a FIVEWIN
29
Programacin Windows
Introduccin a FIVEWIN
TEST DE EVALUACIN
Por favor, marque con una seal la respuesta o respuestas vlidas para cada
pregunta.
______
30
Programacin Windows
Introduccin a FIVEWIN
5
RESOURCE WORKSHOP
5.1
____________________________________________________________________
1
Programacin Windows
Introduccin a FIVEWIN
5.2
Qu es el Resource WorkShop
5.3
Esta claro que nos hemos cambiado a Windows para que el trabajo sea ms
fcil y ms bonito. Lo que no haremos, por supuesto, es utilizar herramientas
por muy visuales que sean, para realizar un trabajo que lo haramos mucho
mejor desde el cdigo de nuestro programa. Esto es lo que sucede con los
mens. Los mens son mucho ms fciles de codificar desde el programa
que de hacer desde el Resource WorkShop. En cambio las cajas de dilogo
____________________________________________________________________
2
Programacin Windows
Introduccin a FIVEWIN
5.3
Cajas de dilogo
Mens
Bitmaps y
Cursores
5.4
Almacenes de Recursos
____________________________________________________________________
3
Programacin Windows
Introduccin a FIVEWIN
5.5
Cajas de dilogo
Las cajas de dilogo van a ser una herramienta indispensable para nuestro
trabajo. Son como las pantallas tpicas que venamos utilizando en CA-Clipper
para realizar la captura y muestra de nuestros datos. Sirven para
comunicarnos con el usuario. Normalmente estn 'repletas de controles' Says,
Gets, Browses, radiobotones, Checkbox, etc. Os aseguramos que lo vamos a
pasar fenomenal diseando cajas de dilogo con el Resource WorkShop.
Tenemos dos clases de cajas: Modales y No-Modales. Las cajas modales son
similares a las pantallas de CA-Clipper que tendremos que terminarlas para
poder pasar a realizar otra tarea. Las no-modales, por el contrario, pueden
emprender otra misin sin tener terminada la suya. !Van a darnos un juego
tremendo aunque tambin habr que tener ms cuidado con ellas. Ambas
____________________________________________________________________
4
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
5
Programacin Windows
Introduccin a FIVEWIN
Al elegir la opcin DIALOG se nos muestra una ventana con una caja de
dilogo vaca para ir rellenndola con controles. En la esquina superior
derecha de la ventana se muestran tres mens flotantes. Uno que
utilizaremos para alinear los controles otro para dar ttulo a los controles y el
ltimo, el ms importante, para elegir los controles que colocaremos en la caja
de dilogo.
En el men de herramientas podemos
elegir entre los siguientes tipos de
controles:
Push Button
Radio Buttons
Barras de scroll horizontales
verticales.
ListBox
Check Box
ComboBox
Edit Text
Static Text
Controles estilo Borland
5.5.1 PUSHBUTTON
Los pushbutton son esos rectngulos grises que aparecen en todas las cajas
de dialogo que al apretarlos con la flecha del ratn, se hunden y
desencadenan una accin. En FiveWin contamos con una serie de comandos
preprocesados para su manejo y definicin. Contamos con dos tipos de
botones: los botones normales con texto en su interior y los botones con
dibujos
____________________________________________________________________
6
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
7
Programacin Windows
Introduccin a FIVEWIN
lo
En este momento nuestro cursor cambia de forma
situaremos sobre la caja de dilogo que estamos diseando y pulsaremos.
Aparecer en la caja de dilogo un botn.
Si en lugar de este dibujo
elegimos el otro icono, lo
que obtendremos ser un
botn con estilo Borland
que veremos despus.
Para
acceder
a
las
caractersticas del botn
haremos 'doble click' sobre
el mismo y de esta forma
podremos
cambiar
aspectos concretos de su
funcionamiento.
La pantalla que obtenemos
es la siguiente:
____________________________________________________________________
8
Programacin Windows
Introduccin a FIVEWIN
En el apartado de atributos
podemos
especificar
si
queremos que el control
tome el foco cuando se
pulse la tecla Tabulador si
marcamos el apartado Tab
stop. Si deseamos que nuestro botn forme parte de un grupo de controles lo
sealamos con Group. S deseamos que nuestro botn se muestre
desactivado lo indicaremos con el apartado Disabled. Posteriormente
podemos habilitarlo desde cdigo con oBoton:Enable() en el caso de que
llamemos as el objeto botn asociado. Por ltimo podemos ocultar el botn s
desactivamos la marca Visible luego se puede activar con oBoton:Show(). El
mtodo opuesto a Show es Hide y el mtodo opuesto a Enable es Disable().
Como dijimos antes tambin podemos utilizar botones con dibujo. El sistema
para que el dibujo aparezca es el siguiente:
1 utilizar los botones definidos por Borland con identificadores que van desde
el nmero 1 correspondiente al OK y la 'V' hasta el 999 . Estos botones
predefinidos estn almacenados en la librera BWCC.DLL y se pueden utilizar
libremente ya que la misma es de libre distribucin.
____________________________________________________________________
9
Programacin Windows
Introduccin a FIVEWIN
2 Dibujar los botones nosotros mismos en cuyo caso tendremos que dibujar
ntegramente los tres estados posibles del botn: reposo, con el foco y
pulsado. Luego almacenaremos los tres dibujos con los nombres 1000 +
nmero de identificador, 3000 + nmero identificador y 5000 + nmero
identificador y anotaremos como identificador en las propiedades del botn el
nmero identificador que hemos mencionado.
1300
3300
5300
Una vez realizada la accin solo nos quedara entrar en la caja de dilogo
para variar el texto y las caractersticas que desesemos. Lo haramos
haciendo doble click sobre el rectngulo que aparece en la caja de dilogo.
Nos aparece una caja de dilogo idntica a la que vimos cuando hablamos de
los PushButton. Utilizaremos de igual forma los apartados dedicados a
Captin, ID y Attributes. Podremos ajustar el circulito a la izquierda o a la
derecha mediante la marca Left o Right del apartado Justification
____________________________________________________________________
10
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
11
Programacin Windows
Introduccin a FIVEWIN
5.5.4 Listbox
____________________________________________________________________
1
Programacin Windows
Introduccin a FIVEWIN
Los listbox son unos rectngulos con una barra de scroll vertical que
utilizamos para mostrar los elementos de los arrays. En FiveWin podemos
mostrar tanto arrays de caracteres como arrays de dibujos. La definicin
desde cdigo la haremos de la siguiente forma:
REDEFINE LISTBOX objeto Listbox VAR cnVariable
ITEMS, PROMPTS array de datos
FILES cMascara de ficheros
ID nIdentificador
ON CHANGE uCambio
ON [ LEFT ] DBLCLICK uDobleClickBotnIzquierdo
OF, WINDOW, DIALOG objeto contenedor
HELPID, HELP ID nHelpId
BITMAPS
SIZE nSize
VALID ValidFuncin
COLOR,COLORS nColorTexto, [ nColorFondo]
MESSAGE cMensaje
UPDATE
WHEN WhenFuncin
____________________________________________________________________
2
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
3
Programacin Windows
5.5.5
Introduccin a FIVEWIN
Combobox
Identificador
____________________________________________________________________
4
Programacin Windows
Introduccin a FIVEWIN
ID nIdentificador
OF,WINDOW,DIALOG objeto Wnd
HELPID, HELP ID nHelpId
ON CHANGE Funcin
VALID ValidFuncin
COLOR,COLORS nColorTexto [, nColorFondo ]
UPDATE
MESSAGE cMensaje
WHEN WhenFuncin
5.5.6
Check Box
____________________________________________________________________
5
Programacin Windows
Introduccin a FIVEWIN
dependiendo de la eleccin
cambindose nuestro cursor a
realizada. El segundo tipo de checkbox es un checkbox definido por la casa
Borland no cambiando su funcionamiento sino simplemente su aspecto
externo.
Una vez elegido el icono correspondiente y con nuestro nuevo cursor nos
situamos sobre la caja de dilogo y hacemos un click en la posicin deseada.
El checkbox aparece sobre la caja aprovechando para rectificar la posicin en
ella. Podemos aprovechar para ajustar sus ltimos valores haciendo doble
click sobre el Checkbox. Nos aparecer la caja de dilogo de estilo.
De las opciones que podemos modificar solo dos son especificas del
checkbox ya que las dems son compartidas por los otros controles vistos
hasta el momento: Auto checkbox y auto 3 states. La primera es para que el
Checkbox se pueda elegir y la segunda es para poder representarse como no
elegido, como elegido o como no elegible siendo este ltimo un cuadrado
negro.
5.5.7
Static Text
____________________________________________________________________
6
Programacin Windows
Introduccin a FIVEWIN
y
gris para nuestro control o no. Nuestro cursor cambia de forma
como siempre lo llevamos sobre nuestra caja de dilogo y hacemos 'click'
sobre ella.
Ajustamos su posicin y hacemos 'doble click' sobre el control para acceder a
la caja de estilo del control.
____________________________________________________________________
7
Programacin Windows
Introduccin a FIVEWIN
En esta caja de estilo lo primero que podemos hacer es anotar un texto para
mostrar directamente en la caja en el apartado Caption. Tenemos que hacer
la salvedad de que si lo que vamos a mostrar en nuestra caja de dilogo es
un texto que no va a variar a lo largo del programa, no har falta redefinirlo
desde nuestro programa y en el apartado ID se anotar el nmero -1.
El apartado Attributes tiene cinco checkbox que podremos marcar o
desmarcar:
Tab Stop
Group
Visible
Disabled
Border
5.5.8
Edit Text
Si el anterior control era el @ SAY este ser el @ GET. Incorpora una nueva
posibilidad como es la de edicin de lo que en CA-Clipper era campo Memo.
La redefinicin desde el cdigo de nuestro programa se har en los siguientes
trminos:
____________________________________________________________________
8
Programacin Windows
Introduccin a FIVEWIN
Elegimos el icono
____________________________________________________________________
9
Programacin Windows
Introduccin a FIVEWIN
5.5.9
TWBrowses
____________________________________________________________________
10
Programacin Windows
Introduccin a FIVEWIN
que conozcamos del control que vamos a redefinir desde el cdigo de nuestro
. Nos aparece una caja de
programa. Para ello elegiremos el icono
dilogo con un combobox para elegir de entre los controles que disponemos.
En lugar de elegir uno lo que hacemos es teclear el nombre de la clase que
forma nuestro control, en este caso la clase que fabrica el control es la
TWBrowse. As cuando redefinamos el control desde el cdigo de nuestro
programa, el programa 'tapar' el hueco que haba en esa caja de dilogo con
la definicin que le proporcionar la clase.
Una vez que hayamos escrito el nombre de nuestra clase en el combobox, el
cursor se transforma en una cruz que situaremos en la caja de dilogo que
estamos diseando. Hacemos 'click' y ajustamos la situacin definitiva de
nuestro control en tamao y lugar. Despus hacemos un 'doble click' sobre el
control accediendo a la caja de estilo.
......................................
.......................................
::lCaptured = .f.
::lMChange = .t.
::nRowPos = 1
::nColPos = 1
____________________________________________________________________
11
Programacin Windows
::nStyle
Introduccin a FIVEWIN
::nId
= ::GetNewId()
::cAlias = cAlias
::bLine
= bLine
...................................
...................................
____________________________________________________________________
12
Programacin Windows
Introduccin a FIVEWIN
5.5.10
Bitmaps
____________________________________________________________________
13
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
14
Programacin Windows
Introduccin a FIVEWIN
5.5.11
____________________________________________________________________
15
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
16
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
17
Programacin Windows
Introduccin a FIVEWIN
PROGRAMAS PROPUESTOS
1. Realizamos un programa que capture las teclas que se pulsan. La
clase TControl tiene un codeblock preparado para que se ejecute
cuando se pulsa una tecla.
Lo aprovechamos para efectuar una busqueda blanda en un TWBrowse.
Se va a ir reposicionando la barra de seleccin dependiendo de el
registro donde se posicione el puntero en la busqueda realizada
#include "fivewin.ch"
static oWnd
function main()
DEFINE DIALOG oDlg TITLE "Captura de teclas en controles" FROM 2,2 TO 20,70
____________________________________________________________________
18
Programacin Windows
Introduccin a FIVEWIN
*************************************
function busca (nKey,oBrow)
*************************************
cBuffer += CHR(nKey)
// Si pulsamos una tecla que no sea alfabtica, se vaca el buffer que
// estamos formando y se devuelve el control a la caja de di logo
IF !ISALPHA(CHR(nKey))
cBuffer := ""
return .t.
ENDIF
#include "fivewin.ch"
static oWnd
function main()
DEFINE WINDOW oWnd ;
TITLE "Prueba de Dialogos NOMODALES en ficheros .RC";
FROM 0,0 TO 24,79
REDEFINE BUTTON oBoton3 ID 101 OF oDlg2 ACTION oDlg1:cTitle ("Hola soy oDlg2")
REDEFINE BUTTON oBoton4 ID 102 OF oDlg2 ACTION oBoton1:SetText ("Adios")
____________________________________________________________________
19
Programacin Windows
Introduccin a FIVEWIN
RETURN NIL
#include "fivewin.ch"
static oWnd, nVisible :=1
function main()
Local oMsg
return nil
FUNCTION Dialogos()
LOCAL oDlg, oLbx, oSay, oBoton1, oBoton2
LOCAL aItems := {"uno","dos","tres","cuatro","cinco"}
LOCAL nVar := 2
LOCAL cSay := "Hola, soy un say multilinea que aparece y desaparece"
OF oDlg
//Disable()
//Disable()
//Disable()
//Hide()
//Hide()
//Hide()
____________________________________________________________________
20
Programacin Windows
Introduccin a FIVEWIN
Function Cambia(oDlg)
LOCAL nInd
LOCAL nLen := LEN (oDlg:acontrols)
oDlg:aControls[nVisible]:Hide()
oDlg:aControls[nVisible]:Disable()
nVisible ++
IF nVisible > nLen
nVisible := 1
ENDIF
oDlg:aControls[nVisible]:Enable()
oDlg:aControls[nVisible]:Show()
return nil
#include "fivewin.ch"
Static oWnd
function main()
LOCAL oDlg, oMsgBar
Function MiDialogo()
Local oDlg
Local oCheck1, oCheck2, oCheck3, oCheck4
Local lVar1 := .T.,;
lVar2 := .F.,;
lVar3 := .F.,;
lVar4 := .T.
Local oSay1, oSay2, oSay3
Local oGet1
Local cVarGet1 := "
"
Local oSbrV1, oSbrH1
Local oLbx1
Local nVar := 2,;
aItemLbx1 := {"Uno","Dos","Tres","Cuatro","Cinco","Seis","Siete"}
____________________________________________________________________
21
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
22
Programacin Windows
Introduccin a FIVEWIN
ID 116 OF oDlg
ID 110 OF oDlg
ID 111 OF oDlg
#include "fivewin.ch"
static oWnd
Function main()
LOCAL oMsgBar
Function MiDialogo()
Local oDlg, oBtn1, oBtn2, oGet1, oGet2, oGet3, oSay1, oSay2, oSay3, oLbx1, oLbx2
Local cVar1 := space(15)
Local cVar2 := space(15)
Local cVar3 := space(15)
Local nLbx1 := 2
Local nLbx2 := 3
Local aItem1 := {"Uno","Dos","Tres","Cuatro","Cinco"}
Local aItem2 := {}
ID 106 OF oDlg
ID 107 OF oDlg
ID 108 OF oDlg
ID 104 OF oDlg ;
____________________________________________________________________
23
Programacin Windows
Introduccin a FIVEWIN
____________________________________________________________________
24
Programacin Windows
Introduccin a FIVEWIN
6
GENERADOR DE INFORMES
6.1
Por muy bien diseado que est un programa, por sencillo que sea su
manejo, por muchas formas de consultar la informacin que contenga,
siempre aparecern una serie de problemas que obligan a generar algn tipo
de salida impresa:
Programacin Windows
Introduccin a FIVEWIN
Programacin Windows
6.2
Introduccin a FIVEWIN
Creacin de un informe
La creacin de un informe es sumamente sencilla:
#include "Fivewin.ch"
#include "Report.ch"
// Creamos una funcin que imprima el informe
FUNCTION Informe()
LOCAL oInforme // El objeto informe
// Abrimos una base de datos
USE GENTE
// Creamos el informe
REPORT oInforme
// Aadimos las columnas indicando que
// datos contienen y su cabecera
COLUMN TITLE "Nombre"
DATA GENTE->NOMBRE
COLUMN TITLE "Apell. 1"
DATA GENTE->APELLIDO1
COLUMN TITLE "Apell. 2"
DATA GENTE->APELLIDO2
COLUMN TITLE "Direccin" DATA GENTE->DIRECCION
END REPORT // Fin de la definicin del informe
ACTIVATE REPORT oInforme // Imprimimos el informe
CLOSE GENTE
RETURN NIL
Con esto obtendramos un listado
Programacin Windows
6.3
Introduccin a FIVEWIN
Programacin Windows
Introduccin a FIVEWIN
6.4
Programacin Windows
Introduccin a FIVEWIN
6.5
Programacin Windows
Introduccin a FIVEWIN
........
COLUMN DATA GENTE->APELLIDO1, GENTE->APELLIDO2
........
define una columna en la que los campos APELLIDO1 y APELLIDO2 de la
base GENTE se imprimirn en lneas separadas dentro del informe.
Programacin Windows
Introduccin a FIVEWIN
Programacin Windows
Introduccin a FIVEWIN
Veamos un ejemplo:
#include "Fivewin.ch"
#include "Report.ch"
// Creamos una funcin que imprima el informe
FUNCTION Informe()
LOCAL oInforme ,;
// El objeto informe
oFont1,;
// Un tipo de letra
oFont2
// Otro tipo de letra
// Definimos los tipos de letra
DEFINE FONT oFont1 NAME "Arial" SIZE 0,-10
DEFINE FONT oFont2 NAME "Arial" SIZE 0,-10 BOLD
// Abrimos una base de datos
USE GENTE
// Creamos el informe e indicamos las fuentes
REPORT oInforme ;
FONT oFont1, oFont2
// Aadimos las columnas indicando que
// datos contienen, su cabecera y su font
COLUMN TITLE "Nombre";
DATA GENTE->NOMBRE ;
FONT 1
COLUMN TITLE "Apell. 1"
;
DATA GENTE->APELLIDO1 ;
FONT 2
COLUMN TITLE "Apell. 2" ;
DATA GENTE->APELLIDO2 ;
FONT 2
END REPORT // Fin de la definicin del informe
ACTIVATE REPORT oInforme // Imprimimos el informe
// Cerramos la base y liberamos las fuentes
CLOSE GENTE
oFont1:Release()
oFont2:Release()
RETURN NIL
Programacin Windows
Introduccin a FIVEWIN
Para separar las columnas del informe con lneas se emplea la clusula
GRID. El empleo de esta clusula provoca que la columna en la que se utiliza
aparezca separada de las otras por dos lneas verticales (una a la derecha y
otra a la izquierda).
........
COLUMN TITLE "Sueldo" DATA GENTE->SUELDO GRID
........
Por defecto, las lneas que se dibujan son de color negro, sin trama y con un
ancho de 1 punto. Es posible modificar esto mediante la utilizacin de los
objetos PEN de FiveWin. Para ello procederemos de la misma manera que
con las fuentes de letra:
........
DEFINE PEN oLapiz1 WIDTH 4
DEFINE PEN oLapiz2 WIDTH 10
REPORT oInforme PEN oLapiz1, oLapiz2
// Columna que utiliza el lpiz de 10 puntos
COLUMN TITLE "Nombre" DATA GENTE->NOMBRE GRID 2
// Columna que utiliza el lpiz de 4 puntos
COLUMN TITLE "Sueldo" DATA GENTE->SUELDO GRID 1
........
10
Programacin Windows
Introduccin a FIVEWIN
6.6
11
Programacin Windows
Introduccin a FIVEWIN
Definir el informe
Definir las columnas
Definir los grupos
Imprimir el informe.
12
Programacin Windows
FUNCTION Informe()
LOCAL oInforme
// Abrimos la base de datos con un ndice
// que para nuestro ejemplo indexa la base por la provincia
USE GENTE INDEX PROVINCIA
// Creamos el informe
REPORT oInforme
// Creamos las columnas
COLUMN TITLE "Nombre" ;
DATA GENTE->NOMBRE
COLUMN TITLE "Apellidos" ;
DATA GENTE-> APELLIDO1 + GENTE->APELLIDO2
COLUMN TITLE "Provincia"
........
DATA GENTE->PROVINCIA
GROUP ON GENTE->PROVINCIA FONT 2
........
// Definimos el grupo como PROVINCIA
GROUP ON GENTE->PROVINCIA
END REPORT
Introduccin a FIVEWIN
Para
definir
las
cabeceras y pies para
el grupo utilizaremos
las
clusulas
HEADER y FOOTER,
aunque en el caso de
los grupos, stas solo
podrn tener una
lnea.
Es posible utilizar
tipos de letra distintos
para la cabecera y el
pie de un grupo. Esto
se hace con la
clusula FONT en la
definicin del grupo.
El tipo de fuente se
define y utiliza de la
misma manera que en
las columnas.
// Imprimimos el informe
ACTIVATE REPORT oInforme
CLOSE ALL
RETURN NIL
Tambin le podemos
indicar al generador
de informes que cada
vez que acabe un
grupo y comience otro
se realice un salto de
pgina. Esto se hace mediante la clasula EJECT en la definicin del grupo.
........
GROUP ON GENTE->PROVINCIA EJECT
........
13
Programacin Windows
6.7
Introduccin a FIVEWIN
........
ACTIVATE REPORT oInforme ;
FOR GENTE->PROVINCIA == "Madrid" ; // Solo los de Madrid
WHILE !EOF()
........
El generador de informes realiza internamente un bucle del tipo DO WHILE
!EOF() cuando imprime un informe, pero esto es modificado por la inclusin
de la clasula WHILE en la activacin del informe, con lo cual el generador no
hace ningn tipo de comprobacin de fin de base de datos. Por ello es
recomendable aadir esta condicin dentro de nuestra clasula WHILE, a
menos que por alguna circunstancia no sea realmente necesaria.
6.8
14
Programacin Windows
Introduccin a FIVEWIN
........
ACTIVATE REPORT oInforme ;
ON STARTLINE Funcion1() ;
ON ENDPAGE
Funcion2()
........
MUY IMPORTANTE: Cuando se utilizan estas clusulas, se est trabajando
dentro del ncleo del generador de informes. Es necesario tener mucho
cuidado con las bases de datos que se utilizan, ndices, etc.
6.9
15
Programacin Windows
Introduccin a FIVEWIN
ttulo, las lneas, etc.), las columnas son objetos TRColumn, usar tal vez un
objeto TRGroup (uno para cada grupo), y un objeto TPrinter para imprimir.
aData
aPen
bFor
bWhile
bInit
bEnd
bStartLine
bEndLine
bStartPage
bEndPage
bStartGroup
bEndGroup
bChange
16
Programacin Windows
Introduccin a FIVEWIN
bSkip
17
Programacin Windows
Introduccin a FIVEWIN
NeedNewPage()
Indica si es necesario pasar a una nueva pgina
NewLine()
BackLine(nLine)
Retrocede a la lnea nLine
Say(nCol, xText, nFont, nPad, nRow)
Escribe un dato (xText) dentro de una determinada
columna del informe (nCol) con una fuente del
informe (nFont) y un tipo de alineacin (nPad, ver
report.prg) en la fila indicada (nRow)
SayBitmap(nRow, nCol, cBitmap, nWidth, nHeight, nScale)
Pinta en la pgina actual un bitmap de un fichero
(cBitmap) en una fila (nRow) y columna (nRow)
determinada, con un ancho (nWidth) y alto (nHeight)
determinado por la escala (nScale) segn sea esta de
centimetros (nScale==2) o pulgadas (nScale==1)
Box(nRow, nCol, nBottom, nRight, nPen, nScale )
Dibuja una caja en la pgina actual, en las
coordenadas dadas, con un tipo de lpiz (nPen). Las
coordenadas dependen de la escala (ver SayBitmap)
18
Programacin Windows
Introduccin a FIVEWIN
6.9.2.1
oReport
aLine
aFont
aRow
aWidth
aPad
nHeight
nWidth
Los objetos TRLine tienen algunos mtodos, pero son de uso propio del
objeto y son de poca utilidad si los manejamos nosotros manualmente, por lo
que no los reflejaremos aqu.
19
Programacin Windows
Introduccin a FIVEWIN
aTitle
aPicture
bDataFont
bTitleFont
bTotalFont
bTotalExpr
cTotalPict
nWidth
20
Programacin Windows
nDataHeight
nTitleHeight
nTotal
nCol
nSize
nPad
nPen
lTotal
lShadow
lGrid
Introduccin a FIVEWIN
Al igual que pasaba con los objetos TRLine, los mtodos de los obetos
TRColumn son de uso interno y de poca utilidad, por lo que no los incluimos
aqu.
6.9.4.1
oReport
aTotal
bGroup
bHeader
bFooter
bHeadFont
21
Programacin Windows
bFootFont
cValue
nCounter
lEject
Introduccin a FIVEWIN
6.9.4.2
Reset()
Check()
PROGRAMAS PROPUESTOS
1. Fabricar un listado de la base de datos CURSO.DBF proporcionada. El
listado ser de los campos NOMBRE en la primera columna,
APELLIDO_1 y APELLIDO_2 en la segunda y TELEFONO en la siguiente
501
Tipo
Ancho Dec
Carcter 10
Carcter 10
Carcter 10
Carcter 8
Carcter 7
Numrico 2
Numrico 4
2
Lgico
1
Lgico
1
Fecha
8
Fecha
8
Carcter 14
84
#include "fivewin.ch"
#include "report.ch"
Function Inf01()
LOCAL oRpt
USE CURSO
REPORT oRpt TITLE "Lista de amigos" PREVIEW
COLUMN DATA CURSO->NOMBRE ;
TITLE "Nombre"
COLUMN DATA CURSO->APELLIDO_1 , CURSO->APELLIDO_2 ;
TITLE "Apellidos"
// Los dos campos en la misma columna
22
Programacin Windows
Introduccin a FIVEWIN
#include "fivewin.ch"
#include "report.ch"
Function Inf02()
23
Programacin Windows
Introduccin a FIVEWIN
3. Generamos un listado
24
Programacin Windows
Introduccin a FIVEWIN
#include "fivewin.ch"
#include "report.ch"
Function Inf02()
LOCAL oRpt, oF1, oF2
DEFINE FONT oF1 NAME "Arial" SIZE 6,6
DEFINE FONT oF2 NAME "Arial" SIZE 7,9
USE CURSO
INDEX ON VARON TO CURSO
REPORT oRpt TITLE "Miembros del club","Informe por Sexo" PREVIEW ;
FONT oF1,oF2
COLUMN DATA CURSO->NOMBRE ;
TITLE "Nombre"
COLUMN DATA CURSO->APELLIDO_1 , CURSO->APELLIDO_2 ;
TITLE "Apellidos"
COLUMN DATA CURSO->INGRESO ;
TITLE "Fecha Ingreso" FONT 2
GROUP ON CURSO->VARON
ENDREPORT
ACTIVATE REPORT oRpt
RELEASE FONT oF1
RELEASE FONT oF2
RETURN NIL
25
Programacin Windows
Introduccin a FIVEWIN
26
Programacin Windows
Introduccin a FIVEWIN
7
FICHEROS DE AYUDA
7.1
149
Programacin Windows
Introduccin a FIVEWIN
7.2
Para el desarrollo de una ayuda para Windows es necesario contar con una
serie de herramientas:
Un compilador de ayudas para Windows. El ms corriente es el
HC31.EXE. Este se distribuye junto con casi cualquier paquete de
desarrollo que sea capaz de generar una aplicacin Windows.
Un procesador de texto con capacidad para generar ficheros en
formato RTF (Rich Text Format). Para los ejemplos de este libro
utilizaremos el Word para Windows de Microsoft (nos parece el ms
simple, el ms practico para el desarrollo de ayudas y, ademas, es el
nico que tenamos instalado a la hora de escribir esto). Se utilizar
para escribir el contenido de las pginas del fichero de ayuda.
150
Programacin Windows
Introduccin a FIVEWIN
Un editor de texto que genere ficheros de texto ASCII, sin ningn tipo
de cdigo de formato o atributos. Se utilizar para escribir el fichero
de proyecto. Solo es necesario en el caso de que la ayuda se
encuentre dividida en ms de un fichero.
7.3
Seguro que a nadie (bueno, casi nadie) se le ocurrira ponerse a construir una
casa sin antes contar con un plano de lo que desea hacer. Pues bueno, con
los ficheros de ayuda de Windows ocurre lo mismo. El paso ms importante
en el desarrollo de una ayuda es sentarse ante un papel en blanco y disear
cual va a ser la apariencia final de la ayuda tal y como el usuario va a
encontrrsela, teniendo en cuenta una serie de reglas:
Las pantallas de ayuda ha de ser clara, precisa y ordenada.
No se ha de abusar de los tipos de letra. Es aconsejable utilizar una
sola fuente de letra con variaciones en el tamao, pero sin pasarse.
De nada sirve un texto en el que las letras no caben en la pantalla por
ser muy grande, u otro que no puede leerse por ser muy pequeo.
El desplazamiento a travs del fichero de ayuda ha de ser rpido y
eficaz, sin ambigedades, de forma que el usuario tenga que utilizar
el ratn el menor nmero de veces posible para llegar a donde quiera.
Hay que contemplar la bsqueda de cualquier informacin mediante
todos los sinnimos, alias o sobrenombres posibles.
Se debe permitir un cambio rpido desde temas generales a aspectos
especficos de un tema.
Hay que documentar todas las caractersticas del programa.
Una vez que tenemos una idea clara de lo que deseamos hacer,
comenzamos el proceso creando un diagrama de nuestro fichero de ayuda
(recordar que como ejemplo estamos documentando el comando ATTRIB)
151
Programacin Windows
Introduccin a FIVEWIN
Indice de contenidos
Descripcin del comando
Informacin de
ayuda
Parametros y
modificadores
Mensaje de
CopyRight
Ejemplos
Notas
Una vez decidida la estructura de nuestra ayuda vamos a crear una serie de
ficheros que contengan la informacin. Esta podra haber estado repartida en
ms de un fichero, pero dado lo simple del ejemplo, solo utilizaremos uno al
que llamaremos ATTRIB.DOC. El proceso que se seguira si hubisemos
utilizados varios ficheros sera el mismo.
7.4
Una vez hecho esto introduciremos un salto de pgina despus de cada una
de las lneas que hemos escrito y antes de la primera lnea del documento.
Estos saltos de pgina indican al compilador de la ayuda donde empieza y
terminan cada una de las pantallas de ayuda. Tras esto el fichero queda as:
152
Programacin Windows
Introduccin a FIVEWIN
ATTRIB.COM
------------------------------------------------------------------------Parmetros y modificadores
------------------------------------------------------------------------Ejemplos
------------------------------------------------------------------------Notas
------------------------------------------------------------------------Acerca de Ayuda ATTRIB.COM
------------------------------------------------------------------------Autores
-------------------------------------------------------------------------
7.5
Una vez que hemos creado las cabeceras de los temas, es hora de crear las
Cadenas de Contexto. Una cadena de contexto es un identificador para un
tema, de forma que si queremos saltar de un tema a otro podamos indicar a
donde queremos ir. Estas cadenas son texto normal SIN ESPACIOS EN
BLANCO que el compilador de ayuda utiliza para crear Hiperenlaces
(conexiones de un lugar a otro del fichero).
Para crear una cadena de contexto nos situamos inmediatamente despus
del salto de pgina que delimita el comienzo de un tema y antes de la
cabecera, e insertamos una nota a pe de pgina, indicando como marca para
la nota al pie el carcter # y tecleamos como nota el texto de la cadena que
queremos crear SIN ESPACIOS EN BLANCO.
Las cadenas de contexto deben ser nicas dentro del fichero de ayuda, es
decir, no puede haber dos temas con la misma cadena de contexto.
En nuestro ejemplo hemos asignado las siguientes cadenas:
attrib_indice
attrib_parametros
attrib_ejemplos
attrib_notas
attrib_acerca_de
attrib_autores
Aunque el texto de la cadena es arbitrario, se debe procurar escoger
etiquetas sencillas, fciles de recordar y que hagan referencia al contenido del
tema.
153
Programacin Windows
7.6
Introduccin a FIVEWIN
Creacin de hiperenlaces
Una vez que hemos creado las cadenas de contexto, e hora de establecer los
primeros hiperenlaces. Un hiperenlace es el punto de un fichero de ayuda
desde el que se puede efectuar un salto a otro punto del fichero. Por ejemplo,
en nuestro fichero de ayuda tendremos una pantalla principal que nos informa
de para que sirve el comando ATTRIB, y en esta pantalla aparecer un texto
resaltado de modo que si pulsamos sobre el con el ratn pasaremos a ver la
pantalla de parmetros del comando.
El primer paso para crear un hiperenlace es teclear el texto que aparecer
resaltado en la pantalla de la ayuda. Este texto puede ser cualquier cosa, no
tiene por que tener nada que ver con el contenido del tema al que se va a
saltar (aunque si fuera as no servira de mucho, no?) y puede contener
espacios en blanco. Por ejemplo, en nuestro fichero de ayuda, dentro de la
primera pgina vamos a colocar texto para poder enlazar con otras pantallas:
ATTRIB.COM
Parmetros y Modificadores
Ejemplos
Notas
------------------------------------------------------------------------Parmetros y modificadores
------------------------------------------------------------------------Ejemplos
------------------------------------------------------------------------Notas
------------------------------------------------------------------------Acerca de Ayuda ATTRIB.COM
------------------------------------------------------------------------Autores
-------------------------------------------------------------------------
Una vez que hemos escrito el texto que servir de enlace, hemos de indicar
que ese texto va a ser realmente un enlace. Esto se hace aplicando a ese
texto un formato de doble subrayado o de subrayado.
Si se da formato de doble subrayado, al pulsar sobre el enlace el visualizador
de ayuda quitar la informacin del tema que estbamos viendo y mostrar la
informacin del tema al que saltamos.
Si se da formato de subrayado, aparecer una ventana popup con la
informacin del tema enlazado.
Por regla general, si el tema con el que estamos enlazando contiene poca
informacin (un prrafo o dos breves) utilizaremos las ventanas popup
(subrayado simple). En otro caso utilizaremos subrayado doble.
154
Programacin Windows
Introduccin a FIVEWIN
Una vez que hemos formateado el texto segn el tipo de enlace que
deseamos, hemos de indicar con que es con lo que deseamos enlazar. Para
ello colocaremos el cursor justo a continuacin del texto de enlace, sin dejar
ningn espacio en blanco, y escribiremos la cadena de contexto del tema con
el que queremos enlazar, exactamente como la escribimos cuando la
definimos, sin dejar ningn espacio en blanco:
ATTRIB.COM
Parmetros y Modificadoresattrib_parametros
Ejemplosattrib_ejemplos
Notasattrib_notas
------------------------------------------------------------------------........
Una vez hecho esto, para indicarle al compilador que el texto que acabamos
de escribir es una cadena de contexto de un enlace, le daremos a la cadena
de contexto que acabamos de escribir el atributo de oculto.
Con esto hemos creado el hiperenlace, y el visualizador de ficheros de ayuda
lo mostrar en pantalla en el texto visible con color verde y un subrayado
simple de lnea continua (si nosotros lo hemos subrayado doble) o discontinua
(si hemos subrayado simple).
Una vez creados los hiperenlaces, rellenaremos los temas con el texto
necesario de la ayuda. Si dentro de un prrafo es necesario crear un
hiperenlace, lo haremos de la misma manera.
Cuando hemos acabado de escribir nuestro fichero de ayuda, aparte de
haberlo guardado con el formato del procesador que estemos utilizando,
deberemos generar un fichero con formato RTF. Esto es necesario porque el
compilador de ayudas no entiende otros formatos. As, si el fichero que hemos
creado se llama ATTRIB.DOC, tendremos tambin un fichero ATTRIB.RTF
7.7
Es posible realizar un enlace entre dos ficheros .HLP. Para ello, despus de
la cadena de contexto, y todava con texto oculto, dejamos un espacio en
blanco e incluimos una carcter arroba (@) y el nombre del fichero.
El resultado es que en lugar de saltar al tema con la cadena de contexto
especificada, dentro del fichero actual, saltaremos a otro fichero .HLP, al tema
que tenga la cadena de contexto indicada.
7.8
El fichero de proyecto
155
Programacin Windows
Introduccin a FIVEWIN
Animo, que ya casi acabamos. Una vez que hemos creado nuestro fichero (o
nuestros ficheros, segn como lo hayamos organizado), y antes de poder
compilar la ayuda, es necesario crear un fichero de proyecto. Este fichero es
el encargado de indicarle al compilador (entre otras cosas) que ficheros son
los que se van a utilizar para generar la ayuda, cual es el tema principal, y
cual va a ser el ttulo para la pantalla.
El fichero de proyecto ha de ser un fichero ASCII (sin cdigos de control ni
formatos de caracteres), debe tener extensin HPJ (para nuestro ejemplo se
llama ATTRIB.HPJ y lo hemos creado mediante el editor de windows), y al
igual que los ficheros INI de windows se encuentra dividido en secciones,
cada una de las cuales tiene una serie de apartados. De momento solo
vamos a ver dos secciones.
La primera es la seccin [OPTIONS]. En ella le indicaremos al compilador
cual es el tema principal y cual es el ttulo de la ventana de ayuda. Esto se
hace mediante las clasulas CONTENTS y TITLE respectivamente
La siguiente seccin es la de [FILES]. En ella se indican los ficheros que se
van a incluir en la compilacin del fichero. As, nuestro fichero ATTRIB.HPJ
queda de la siguiente manera:
[OPTIONS]
CONTENTS=attrib_indice
TITLE=Fichero de ayuda ATTRIB.COM
[FILES]
ATTRIB.RTF
Si tuviramos la ayuda dividida en ms ficheros, se colocara cada uno en una
lnea a partir de la cabecera [FILES]
Si los ficheros que contienen los datos de la ayuda no se encuentran en el
directorio en el que estemos trabajando, o bien indicamos el camino al fichero
dentro de la seccin files:
[FILES]
C:\WINDOWS\AYUDAS\ATTRIB.RTF
o bien incluimos en la seccin [OPTIONS]la clasula ROOT que indicar al
compilador donde se pueden encontrar los ficheros. Si estn en ms de un
directorio, cada uno de los caminos se separa de los dems con una coma:
[OPTIONS]
CONTENTS=attrib_indice
TITLE=Fichero de ayuda ATTRIB.COM
ROOT=C:\WINDOWS\AYUDAS , C:\RTF
156
Programacin Windows
7.9
Introduccin a FIVEWIN
7.10
Una vez que hemos probado nuestro nuevo fichero de ayuda, y hemos visto
que podemos utilizar las fuentes, tamaos y colores de Windows a la hora de
escribir el texto (y si no lo hableis probado, ya estis tardando) diremos: "si,
pero si en Windows todo son iconos y grficos, no se pueden poner en el
fichero de ayuda?". La respuesta es si, y ademas de ms de una manera.
Podemos incluir un grfico en un tema usando las opciones de importacin o
insercin de grficos de que disponga el procesador de textos con el que
estemos desarrollando la ayuda. Este grfico aparecer despus en el fichero
de ayuda de la misma manera en que aparece en nuestro procesador. Esto
tiene la ventaja de que mientras estamos desarrollando el fichero, nos
podemos hacer una idea bastante aproximada del aspecto final de la ayuda.
Por contra, esto tiene una desventaja. El tamao mximo que puede tener un
prrafo en un fichero de ayuda es de 64KB. Cada vez que nosotros incluimos
un grfico en un prrafo, todos los bytes del grfico son incluidos dentro de
ese prrafo, y si el grfico es muy grande, o si estamos incluyendo bastantes
grficos pequeos, el tamao puede ser excesivo.
El otro mtodo para incluir grficos en un fichero de ayuda es utilizar
directamente directivas RTF de inclusin de grficos. Esta directivas no
suman bytes al prrafo, pero tienen la desventaja de que no podemos
observar en pantalla el resultado final hasta que no hemos compilado el
fichero de ayuda.
157
Programacin Windows
Introduccin a FIVEWIN
bmc
Muestra un fichero bitmap (.BMP) en la lnea actual de texto. Su
posicin sera la equivalente al siguiente carcter de la lnea, apoyado
sobre la lnea base y con las propiedades del prrafo en curso.
bml
Muestra un bitmap en el margen izquierdo de la ventana de ayuda. La
primera lnea de texto tras el bitmap se escribe a partir de la esquina
superior derecha del bitmap, y fluye a lo largo del borde derecho del
mismo.
bmr
Muestra un bitmap en el margen derecho de la ventana de ayuda. La
primera lnea de texto tras el bitmap se escribe a la altura de la
esquina superior izquierda del bitmap, y fluye a lo largo del borde
izquierdo del mismo.
La utilizacin de estas directivas es realmente sencilla. Todas se utilizan igual,
se sita el cursor en el lugar (bmc) o al principio del prrafo (bmr y bml) en el
que debe ir el grfico y teclearemos la directiva y el nombre del fichero que
queremos incluir, todo ello encerrado entre llaves. Por ejemplo:
{bmr f1.hlp} Esta tecla se utiliza para .....
Pulse la tecla {bmc escape.bmp} para cancelar el proceso
Al igual que ocurra con los ficheros de datos, si los bitmaps no se encuentran
en el directorio en el que estamos trabajando, deberemos indicar donde
estn. O bien dentro de la misma directiva
{bmc c:\windows\malla.bmp}
o dentro de la seccin [BITMAPS] del fichero de proyecto
[BITMAPS]
C:\WINDOWS\MALLA.BMP
o indicando en la seccin [OPTIONS] la directiva BMROOT para indicar los
directorios en los que se pueden encontrar los ficheros de grficos. Se siguen
las mismas reglas que para ROOT
[OPTIONS]
BMROOT=C:\WINDOWS , C:\WINDOWS\AYUDA
158
Programacin Windows
7.11
Introduccin a FIVEWIN
159
Programacin Windows
Introduccin a FIVEWIN
Una vez que le hemos dado ttulo a nuestro temas, pasamos a asignar a cada
tema una serie de palabras de bsqueda. Alguien se imagina como? Si. Con
notas a pies de pgina.
Para definir palabras clave para un tema, situaremos el cursor despus del
carcter $ de la nota a pie que asigna el ttulo, e insertaremos una nota a pe
de pgina, pero la personalizaremos mediante el carcter K. Dentro de la nota
escribiremos todas las palabras claves bajo las que se puede localizar el
tema, separando cada una de la siguiente con un punto y coma (;).
NOTA. Que se denominen palabras claves no quiere decir que solo hayan de
contener una palabra. Pueden ser varias palabras y contener espacios en
blanco, etc. Por ejemplo, esta sera la apariencia de una nota a pie con una
serie de palabras claves:
KIndice general;Tabla de contenidos;Contenidos
CUIDADO. Si la primera letra de la primera palabra dentro de la nota es una
K, habr que separarla de la K que identifica la nota con un espacio.
7.12
160
Programacin Windows
7.13
Introduccin a FIVEWIN
Creacin de secuencias.
161
Programacin Windows
Introduccin a FIVEWIN
7.14
Queda un nico tipo de nota a pie de pgina por ver dentro de los ficheros de
ayuda. Son las etiquetas de construccin. Se construyen mediante notas
personalizadas mediante el carcter * (asterisco). Se indican justo a
continuacin de todas las dems notas del tema, y el texto contenido en la
nota puede ser cualquier cadena SIN ESPACIOS EN BLANCO. Pueden
definirse tantas etiquetas de construccin como se deseen dentro de cada
tema.
Y para que valen ?. Pues bien, a la hora de compilar el fichero de ayuda es
posible indicar en el fichero de proyecto una serie de
etiquetas de construccin, y solo aparecern en el
fichero compilado aquellos temas que contengan
esas etiquetas. Para ello, aparte de definir las build
tags dentro del fichero, es necesario indicar los
siguientes datos en el fichero de proyecto:
Hay que definir una seccin [BUILDTAGS] que incluir la lista de las etiquetas
de los temas que se van a incluir dentro del fichero de ayuda. Por ejemplo:
[BUILDTAGS]
Capitulo1
Capitulo2
Capitulo5
.....
Esto incluira en el fichero de ayuda todos aquellos temas que tuvieran las
etiquetas Capitulo1, Capitulo2 o Capitulo5. Se pueden incluir hasta 30
etiquetas dentro de la seccin [BUILDTAGS]
NOTA: Es importante recordar que los temas que NO tienen etiquetas de
construccin SE INCLUYEN SIEMPRE.
Ademas de poder indicar que temas se van a incluir listando sus etiquetas de
construccin, es posible realizar operaciones lgicas que limiten el grupo de
temas que se van a compilar. Esto se realiza mediante la directiva BUILD de
la seccin [OPTIONS]. Esta directiva tiene el siguiente formato:
162
Programacin Windows
Introduccin a FIVEWIN
[OPTIONS]
BUILD=expresion
donde expresin es una combinacin de etiquetas y los siguientes
operadores:
~
Operador NOT. Se aplica a una etiqueta. Solo compila los temas que no
tengan incluida la etiqueta indicada.
BUILD=~Capitulo1
Compila los temas en los que no est definida la etiqueta Capitulo1
&
Operador AND. Se aplica a dos etiquetas. Solo compila aquellos temas que
contienen las dos etiquetas
BUILD=Capitulo1 & USUARIO_FINAL
Compila los temas que tienen definidas las dos etiquetas
|
Operador OR. Se aplica a dos etiquetas. Compila los temas que contienen al
menos una de las dos etiquetas especificadas.
BUILD=Capitulo1 | Capitulo2
Compila los temas que contienen la etiqueta Capitulo1 y los que contienen la
etiqueta Capitulo2
7.15
163
Programacin Windows
Introduccin a FIVEWIN
164
Programacin Windows
Introduccin a FIVEWIN
165
Programacin Windows
Introduccin a FIVEWIN
REPORT
Indica al compilador que nos informe del proceso que est llevando a
cabo. Su formato es
REPORT=ON
Cuando se activa, el compilador nos ir indicando cuando compila,
resuelve saltos o comprueba secuencias.
ROOT
Indica el directorio en el que se van a encontrar los ficheros fuente
para la compilacin.l Su formato es:
ROOT=directorio [, directorio, ...]
TITLE
166
Programacin Windows
Introduccin a FIVEWIN
WARNING
Indica el nivel de errores que mostrar el compilador. Su formato es:
WARNING=nivel
donde nivel puede ser 1 (solo muestra los errores ms graves), 2
(muestra los errores intermedios) o 3 (muestra los errores y los
avisos)
Seccin [FILES]
Indica los ficheros (.RTF) que se van a utilizar para obtener el fichero de
ayuda final. En esta seccin no hay directivas, y cada una de las lneas
contenidas en esta seccin indica el nombre de un fichero.
[FILES]
Primero.RTF
Segundo.RTF
........
Si no se especifica un directorio con el nombre del fichero, se buscarn dentro
de los directorios indicados en la directiva ROOT del la seccin [OPTIONS]
Seccin [BUILDTAGS]
Indica una serie de etiquetas de construccin. Solo se incluirn en el fichero
de ayuda aquellos temas cuyas etiquetas de construccin aparezcan en esta
seccin.
Al igual que ocurra con la seccin [FILES], sta tampoco tiene directivas, y
cada lnea indica una etiqueta de construccin.
IMPORTANTE: Si no se indica esta seccin, todos los temas incluidos
en los fichero fuente sern incluidos en el fichero final. Ademas, los
temas para los que no se han definido etiquetas de construccin no
se ven afectados por esta seccin, y son incluido siempre.
Seccin [CONFIG]
Contiene una serie de macros de ayuda windows que se ejecutarn al cargar
el fichero de ayuda (por ejemplo habilitar los botones de secuencias). As
mismo, permite registrar funciones externas residentes en libreras de enlace
dinmico (.DLL). Su formato y utilizacin se explican ms adelante.
167
Programacin Windows
Introduccin a FIVEWIN
Seccin [BITMAPS]
El equivalente a la seccin [ROOT] pero aplicado a los fichero de grficos en
lugar de a los de texto. Indica los fichero y la localizacin de los grficos que
se han de incluir en el fichero de ayuda.
Seccin [MAP]
Se utiliza para asignar nmeros a las cadenas de contexto de los temas. Esto
es til para desarrollar ayudas en lnea para los programa, ya que el
visualizador de ficheros de ayuda permite recibir un nmero como parmetro
indicando el tema al que queremos ir. Este nmero debe estar asociado a una
cadena de contexto dentro de la seccin [MAP]. Su formato bsico es:
[MAP]
cadena-de-contexto
valor-numerico
valor-numerico
168
Programacin Windows
Introduccin a FIVEWIN
El formato es:
[WINDOWS]
tipo = "Ttulo" , ( x , y , Ancho , Alto ) , tamao , (cliente-RGB) , (nonscrollRGB)
, (ltop)
Donde los parmetros tienen los siguientes significados:
tipo
Es el nombre de la ventana. Para la ventana principal es main. Para las
ventanas secundarias puede ser cualquier nombre nico de hasta 8
caracteres. Cuando en un tema, un hiperenlace realiza un salto a una ventana
secundaria, utiliza este nombre como parte de la cadena de contexto. As, si
queremos que el texto del hiperenlace se muestre en la ventana secundaria,
deberemos aadir, justo despus de la cadena de contexto (y tambin con
formato de texto oculto) un carcter de mayor que (>) y el nombre de la
ventana en la que se van a mostrar los datos. Si el enlace se realiza con otro
fichero .HLP, el > y el nombre de la ventana se han de situar antes del
carcter @.
Titulo
Es el texto que aparecer en la barra de titulo de la ventana. Solo se aplica a
las ventanas secundarias. Para fijar el ttulo de la ventana primaria es
necesario utilizar la directiva TITLE de la seccin [OPTIONS]
x
Es la coordenada x de la esquina superior izquierda de la ventana en
unidades de ayuda. Windows asume una ventana de 1024x1024
independientemente de la resolucin. As, un valor de 512 hara que el
margen izquierdo de la ventana de ayuda quedara en el centro de la pantalla.
y
Es la coordenada y de la esquina superior izquierda de la ventana en
unidades de ayuda. Se rige por las mismas reglas que la coordenada x
Ancho
Especifica el ancho en unidades de ayuda de la ventana
169
Programacin Windows
Introduccin a FIVEWIN
Alto
Especifica el alto en unidades de ayuda de la ventana
Tamao
Especifica el tamao relativo de la ventana secundaria cuando windows abre
la ventana por primera vez. Sus valores pueden ser: 0 para usar el tamao
definido por x,y,ancho y alto, o 1 para que arranque maximizada.
cliente-RBG
Es el color de fondo de la pantalla de ayuda. Es un valor de color RGB,
compuesto por tres nmeros de 0 a 256, encerrados entre parntesis y
separados por comas. Si no se especifica, se utilizar el color definido por
defecto.
nonscroll-RGB
Es el color de fondo de la zona de NO-Scroll situada al principio de los temas.
Al igual que en el caso anterior es un valor RGB.
Una zona de No-scroll se crea aplicando a los prrafos que queremos que
permanezcan siempre en pantalla (ojo, tienen que ser los primeros prrafos
del tema) el atributo de "Conservar con el siguiente".
ltop
Indica si la ventana secundaria ha de mostrarse encima de todas las dems
ventanas. Si el valor es 1, la ventana aparecer por encima de todas las otras
ventanas que no tengan definido tambin este atributo.
[WINDOWS]
main=, (, , , ), 0, (, , ), (128, 0, 128)
pictures = "Samples", (123,123,256,256), 0, (0,255,255), (255,0,0)
Seccin [BAGGAGE]
Lista una serie de ficheros que se incluirn dentro del fichero de ayuda. Estos
ficheros son accedidos desde el resto de la ayuda igual que si estuvieran en
el directorio, pero de manera ms eficiente. Pueden incluirse hasta 1000
ficheros.
Su formato es igual al de las secciones [ROOT] o [BITMAP]
[BAGGAGE]
tada.wav
carillon.wav
Dibujo.wmf
170
Programacin Windows
7.16
Introduccin a FIVEWIN
Estado
Una valor de tres bits en el que el bit 0 representa las
maysculas, el 1 el Control y el 2 el Alt. Si la tecla est
pulsada, el bit est activado, si no est desactivado
Macro
Es un macro o serie de macros a ejecutar encerrados entre
comillas dobles. Si hay ms de un macro, es necesario
separarlos por puntos y comas (;)
Puede ser abreviado como AA
171
Programacin Windows
Introduccin a FIVEWIN
Annotate()
Muestra el dialogo de anotaciones.
AppendItem("menu-id", "item-id", "item-name", "macro")
Aade un item a un men creado mediante el macro
InserMenu. Sus parmetros son:
menu-id
Nombre utilizado en el macro InsertMenu para crear un men.
Debe aparecer entre comillas dobles.
item-id
Especifica el nombre (identificador) que el sistema de ayuda
usa internamente para identificar el item del men
item-name
Es el texto que aparece dentro del men. Hay que escribirlo
entre comillas. Dentro de las comillas se puede utilizar el
carcter & para indicar el acelerador utilizado por el macro.
macro
Es el macro a ejecutar al seleccionar el item. Debe aparecer
entrecomillado. Mltiples macros se separa por puntos y
coma.
Si se aplica en una ventana secundaria es ignorado.
Si el acelerador entra en conflicto con otra tecla en los mens,
el sistema de ayuda da un error y no aade el item.
Back()
Vuelve a mostrar el tema anterior dentro de la lista de temas
vistos.
BookmarkDefine()
Muestra el dialogo del definir marcadores del sistema de
ayuda. Si se coloca en un popup, el marcador se asocia con
el tema desde el que se llam al pop-up.
BookmarkMore()
Muestra el cuadro de dialogo de "mas marcadores" que
aparece cuando hay ms de nueve marcadores definidos.
BrowseButtons()
Coloca los botones de secuencias dentro de la barra de
botones de la ayuda.
Si este macro es invocado desde una ventana secundaria es
ignorado.
ChangeButtonBinding("button-id", "button-macro")
Cambia la accin de un botn definido mediante el macro
CreateButton.
Los parmetros son:
button-id
Especifica el identificador del botn para botones
creados mediante CreateButton, o en el caso de
172
Programacin Windows
Introduccin a FIVEWIN
Botn de contenidos
Botn de bsqueda
Botn de Atrs
Botn de historia
Botn de anterior (secuencia)
Botn
de
siguiente
button-macro
Macro que se asigna al botn
Si el macro se ejecuta desde una ventana secundaria es
ignorado.
El macro ChangeButtonBinding puede ser abreviado como
CBB.
ChangeItemBinding("item-id", "item-macro")
Cambia el macro asociado a un item de men. Sus
parmetros son:
item-id
Identifica el item creado mediante el macro
AppendItem
item-macro
El macro a ejecutar cuando se selecciona el item.
Si es ejecutado desde una ventana secundaria no tiene
efecto.
Puede ser abreviado como CIB
CheckItem("item-id")
Pone una marca al lado del item de un men. Los parmetros
son:
item-id
Identificador del item
Puede ser abreviado como CI
CloseWindow("window-name")
Cierra una ventana secundaria o la ventana principal de la
ayuda. Los parmetros son:
window-name
Nombre de la ventana a cerrar. El nombre "main" esta
reservado para la ventana principal. Para las ventanas
secundarias el nombre est definido en la seccin
[WINDOWS]
173
Programacin Windows
Introduccin a FIVEWIN
Contents()
Salta a la pantalla de contenidos del fichero de ayuda actual
CopyDialog()
Muestra el cuadro de dialogo de Copiar del men de Editar
CopyTopic()
Copia todo el texto del tema actual en el portapapeles
CreateButton("button-id", "name", "macro")
Aade un nuevo botn a la barra de botones. Los parmetros
son:
button-id
Especifica el nombre que el sistema de ayuda utiliza
internamente para identificar el botn
name
Especifica el texto que aparece en el botn. Se puede
definir un acelerador mediante el uso del carcter &
en el nombre. La longitud mxima es de 29
caracteres.
macro
Es el macro asignado al botn. Macros mltiples
deben ser separados mediante puntos y comas.
El sistema de ayuda permite un mximo de 16 botones
personalizados, y 22 botones incluyendo los standard.
Es ignorado si se ejecuta desde una ventana secundaria.
Puede ser abreviado como CB
DeleteItem("item-id")
Elimina un item de un men. Los parmetros son:
item-id
El identificador del item creado mediante AppendItem.
Este macro es ignorado si se ejecuta desde una
ventana secundaria.
DeleteMark("marker-text")
Elimina un marcador de texto creado mediante el macro
SaveMark. Los parmetros son:
marker-text
Es el identificador del marcador
Si el marcador no existe, el sistema de ayuda muestra
un error de elemento no encontrado.
DestroyButton("button-id")
174
Programacin Windows
Introduccin a FIVEWIN
175
Programacin Windows
Introduccin a FIVEWIN
176
Programacin Windows
Introduccin a FIVEWIN
macro
Macro que ha de ejecutarse en el caso de que el
marcador exista. Macros multiples han de separarse
con puntos y coma.
IfThenElse(IsMark("marker-text"), "macro1", "macro2")
Ejecuta un macro si un determinado marcador de texto existe.
En el caso de que no exista ejecuta un macro diferente. Los
parametros son:
marker-text
Identificador del marcador
macro1
Macro que se ejecuta si el marcador existe. Macros
multiples han de separarse con puntos y coma.
macro2
Macro que se ejecuta si el marcador no existe.
Macros multiples han de separarse con puntos y
coma.
InsertItem("menu-id", "item-id", "item-name", "macro", position)
Inserta un item en un lugar determiado de un men existente.
El men puede haber sido creado mediante InsertMenu o ser
uno de los mens standard de Windows. Los parametros son:
menu-id
Identificador del menu. Puede haber sido creado con
InsertMenu o bien ser uno de los siguientes:
MNU_FILE
Men de fichero
MNU_EDIT
Men de edicin
MNU_BOOKMARK
Men de marcadores
MNU_HELPON Men de ayuda
item-id
Identificador que utiliza el sistema de ayuda para
identificar internamente al item.
item-name
Texto que aparece como item del men. Puede
contener un acelerador mediante el uso del caracter
&.
macro
Es el macro que se ejecutar al seleccionar el item.
Macros multiples han de separarse mediante puntos y
coma.
position
Especifica la posicin del item dentro del men. La
primera posicin es la 0
Si se aplica en una ventana secundaria es ignorado.
177
Programacin Windows
Introduccin a FIVEWIN
JumpId("filename", "context-string")
Salta a un tema indicado de un fichero de ayuda externo. Los
parametros son:
filename
178
Programacin Windows
Introduccin a FIVEWIN
179
Programacin Windows
Introduccin a FIVEWIN
Prev()
Muestra el tema anterior dentro de una secuencia.
Print()
Imprime el tema actual
PrinterSetup()
Permite configurar la impresora
RegisterRoutine("DLL-name", "function-name", "format-spec")
Registra una rutina externa residente en una DLL. Se utilizan
igual que los macros. Los parametros son:
DLL-Name
Nombre del fichero DLL en el que reside la rutina.
function-name
Nombre de la funcin
format-spec
Es una cadena que especifica el tipo de los
parametros pasados a la funcin. Los caracteres
validos son:
u
U
i
I
s
S
v
180
Programacin Windows
Introduccin a FIVEWIN
181
Programacin Windows
Introduccin a FIVEWIN
PROGRAMAS PROPUESTOS
attrib_indice
182
Programacin Windows
Introduccin a FIVEWIN
Parametros y Modificadores
Parmetro
[unidad:][ruta]nombrearchivo
Especifica la posicin y el nombre del archivo o los archivos
que desee procesar.
Modificadores
+R
Establece el indicador de archivo de slo-lectura.
-R
Elimina el indicador de archivo de slo-lectura.
+A
Establece el indicador de lectura/escritura.
-A
Elimina el indicador de lectura/escritura.
+S
Establece el archivo como un archivo de sistema.
-S
Elimina el indicador de archivo de sistema.
+H
Establece el archivo como un archivo oculto.
-H
Elimina el indicador de archivo oculto.
/S
Procesa archivos en el directorio actual y en todos sus
subdirectorios.
Ejemplos
Notas
Sintaxis
attrib_parametros
183
Programacin Windows
Introduccin a FIVEWIN
ATTRIB - Ejemplos
attrib_ejemplos
184
Programacin Windows
Introduccin a FIVEWIN
xcopy a: b: /a
Si desea que XCOPY elimine el indicador de archivo de
lectura/escritura despus de copiar cada archivo, use el
modificador /M en lugar del modificador /A, como se muestra en
el siguiente ejemplo:
xcopy a: b: /m
Notas
Sintaxis
185
Programacin Windows
Introduccin a FIVEWIN
ATTRIB--Notas
attrib_notas
186
Programacin Windows
Introduccin a FIVEWIN
187
Programacin Windows
Introduccin a FIVEWIN
Acerca De....
attrib_acerca_de
188
Programacin Windows
Introduccin a FIVEWIN
#!
# attrib_autores
! SndPlaySound("carillon.wav",0)
189
Programacin Windows
Introduccin a FIVEWIN
[OPTIONS]
CONTENTS=attrib_indice
TITLE=Fichero de ayuda ATTRIB.COM
COPYRIGHT=Documentacin FiveWin
[CONFIG]
RegisterRoutine("MMSYSTEM.DLL","SndPlaySound","Su")
SndPlaySound("CARILLON.wav",0)
[FILES]
ATTRIB.RTF
[BAGGAGE]
C:\WINDOWS\CARILLON.WAV
190
Programacin Windows
Introduccin a FIVEWIN
#, 153; 159
$, 159
*, 162
;, 160
@, 155
About(), 171
AddAccelerator, 171
ALIAS, 168
Annotate(), 172
AppendItem, 172
Back(), 172
BAGGAGE, 170
BITMAPS, 168
bmc, 158
bml, 158
bmr, 158
BMROOT, 158; 164
BookmarkDefine(), 172
BookmarkMore(), 172
BrowseButtons(), 162; 173
BUILD, 164
build tags, 162
BUILDTAGS, 167
cadenas de contexto, 153
ChangeButtonBinding, 173
ChangeItemBinding, 173
CheckItem, 173
CloseWindow("window-name"), 174
COMPRESS, 164
CONFIG, 162; 168
CONTENTS, 156; 165
Contents(), 174
CopyDialog(), 174
COPYRIGHT, 165
CopyTopic(), 174
Creacin de secuencias, 161
CreateButton, 174
DeleteItem, 174
DeleteMark, 175
DestroyButton, 175
DisableButton, 175
DisableITem, 175
EnableButton, 175
EnableItem, 176
ERRORLOG, 165
etiquetas de construccin, 162
ExecProgram, 176
Exit(), 176
fichero de proyecto, 156
ficheros de proyecto, 164
FileOpen, 176
191
Programacin Windows
Introduccin a FIVEWIN
192
Programacin Windows
Introduccin a FIVEWIN
193
#, 153; 159
$, 160
*, 162
;, 160
@, 155
3D, 47
3DLOOK, 47
About(), 172
ACCELERATOR, 45
ACTION, 45
Activar ventanas, 26
ACTIVATE DIALOG, 59
ACTIVATE MENU, 48
AddAccelerator, 172
ADJUST, 47; 66
ALIAS, 169
Annotate(), 172
AppendItem, 172
Auto horizontal, 102
Back(), 173
BAGGAGE, 171
Barras de Scroll, 98
BITMAP, 71
BITMAPS, 99; 168
Bitmaps, 71; 111
bmc, 158
bml, 158
BMP, 45
bmr, 158
BMROOT, 158; 164
BookmarkDefine(), 173
BookmarkMore(), 173
BORDER, 26
botones con dibujo, 95
BOX, 62
BrowseButtons(), 162; 173
BUILD, 164
build tags, 162
BUILDTAGS, 167
BUTTON, 66; 67
BUTTONBAR, 47
BUTTONSIZE, 47
BWCC.DLL, 96
Cabeceras, 127
cadenas de contexto, 153
Cajas de dilogo, 7
CAPTION, 127
CENTER, 63
ChangeButtonBinding, 173
ChangeItemBinding, 173
Character underline, 105
CHECK, 44
Check Box, 65; 102
CHECKBOX, 65
CHECKED, 44
CheckItem, 174
Clase TWindow, 29
CLASS, 75
CloseWindow("window-name"), 174
COLSIZES, 110
columnas, 128
Comandos preprocesados, 5
COMBOBOX, 69
ComboBox, 69
Combobox, 101
COMPRESS, 165
CONFIG, 162; 168
constructor, 4
CONTENTS, 156; 165
Contents(), 174
Controles VBX, 74
Convert OEM, 108
CopyDialog(), 174
COPYRIGHT, 165
CopyTopic(), 174
Creacin de secuencias, 161
Creacin de un informe, 125
CreateButton, 174
CURSOR, 47; 115
Cursores, 72
cursores, 112
DATA, 128
DEFAULT, 67
DEFINE BRUSH, 25
DEFINE BUTTON, 47
DEFINE BUTTONBAR, 47
DEFINE CURSOR, 47; 72; 115
DEFINE DIALOG, 58
DEFINE ICON, 25; 114
DEFINE WINDOW, 23
DeleteItem, 175
DeleteMark, 175
DestroyButton, 175
DisableButton, 175
DISABLED, 44
DisableITem, 175
DISK, 45
DLL, 58; 90
DOWN, 47; 73
Drop Down, 101
Drop Down List, 101
Edit Text, 105
Edit text, 63
EJECT, 135
EnableButton, 176
EnableItem, 176
ENDSYSMENU, 48
ERRORLOG, 165
etiquetas de construccin, 162
eventos, 2; 27
ExecProgram, 176
Exit(), 176
Extend Select, 101
fichero de proyecto, 156
ficheros de proyecto, 164
FIELDSIZES, 110
FILE, 45
FILENAME, 45
FileOpen, 176
FILES, 99; 156; 167
Fixed, 101
FocusWindow, 176
FONT, 135
FOOTER, 135
FOR, 133; 135
FORCEFONT, 165
generador de informes, 123
GET, 63; 105
GoToMark, 177
GRID, 132
GROUP, 48
GROUP ON, 134
Has String, 101
HC31, 157
HC31.EXE, 150
HEAD, 110
HEADER, 110; 135
HEADERS, 110
HELP, 45
HelpOn, 177
HelpOnTop, 177
herencia, 3
Hiperenlaces, 153
hiperenlaces, 154
History, 177
HLP, 155
HORIZONTAL, 73
HPJ, 156; 164
HSCROLL, 26
ICON, 70; 166
Iconos, 70
iconos, 112
identificador, 93
IfThen, 177
IfThenElse, 177
INCLUDE, 5
Informes agrupados y sumarios, 134
InsertItem, 178
InsertMenu, 178
instancia, 3
Integral Height, 100
Integral height, 102
InvertRect, 49
IsMark, 178
ITEMS, 68; 69
JumpContents, 179
JumpContext, 179
JumpHelpOn, 179
JumpId, 179
JumpKeyword, 179
K, 160
Keep selection, 108
lDesign, 109
LEFT, 47
LIBRARY, 58
Listbox, 68; 99
Macros Disponibles, 172
macros en ficheros de proyectos, 171
macros en hiperenlaces, 171
macros en temas, 171
MAP, 168
MAPFONTSIZE, 166
MARK, 44
MEMO, 64; 106
MENU, 24
Men, 7
MENUITEMS, 42; 43
MENUSYS, 48
Mtodo constructor, 4
mtodos, 3
Modales, 57
Multi Column, 100
MULTILINE, 64; 106
Multiple line, 107
Multiple Select, 100
NAME, 45; 47
Nantucket, 6
New, 91
Next, 179
NO MAXIMIZE, 26
NO MODIFY, 64; 106
NO TITLE, 26
No Wrap, 105
No-Modales, 57
NOBORDER, 71
NOCAPTION, 26
NOICONIZE, 26
NOMINIMIZE, 26
NOMODAL, 59
nOr, 109
NOSYSMENU, 26
Not, 180
Notify, 100
NOWAIT, 59
nStyle, 109
Objects, 4
Objetos, 3
OEM conversion, 102
OLDKEYPHRASE, 166
ON [ LEFT ] CLICK, 59
ON [ LEFT ] DBLCLICK, 68
ON CHANGE, 64; 68; 69; 137
ON CLICK, 64; 65
ON DOWN, 28; 73
ON DROPFILES, 28
ON END, 136
ON ENDGROUP, 136
ON ENDLINE, 137
ON ENDPAGE, 136
ON INIT, 27; 59; 136
ON KEYDOWN, 27
ON LEFT, 28
ON LEFT CLICK, 27
ON MOVE, 27; 59
ON PAGEDOWN, 28; 73
ON PAGELEFT, 28
ON PAGERIGHT, 28
ON PAGEUP, 28; 73
ON PAINT, 27; 59
ON RESIZE, 27
ON RIGHT, 28
ON RIGHT CLICK, 27; 59
ON STARTGROUP, 136
ON STARTLINE, 136
ON STARTPAGE, 136
ON THUMBPOS, 73
ON UP, 27; 73
OOPS, 1
Open project, 91
OPTCDROM, 166
OPTIONS, 156; 163; 164
Owner drawing, 101
PAGEDOWN, 73
PAGESTEP, 73
PAGEUP, 73
Pass KeyBoard Input, 100
Password, 108
PEN, 132
PICTURE, 61; 129
pies de pgina, 127
Pop-Up, 41
PopupContext, 180
PopupId, 180
posicin de las columnas, 129
PositionWindow, 180
preprocesador, 5
Prev, 180
PREVIEW, 126
Print, 180
PrinterSetup, 180
PROMPT, 44
PROMPTS, 68; 69
Pull-down, 7
PUSHBUTTON, 92
Pushbutton, 66
RADIO, 64
Radio botones, 96
RAISED, 62
RANGE, 73
RC, 90
Read Only, 107
READONLY, 64; 106
REDEFINE BITMAP, 111
REDEFINE BUTTON, 93
REDEFINE CHECKBOX, 103
REDEFINE COMBOBOX, 102
REDEFINE GET, 105
REDEFINE LISTBOX, 99; 109
REDEFINE MENUSYS, 48
REDEFINE RADIO, 97
REDEFINE SAY, 104
REDEFINE SCROLLBAR, 98
RegisterRoutine, 180
RemoveAccelerator, 181
REPORT, 166
RESOURCE, RESNAME, 45
Rich Text Format, 150
RIGHT, 47; 61; 63
ROOT, 156; 167
RTF, 150
SaveMark, 181
SAY, 61; 104
SCROLL, 111
Scroll Bar, 72
SCROLLBAR, 73
Scrollbar always, 101
SDK, 2
Search, 181
SELECT, 110
SET RESOURCES TO, 90
SetContents, 181
SetHelpOnFile, 181
SHADED, 62
SHADOW, 62
Simple, 101
Single line, 107
SIZE, 47; 73; 130
SIZEBUTTON, 47
SIZES, 110
Sort, 100
Sorted, 101
Static Text, 61; 104
Style, 109; 112
sumarios, 134
SUMMARY, 135
SYSMENU, 45
TDialog, 75
TEXT, 64; 106
Tipos de letras en las columnas, 130
TITLE, 129; 156; 167
ttulo de las columnas, 129
ttulos, 127
TO FILE, 126
TO PRINTER, 126
TOP, 47
TOTAL, 133
Totales en las columnas, 133
TRColumn, 141
TReport, 137
TRGroup, 143
TRLine, 140
TWBrowses, 108
UncheckItem, 181
UP, 73
VAR, 63; 64
Variable, 101
variables, 3
variables de instancia, 3
VBX, 59; 74
ventana, 21
Ventanas MDI, 28
ventanas MDI, 21
VERTICAL, 73
Vertical Scroll, 101
Vertical scroll always, 102
Visual Basic, 59
VSCROLL, 26
Want return, 107
WARNING, 167
WHILE, 135
WinApi, 6
WINDOWS, 1; 169
WINHELP.EXE, 150
WinHelp.Exe, 93
Word, 150
WS_BORDER, 109
WS_CHILD, 109
WS_HSCROLL, 109
WS_TABSTOP, 109
WS_THICKFRAME, 109
WS_VISIBLE, 109
WS_VSCROLL, 109