Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
El presente trabajo forma parte del esfuerzo que realiza el grupo de Ciencias de la Computacin del Cimat , con el apoyo de la Red de Desarrollo e Investigacin en Informtica del Conacyt, para desarrollar material didctico que sirva de apoyo a la ensenanza de las Ciencias de la Computacin. Este trabajo fue realizado como tsis de Licenciatura en Ingeniera de Sistemas por Juan Carlos Cruz, egresado del Instituto Tecnolgico de Morelia y becado por el Cimat para el desarrollo de su tsis. Su objetivo principal es el de proveer material auxiliar para la ensenanza de tcnicas modernas de programacin en particular, programacin orientada a objetos y el manejo de un ambiente sofisticado de programacin: el C++ Builder de Borland. Este objetivo se alcanza presentando, paso a paso y en detalle, cmo construir un ejemplo de aplicacin. El ejemplo en cuestin es a su vez un material didctico simple que puede servir como auxiliar para la ensenanza de algunos temas bsicos de geometra analtica, en particular, algunas propiedades de la lnea recta. A pesar de su sencillez, este ejemplo ilustra la construccin de interfaces grficas sofisticadas, pues demuestra cmo pueden sincronizarse objetos grficos con objetos numricos; cmo pueden integrarse laboratorios virtuales en un hipertexto, etc. El material consta de los siguientes elementos: 1) Los programas ejecutables y el hipertexto del material de geometra analtica. 2) Un instalador automtico para este material. 3) El presente texto que incluye: Capitulo I: Una introduccin a la programacin orientada a objetos. Capitulo II: Una explicacin del C++ Builder. Captulo III: Cmo desarrollar un proyecto. Capitulo IV: Una explicacin detallada del desarrollo del material de geometra analtica. Apendice: El cdigo fuente correspondiente.
Capitulo I
Programacin Orientada a Objetos
La programacin orientada a objetos, ha tomado las mejores ideas de la programacin estructurada y los ha combinado con varios conceptos nuevos y potentes que incitan a contemplar las tareas de programacin desde un nuevo punto de vista. La programacin orientada a objetos, permite descomponer mas fcilmente un problema en subgrupos de partes relacionadas del problema. Entonces, utilizando el lenguaje se pueden traducir estos subgrupos a unidades autocontenidas llamadas objetos. El trmino Programacin Orientada a Objetos (POO), hoy en da ampliamente utilizado, es difcil de definir, ya que no es un concepto nuevo, sino que ha sido el desarrollo de tcnicas de programacin desde principios de la dcada de los setenta, aunque sea en la dcada de los noventa cuando ha aumentado su difusin, uso y popularidad. No obstante, se puede definir POO como una tcnica o estilo de programacin que utiliza objetos como bloque esencial de construccin. Un objeto es una unidad que contiene datos y las funciones que operan sobre esos datos. A los elementos de un objeto se les conoce como miembros; las funciones que operan sobre los objetos se denominan mtodos y los datos se denominan miembros datos.
Se introducen en esta etapa los conceptos de abstraccin y ocultacin de la informacin. 4.a Etapa. A partir de los aos setenta se trabaja sobre una nueva clase de lenguajes de simulacin y sobre la construccin de prototipos tales como Simula-70 y basado en parte de ste, el Smalltalk. En estos lenguajes, la abstraccin de datos tiene una gran importancia y los problemas del mundo real se representan mediante objetos de datos a los cuales se les aade el correspondiente conjunto de operaciones asociados a ellos. Trminos como Abstraccin de datos, objeto, encapsulacin entre otros, son conceptos bsicos sobre la que se fundamenta la POO.
2)
Abstraccin: En el sentido mas general, una abstraccin es una representacin concisa de una idea o de un objeto complicado. En un sentido mas especifico, la abstraccin localiza y oculta los detalles de un modelo o diseo para generar y manipular objetos. Una abstraccin tiene un significado ms general que la encapsulacin, pudiendo hablar de abstraccin de datos en lugar de encapsulacin de datos. Como resumen de los 3 conceptos expuestos anteriormente podemos decir que: 1) 2) Los objetos son encapsulaciones de abstracciones en la POO. La unidad de encapsulacin en la POO es el objeto.
Una clase es un tipo: Un objeto es una instancia de ese tipo. Adems, la clase es un concepto esttico: una clase es un elemento reconocible en el texto del programa. Un objeto es un concepto puramente dinmico, el cual pertenece, no al texto del programa, sino a la memoria de la computadora, donde los objetos ocupan un espacio en tiempo de ejecucin una vez que haya sido creado. La programacin orientada a objetos, ha tomado las mejores ideas de la programacin estructurada y los ha combinado con varios conceptos nuevos y potentes que incitan a contemplar las tareas de programacin desde un nuevo punto de vista. La programacin orientada a objetos, permite descomponer mas fcilmente un problema en subgrupos de partes relacionadas del problema. Entonces, utilizando el lenguaje se pueden traducir estos subgrupos a unidades autocontenidas llamadas objetos. Objetos: Un objeto es una entidad lgica que contiene datos y un cdigo que manipula estos datos; el enlazado de cdigo y de datos, de esta manera suele denominarse encapsulacin. Cuando se define un objeto, se esta creando implcitamente un nuevo tipo de datos. Polimorfismo: Significa que un nombre se puede utilizar para especificar una clase genrica de acciones. Herencia: La herencia es un proceso mediante el cual un objeto puede adquirir las propiedades de otro objeto.
Objeto: Un objeto es una entidad abstracta que tiene las caractersticas de un objeto real. Los objetos se crean y eliminan durante la ejecucin del programa, adems interactan con otros objetos. Los objetos son construcciones de programacin que se obtienen a partir de entidades llamadas clases. La definicin de una clase se conoce como instanciacin de clases. Para crear un objeto, es preciso definir primero su forma general utilizando la palabra reservada class. Una class es parecida a una estructura, es un tipo definido por el usuario que determina las estructuras de datos y las operaciones asociadas con este tipo. Las clases son como plantillas o modelos que describen como se construyen ciertos tipos de objetos, cada vez que se construye un objeto de una clase se crea una instancia de esa clase, por consiguiente; los objetos son instancias de clases. Una clase es una coleccin de objetos similares y un objeto es una instancia de una definicin de una clase; una clase puede tener muchas instancias y cada una es un objeto independiente. Una clase es simplemente un modelo que se utiliza para describir uno o mas objetos del mismo tipo. As, por ejemplo sea una clase ventana, un tipo de dato, que contenga los miembros dato: posx, posy tipo_ventana tipo_borde color_ventana y unas funciones miembro: mover_horizontal mover_vertical Un objeto de la clase ventana, es una ventana concreta (una instancia de la clase) cuyos datos tienen por valores: posx posy tipo_ventana tipo_borde color_ventana x y desplegable linea doble amarillo
desplegable x, y amarillo
Lnea doble
1.3.1 DEFINICIN DE UNA CLASE. Una clase es la evolucin natural de una estructura, la existencia de clases es la caracterstica ms significativa que convierte a C++ en un lenguaje orientado a objetos. Las clases son estructuras que contienen no slo declaraciones de datos, sino tambin declaraciones de funciones. Las funciones se conocen como funciones miembro, e indican qu tipos de cosas puede hacer una clase. La palabra reservada class introduce una declaracin de clase.
1.3.2 IDENTIFICADORES DE CLASE. La longitud mxima para un identificador de clase es 32 caracteres. Una convensin que se adopta en todas las clases de borland es utilizar nombres que comiencen con una letra mayscula para denotar clases y estructuras globales.
1.3.2.1 CUERPO DE UNA CLASE. La forma general de la declaracin de una clase es: class Nombre_de_la_clase{ datos y funciones privados . . . public: datos y funciones publicas . . . }lista de objetos; Una clase puede contener tanto partes publicas como partes privadas, por defecto, todos los elementos que se definen en la clase son privados; esto significa que no pueden acceder a ellas ninguna funcin que no sea miembro de la clase.
Class Counter{
La variable long count, no est disponible o no se puede usar por otras funciones que no estn declaradas en la clase, por lo que tratar de hacer esto es errneo: void main() { count = 3.111; } Una clase puede tener tantas variables como necesite. Estas pueden ser de cualquier tipo, incluyendo otras clases, apuntadores a objetos de clases e incluso apuntadores a objetos dinmicamente asignados. Las funciones miembro SetValue(long) y GetValue(). Solo estn declaradas dentro de la clase, la definicin de estas funciones sera as: void Counter::SetValue(long value) { count = value; } long Counter::GetValue() { return count; } 1.3.3 USO DE UNA CLASE. Ya que se ha definido la clase, se debe definir un objeto con ella. Las variables de una clase se definen de igual manera que como se definen las variables de tipo estructura. Para el ejemplo de la clase anterior, si quiere declarar un objeto Gente de tipo Counter, lo podra hacer asi: Class Counter{ . . public: .
. }Gente; O la declaracin la podra hacer de la siguiente forma: Counter Gente; En algunos lenguajes orientados a objetos, Smalltalk en particular, la definicin de una variable de clase se denomina instanciacin de la clase. Una instanciacin es simplemente una instancia de una clase en la forma de una variable especfica. Las variables instanciadas a partir de clases son objetos. El objeto Gente se podra usar as en un programa: void main() { Counter Gente; Gente.SetValue(1000); long value = GetValue(); }
// // //
Declaracin de un objeto Invocacin a funcin miembro de Counter Invocacin a funcin miembro de Counter
La iniciacin se tiene que hacer a travs de sus funciones miembro, por lo que hacer lo siguiente sera un error. void main() { Counter Gente; Gente = 1000; // error, la variable no esta disponible en la funcin main() long value = GetValue(); } El cdigo anterior no hace mucho, pero ilustra 2 aspectos importantes: La declaracin de un objeto dentro de una funcin y la invocacin de funciones miembro de un objeto. En otro ejemplo, sta clase define un tipo llamado cola, que se utiliza para crear un objeto de tipo cola. # include <iostream.h> class cola{ int c[100]; int posfin, posprin;
public: void iniciar(void); void ponent(int i); int quitaent(void); }; Cuando llega el momento de codificar realmente una funcin que es miembro de una clase, es preciso decir al compilador a que clase pertenece la funcin, calificando el nombre de la funcin con el nombre de la clase del cual es miembro. p.e. void cola :: ponent(int i) { if(posfin>=100) { cout<<"la cola esta llena "; return; } posfin++; c[posfin] = i; }
El :: se llama operador de resolucin de mbito; indica al compilador que la funcin ponent(int i) pertenece a la clase cola, o dicho de otra manera, ponent(int i) est dentro del mbito de cola. Para llamar a una funcin miembro desde una parte del programa que no sea parte de la clase, se debe utilizar el nombre del objeto y el operador punto. p.e. Cola a, b; // se crean 2 objetos tipo cola.
a.iniciar(); // llama a la funcin iniciar para el objeto a. Consideremos el siguiente ejemplo, de un programa en C++, aunque en una aplicacin real la declaracin de las clases debe estar contenida en un archivo de cabecera. # include <iostream.h> class cola{ int c[100]; int posfin, posprin; public: void iniciar(void); void ponent(int i); int quitaent(void); };
main(void) { cola a, b; a.iniciar(); b.iniciar(); a.ponent(15); b.ponent(39); a.ponent(55); b.ponent(19); cout<<a.quitaent() << " "; cout<<b.quitaent() << " "; cout<<a.quitaent() << " "; cout<<b.quitaent() << " "; return 0; } void cola::iniciar() { posprin=posfin=0; } void cola::ponent(int i) { if(posfin==0) { cout<<"la cola esta llena "; return; } posfin++; c[posfin] = i; } int cola::quitaent(void) { if(posfin==posprin) { cout<<"la cola est vaca"; return 0; } posprin++; return c[posprin]; }
class controlAcceso{ int a; public: int b; int fi(int a); protected: int c; float C1(float t); };
Cualquier declaracin que aparezca antes de cualquiera de las tres palabras clave, por default es private; as, int a; es private.
1.4.1
Los miembros de la clase private tienen el mas estricto control de acceso. Solo la clase misma puede tener acceso a un miembro private. En este ejemplo nadie puede usar la clase ya que todo es private. Class Privada{
long valor; void F1(); void F2(); }; void main() { privada objeto1; long L = &objeto.valor; objeto1.F1(); objeto1.F2(); } // // // // Se crea objeto1 de clase privada. acceso no valido por ser private. acceso no valido por ser private. acceso no valido por ser private.
Para poder tener acceso necesitara que las funciones miembro fueran declaradas en la seccin public.
1.4.2
Para utilizar un objeto de una clase, usted debe tener acceso a datos miembro, a funciones miembro o a ambos. Para hacer que algunos datos o funciones sean accesibles, se declaran en la seccin public. class Ej_public{ public: int variable; void funcin1(); }; void Ej_public::funcin1(){} void main() { Ej_public Objeto2; int i = Objeto2.variable; Objeto2.funcin1();
Cualquier cosa que se declara en la seccin public, hace posible el acceso ilimitado a cualquier persona.
1.4.3
Cuando se define una clase que se utiliza subsiguientemente como clase de base para otras clases, se puede hacer que los miembros estn accesibles solo para funciones de las clases derivadas mediante el uso de la palabra clave protected.
Class A Protected: int valor_A; Class B Public: void funB(); Class C Public: Void funcC();
La jerarqua de clase se puede expresar con cdigo as: class A{ Protected: int valor_A; }; class B{ public: void funB(); }; class C{ public: void funC(); };
La propiedad de ser protected se extiende indefinidamente hacia abajo en un rbol de herencia, en tanto que se declare que las clases derivadas tengan clases de base public. Por ejemplo el cdigo siguiente es aceptable.
1.5.1
Las clases no son objetos, pero aveces puede utilizarlas como si lo fueran. Un ejemplo es la declaracin de un apuntador a un miembro de clase.
class Ejemplo{ public: int valor; int identificador; }; void SetValue(Ejemplo& Objeto) { int Ejemplo::*ip = & Ejemplo::valor; Objeto.*ip = 3; } void main() { Ejemplo Objeto1; Ejemplo Objeto2; SetValue(Objeto1); SetValue(Objeto2); }
La funcin SetValue() tiene la declaracin inusual: Int Ejemplo::*ip = & Ejemplo::valor; Esta instruccin declara la variable ip que apunta a un valor de miembro de datos int en un objeto de clase Ejemplo sin indicar un objeto especifico.
1.6 CONSTRUCTORES.
Un constructor es una funcin especial que es miembro de esa clase y que tiene el mismo nombre de la clase. Es muy frecuente que una cierta parte de un objeto necesite una iniciacin antes de que pueda ser utilizada; como el requisito de iniciacin es tan frecuente C++ permite que los objetos se den a s mismos valores iniciales cuando se crean. Esta iniciacin automticamente se lleva a cabo mediante el uso de una funcin de construccin o constructor. Por ejemplo este es el aspecto que tiene la clase cola cuando se modifica para utilizar las iniciaciones:
# include <iostream.h> class cola{ int c[100]; int posfin, posprin; public: cola(void); void ponent(int i); int quitaent(void); // este es el constructor de la clase cola
}; Obsrvese que no se especifica un tipo de dato proporcionado para el constructor cola(). En C++, los constructores pueden proporcionar valores. La funcin cola() se codifica de la siguiente manera:
cola::cola(void) { posfin=posprin=0; cout<<"la cola ya tiene valores iniciales \n"; } La funcin de construccin de un objeto se invoca cuando se crea el objeto. Esto significa que se invoca cuando se ejecuta la declaracin del objeto. Adems, para los objetos locales, el constructor se invoca cada vez que se llega a la declaracin del objeto. Como lo dice el nombre, un constructor es una funcin que se utiliza para construir un objeto de una clase dada; esto puede implicar la presencia de diferentes escenarios. 1.- Creacin de objetos con iniciacin definida. 2.- Creacin de objetos con iniciacin especifica. 3.- Creacin de objetos copiando otro objeto.
Cada uno de estos procesos implica un tipo diferente de constructor. Un constructor tiene el nombre de la clase a la que pertenece. Un sub objeto es un objeto de clase que se declara dentro de otra clase. Cuando se tiene una instancia en una clase, su constructor debe crear un objeto de esa clase. Si la clase tiene sub objetos declarados en ella, el constructor tiene que invocar los constructores de estos objetos. Considere el ejemplo siguiente. class counter{ int value; public: Counter() { value = 0; } }; class Example{ int value; public: Counter cars; Example() { value = 0; } }; void main() { Example e; } Cuando se crea el objeto e en main(), se llama al constructor de la clase Example; en este caso, la funcin Example::Example() antes de ejecutar su cuerpo, invoca al constructor Counter::Counter() del sub objeto cars. Cuando se completa este constructor, se ejecuta el cuerpo de Example::Example().
1.6.1
CONSTRUCTORES PRIVATE.
Obsrvese que el constructor anterior aparece en la seccin public de la clase; este no es un requisito, pero normalmente es el caso. Un constructor private, impedira que los usuarios genricos crearan objetos a partir de esa clase y forzarn el cumplimiento de una de las condiciones siguientes antes de que se pueda crear un objeto. 1.- Un miembro esttico de la clase invoca al constructor. 2.- Una clase friend de esa clase invoca al constructor. 3.- Un objeto existente de la clase tiene una funcin miembro que crea nuevos objetos invocando al constructor.
1.6.2
La funcin bsica de un constructor consiste en inicializar un objeto antes de usarlo. Counter(long); Counter::Counter(long value) { count = value; } void main() { Counter object(5); } Observe los parntesis despus del nombre de la variable, que hacen que la definicin del objeto se asemeje a una llamada a funcin. La definicin del objeto es en realidad una llamada a funcin con argumentos. Suponga que desea crear una clase counter que sea lo suficientemente flexible para aceptar cualquier tipo de inicializacin, utilizando elementos float, long, int, cadena o incluso ningn argumento. Estas son las construcciones que se deben declarar. class Counter{ public: Counter(int = 0); Counter(long); Counter(double); Counter(char *); }; // declaracin de constructores.
Counter::Counter(long val_inic) { count = val_inic; } Counter::Counter(double val_inic) { count = val_inic; } Counter::Counter(char* val_inic) { count = atol(val_inic); }
//
void main() { Counter Object(5); Counter Object1(5); Counter Object2(5L); Counter Object3(5.0); Counter Object4(); } El compilador puede determinar automticamente a que constructor llamar en cada caso examinando los argumentos. // // // // // Utilizando constructor char* Utilizando constructor int Utilizando constructor long Utilizando constructor double Utilizando constructor por omisin
1.6.3
Cuando se crea un objeto, a menudo no se desea inicializar ningn valor de manera especfica; simplemente se desea que un objeto sea como otro. Esto implica hacer una copia de un objeto preexistente, lo cual requiere un tipo especial de construccin, llamada en general: constructor de copia. Ejemplo. class Counter{ . . . public: Counter(Counter&); . . . };
void main() { Counter Object(5); Counter Object1 = Object; } // Constructor entero // Constructor de copia
1.7
DESTRUCTORES.
Los destructores entran en la misma categora que los constructores. Se utilizan para realizar ciertas operaciones que son necesarias cuando ya no se utiliza un objeto como es la liberacin de memoria. Existen algunas diferencias importantes entre los constructores y los destructores: 1.- Los destructores pueden ser virtuales, los constructores NO. 2.- A los destructores no se les puede mandar argumentos. 3.- Slo se puede declarar un destructor para una clase dada. El destructor se nombra como la clase pero este va precedido de un tilde (~). Se podra escribir una clase que se encargue de manejar todas las grficas generadas por un programa de la siguiente manera: class Graphics{ public: Graphics(); ~Graphics(); void DrawCircle(int x, int y, int radio); void DrawDot(int x, int y); . . }; El destructor se utiliza para cerrar el dispositivo grfico y rechazar cualquier espacio de memoria asignado al objeto. Por ejemplo vea la clase cola con su constructor y destructor (en el ejemplo de la clase cola no es necesario un destructor, pero en este caso se pone para ejemplificar su uso).
# include <iostream.h> class cola{ int c[100]; int posfin, posprin; public: cola(void); ~cola(void); void ponent(int i); int quitaent(void); }; // Funcin de Construccin cola::cola(void) { posfin=0; posprin=0; } // este es el constructor de la clase cola // este es el destructor de la clase cola
Veamos como funcionan los constructores y destructores en la nueva versin del programa que crea una cola. # include <iostream.h> class cola{ int c[100]; int posfin, posprin; public: cola(void); ~cola(void); void ponent(int i); int quitaent(void); };
main(void) { cola a, b; a.ponent(15); b.ponent(39); a.ponent(55); b.ponent(19); cout<<a.quitaent() << " "; cout<<b.quitaent() << " "; cout<<a.quitaent() << " "; cout<<b.quitaent() << " "; return 0; }
// Funcin de Construccin cola::cola(void) { posfin=0; posprin=0; cout<<"La cola ya tiene valores iniciales \n" }
void cola::ponent(int i) { if(posfin>=100) { cout<<"la cola esta llena "; return; } posfin++; c[posfin] = i; }
int cola::quitaent(void) { if(posfin==posprin) { cout<<"la cola est vaca"; return 0; } posprin++; return c[posprin]; }
Este programa da como resultado lo siguiente: La cola ya tiene valores iniciales. La cola ya tiene valores iniciales. 15 39 55 19 La cola ha sido destruida. La cola ha sido destruida.
}; class ObjectList{ Node* head; Node* tail; Node* current; public: void InsertNode(Node * ) {} void DeleteNode(Node *) {} int CurrentObject(Node* node) { return node->value;} };
1.8.1
FUNCIONES AMIGAS.
Es posible que una funcin de una clase que no sea un miembro tenga acceso a las partes privadas de esa clase, declarando que se trata de un friend (amigo) de esa clase. Por ejemplo amg() se declara como friend de la class C1
Como se puede ver, la palabra reservada friend precede a toda la declaracin de la funcin, que es lo que se hace en general. La razn por la cual se permite en C++ las funciones friend es la de resolver situaciones en las cuales dos clases deban compartir una misma funcin, para as aumentar la eficiencia. Para ver un ejemplo, consideremos un programa que defina dos clases llamadas linea y recuadro. La clase linea contiene todos los datos y cdigo necesarios para dibujar una lnea horizontal discontinua de cualquier longitud, empezando en la coordenada X, Y que se indique y utilizando un color especificado, La clase recuadro contiene todo el cdigo y los datos necesarios para dibujar un recuadro en las coordenadas especificadas para la esquina superior izquierda y para la esquina inferior derecha, y con el color que se indique. Las dos clases tienen la misma funcin mismo_color() para determinar si una lnea y un recuadro estn pintados del mismo color. Las clases se declaran segn se muestra a continuacin:
class linea; class recuadro{ int color; int xsup, ysup; int xinf, yinf; public: friend int mismo_color(linea l, recuadro b); void pon_color(int c); void definir_recuadro(int x1, int y1, int x2, int y2); void mostrar_recuadro(void); }; class linea{ int color; int xinicial, yinicial; int longitud; public: friend int mismo_color(linea l, recuadro b); void pon_color(int c); void definir_linea(int x, int y, int l); void mostrar_linea(); };
La funcin mismo_color(), que no es miembro de ninguna de ellas pero es friend de ambas, proporciona un valor verdadero si tanto el objeto lnea como el objeto recuadro, que son sus argumentos, se dibujan del mismo color; en caso contrario, proporciona un valor nulo. La funcin mismo_color se muestra a continuacin: Int mismo_color(linea l, recuadro b) { if(l.color == b.color) return 1; return 0; } Tambin puede declarar una funcin no miembro como friend antes que el identificador de la funcin est en el campo de accin. Por ejemplo.
class Node{ friend int GetObject(Node*); int value; Node* Predecesor; Node* Sucesor;
public: void value(int i){ value = i; } }; int GetObject(Node* n) { return n->value; } 1.8.2 PROPIEDADES DE LA PALABRA RESERVADA friend.
Las funciones y clases declaradas friend para otras clases gozan de privilegios especiales. Si la funcin FUN0() es un elemento friend de la clase B y la clase B se deriva de la clase A. FUN0(), tiene acceso tambin a los miembros de datos de las clases A, B, y C: class A{ friend class FRIEND; int a1; protected: int a2; public: int a3; };
class B{ int b1; protected: friend class FRIEND; int b2; public: int a3; }; La clase friend puede tener acceso a todos los miembros de datos de C. class C{ int c1; protected: int c2; public: friend class FRIEND; int c3; };
1.9
HERENCIA
La herencia es uno de los rasgos fundamentales de un lenguaje de programacin orientado a objetos. En C++, la herencia se basa en permitir que una clase contenga a otra clase en su declaracin; supongamos una clase Figura: Class Figura{ . . public: . . }; Una clase derivada Figura_Circulo se declara as. Class Figura_Circulo:public Figura { public: . private: double x_centro, y_centr; double radio; };
Figura
Figura_Circulo
Figura_Rectngulo
Figura_Rectngulo_Rojo
Class Nombre_de_la_clase_nueva : acceso clase_heredada{ . . . }; Aqu acceso es opcional, sin embargo, si est presente tiene que ser public, private o protected. El uso de public significa que todos los elementos public del antecesor tambin sern public para la clase que lo hereda. El siguiente ejemplo muestra 2 clases donde la segunda de ellas hereda las propiedades de la primera.
class Box{ public: int width, height; void SetWidth(int w) { width = w; } void SetHeight(int h) { height = h; } };
La clase Box recibe el nombre de clase base de la clase ColoredBox. Que a su vez recibe el nombre de clase derivada. La clase Colored Box se declara solo con una funcin, pero tambin hereda 2 funciones y 2 variables de su clase base. As, se puede crear el cdigo siguiente:
Observe como las funciones heredadas se utilizan exactamente como si fueran miembro.
1.9.1
LIMITACIONES DE LA HERENCIA.
Cmo y cundo se deriva una clase de otra es puramente decisin del programador. Esto puede parecer obvio, pero es una limitacin. El diseador de un programa debe decidir al momento de la compilacin quien hereda qu, de quin, cmo y cundo se lleva a cabo la herencia.
1.9.2
Tal y como en la vida real, en C++ no todo se puede transmitir a travs de la herencia. Esto se puede considerar en un principio como una desventaja o limitacin, pero en realidad solo algunos casos especiales inconsistentes por definicin con la herencia: 1.2.3.4.Constructores. Destructores. Nuevos operadores definidos por el usuario. Relaciones friend.
El constructor de una clase de base no puede ser invocado de manera explcita en una clase derivada como otras funciones heredadas. Considere el cdigo siguiente: class Parent{ int value; public: Continua
Parent(){ value = 0; } Parent(int v){ value = 0; } }; class Child:public Parent{ int total; public: Child(int t) { total = t; } void SetTotal(int t); }; void Child::SetTotal(int t) { Parent::Parent(i); Total = t; }
// Esto no se puede hacer, ya que el constructor de la // clase no es heredado como otras funciones.
De manera anloga, los destructores estn diseados para ser invocados automticamente cuando un objeto sale del campo de accin. La relacin friend no es heredada. Esto es similar a la vida real; los amigos de sus padres no son automticamente amigos suyos. 1.9.3 HERENCIA MULTIPLE. Una clase puede heredar los atributos de dos o ms clases. Para lograr esto, se utiliza una lista de herencia separada mediante comas en la lista de clases base de la clase derivada. La forma General es:
Class Nombre_clase_derivada : lista de clases base { . . . }; Por ejemplo en este programa Z hereda tanto a X como a Y. # include <iostream.h> class X{ protected:
int a; public: void hacer_a(int i); }; class Y{ protected: int b; public: void hacer_b(int i); }; // Z hereda tanto a X como a Y class Z : public X, public Y { public: hacer_ab(void); };
} En este ejemplo, Z tiene acceso a las partes public y protected tanto de X como de Y.
Remarcando, una clase puede tener muchos padres y heredar propiedades de cada una de sus clases base. Considere crear una clase MesaRedonda, que no solo tenga las propiedades de las mesas, sino tambin la caracterstica geomtrica de ser redonda.
MESA
CIRCULO
MESA REDONDA
#include <stdio.h> class Circle{ float radio; public: Circle(float r){ radio = r; } Float Area(){ return radio*radio*3.1416; } }; class Mesa{ float height; public: Mesa(float h) { height = h; } float Height() { return height; } }; class MesaRedonda:public Mesa, public Circle{ int color; public: MesaRedonda(float h, float r, int c); int Color() { return color; } }; MesaRedonda::MesaRedonda(float h, float r, int c): Circle(r),Mesa(h) { color = c; }
void main() { MesaRedonda Mesa1(15.0, 3.0, 5); printf("\n Las propiedades de la Mesa son:"); printf("\n Altura = %f ", Mesa.Height()); printf("\n Area = %f ", Mesa.Area()); printf("\n Color = %d ", Mesa.Color()); } La funcin main() invoca las tres funciones miembro MesaRedonda::Height(), MesaRedonda::Area() y MesaRedonda::Color(). Todo sin indicar cuales son funciones heredadas y cuales no.
1.9.4
Las clases de base virtual se utilizan slo en el contexto de la herencia mltiple. Dada la complejidad de relaciones que pueden surgir en un rbol de herencia construido en torno a la herencia mltiple, existen situaciones en las que el programador necesita tener cierto nivel de control sobre la forma en que se heredan las clases de base. Considere el rbol de herencia de la siguiente figura.
La clase D tiene a A como clase de base. El problema es que hay dos clases A diferentes que aparecen como clases de base de D, cada una con datos propios. Esto se ejemplifica con el siguiente cdigo. class A{ public: int value; }; class B : public A{}; class C : public A{}; class D : public B, public C { public: int value() {return value; } }; El valor miembro de acceso a la instruccin en D es ambiguo. Borland C++ genera error. Tener mltiples copias de la misma clase de base en rbol de herencia no slo es confuso, sino que puede ser un desperdicio de espacio de almacenamiento. Declarar una base virtual resuelve el problema. Obliga al compilador a admitir slo una copia de la clase de base dada en la declaracin de una clase derivada. Por lo tanto el ejemplo anterior lo podemos corregir de la siguiente manera: class B : public virtual A{}; class C : public virtual A{}; class D : public B, public C { public: int value() {return value; } }; y el rbol de herencia quedara como realmente lo deseamos.
D 1.10 SOBRECARGA.
Una de las maneras que tiene el C++ de llegar al polimorfismo es a travs de la sobrecarga de funciones. En C++ , dos o mas funciones pueden compartir un nombre, siempre y cuando en la declaracin, sus parmetros sean diferentes.
Sobrecarga se refiere a la prctica de cargar una funcin con ms de un significado. Bsicamente, el trmino expresa que se cargan uno o ms identificadores de funcin sobre un identificador previo.
1.10.1
La sobrecarga no es un concepto nuevo en los lenguajes de programacin, por ejemplo el operador = est sobrecargado en muchos lenguajes de alto nivel y se utilizan en instrucciones de asignacin y en expresiones condicionales como: a = b; if( a = b) La sobrecarga otorga flexibilidad, permite a las personas utilizar cdigo con menos esfuerzo, ya que extiende operaciones que son conceptualmente similares en naturaleza.
1.10.2
SOBRECARGA DE FUNCIONES.
El tipo de retorno no se utiliza para distinguir funciones sobrecargadas, por lo tanto las funciones: void Muestra(int q); long Muestra(int q); No son distinguibles y producen un error del compilador. Cualquier nombre de funcin puede ser sobrecargada en C++, pero la sobrecarga solo funciona dentro de un campo de accin dado. Cuando se declara en una clase ms de una funcin miembro con el mismo nombre, se dice que el nombre de la funcin est sobrecargado en esa clase, y su campo de accin ser en el mbito de esa clase.
class Ejemplo{ int value; public: void value(int v) { value = v; } int value() { return value; } }; void main() { Ejemplo Ee; Ee.value(3); Int i = Ee.value(); }
Este cdigo demuestra que la clase Ejemplo tiene 2 funciones sobrecargadas: una funcin para escribir y una para leer una variable. Las funciones sobrecargadas necesitan diferir en una u otra o en las dos formas siguientes: 1.- Las funciones deben contener un nmero de argumentos diferente. 2.- Cuando menos uno de los argumentos debe ser diferente.
# include<iostream.h> int al_cuadrado(int i); double al_cuadrado(double d); long al_cuadrado(long l); main(void) { cout << al_cuadrado(10) <<" \n"; cout << al_cuadrado(1.25) <<" \n"; cout << al_cuadrado(9L) <<" \n"; return 0; } int al_cuadrado(int i) { cout<<" funcin al_cuadrado con parmetro entero" return i*i; } double al_cuadrado(double d) { cout<<" funcin al_cuadrado con parmetro doble" return d*d; }
long al_cuadrado(long l) { cout<<" funcin al_cuadrado con parmetro largo" return l*l; } La ventaja de sobrecargar las funciones es que permite acceder a conjuntos de funciones que estn relacionadas utilizando un solo nombre. En el programa anterior se crean 3 funciones similares que se llaman, al_cuadrado(), y cada una de las cuales regresa el cuadrado de su argumento; en cierto sentido, la sobrecarga de funciones permite crear un nombre genrico para alguna operacin, y el compilador resuelve que funcin es la adecuada para llevar a cabo la operacin. As, al_cuadrado(), representa la accin general que se realiza; el programador solo necesita recordar la accin general que se lleva a cabo, por lo tanto al aplicar el polimorfismo se han reducido a una las 3 cosas que haba que recordar. Aunque este ejemplo es bastante trivial,
si expande el concepto se puede ver que el polimorfismo puede ayudarnos a entender programas muy complejos. Para sobrecargar la funcin de construccin de una clase, solo hay que declarar las diferentes formas que tiene que adoptar y hay que definir su accin con respecto a esas formas. Por ejemplo el programa siguiente declara una clase llamada temporizador, que se comporta como un temporizador descendente. Cuando se crea un objeto del tipo temporizador, se le da un valor inicial de la hora. Cuando se invoca a la funcin ejecutar(), el temporizador cuenta hasta llegar a cero, y hace sonar el timbre. En ese ejemplo, se ha sobrecargado el constructor para especificar la hora como un entero, como una cadena, o como dos enteros que especifican los minutos y los segundos.
# include <iostream.h> # include <stdlib.h> # include <time.h> class temporizador{ int segundos; public: // Se especifican los segundos como una cadena. temporizador(char *t) {segundos = atoi(t);} // Se especifican los segundos como un entero temporizador(int t) {segundos = t;} // Se especifica la hora en minutos y segundos temporizador(int min, int seg) {segundos = min* 60 + seg; } void ejecutar(void); };
void temporizador::ejecutar(void) { clock_t t1, t2; t1 = t2 = clock()/CLK_TCK; while(segundos) { if(t1/CLK_TCK+1 <= (t2=clock()) /CLK_TCK){ segundos --; t1 = t2; } } cout << "\a"; // toca el timbre }
main(void)
{ temporizador a(10), b("20"), c(1, 10); a.ejecutar(); // cuenta 10 segundos b.ejecutar(); // cuenta 20 segundos c.ejecutar(); //cuenta 1 minuto, 10 segundos return 0; } Como se puede ver, cuando a, b, y c se crean dentro de main(), se les dan valores iniciales utilizando los tres mtodos diferentes que admiten las funciones de construccin sobrecargadas.
Uno de los usos ms comunes de la sobrecarga de funciones es con los constructores. La razn es que cuando se instanca una clase, se deben conservar las cosas lo ms flexibles que sea posible; de modo que los usuarios pueden realizar diferentes clases de instancias. Considere una clase ventana desplegable en una interfaz grfica de usuario. // Genera una ventana con parmetros por // omisin. PopupWindow Window_1(x, y); // Genera una ventana con coordenadas // especficas. PopupWindow Window_2(x, y, width, Height); // Genera una ventana con // dimensiones controladas. PopupWindow Window_3 = Window_2; // Genera una ventana igual a la // anterior. La implantacin de esta clase podra parecerse al siguiente cdigo. class PopupWindow{ Int x, y, Width, Height; public: PopupWindow(); PopupWindow(int, int); PopupWindow(int, int, int, int); PopupWindow(PopupWindow&); }; PopupWindow Window;
PopupWindow:: PopupWindow(int px, int py) { x = px; y = py; Widht = Heigth = 100; } PopupWindow:: PopupWindow(int px,int py, int w, ,int h) { x = px; y = py; Widht = w; Heigth = h; }
La clase utiliza cuatro funciones sobrecargadas que realizan el trabajo. Con constructores sobrecargados, usted puede permitir que el usuario especifique qu variables han de ser inicializadas de manera explcita y cuales deben asumir valores definidos.
1.10.4
SOBRECARGA DE OPERADORES.
Otra forma en que se logra el polimorfismo en C++ es mediante la sobrecarga de operadores. En general se puede sobrecargar cualquiera de los operadores de C++ definiendo lo que significa con respecto a una cierta clase. Aunque los operadores estn asociados comnmente con operaciones matemticas o lgicas, simplemente son una notacin alternativa para una llamada a una funcin La sobrecarga de operadores se utiliza en otros lenguajes de programacin, pero sin un nombre especial. En algunos lenguajes como Pascal, es posible hacer lo siguiente: StructureA := structureB + structureC; Lo que da lugar a una adicin byte por byte de las estructuras b y c que se copiarn en la estructura a. Esta sintaxis implica que el operador de adicin est sobrecargado para estructuras, aunque con ciertas reglas de apego a tipos. En el ejemplo anterior se utiliza tambin un operador de asignacin sobrecargado, ya que la instruccin y no una asignacin escalar definida, fue la que activ una operacin de copia de estructuras.
1.10.4.1
Hay dos formas en las que se pueden implantar operadores para objetos de clase: como funciones miembro y como amigos. Un operador unario aplicado a un objeto es equivalen te a una llamada a una funcin. Dados un objeto W y un operador unario @ , la expresin @W es equivalente a las llamadas a funciones: W.operator@() operator@(W) // uso de un operador con funcin miembro. // uso de un operador con funcin friend.
Un operador binario aplicado a los objetos es equivalente tambin a una llamada a funcin. Dados los objetos X y Y, y un operador @, la expresin X @ Y es equivalente a las llamadas a funcines: X.opertor@(Y) Operator@(X, Y) // uso de un operador con funcin miembro. // uso de un operador con funcin friend.
El cdigo anterior demuestra que los operadores pueden invocar dos funciones diferentes; una funcin que es miembro y otra que es amigo. 1.10.4.2 OPERADORES SOBRECARGADOS COMO FUNCIONES MIEMBRO.
Las funciones que implantan operadores son un tanto inusuales. Para comenzar, sus nombres deben comenzar con la cadena operator, seguida de los caracteres que representan el operador que se implanta. Por ejemplo la funcin miembro para implantar el operador de
adicin tendra que llamarse operator+ . La segunda restriccin se aplica al nmero de argumentos que pueden tomar estas funciones. Las funciones miembro que implantan operadores unarios no deben tomar argumentos, en tanto que las que implantan operadores binarios pueden tomar solo un argumento. El siguiente cdigo muestra operadores sobrecargados implantados como funciones miembro. class Counter{ public: int value; Counter(int i) { value = i; } Counter operator!(); Counter operator+(Counter & c); }; Counter Counter::operator!() { return Counter( ! value ); }
// //
void main() { Counter c1(3), c2(5); c1 = ! c1; c1 = c1 + c2; } El uso de los operadores en la funcin main() es completamente intuitivo, y no requiere que el usuario conozca los detalles de la implantacin de clases para averiguar cual ser el recultado de las operaciones. La restriccin en el nmero de argumentos (solamente uno), limita las posibilidades; pero esto lo podemos resolver sobrecargando el mismo operador tantas veces como sea necesario, vea un ejemplo de como se sobrecarga el operador de adicin tres veces. // // // se crean 2 objetos tipo counter. se aplica el operador unario se aplica el operador binario
class M{ public: int value; M(int i) { value = i; } M operator+(M& m); M operator+(int i); M operator+(double d); }; M M::operator+(M& m) { return M(value + m.value); }
// // // //
se crean dos objetos de clase M. uso M::operator+(M&) uso M::operator+(int) uso M::operator+(double)
1.10.4.3 OPERADORES SOBRECARGADOS COMO FUNCIONES FRIEND. En el siguiente ejemplo el operador + se declara como funcin friend y el operador = como funcin miembro de la clase X, ya que el operador = solo puede sobrecargarse como funcin miembro, lo que implica que el operador = global no puede ser sobrecargado. Los diseadores del lenguaje decidieron que permitir que las funciones friend cambiaran el significado del operador de asignacin causara mas problemas de los que resolvera. class X{
friend X operator+(X&, X&); public: int value; X(int i) { value = i; } X& operator = (X&); };
X operator+(X& a, X& b) { return X(a.value + b.value); } void main() { X g(2), h(5), i(3); G = h +h +i; } En general, los operadores friend sobrecargados se comportan de manera muy similar a las funciones miembro.
1.11
POLIMORFISMO
El origen del trmino polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme. El polimorfismo describe la capacidad del cdigo C++ de comportarse de diferentes maneras dependiendo de situaciones que se presenten al momento de la ejecucin. El concepto de polimorfismo es crucial para la programacin orientada a objetos. En su concepcin relativa a C++, el trmino polimorfismo se utiliza para describir el proceso mediante el cual se puede acceder a diferentes implementaciones de una funcin utilizando el mismo nombre. Por esta razn el polimorfismo se define a veces mediante la frase una interface mtodos mltiples. Esto significa que en general se puede acceder a toda una
clase de operaciones de la misma manera, aunque las acciones concretas que estn asociadas a cada una de las operaciones pueda ser diferente. En C++, el polimorfismo se admite tanto en el momento de la ejecucin como en el momento de la compilacin. La sobrecarga de operadores y de funciones es un ejemplo de polimorfismo en el momento de la compilacin. Sin embargo, aunque la sobrecarga de operadores y de funciones son muy potentes, no pueden llevar a cabo todas las tareas que requiere un verdadero lenguaje orientado a objetos. Por tanto, C++ permite tambin el polimorfismo en el momento de la ejecucin mediante el uso de clases derivadas y de funciones virtuales.
1.11.1
FUNCIONES VIRTUALES.
El polimorfismo en el momento de la ejecucin se consigue mediante el uso de tipos derivados y funciones virtuales. En pocas palabras, una funcin virtual es una funcin que se declara como virtual en una clase base y que se define en una o ms clases derivadas. Lo que hace especiales a las funciones virtual es que cuando se accede a una de ellas utilizando un puntero de clase base seala a un objeto de clase derivada, C++ determina qu funcin debe llamar en el momento de la ejecucin, basndose en el tipo del objeto al cual apunta. Por tanto, si apunta a diferentes objetos, se ejecutan versiones diferentes de la funcin virtual. Como ejemplo examine el siguiente cdigo:
#include<iostream.h> class Base { public: virtual void quien() { cout << Base \n; } }; class primera_deriv : public Base { public: void quien() { cout << Primera derivacin \n; } };
class seguna_deriv : public Base { public: void quien() { cout << Segunda derivacin \n; } };
main(void) { Base obj_base; Base *p; Primera_deriv obj_primera; Segunda_deriv obj_segunda; p = &obj_base; p->quien(); p = &obj_primera; p->quien(); p = &obj_segunda; p->quien(); return 0; }
La clave de la utilizacin de funciones virtual para lograr el polimorfismo en el momento de la ejecucin es que se debe acceder a esas funciones mediante el uso de un puntero declarado como puntero de la clase base.
Parte de la clave para aplicar con xito el polimorfismo consiste en comprender que la base y las clase derivadas forman una jerarqua, que va desde la mayor generalizacin a la menor. Por tanto la clase base cuando se utiliza correctamente, proporciona todos los elementos que puede utilizar directamente una clase derivada, mas aquellas funciones que la clase derivada debe implementar por s misma. Sin embargo dado que la forma de la interface est determinada por la clase base todas las clases derivadas van a compartir esa interface . El cdigo siguiente utiliza la clase figura para derivar dos clase concretas llamadas cuadro y tringulo. #include<iostream.h> class Figura{ protected: double x, y:
public: void pon_dim(double I, double j) { x = I; y = j; } virtual void mostrar_area() { cout << funcin no implementada \n;} };
class tringulo : public Figura { public: void mostrar_area() { cout<<Triangulo de altura << x << y base << y << y rea x * y * 0.5; } }; class cuadrado : public Figura { public: void mostrar_area() { cout << Cuadrado de lado << x << por << y << rea = << x * y <<\n; } };
main (void ) { Figura *p; triangulo trian; cuadrado cuad; p = &trian; p->pon_dim(10.0, 5.0); p->mostrar_area(); p = &cuad; p->pon_dim(10.0, 5.0); p->mostrar_area(); return 0; } Como se puede ver al examinar este programa, la interface de cuadrado y de tringulo es la misma, aunque cada uno de ellos proporcione sus propios mtodos para calcular el rea de cada uno de sus objetos.
C++ tiene la reputacin de ser un lenguaje muy poderoso, pero con el poder viene la responsabilidad, el programador debe de conocer una serie de conceptos y reglas de uso. Esto requiere de suficiente experiencia, un gran trato y conocimiento del lenguaje cuando est programando aplicaciones windows complejas. El hecho es: C++ es un lenguaje complejo con demasiadas reglas y terminos confusos, y el usuario tiene adems que aprender tcnicas de programacin orientadas a objetos. Productos como Borland Delphi y Microsoft Visual Bsic, viene a provocar un cambio irreversible en la programacin visual, ya que usando esas herramientas, los programadores pueden crear aplicaciones mucho mas fcil y rpido de lo que lo hacan anteriormente, ahora los desarrolladores solo tienen que mover los objetos que requieren usar, modificarlos de acuerdo a sus necesidades (solo llenando las funciones vacias), y es todo, una aplicacin ejecutable es creada. C++ Builder trabaja sobre la misma lnea que Delphi y Visual Basic. Este desarrollo Rapido de aplicaciones hacen mas fcil la construccin de sus proyectos. Con estas herramientas de programacin usted tiene mas poder con menos responsabilidad. C++ Builder habilita y produce aplicaciones ejecutables bajo windows95 o windows NT con soporte de 32 bits; El cdigo se ejecutar mucho ms rpido. Y puede ser que de otra manera C++ Builder lo haga un mejor programador.
C++ BUILDER PROFESIONAL. Ofrece C++ Builder con el equipo de desarrollo y otras herramientas potentes como libreras y cdigo fuente del que puede aprender sirviendo como tutorial. Esta versin proporciona algunas secciones especiales que probablemente no requiera inmediatamente, pero se alegrar al familiarizarse mas con C++ builder, esta versin ocupa cerca de 100 MB de espacio en su disco duro. C++ BUILDER, SERIE CLIENTE/SERVIDOR. Estamos hablando de compatibilidad con bases de datos gigantes, esta versin est equipada con desarrolladores profesionales que necesitan enlazar con grandes corporaciones de Bases de Datos, tomando la arquitectura cliente servidor. Esta versin ocupa cuando menos 130 MB de espacio en su disco duro.
Al final de las rutinas de instalacin, aparecer un nuevo grupo de programas, podrs ejecutar la aplicacin haciendo doble click en el icono de C++ Builder.
Inspector de Objetos
Diseo de la forma
FIG. 2.4.1 Ambiente de desarrollo integrado C++ Builder.
En la figura se presenta los principales elementos de C++ Builder (Ambiente de Desarrollo Integrado, por sus siglas en Ingles IDE). Cada parte en el ambiente de desarrollo trabaja conjuntamente, diseos visuales y editor de cdigo donde la edicin es similar a otros editores; solo que con el ambiente de dasarrollo integrado, usted puede observar realmente lo que esta construyendo al momento de crearlo.
Idealmente se deseara trabajar con una resolucin de 800 x 600 o tal vez mayor en su monitor, ya que estas resoluciones dan una sensacin de amplitud; pero recuerde que al disear sus aplicaciones el usuario final puede trabajar con una resolucin diferente a la suya, la manera mas sencilla de evitar problemas sera realizar sus aplicaciones para una de 480 x 640. 2.4.1 MENU PRINCIPAL Y BARRA DE HERRAMIENTAS. Muchas de las opciones que puedes accesar desde el men principal, estn disponibles a travs del panel de botones aceleradores en la barra de herramientas. En general la barra de herramientas provee de una manera rapida de ejecutar operaciones del programa con un simple click con su mouse.
Abrir Proyecto Grabar todos los archivos Anexar archivo al proyecto Seleccionar un programa de la lista de proyectos Seleccionar una forma de la lista de proyectos Ejecutar programa
Paso a funcin al depurar Crear nueva forma Cambio entre forma y ventana de edicin Borrar archivo del proyecto Grabar archivo seleccionado Abrir Archivo
FIG. 2.4.1.2 Barra de herramientas.
Usted puede configurar la barra de herramientas, seleccionndola con un click, y nuevamente haciendo click con el botn derecho del mouse, se activar un men, y al elegir la opcin de propiedades, tendr a su disposicin el editor de la barra de herramientas donde podr tomar las propiedades que necesite para anexarla a la barra de herramientas solamente jalndola con el mouse al panel de la barra de herramientas.
Si lo que desea es remover alguna propiedad de la barra de herramientas, solamente jlelo con el mouse fuera del panel de la barra de herramientas y desaparecer.
La paleta de componentes es algo como un catlogo de objetos que puedes usar de acuerdo a las necesidades de construccin de tus aplicaciones. Est dividida en pginas o grupos de acuerdo a sus funciones. Para implantar uno de estos componentes en tu aplicacin, solo tienes que seleccionarlo con el mouse haciendo un click en el objeto deseado y hacer click en la forma principal (Forma de edicin, ventana punteada) para que ya puedas utilizar ese objeto. C++ Builder soporta docenas de componentes.
FIG. 2.4.2.1
Paleta de componentes.
Standard: Esta tabla contiene los objetos para hacer eficaces y elegantes tus aplicaciones Windows, incluye componentes para desplegar y editar texto, botones, barras de estado y mens.
FIG. 2.4.2.2
Win95: Estos componentes permiten el acceso a los controles de usuario-interface de Windows95. Uno de los principales es la vista del rbol de directorio, (conocido como windows explorer), control de pgina, etc.
FIG. 2.4.2.3
Additional: La tabla de adicionales contiene algunos de los mejores y variados de la paleta de componentes, como mapas de bits, botones aceleradores y componentes de apariencia.
FIG. 2.4.2.4
Data Access y Data Controls: Se pueden accesar bases de datos y hacer consultas dentro de las aplicaciones que construyas con las facilidades que permite estos 2 grupos de objetos.
FIG. 2.4.2.5
FIG. 2.4.2.6
Win31: Muchos de los controles en Win31 tienen equivalentes en Win95 pero estas pueden usarse para dar sentido a aplicaciones para windows V. 3.1 adems de proporcionar un block de notas.
FIG. 2.4.2.7
Internet: Esta tabla dada por C++ Builder, comprende lo referente al grupo de herramientas de internet.
FIG. 2.4.2.8
Dialogs: Permite hacer cajas de dialogo que agilizan el desarrollo de tus aplicaciones como el abrir y grabar archivos, seleccionar tipos de letras, colores e impresoras y mucho ms.
FIG. 2.4.2.9
FIG. 2.4.2.10
Qreport: (o Quick Reports) provee de componentes para que pueda fcilmente organizar sus reportes y presenta la facilidad de una vista preliminar.
FIG. 2.4.2.11
ActiveX: Esta tabla de componentes, contiene un checador de ortografa as como objetos grficos impresionantes.
FIG. 2.4.2.12
Durante el desarrollo de este trabajo, solo presentar el uso de algunos de los objetos de la tabla de componentes, pero la idea es la misma para todos los objetos de esta paleta.
2.4.3 EL EDITOR DE LA FORMA. Cuando comienzas a trabajar con C++ Builder, tu espacio de trabajo y resultados se suple por la forma principal (Referida en la Fig. II.4.1 Como diseo de la forma).
Cada forma representa una ventana individual en tu aplicacin; en la forma puedes disear, aadir, eliminar reconfigurar los componentes segn las necesidades de tu aplicacin.
El inspector de objetos permite ver las propiedades o caractersticas de los objetos que comprendan tu proyecto, por medio de l se pueden cambiar las propiedades de los objetos, tambin muestra los eventos asociados a los objetos de la aplicacin.
Cuando se selecciona un objeto, el inspector de objetos automticamente cambia al contenido y propiedades de este objeto. Si se oculta, o pierdes el inspector de objetos, lo puedes llamar oprimiendo la tecla de funcin F11.
El inspector de objetos podra llamarse editor de objetos, por la propiedad antes mencionada de poder modificar las propiedades de los objetos. Propiedades: Cuando se comienza un proyecto el inspector de objetos despliega las propiedades de la forma principal como son: nombre, color, altura, ancho, posicin etc. Recordemos que al seleccionar otro objeto, automticamente mostrar las propiedades de ese objeto. Eventos: La tabla de eventos despliega para cada objeto los eventos como son: Al activar el objeto, al oprimir una tecla, al oprimir el mouse, al soltar el mouse, etc. esos eventos son disparados con acciones del usuario, o del sistema operativo mismo. Por ejemplo el evento; al hacer click en el mouse, se dispara o hace una accin cuando el usuario hace click con el mouse para ese objeto.
FIG. 2.4.4.1
Inspector de objetos.
Para aadir archivos a un proyecto, seleccione del men principal: View Proyect Manager y al hacer doble click obtendr una caja con la informacin de los componentes actuales del proyecto (FIG. II.5.1), haga click en el botn de integracin al proyecto, , y saldr una ventana de adicin Add to proyect, donde puede buscar La ruta de acceso donde se encuentre el archivo a aadir, y haga click en el botn Ok para cerrar la caja de dialogo y obtendr ya aadido a su proyecto el archivo seleccionado.
Para eliminar un archivo del proyecto, abra su manejador de proyectos, seleccione el archivo que quiera eliminar y haga click en el botn de remover archivo su mquina, solo del proyecto). y ser borrado de la lista. (no de
2.6.1 PAGINA DE FORMAS. Por omisin est incluida la auto creacin de una forma, al abrir un nuevo proyecto, evitando que usted al crear una nueva aplicacin tenga que pedir una forma. Al crear un nuevo proyecto se crea automticamente su forma principal y su ventana de edicin de cdigo.
FIG.
Titulo: El texto que introduzca ser el titulo de la aplicacin y ser desplegado con el icono cuando se minimice la aplicacin. Help_File: Asociar un archivo de ayuda a su aplicacin. Icon: El archivo ejecutable contendr el icono que seleccione, por omisin mostrar el de aplicaciones C++ Builder.
2.6.3 LA PAGINA DE C++. La pgina C++ es donde inicializa las opciones que desea usar para configurar su particular proyecto. Como opciones de depuracin, optimizacin de cdigo y libreras precompiladas.
2.6.4 LA PAGINA PASCAL . C++ Builder tiene un hermano mayor llamado Delphi que es una herramienta RAD. Y sus aplicaciones se construyen en lenguaje pascal. Si ha manejado delphi, ver que el ambiente de desarrollo es prcticamente el mismo. Puede usar funciones hechas en delphi dentro de C++ Builder.
La mayora del tiempo se querr que la aplicacin genere un archivo ejecutable, en otras ocasiones querr que su construccin sea una librera para diferentes programas, en este caso usted puede llamar a la opcin de libreras de enlazado dinmico (DLL) y las puede generar cambiando la opcin a generar DLLs.
Usted no necesita cambiar la configuracin en esta pagina, a menos que tenga en diferentes directorios de los que por omisin genera la instalacin de C++ Builder. Y debe tener cuidado en estos parmetros.
Project1.mak: Este es el archivo principal de opciones del proyecto. Un archivo .mak se requiere en cada aplicacin; es un archivo de texto que puede examinar eligiendo del men principal: View Project MakeFile. Este archivo contiene instrucciones de cmo C++ Builder construir el archivo (.exe) ejecutable para el proyecto.
Project1.Cpp: Este archivo contiene el cdigo principal de la aplicacin, comparte el mismo nombre del proyecto, lo crea automticamente C++ Builder al darle nombre al proyecto; contiene el cdigo de iniciacin y terminacin del programa. si quiere examinar este archivo, solo elija del men principal View Project Source.
Unit1.cpp: Este es el cdigo que usted le da a los eventos de los objetos que tendr en su forma final, este cdigo es el que introduce en la ventana de edicin, o en su editor de cdigo.
Para cada archivo .cpp, C++ Builder crea automticamente un .h Unit1.h: correspondiente. El archivo de cabecera contiene la declaracin de la forma y menciona a C++ Builder la lista de componentes y los eventos que tendr la aplicacin.
Unit1.dfm: El archivo .dfm contiene la informacin, definicin y declaracin de la forma y otros detalles importantes como: tamao, color, ttulos, fondos etc. as como detalles del resto de los componentes utilizados en la forma. La extensin .dfm indica que este archivo oculta los datos de la forma en formato binario. Este archivo no se puede leer, pero puede convertirlo para observar su contenido, solo seleccione la forma, con el botn derecho del mouse haga click y saldr un men de opciones, escoja View as text, para ver la informacin de su forma.
FIG. 2.7.1
y de igual manera, para regresar a verlo como forma, seleccione con el botn derecho del mouse, escoja View as Form, y regresar a su forma. Unit1.obj Cuando se compila el proyecto se crea el archivo binario con extensin .obj. Cada aplicacin contendr un archivo .obj, este archivo cambiar cada vez que se reconstruya el proyecto. Project1.exe o Project1.dll: Este es el archivo final segn se halla elegido en su proyecto, el .exe podr ejecutarse, y los dll son libreras dinmicas que pueden utilizarse desde otros programas. Project1.dsk: Contiene la informacin de la configuracin que tena su hardware al momento de crear o finalizar su proyecto, para al momento de ejecutarse lo haga sobre la misma configuracin. Project1.il?: Al ver la extensin .il? indica que el archivo es usado al enlazar, C++ Builder usa una tecnologa de compilacin muy rpida, lo que hace que la compilacin o recompilacin de sus proyectos sea en cuestin de segundos.
2.- Seleccione la forma haciendo clic con el mouse en ella. Observe el inspector de objetos, si no est presente, presione F11. 3.- En el inspector de objetos localice la propiedad Caption (TITULO), seleccione esta propiedad y cambie Form1 por el titulo: Mi primer Programa C++ Builder.
4.- Presione la tecla de funcin F9 lo que ejecutar su programa y tendr el siguiente resultado; La ventana de la forma con el texto: Mi primer Programa C++ Builder.
Usted ha hecho cambios a las propiedades de la forma usando el inspector de objetos. A continuacin daremos un breve repaso por las propiedades de la forma mostrados en el inspector de objetos.
LAS PROPIEDADES HINT Y SHOWHINT. La propiedad Hint es un pequeo texto que mostrar un mensaje al usuario cada vez que pase lentamente el puntero del mouse sobre la forma, en este espacio puede introducir cualquier texto, y si quiere activarlo, tendr que activar la propiedad ShowHint (cambiarlo a true), con esto el texto que halla tecleado en Hint, aparecer cuando pase el puntero sobre la forma.
LAS PROPIEDADES HEIGHT Y WIDTH. Cuando se cambia el tamao de una forma, los valores numricos de esta propiedad cambian automticamente. Usted puede dar dimensiones exactas a su forma dando valores numricos (en pixeles) a estas propiedades Largo y Ancho, que tambin las puede cambiar con otras dos propiedades que darn posicin en su ventana principal a las dimensiones escogidas para su forma; estas propiedades son Top(Nmero de pixeles desplazados desde la parte superior.) y Left( Nmero de pixeles desplazados desde la parte izquierda de su monitor.)
LA PROPIEDAD VISIBLE. Esta propiedad permite elegir entre 2 valores para su objeto, true o false, cuando la propiedad visible esta en verdadero(true), el usuario puede observar la forma (o el objeto) cuando la aplicacin se est ejecutando, si la propiedad visible se
encuentra en falso(False), al momento de la ejecucin de la aplicacin el usuario no podr ver este objeto.
LA PROPIEDAD COLOR. La propiedad color cambia inmediatamente la apariencia de la forma al color seleccionado.
LAS PROPIEDADES SETTYPE. Una de las formas de distinguir que propiedades pueden tener un tipo inicial, es que en la parte izquierda de las propiedades tienen un signo (+). Esto es que tienen varias caractersticas ms que puede adoptar esta propiedad, usted puede verlas y modificarlas seleccionando la propiedad y elegir de el men de opciones que se presentar la opcin expand.
LA PROPIEDAD FORMSTYLE. Tiene dos opciones principales, fsMDIform y fsMDIChild; usted puede desear en su aplicacin que una forma contenga a otras, este tratamiento de formas, llamado Interfase Documento Mltiple, hace muy fcil este tipo de aplicaciones, veamos cuan sencillo es hacer un ejemplo: 1.- Seleccione del men de principal File aplicacin.
2.- Con el inspector de objetos, ponga un nuevo nombre a su forma como lo hizo en el ejemplo anterior a: Forma Principal, y en la propiedad FormStyle cambie a la opcin fsMDIForm. 3.- Aada una segunda forma al proyecto eligiendo del men principal File New Form y aparecer una nueva forma. 4.- Con el inspector de objetos cambie ahora a esta forma la propiedad caption, por el siguiente texto: Ventana secundaria,(Puede tener varias ventanas secundarias) y en la propiedad FormStyle cambie a la opcin fsMDIChild. Y es todo lo que necesita para correr esta simple aplicacin. 5.- Oprima la tecla de funcin F9 para ejecutar la aplicacin MDI. Cuando corra la aplicacin obtendr el siguiente resultado.
La ventana hija ser parte permanente de la aplicacin hasta que se cierre, puede minimizar mover o maximizar la ventana secundaria dentro de la ventana principal.
LA PROPIEDAD BORDERICONS. Esta propiedad permite especificar el tipo de borde e iconos que llevar en la barra de titulo su aplicacin. Subpropiedad Que sucede cuando se selecciona la subpropiedad. Cuando selecciones con un clic con el botn derecho del mouse cualquier parte de la barra de titulo de la forma, presenta un men de control con las opciones que permite la configuracin de su proyecto. Coloca en la barra de titulo un pequeo icono que permite minimizar la forma con que se est trabajando al momento de ejecutarse. Coloca en la barra de titulo un pequeo icono que permite maximizar la forma con que se est trabajando al momento de ejecutarse. Coloca un botn "?" en la forma. Cuando el usuario hace clic proporciona una pequea definicin del objeto en contexto sensitivo.
BiSystemMenu
BiMinimize
BiMaximize
BiHelp
Si usted selecciona en todas las opciones False, no tendr forma de cerrar su aplicacin por medio de estos componentes as que tendr que implementar una forma de cerrar y salir.
LA PROPIEDAD BORDERSTYLE. Estas subpropiedades estn divididas en la que permiten que la forma se escale y las que no.
Subpropiedad
Que sucede cuando se selecciona la subpropiedad. No le permite al usuario ni mover, ni cerrar, ni maximizar ni escalar. Deber implementar una forma de cerrar su aplicacin ya que esta opcin no muestra una barra de titulo.. Permite mover, minimizar o maximizar pero no escalar. Solo permite mover, ni maximizar ni minimizar ni escalar. Permite mover, minimizar o maximizar pero no escalar. Solo permite mover y escalar, no permite ni maximizar ni minimizar ni escalar. Solo permite mover, ni maximizar ni minimizar ni escalar. Permite todas las acciones, mover, escalar, minimizar, maximizar.
BsNone
LA PROPIEDAD ICON. Por omisin si no se selecciona ninguno, el C++ Builder presenta el icono de las aplicaciones C++ Builder. Pero se puede cambiar haciendo doble clic en el botn Load, para seleccionar de algn directorio el archivo del icono deseado. esta propiedad busca archivos con extensin .ico. C++ Builder tiene una biblioteca de archivos .ico en el subdirectorio: cbuilder\images\icons. Y presenta un editor de iconos, puede experimentar con esta herramienta seleccionando del men principal: Tools Image Editor.
LA PROPIEDAD POSITION. Determina donde ser desplegada la forma en la pantalla de la computadora posicin (x,y).
Subpropiedad
PoDesigned
Aparece la forma en la posicin en la que estaba al momento de correr el programa. Si se escala se escalar de manera de quedar en el centro de la pantalla. Deja la forma en la posicin en que la coloque el usuario. Deja la forma en la posicin en que la coloque el usuario. Deja la forma en la posicin en que la coloque el usuario.
LA PROPIEDAD WINDOWSTATE. Esta propiedad muestra las caractersticas de la forma al momento de ejecutarse
WsNormal
La forma aparece de la manera en que se defini al momento de crearse (dimensiones y posicin). Al momento de ejecutar la aplicacin, la forma aparecer minimizada en su pantalla. Al momento de ejecutar la aplicacin, la forma abarcar la totalidad de la pantalla.
WsMinimized
WsMaximized
3.2
Los eventos son acciones relacionadas a los objetos y su comportamiento que llevarn a cabo durante la ejecucin del programa.
3.2.1
OnClick: Este evento ocurre cuando el usuario hace clic dentro del rea de la forma los siguientes pasos muestran un ejemplo de cmo se usara este evento. 1.- Elija del men principal File
New Application.
2.- En la hoja de eventos del inspector de objetos haga doble clic en el evento OnClick y el editor de cdigo presentar la estructura de la funcin llamada Form1Click y el cursor se coloca para que pueda introducir la lista de instrucciones. 3.- Teclee la siguiente instruccin en el editor de cdigo. ShowMessage("ha ocurrido un Clic del Mouse"); de manera que su editor de cdigo luzca as:
FIG. 3.2.1.1 Edicin de una lnea de cdigo en el evento OnClick de la Forma principal.
4.- Presione la tecla de funcin F9 para ejecutar la aplicacin. 5.- Haga clic en la forma y observe el resultado del programa.
Para experimentar otro evento del mouse siga el siguiente ejemplo. 1.- Elija del men Principal File
New Application.
2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11. 3.- En la hoja de eventos del inspector de objetos haga doble clic en el evento OnMouseDown para obtener la funcin en el editor de cdigo. Introduzca en la funcin el siguiente cdigo. Caption = Se realiz un clic con el Mouse; 4.- Haga doble clic en el evento OnMouseUp y teclee en el editor de cdigo la instruccin Caption = ; 5.- Haga doble clic en el evento OnMouseMove e introduzca el siguiente cdigo en esa funcin. MessageBeep(0); 6.- Presione la tecla de funcin F9 para ejecutar su programa. El resultado es que cuando arrastra el mouse sobre la forma se escucha un sonido, cuando se hace clic sobre la forma en la barra de titulo aparece: Se realiz un clic con el Mouse y se borra.
3.2.2
Estos eventos suceden cuando el usuario presiona un determinada tecla, experimente con el siguiente aplicacin. 1.- Elija del men principal File New Application. 2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11. 3.- En la hoja de eventos del inspector de objetos haga doble clic en el evento OnKeyPress y teclee el siguiente cdigo: if((Key>=0) && (Key <= 9)) MessageBeep(0); 4.- Presione la tecla de funcin F9 para ejecutar la aplicacin. El resultado es que si se oprime una tecla del 0 al 9, se escuchar un beep.
3.2.3
EVENTOS DE SISTEMA.
No todos los eventos ocurren por acciones que realice el usuario, algunos son ejecutados por el sistema operativo Windows.
Cuando ocurre Evento OnActivate OnClose Cuando la forma se activa. Despus de cerrar la forma.
Mostrar la forma. Cierra la aplicacin libera los recursos que fueron usados por la aplicacin.
Cuando se intenta cerrar la Checa que los datos se hallan grabado forma. antes de cerrar las bases de datos. Cuando se crea la forma Inicializar el cdigo. en variables
Cuando se para la ejecucin Guarda informacin de una aplicacin. temporales. Al intentar cerrar la Libera memoria
utilizada
en
la
aplicacin.
aplicacin.
OnPaint OnResize
Cuando la forma necesita Redibuja y muestra datos en el rea que ser redibujada. se redibuj. Cuando cambia el tamao Mover o escalar la forma. de la forma
Siga el siguiente ejemplo de uso del evento OnResize. 1.- Elija del men principal File New Application. 2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11. 3.- En la hoja de eventos del inspector de objetos haga doble clic en el evento OnResize 4.- En la hoja standard de la paleta de componentes haga clic en el componente Label (Etiqueta) y colquelo en la forma haciendo otro clic. 5.- Use el inspector de objetos para cambiar el titulo (Caption) de Label1 a Usando una etiqueta 6.- Seleccione la forma haciendo clic en ella. 7.- En el editor de cdigo haga doble clic en el evento OnResize y escriba el siguiente cdigo. Label1->Left = (clientWidth/2) (Label1->Width/2); Label1->Top = (clientHeight/2) (Label1->Height/2); 8.- Presione la tecla de funcin F9 para ejecutar el programa. Si usted escala la forma, ver que el texto siempre aparecer en el centro de la forma.
3.3.1
1.- Elija del men principal File New Application. 2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11. 3.- De la paleta de componentes en la hoja Standard seleccione 2 objetos Panel haciendo doble clic en el objeto ( )y acomdelos de la siguiente manera:
FIG. 3.3.1.1 Acomodo de dos componentes Panel en la Forma para una aplicacin particular.
4.- De la paleta de componentes en la hoja Standard seleccione 2 objetos Etiqueta(Label) haciendo doble clic en el objeto ( ), con el inspector de objetos cambie el titulo a la Label1 por el siguiente Etiqueta en panel1 y acomdelos de la siguiente manera:
FIG. 3.3.1.2 Acomodo de dos componentes Label en la Forma para una aplicacin particular.
5.- De la paleta de componentes en la hoja Standard seleccione 2 objetos Lnea de Edicin haciendo doble clic en el objeto ( ), con el inspector de objetos cambie el titulo (en la propiedad Text) a Edit1 por el siguiente Lnea de edicin en panel1 y acomdelos de la siguiente manera:
FIG. 3.3.1.3 Acomodo de dos componentes Edit en la Forma para una aplicacin particular.
6.- De la paleta de componentes en la hoja Standard seleccione 2 objetos Botn haciendo doble clic en el objeto ( ), con el inspector de objetos cambie el titulo a Botton1 por el siguiente Copia a Panel2 y botton2 por el siguiente: Salir y acomdelos de la siguiente manera:
FIG. 3.3.1.4 Acomodo de dos componentes Button en la Forma para una aplicacin particular.
7.- Haga doble clic sobre el botn Copia a Panel2 Para obtener su funcin. 8.- Repita la accin pero ahora en el botn Salir. 9.- Teclee el siguiente Cdigo en la Funcin. Button1Click (Copia a Panel2): Label2->Color=clOlive; Label2->Caption = Label1->Caption; Edit2->Color=clTeal; Edit2->Text = Edit1->Text;
10.- Teclee el siguiente Cdigo en la Funcin. Button2Click (Salir): exit(0;) 11.- Presione la tecla de funcin F9 para ejecutar el programa. Y oprime el botn de copia.
3.3.2
2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11. Seleccione del inspector de objetos el evento OnCreate haciendo doble clic y escriba el siguiente cdigo.Memo1->Lines->LoadFromFile(Unit1.cpp); 3.- De la paleta de componentes en la hoja Standard seleccione 1 objeto Panel haciendo doble clic en el objeto ( )y acomdelo de manera que abarque toda la forma:
FIG. 3.3.2.1 Acomodo de un componente Panel en la Forma para una aplicacin particular.
4.- Seleccione de la paleta de componentes Standard, el objeto Memo extindalo sobre el panel de la siguiente manera:
), y
FIG. 3.3.2.2 Acomodo de un componente Memo en la Forma para una aplicacin particular.
5.- Seleccione de la paleta de componentes Standard, el 3 objetos Botn ( ), y acomdelos sobre el panel, cambie el titulo de cada botn (Grabar, Limpiar, Salir), de la siguiente manera:
FIG. 3.3.2.3 Acomodo de tres componentes Button en la Forma para una aplicacin particular.
6.- De la paleta de componentes en la hoja Win95 seleccione el objeto de barra de progreso ( ) y colquelo de la siguiente manera:
FIG. 3.3.2.4 Acomodo de un componente ProgressBar en la Forma para una aplicacin particular.
7.- Con el inspector de objetos, modifique la propiedad Visible a False y la propiedad Max a 40 y la propiedad step en 10. 8.- Haga doble clic en el botn Grabar y teclee el siguiente cdigo: Memo1->Lines->SaveToFile("Unidad1.txt"); ProgressBar1->Visible=true; for(ProgressBar1->Position=0;ProgressBar1->Position<=ProgressBar1-> Max;ProgressBar1->Position+=10) { Application->ProcessMessages(); sleep(1); } ProgressBar1->Visible=false;
9.- Haga doble clic en el botn Limpiar y teclee el siguiente cdigo: Form1->Invalidate(); 10.- Haga doble clic en el botn Salir y teclee el siguiente cdigo: exit(0); 11.- Salve su proyecto en el directorio raz de c:\ Con los nombres que por default da el C++ Builder. 12.- Incluya el archivo de cabecera #include <dos.h>,y presione la tecla de funcin F9 para ejecutar su aplicacin. Y al correr su programa obtendr el siguiente resultado.
3.3.3
El componente ListBox muestra una lista de opciones de las que se puede elegir, puede elegir una o varias, no permite editar (no por esta ventana, por otros medios si), lo que permite que el usuario solo seleccione de entre las opciones que presenta este componente. Este componente puede contener hasta 32,000 artculos de los que el usuario puede escoger. Para comprender mejor esta opcin vea el siguiente programa: 1.- Elija del men principal File New Application. 2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11. 3.- Seleccione un objeto ListBox ( ) de la paleta de componentes Standadrd.
4.- En la propiedad Items haga doble clic; aparecer una ventana de edicin, en ella; teclee una lista de datos como la que se muestra en la figura.
5.- Cuando finalices selecciona Ok. Con el mouse. 6.- Seleccione un objeto etiqueta ( ), de la paleta de componentes Standard y colcalo en la forma de manera que su forma se luzca as:
7.- Selecciona el objeto ListBox de tu forma con un clic del mouse; posteriormente con el inspector de objetos en la hoja de eventos haz doble clic y en el editor de cdigo en su funcin teclea el siguiente cdigo: Label1->Caption = ListBox1->Items->Strings[ListBox1->ItemIndex]; 8.- Ejecute su programa y vea que al seleccionar una opcin de la lista se presenta ese texto en la etiqueta.
3.3.4
El componente ComboBox combina las ventajas de EditBox y ListBox. Este componente ofrece a sus usuarios una seleccin de cajas de edicin de manera que no ocupen mucho espacio en su forma. Presenta 3 tipos de ComboBox.
Simple DropDown
DropDownList
FIG 3.3.4.1 Tipos del Componente ComboBox.
Usted ver en su aplicacin slo una lnea de edicin, pero podr desplegarla al momento de seleccionar su opcin. Y se ver de la siguiente manera:
Experimente siguiendo los siguientes pasos: 1.- Elija del men principal File New Application. 2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11.
). y colquelo
4.- Elija de la barra de componentes el botn de ComboBox ( ). y colquelo en la forma. Cambie la propiedad de Style de este objeto con el inspector de objetos a la propiedad csDropDown. 5.- En la hoja de eventos haga doble clic en el evento onDropDown e introduzca el siguiente cdigo. ComboBox1->Items->Add(Edit1->Text); 6.- En la hoja de eventos del inspector de objetos seleccione para este mismo objeto el evento OnDblClick y teclee el siguiente cdigo: ComboBox1->Items->Clear(); 7.- Ejecute su programa y teclee cualquier palabra en la caja de edicin y luego con el mouse seleccione la flecha hacia debajo de la caja de seleccin y ver que la palabra que tecle en la caja de edicin se copiar en la caja de seleccin.
3.3.5
El componente ScrollBar se usa la mayor parte de las veces combinado con otros controles. Las propiedades mas importantes de este componente son: Kind Max - Min. Permite dos opciones para la barra, vertical u horizontal. Nmero mnimo o mximo de pasos en los que est dividida la barra (en una posicin relativa). Toma el valor actual del numero de pasos de la barra segn se modifique por medio de sus botones de incremento y decremento. . Determina la distancia que la barra se mover cuando el usuario mueva sus controles. Numero de movimientos que har del extremo de la barra (nmero que se defini en Min.) al otro extremo de la barra hasta llegar al nmero que se defini en Max.
Position
Large Change
SmallChange
Siga esta nueva aplicacin para ejemplificar su uso. 1.- Elija del men principal File New application.
2.- Si no esta presente el inspector de objetos presione la tecla de funcin F11. 3.- Seleccione ScrollBarr de la paleta de componentes Standard ( en la Forma. 4.- Cambie las siguientes propiedades de la barra con el inspector de objetos. Propiedad Large Change Max SmallChange Valor 32 255 16
)y colquela
5.- Copie la barra de la siguiente forma seleccione del men principal Edit 6.- Seleccione la forma haciendo clic en ella.
Copy.
7.- Pegue en su forma 2 copias de la barra que captur en el paso 5 de la siguiente manera: Edit Paste. Edit Paste.
8.- Seleccione de la paleta de componentes un objeto panel ( forma. Borre el nombre de Panel1 en la propiedad Caption.
) y colquelo en la
9.- Seleccione de la paleta de componentes un objeto Label ( ) y colquelo en la forma, haga tres copias de ella, cmbiele nombres(Label1 = Azul, Label2 = Verde, Label3 = Rojo) y acomdelos de la siguiente manera.
FIG 3.3.5.1 Acomodo de los componentes ScrollBar para una aplicacin de color.
10.- Seleccione las tres barras oprimiendo la tecla Shift y haciendo clic en las tres barras sin soltar la tecla Shift. 11.- En la hoja de eventos del inspector de objetos haga doble clic en el evento OnChange y escriba el siguiente cdigo. Panel1->Color = RGB(ScrollBar1 -> Position, ScrollBar2 -> Position,
ScrollBar3 -> Position ); Label1->Caption = IntToStr(ScrollBar1 -> Position); Label2->Caption = IntToStr(ScrollBar2 -> Position); Label3->Caption = IntToStr(ScrollBar3 -> Position);
3.3.6
Usar el componente BitBtn provee de una mejor apariencia a sus aplicaciones, para anexar una imagen a sus botones, no tiene que dibujar nada, amenos que lo desee, ya que C++ Builder proporciona un biblioteca de imgenes en el directorio cbuilder\images\buttons. La forma de poner una imagen en un botn se muestra en el siguiente ejemplo. 1.- Elija del men principal File New Application. 2.- En la hoja Additional de la paleta de componentes, seleccione el objeto BitBtn ( ) y colquelo en su forma. 3.- Con el inspector de objetos haga doble clic en la propiedad Glyph, y aparecer un editor de imgenes en el que podr seleccionar la imagen que desee en su botn.
4.- Haga clic en el botn Load, para seleccionar una imagen, si no se encuentra en ese directorio puede buscarla en esta misma opcin.
5.- Seleccione la imagen deseada y oprima el botn Open. Y en el editor de imgenes el botn OK. Puede repetir esta accin y poner barios BitBtn en su aplicacin.
3.3.7
Los botones aceleradores proveen al usuario de una forma alternativa de ejecutar acciones que pueden de otra manera ser accesados por la barra de mens. Muchas aplicaciones Windows hacen uso de botones aceleradores. Siga los siguientes pasos para ver un ejemplo. 1.- Elija del men principal File New Application. 2.- Seleccione de la paleta de componentes, en la hoja additional, el objeto SpeedButton ( ) y colquelo en la forma.
3.- Repita la accin 3 veces mas. 4.- Utilice el inspector de objetos para colocar un titulo ( Caption ) en lo botones aceleradores como se muestra en la figura.
5.- Y en la propiedad GroupIndex coloque el nmero 1. Lo que indicar que los botones trabajarn como grupo y cuando uno sea seleccionado permanecer presionado hasta que otro botn del grupo sea seleccionado, presentando una eleccin exclusiva para el usuario. 6.- Ejecute su aplicacin y vea como trabajan los botones aceleradores.
3.3.8
Cuando dentro de sus aplicaciones necesite verificar de entre varias opciones; las cajas de verificacin son un componente que puede ofrecerle grandes ventajas y una excelente presentacin. Las cajas de seleccin las puede usar cuando necesite seleccionar entre varias opciones un grupo de ellas o su totalidad. Usted puede seleccionar este componente de la paleta de componentes Standard, su uso comnmente se combina con botones, as que como ejemplo puede utilizar el programa que construy en la seccin de botones aceleradores e incluirle los siguientes pasos.
1.- Seleccione de la hoja Standard de componentes el objeto CheckBox ( coloque 4 copias de este objeto en su forma.
)y
2.- Con el inspector de objetos cambie los ttulos de las cajas como se muestra en la figura:
3.- Haga doble clic en cada un de los botones aceleradores e incluya el siguiente cdigo en cada funcin como se muestra: void __fastcall TForm1::SpeedButton2Click(TObject *Sender) { CheckBox2->Checked = true; CheckBox1->Checked = false; CheckBox3->Checked = false; CheckBox4->Checked = false; } void __fastcall TForm1::SpeedButton3Click(TObject *Sender) { CheckBox3->Checked = true; CheckBox1->Checked = false; CheckBox2->Checked = false; CheckBox4->Checked = false; } void __fastcall TForm1::SpeedButton4Click(TObject *Sender) { CheckBox4->Checked = true; CheckBox1->Checked = false; CheckBox2->Checked = false; CheckBox3->Checked = false; } void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { CheckBox1->Checked = true; CheckBox2->Checked = false; CheckBox3->Checked = false;
CheckBox4->Checked = false; } 4.- Ejecute su programa y oprima los botones aceleradores, y observe su accin sobre las cajas de verificacin.
3.3.9
Los botones circulares trabajan semejante a las cajas de verificacin, solo que en estos solo puedes tener una sola seleccin y en las cajas de verificacin puedes tener todas las cajas seleccionadas. Para ejemplificar su uso siga los siguientes pasos donde tambin utilizar el componente RadioGroup de la hoja Standard de componentes, ya que su uso es prcticamente igual, la diferencia estriba en que el RadioButton es un solo componente, y el Radiogroup pueden ser varios. 1.- Elija del men principal File New Application. 2.- Seleccione de la paleta de componentes, en la hoja Standard, el objeto RadioButton ( ), y haga 5 copias de el en la forma.
3.- Con el inspector de objetos cambie la propiedad de titulo (Caption), como se muestra a continuacin.
FIG. 3.3.9.1
4.- Seleccione de la paleta de componentes, en la hoja Standard, el objeto RadioGroup ( ), y colquelo en la forma. Cambie el Titulo a Auto Detallado con el inspector de objetos en la propiedad Caption.
FIG. 3.3.9.2
5.- En el inspector de objetos para este componente, seleccione la propiedad Items y haga doble clic, en ese momento aparecer una ventana de edicin; en ella teclee los mismos nombres que en los RadioButtons como se muestra en la Figura.
FIG. 3.3.9.3
6.- Seleccione el botn Ok. Para cerrar esta ventana de edicin y obtendr el siguiente resultado:
FIG. 3.3.9.4
7.- Presione la tecla de funcin F9 para ejecutar su aplicacin y observe los resultados. 3.3.10 USO DE MASCARAS EN LA EDICIN (MASKEDIT).
Este componente es usado para evitar que el usuario introduzca datos distintos a lo validos, ya que solo el tipo de dato y en la forma en que se indique, es lo que el usuario podr introducir en este componente. Para observar mejor su uso, siga los siguientes pasos: 1.- Elija del men principal File New Application.
2.- En la hoja Additional de la paleta de componentes, seleccione el objeto MaskEdit ( ), y colquelo en la forma.
3.- Con el inspector de objetos, seleccione la propiedad EditMask haciendo doble clic, en ese instante aparecer un editor de tipos en el que existe una variedad de tipos de datos definidos de los que puede seleccionar posteriormente..
FIG. 3.3.10.1
Editor de mascaras.
4.- En la caja de dialogo(Input Mask) introduzca el siguiente cdigo: LLLLL00000 y seleccione el botn OK. 5.- Ejecute su programa y trate de introducir texto y nmeros, observe que pasa. Usted puede elaborar su propia mascara o secuencia de caracteres siguiendo las indicaciones de la siguiente tabla:
Caractr
Usado para enmascarar... Permite introducir letras o nmeros (ejemplo A Permite introducir letras (ejemplo A
A
L 0 # _(Guin Bajo) >
Z, a z, 0 9)
Z, a z)
Permite caracteres numricos solamente Permite introducir caracteres numricos signados (+) y (-) Inserta un espacio en esa posicin. Convierte todos los caracteres a Mayscula hasta que encuentra el signo <. Convierte todos los caracteres a Minscula hasta que encuentra el signo >. Remueve los caracteres iniciales en blanco (espacios) que se encuentre en la mascara. Ejm. 12345. Remueve los espacios iniciales y queda as 12345.
<
3.3.11
El componente Shape por si solo no es muy til, pero combinado con otros componentes y mucho ingenio, se pueden lograr resultados excelentes. Este componente se encuentra en la hoja Additional de la paleta de componentes. Vea el uso de sus propiedades con el inspector de objetos de este componente.
3.3.11.1
LA PROPIEDAD SHAPE.
Esta propiedad determina cual ser la configuracin o forma del objeto, usted tiene para elegir entre 6 formas que puede tomar su objeto. Seleccione de la paleta de componentes Additional un componente Shape ( colquelo en su forma para observar como funciona esta propiedad. )y
FIG. 3.3.11.1
3.3.11.2
Estas propiedades sirven para ajustar el tamao exacto de las figuras, o simplemente jale con su mouse la caja de contorno de su figura para ajustarla a su preferencia.
3.3.11.3
Con estas propiedades usted determina la forma en que estarn dibujados los objetos shape que ha seleccionado. Con la propiedad Pen determina la lnea exterior del objeto. Width determina la densidad de la lnea exterior. Color determina el color de la lnea. Style incluye un rango de valores para inicializar, lnea slida, punteada etc. Con la propiedad Brush determina el interior del rea del objeto. Style indica como ser el arrea interior, si slida o achurada en alguna forma. Color Ser el color que lleve el relleno.
3.3.12
Donde quiera desplegar una imagen o un grfico en su forma, lo puede hacer por medio de el componente Image. Para ver como funciona este componente siga los siguientes pasos: 1.- De la paleta de componentes en la hoja Additional, seleccione el componente Image y colquelo en su forma. 2.- Seleccione la propiedad Picture en el inspector de objetos de la Imagen haciendo doble clic para obtener la caja de dilogo del componente imagen. 3.- Seleccione el botn LOAD para buscar una imagen de algn directorio. 4.- Seleccione la imagen deseada y oprima el botn Ok.
Si selecciona del inspector de objetos la propiedad stretch = true, la imagen se adaptar al tamao que tiene su objeto Image ya sea mayor o menor.
3.3.13
El componente StringGrid al igual que DrawGrid, se utilizan para mostrar artculos del mismo tipo en un formato compacto de renglones y columnas. StringGrid es como poner varios DrawGrid juntos, por lo que StringGrid es mucho mas potente, por lo que mostrar el uso de este componente y pocas son las variaciones que hacer para utilizar DrawGrid. Siga los siguientes pasos para conocer su funcionamiento. 1.- Abra una nueva aplicacin. 2.- Coloque un objeto panel de la paleta de componentes Standard en su forma, con el inspector de objetos, en la propiedad Align, seleccione alLeft y remueva el ttulo Panel1 de la propiedad Caption.. 3.- Con el objeto panel seleccionado elija de la paleta de componentes Standard un objeto Botn y colquelo sobre el panel; modifique el ttulo de Button a Cargar.
5.- En la paleta de componentes Additional seleccione un objeto StringGrid y colquelo en la forma principal, con el inspector de objetos cambie la propiedad align por alClient. Y las siguientes propiedades segn se muestra en la siguiente tabla. PROPIEDAD ColCount DefaultColWidth DefaultRowHeight FixedCols VALOR 10 80 40 0
FixedRows RowCount
0 10
Con el inspector de objetos en la hoja de eventos haga doble clic en el evento OnDrawCell E introduzca el siguiente cdigo. if( StringGrid1 -> Objects [ Col ] [ Row ] != 0 ) { StringGrid1 -> Canvas -> Draw (Rect.Left + 10, Rect.Top + 20, ( Graphics :: TGraphic* ) StringGrid1 -> Objects [ Col ] [ Row ] ); } 6.- Haga doble clic en el objeto botn y coloque el siguiente cdigo: int Col, Row; ffblk fbFileData; TPicture *picThis; String strPath = DirectoryListBox1->Directory + "\\"; String strWildCard = "*.bmp"; String strTemp = strPath + strWildCard; findfirst(strTemp.c_str(),&fbFileData, 0); strTemp = strPath; strTemp += fbFileData.ff_name; for(Row=0; Row<16; Row++) { for(Col=0;Col<16; Col++) { StringGrid1->Cells[Col][Row] = fbFileData.ff_name; picThis = new TPicture; picThis->LoadFromFile(strTemp); StringGrid1->Objects[Col][Row] = (TObject*) picThis->Graphic; findnext(&fbFileData); strTemp = strPath; strTemp = fbFileData.ff_name; } } 7.- Incluya las siguientes libreras de cabecera antes de #pragma. #include <dir.h> #include <dos.h>
FIG. 3.3.13.1
Esta forma muestra cada una de los archivos de imagen que se pueden usar en los BtnBits antes visto.
3.3.14
Los mens proveen de una forma rpida y esttica de hacer cosas complicadas, evitando elaborar botones para ejecutar algunas cosas. Los mens, se sitan en la barra de ttulo de la forma que generalmente hemos visto en la mayora de los paquetes en que trabajamos. Siga los siguientes pasos para ver como trabaja el Main Men. 1.- Cree una nueva aplicacin.
2.- En la paleta de componentes Standard seleccione un objeto Main Men colquelo en la forma.
3.- Haga doble clic en este objeto y se abrir el diseador de mens que tiene la siguiente apariencia.
4.- Con el inspector de objetos ponga los ttulos del men modificando la propiedad caption de la siguiente manera.
Y al hacer un clic bajo esta opcin de men que colocamos, podemos anexar mas opciones, ya sea como otra opcin del men (haciendo clic a la derecha) o como submen (haciendo el clic hacia abajo).
3.3.14.1
Para que alguna opcin del men tenga su efecto necesita introducir el cdigo de lo que debe realizar al seleccionar esa opcin. Haga doble clic en la opcin, para tener acceso a su funcin OnClick, lo que inmediatamente llamar al editor de cdigo y podr teclear el cdigo que tenga para esa accin.
3.3.14.2
Las teclas rpidas se implantan de manera sencilla en un men principal, solo hay que aadir un ampersand (&) antes de la palabra que ser el identificador de la accin (esto en la propiedad caption del inspector de objetos). Al hacer esto, tenemos implantada una llamada rpida a esa accin solo oprimiendo la tecla que esta subrayada. Para implantar atajos (ShortCuts) es igualmente sencillo, si quisiera aadir un shortcut a la accin cerrar del men anterior, solo tengo que seleccionar la accin cerrar, y con el inspector de objetos en la propiedad ShortCut escoger la combinacin de teclas que mas convenga para la accin, en este caso podra poner la combinacin Ctrl + E.
FIG.
3.3.14.2
3.3.14.3
El formato predefinido, es una forma de estandarizar los mens, y es una forma muy rpida de tener mens completos en un instante, siga los pasos que se muestran para observar su accin. 1.- Cree una nueva aplicacin.
2.- En la paleta de componentes Standard seleccione un objeto Main Men colquelo en la forma.
3.- Haga doble clic en este objeto y se abrir el diseador de mens, haga clic derecho en el diseador y ver un men de opciones,
seleccione Insert From Template y seleccione la opcin que sea til para su aplicacin.
Para crear un men para formato predefinido, primero disee su men con las caractersticas que usted quiera, cuando halla concluido, haga clic con el botn derecho del mouse y seleccione Save As Template introduzca el nuevo nombre, y tendr listo un modelo para sus mens. Como ejemplo mostrar el anterior pero con las palabras en espaol.
3.3.15
(PROGRESSBAR) El uso de este componente es muy importante, ya que muestra que efectivamente se est realizando una accin. Muchas veces el usuario al correr un programa no sabe si esta ejecutando o si ha ocurrido algn error y su equipo se encuentra bloqueado; con las barras de progreso, esta duda desaparece, ya que las barras de progreso muestran un avance determinado en la ejecucin de alguna parte del programa. Esto lo mostramos sin mayor explicacin en el ejemplo de la seccin III.3.2. Generalmente este componente se utiliza para: Cargar archivos, Grabar archivos, ejecutar clculos, o procesos largos que no muestren resultados continuos. Como otro ejemplo de este componente, siga los siguientes pasos.
y colquelo
3.- En la paleta de componentes Standard seleccione un objeto Label y colquelo en la forma. 4.- En la paleta de componentes Standard seleccione un objeto Button y colquelo en la forma, con el inspector de objetos modifique la propiedad Caption a AVANCE,
FIG. 3.3.15.1
en la hoja de eventos haga doble clic en el evento OnClick e introduzca el siguiente cdigo. for(ProgressBar1->Position=0; ProgressBar1->Position=0< ProgressBar1->Max; ProgressBar1->Position++) { Label1->Caption=string(ProgressBar1->Position) + %; Application->ProcessMessages(); Sleep(50); } Sleep(250); ProgressBar1->Position=0; Label1->Caption=String(ProgressBar1->Position) + "%";
5.- Presione la tecla de funcin F9 para ejecutar su programa, presione el botn avance y tendr el siguiente resultado.
FIG. 3.3.15.2
3.3.16
(STATUSBAR) Las barras de estado proveen al usuario de informacin de la aplicacin que se est ejecutando. Usted puede crear mensajes separados y repartirlos en una misma barra de estado. Complemente el programa anterior con los siguientes pasos:
1.- En la paleta de componentes Win95 seleccione un objeto StatusBar y colquelo en la forma, con el inspector de objetos haga doble clic en la propiedad Panels y automticamente obtendr la caja de dialogo editor de panels que tiene la siguiente apariencia.
FIG. 3.3.16.1
2.- Seleccione haciendo clic en el botn New para aadir un panel a la barra de estado. 3.- Escriba el siguiente texto. QUE TAL HOY ES : 100 Lowered oprima el botn Apply.
4.- Seleccione haciendo clic en el botn New para aadir otro panel a la barra de estado. 5.- Escriba el siguiente texto. MM/DD/YY 65 Raised Y oprima el botn Apply. en la ventana Text. en la ventana Width. en la ventana Bevel.
6.- Seleccione haciendo clic en el botn New para aadir otro panel a la barra de estado. 7.- Escriba el siguiente texto. SON LAS : 100 Lowered Y oprima el botn Apply. en la ventana Text. en la ventana Width. en la ventana Bevel.
8.- Seleccione haciendo clic en el botn New para aadir otro panel a la barra de estado. 9.- Escriba el siguiente texto. HH:MM:SS en la ventana Text. 65 en la ventana Width. Raised en la ventana Bevel. Oprima el botn Apply y el botn Ok.
10.- En la paleta de componentes System seleccione un objeto Timer inspector de objetos y tendr su forma de la siguiente manera.
, con el
FIG. 3.3.16.2
seleccione haciendo doble clic el evento OnTimer e introduzca el siguiente cdigo. StatusBar1->Panels->Items[3]->Text = Now().TimeString(); StatusBar1->Panels->Items[1]->Text = Now().DateString(); 11.- Presione la Tecla F9 para ejecutar su programa. Y obtendr el siguiente resultado
FIG. 3.3.16.3
3.3.17
Con este componente se da al usuario acceso a todos los archivos de texto y en ellos podr realizar modificaciones en el estilo del texto, adems de poderlo imprimir. Con los siguientes pasos podr dotar su aplicacin de un procesador de texto.
1.- Seleccione del men principal File New, y obtendr una caja de dilogo, seleccione en la hoja de proyectos (projects ) el icono de aplicacin SDI y seleccione con un clic el botn Ok.
FIG.
3.3.17.1
Nuevos componentes.
2.- Haga clic en el botn Ok para dejar el directorio que marca por omisin, o seleccione un directorio en el que desee que guarde los archivos que generar este proyecto.
FIG.
3.3.17.2
FIG.
3.3.17.3
4.- De la paleta de componentes Win95 seleccione el objeto RichEdit y colquelo en la forma, con el inspector de objetos modifique la propiedad Align, ponga en ella alClient. 5.- De la paleta de componentes Additional seleccione un objeto SpeedButton y colquelo en el panel en la parte superior de la forma, repita esta accin seis veces mas. 6.- Usando el inspector de objetos coloque los siguientes valores en las respectivas propiedades en cada uno de los 7 botones. Propiedad Name BtnBold BtnUnderline BtnItalic BtnLeftJust BtnCenter BtnRightJust BtnPrint GroupIndex 1 2 3 4 4 4 0 Caption N S I |< = >| Imprime AllowAllUp settig true true true false false false false
7.- Seleccione los tres primeros Botones (btnBold , btnUnderline, btnItalic), presionando la tecla Shift y haciendo clic en cada uno de ellos mientras se presiona la tecla; con el inspector de objetos haga doble clic en el evento OnClick e introduzca el siguiente cdigo. TFontStyles fsThis; if(btnBold->Down) fsThis<<fsBold; if(btnUnderline->Down) fsThis<<fsUnderline; if(btnItalic->Down) fsThis<<fsItalic; RichEdit1->SelAttributes->Style = TFontStyles(fsThis);
8.- Seleccione los siguientes tres botones (btnLeftJust, btnCenter, btnRightJust) de igual manera que los anteriores, con el inspector de objetos, en la hoja de eventos haga doble clic en el evento OnClick e introduzca el siguiente cdigo. TAlignment taThis; if(btnLeftJust->Down) taThis = taLeftJustify; if(btnCenter->Down) taThis = taCenter; if(btnRightJust->Down) taThis = taRightJustify; RichEdit1->Paragraph->Alignment = TAlignment(taThis); 9.- Seleccione el componente RichEdit y con el inspector de objetos en la hoja de eventos seleccione el evento OnSelectionChange e introduzca el siguiente cdigo. btnBold->Down = RichEdit1->SelAttributes->Style.Contains(fsBold); btnUnderline->Down = RichEdit1->SelAttributes->Style.Contains(fsUnderline); btnItalic->Down = RichEdit1->SelAttributes->Style.Contains(fsItalic); switch(RichEdit1->Paragraph->Alignment) { case taLeftJustify : btnLeftJust->Down = true;break; case taCenter : btnCenter->Down = true;break; case taRightJustify : btnRightJust->Down = true;break; } 10.- Seleccione el ltimo botn imprime haciendo doble clic en l e introduce el siguiente cdigo. RichEdit1->Print(Caption); 11.- Del men principal de la forma, seleccione con doble clic Archivo introduzca el siguiente cdigo: OpenDialog->Execute(); if(OpenDialog->FileName != "") RichEdit1->Lines->LoadFromFile(OpenDialog->FileName); 12.- Del men principal de la forma, seleccione con doble clic Archivo introduzca el siguiente cdigo: SaveDialog->Execute(); if(SaveDialog->FileName != "")
Abrir e
Grabar e
3.3.18
Como su nombre lo indica, el componente ImageList agrupa una coleccin de imgenes todas ellas del mismo tamao, este componente no es visual, lo que quiere decir que usted no podr ver las imgenes una vez agrupadas (Por lo menos no directamente con este componente). Con los siguientes pasos podr utilizar este componente. 1.- De la paleta de componentes en la hoja Win95 seleccione un objeto ImageList colquelo en su forma. y
2.- Haga clic con el botn derecho del mouse y obtendr un men de opciones elija la opcin ImageList Edito y aparecer la caja de dialogo llamada ImegeList Editor.
FIG.
3.3.18.1
3.- Seleccione el botn Add para aadir una imagen a la lista de imgenes. Obtendr una caja de dialogo para buscar el directorio donde estn almacenados los archivos de las imgenes.
FIG.
3.3.18.2
4.- Seleccione la imagen y oprima el botn Open; puede seleccionar cualquiera de las tres opciones que presenta para cada imagen. Crop (Cortar), Stretch (Ajustar), Center (Centrar), 5.- Puede repetir los pasos 3 y 4 cuantas veces quiera para tener una lista de imgenes disponibles en su ImageList. 3.3.19 USO DEL COMPONENTE LISTVIEW.
Este componente le da al usuario una manera de mostrar artculos del mismo tipo; como ejemplo, puede mostrar el grupo de imgenes que anteriormente guard usando el componente ImageList y presentndolas con este componente. Con los siguientes pasos podr utilizar este componente.
1.- Inicie un nuevo proyecto. 2.- Utilice los pasos anteriores para tener una lista de imgenes.
3.- De la paleta de componentes Win95 seleccione un objeto ListView y colquelo en su forma, Con el inspector de objetos modifique la propiedad SmallImages colocando en ella ImageList1, Tambin modifique la propiedad ViewStyle escogiendo de la lista disponible vsList. 4.- De la paleta de componentes Standard seleccione un objeto Panel y colquelo en su forma, con el inspector de objetos modifique la propiedad Align escogiendo de la lista disponible alBotton. 5.- Seleccione el objeto ListView y con el inspector de objetos haga doble clic en la propiedad Items para abrir la caja de dialogo Items Editor.
6.- oprima el botn New, y escriba el texto que quiera que acompae a la imagen guardada, oprima el numero de imagen a la se le asignar ese nombre. 7.- Repita los pasos 5 y 6 para cada una de las imgenes que halla almacenado.
FIG.
3.3.19.1
8.- Seleccione el objeto ListView y oprima las teclas Ctrl + C, para hacer una copia de este objeto. 9.- Haga clic en cualquier parte de la forma y oprima las teclas Ctrl + V para pegar la copia hecha al objeto ListView, Repita esta accin una vez mas de manera que tenga en su forma 3 objetos ListView; acomdelos a lo largo de la forma.
FIG.
3.3.19.2
10.- Seleccione el componente que se encuentra en la parte central y con el inspector de objetos modifique la propiedad ViewStyle por la opcin vsReport, en la propiedad columns haga doble clic para que aparezca el editor de columnas del componente ListView; oprima el botn New y escriba en la caja Caption la palabra Artculos, seleccione tambin el botn circular de nombre Header Widt, para colocar el ttulo en la parte superior de la caja; Oprima el botn Ok para cerrar esta caja de dialogo.
FIG.
3.3.19.3
11.- Seleccione el objeto ListView de la derecha y con el inspector de objetos modifique la propiedad ViewStyle por la opcin vsIcon, Tambin modifique la propiedad LargeImages y coloque en ella el texto ImageList1. 12.- Seleccione los tres componentes ListView oprimiendo la tecla Shift y haciendo clic en cada uno de ellos, con el inspector de objetos en la hoja de eventos haga doble clic en el evento OnChange y coloque el siguiente cdigo. Panel1->Caption = Item->Caption; 13.- Presione la tecla F9 para ejecutar su programa, obtendr un resultado parecido al siguiente:
FIG.
3.3.19.4
3.3.20
Este componente proporciona de una manera de tener mltiples hojas de trabajo y puede cambiar de hoja haciendo un simple clic en la cejilla de la hoja a la que se quiera accesar. Con los siguientes pasos podr ver un sencillo ejemplo del uso de PageControl.
2.- En la paleta de componentes Win95 seleccione un objeto PageControl ; al colocarlo en la forma lucir como un panel; con el inspector de objetos modifique la propiedad Align por la opcin alClient. 3.- Haga clic con el botn derecho del mouse y seleccione la opcin New Page y una cejilla con la leyenda TabSheet1 aparecer; con el inspector de objetos cambie la propiedad Caption por el texto Hoja 1, y repita la accin 2 veces. 4.- Seleccione la Hoja 1 y coloque en ella un objeto Label de la paleta de componentes Standard y colquelo en la hoja, cambie la propiedad Caption por el texto En la hoja 1. 5.- Coloque un Objeto Button de la paleta de componentes Standard en la hoja Cambie la porpiedad Caption por el texto Boton 1 ; haga doble clic en el botn e introduzca el siguiente cdigo: Label1->Caption = Ya se oprimi el botn en la primer hoja .;
FIG.
3.3.20.1
6.- Seleccione la Hoja 2 y coloque en ella un objeto Editl de la paleta de componentes Standard y colquelo en la hoja, cambie la propiedad text por el texto Lnea de copia. 7.- Coloque un Objeto Button de la paleta de componentes Standard en la hoja Cambie la porpiedad Caption por el texto Boton 2 ; haga doble clic en el botn e introduzca el siguiente cdigo: Edit1->Text = Label1->Caption;
FIG.
3.3.20.2
3.3.21
La mayora de la aplicaciones windows usan un estandar para abrir archivos, C++ Builder le ofrece una manera sencilla de apegarse a estos estandares. Con los siguientes pasos podr aadir una forma sencilla de abrir archivos. 1.- Seleccione un objeto Panel de la paleta de componentes Standard y elimine el texto que tiene en Caption para eliminar el titulo.
2.- Seleccione un objeto OpenDialog de la paleta de componentes Dialogs y colquelo en el panel, Modifique la propiedad DefaultExt a la opcin txt, en la propiedad Filter, ponga.
FIG.
3.3.21.1
3.- De la paleta de componentes Standard seleccione un objeto Memo y colquelo en la forma, modifique la propiedad Align y seleccione alClient. 4.- De la paleta de componentes Standard seleccione un objeto Button y colquelo en el panel, modifique la propiedad Caption poniendo el texto Abrir, en la hoja de eventos haga doble clic en el evento OnClick e introduzca el siguiente cdigo. if(OpenDialog1->Execute()) Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
FIG.
3.3.21.2
Aplicacin OpenDialog.
5.- Presione la tecla F9 para ejecutar su aplicacin, presione el botn abrir para ver la accin de este componente.
FIG.
3.3.21.3
FIG.
3.3.21.4
3.3.22
El componente SaveDialog casi siempre es el compaero del componente anterior, esto quiere decir que la mayor parte de las veces que se abra un archivo, se querrn guardar o salvar los cambios hechos en ese archivo. Con los siguientes pasos usted podr complementar el ejemplo anterior en el que se abre un archivo de texto; ahora, se podr guardar con otro nombre, con el mismo, en el mismo directorio, o en otro que se seleccione. 1.- De la paleta de componentes en la hoja Dialogs, seleccione el componente SaveDialog , colquelo en el panel del ejemplo anterior; usando el inspector de objetos cambie las propiedades de la siguiente forma:
Propiedad
DefaultExt
Filter Options ofOverwrite Prompt Title
2.- De la paleta de componentes Standard; seleccione un objeto Button, y colquelo en el panel, con el inspector de objetos cambie la propiedad Caption por el texto Grabar. En la hoja de eventos seleccione con doble clic el evento OnClick e introduzca el siguiente cdigo. If(SaveDialog->Execute()) Memo1->Lines->SaveToFile(SaveDialog1->Filename);
FIG.
3.3.22.1
3.- Presione F9 para ejecutar su programa; tendr el resultado anterior, podr abrir cualquier archivo de texto de cualquier directorio y adems podr grabar el archivo abierto con el mismo nombre, en el mismo directorio o con diferente nombre y en diferente directorio.
FIG.
3.3.22.1
3.3.23
Otro componente que vendr a enriquecer nuestras aplicacines es FontDialog, este componente da al usuario la facilidad de escoger entre las fuentes (Tipos de Letras) disponibles en su particular instalacin de Windows. Use los siguientes pasos para ver el uso de este componente. Abra una nueva aplicacin.
1.- De la paleta de componentes Dialogs, seleccione un objeto FontDialog, y colquelo en la forma, Cambie la propiedad Options haciendo doble clic en ella y cambiando a true las opciones fdApply y fdEffects, el la hoja de eventos haga doble clic en el evento OnApply e introduzca el siguiente cdigo: Panel1->Font = FontDialog->Font; 2.- De la paleta de componentes Standard, seleccione un objeto Panel, y colquelo en la forma, cambie la propiedad Caption por el texto Prueba de cambio de letra, modifique la propiedad Align por la opcion alTop. 3.- De la paleta de componentes Standard, seleccione un objeto Button, y colquelo en la forma, Cambie la propiedad Caption por el texto Tipo de letra y el la hoja de eventos, seleccione haciendo doble clic el evento OnClick e introduzca el siguiente cdigo: if(FontDialog1->Execute()) Panel1->Font = FontDialog1->Font; 4.- Presione la tecla F9 para ejecutar su aplicacin, que tendr los siguientes efectos:
FIG.
3.3.23.1
FIG.
3.3.23.2
FIG.
3.3.23.3
3.3.24
El uso de este componente le da visibilidad, presentacin y estilo a sus aplicaciones, ya que puede cambiar la caracterstica del color mediante este componente. El componente ColorDialog no tiene eventos, nicamente propiedades a modificar mediante el inspector de objetos. La propiedad Color tiene los colores principales. La propiedad Options tiene las siguientes subpropiedades. Subpropiedad CdFullOpen CdPreventFullOpen CdShowHelp Descripcin Da acceso a la paleta de colores extendida. Restringe el uso de colores a la paleta de colores actual. Aade un botn de ayuda al componente ColorDialog.
Pero con los siguientes pasos podr conocer su uso: 1.- Abra una nueva aplicacin. 2.- De la paleta de componentes standard seleccione un objeto Panel, un objeto Memo y un objeto Button colocndolos en la forma. 3.- Seleccione el objeto Memo; con el inspector de objetos cambie la propiedad ScrollBars a la opcin ssVertical.
4.- Seleccione de la paleta de componentes Dialogs un objeto ColorDialog y colquelo en la forma, con el inspector de objetos en la propiedad Options seleccione la surpopiedad cdFullOpen en true. 5.- Seleccione el objeto Panel y modifique la propiedad Align a la opcin alTop, y borre el titulo en la propiedad Caption. 6.- Seleccione el objeto Memo y modifique la propiedad Align a la opcin alTop. 7.- Seleccione el objeto Button cambiando la propiedad Caption al titulo Inicializar color, en la hoja de eventos haga doble clic en el evento OnClick, en el editor de cdigo introduzca el siguiente cdigo: if(ColorDialog1->Execute()) { Panel1->Color=ColorDialog1->Color; Memo1->Lines->Assign(ColorDialog1->CustomColors); } 8.- Presione la tecla F9 para ejecutar su programa. Ver que al escoger el botn inicializar color, podr seleccionar cualquier color y su codificacin hexadecimal se editar en el objeto Memo.
FIG.
3.3.24.1
FIG.
3.3.24.2
3.3.25
El componente PrintDialog, complementa todos los componentes vistos anteriormente, ya que despus de dejar la edicin con las caractersticas deseadas, podemos presentarlos en Papel. Veamos los siguientes pasos para conocer mejor su uso. 1.- Seleccione una nueva aplicacin. 2.-De la paleta de componentes Standard seleccione un objeto Panel y colquelo en la forma. 3.-De la paleta de componentes Additional seleccione un objeto SpeedButton y colquelo en la forma dos veces.
5.- De la paleta de componentes Dialogs seleccione un objeto PrintDialog colquelo en la forma. 6.- Seleccione un Botn acelerador haciendo doble clic e introduzca el siguiente cdigo. PrinterSetupDialog1->Execute();
7.- Seleccione el otro Botn acelerador haciendo doble clic e introduzca el siguiente cdigo: PrintDialog1->Execute();
FIG.
FIG.
3.3.26
Para explorar de una forma sencilla cualquier base de datos, podemos usar el DataBase Explorer, complete los siguientes pasos: 1.- En la barra de men principal en la seccin DataBase elija la opcin Explorer, obtendr una ventana como la siguiente:
FIG.
2.- Seleccione las bases de datos de ejemplo (BCDEMOS) y seleccione la tabla BIOLIFE.DB en la parte derecha del explorador, podr observar los detalles de dicha tabla.
FIG.
3.- Si algn campo es Memo o Grfico, se puede conocer su contenido haciendo doble clic en ese rengln.
FIG.
4.- Al hacer doble clic aparecer otra ventana con la informacin de ese campo.
FIG.
FIG.
3.3.27
C++ Builder viene equipado con una herramienta llamada Wizards, que facilita la creacin de bases de datos, y nos ahorra en la edicin de mascaras para la presentacin de ellos. Con los siguientes pasos podr conocer un poco de su uso, ya que se combina con otros componentes para hacerlos ms poderosos.
FIG.
3.3.27.1
3.- Seleccione el botn Next para continuar. 4.- Seleccione en el subdirectorio de Ejemplos llamada BIOLIFE.DB como lo muestra la figura.
FIG.
3.3.27.2
5.- Oprima el botn Next. 6.- Seleccione el botn >> para aadir todas los campos de la tabla a visualizacin.
FIG.
3.3.27.3
7.- Seleccione el botn Next, y luego otra vez Next. 8.- Seleccione el botn Finish. 9.- Del men principal elija Project clic en el botn Ok. Remove From Project y seleccione Form1 y haga
10.- Presione F9 para ejecutar la aplicacin. Se ha creado la primera aplicacin de Bases de Datos.
FIG.
3.3.27.4
3.3.28
Este componente se encuentra en la hoja Data Access de la paleta de componentes. El componente Tabla representa una simple tabla de datos con la que podr visualizar los campos de la base de datos seleccionada. Con los siguientes pasos puede ver la forma en que se maneja el componente tabla. 1.- Abra una nueva aplicacin.
2.- De la hoja de componentes Data Access seleccione el componente Table y colquelo en la forma, con el inspector de objetos modifique la propiedad DatabaseName y coloque en ella el valor BCDEMOS, la propiedad TableName modifiquela por el valor CUSTOMER.DB y la propiedad Active modifiquela a true, para activar la tabla seleccionada, mientras este valor se encuentre en fase, la tabla estar desactivada. 3.- De la hoja de componentes Standard seleccione el componente Memo y colquelo en la forma. 4.- De la hoja de componentes Standard seleccione el componente Button y colquelo en la forma con tres copias mas, alineandolos en la parte superior de su forma, modifique con el ispector de objetos la propiedad Caption de la siguiente manera.
FIG. 3.3.28.1
Acomodo de componentes.
5.- Haga doble clic en el botn |< e introduzca el siguiente cdigo: Table1->First(); LoadMemo(); 6.- Haga doble clic en el botn < e introduzca el siguiente cdigo: Table1->Prior(); if(Table1->Bof) ShowMessage("Es el inicio de la tabla "); LoadMemo(); 7.- Haga doble clic en el botn > e introduzca el siguiente cdigo: Table1->Next(); if(Table1->Eof) ShowMessage("Final de la tabla "); LoadMemo(); 8.- Haga doble clic en el botn > e introduzca el siguiente cdigo: Table1->Last(); LoadMemo(); 9.- Al final en el editor de cdigo anexe la funcin siguiete: void TForm1::LoadMemo() { Memo1->Clear(); for(int i=0;i<Table1->FieldCount-1;i++) Memo1->Lines->Add(Table1->Fields[i]->FieldName + " : " + Table1->Fields[i]>Text); }
10.- Con el botn derecho del Mouse haga clic en el editor de cdigo y seleccione la opcin Open Source/Header File y anexe la siguiente lnea en posicin. private: // User declarations void LoadMemo(); public: // User declarations 11.- Presione F9 para correr su programa y obtendr el siguiente resultado:
FIG.
3.3.28.2
3.3.29
El componente DataSource es un componente no visual, la funcin que realiza es enlazar la base de datos a los objetos visuales. El componente DBGrid nos proporciona de una poderosa herramienta para capturar y observar los datos de una tabla, veamos como funciona. 1.- Cree una nueva aplicacin.
2.- De la hoja de componentes Data Access seleccione el componente Table y colquelo en la forma, con el inspector de objetos modifique la propiedad DatabaseName y coloque en ella el valor BCDEMOS, la propiedad TableName modifquela por el valor CUSTOMER.DB y la propiedad Active modifquela a true, para activar la tabla seleccionada, mientras este valor se encuentre en fase, la tabla estar desactivada.
3.- De la hoja de componentes Data Access seleccione el componente DataSource y colquelo en la forma, con el inspector de objetos modifique la propiedad DataSet colocando en ella Tabla1.
4.- De la hoja de componentes Data Controls seleccione el componente DBGrid y colquelo en la forma, modifique la propiedad DataSource a la opcin DataSource1, si la propiedad Auto Edit esta en true podr editar los datos de la tabla.
5.- De la hoja de componentes Data Access seleccione el componente DataSource y colquelo en la forma, con el inspector de objetos modifique la propiedad DataSet colocando en ella Tabla1. 6.- Presione F9 para ejecutar su programa.
FIG.
3.3.28.1
Si usted quisiera solamente visualizar algunas columnas de datos y ocultar las dems, Puede utilizar los siguientes pasos: 1.- Seleccione el componente DBGrid que ya tiene en su forma y en la propiedad Columns haga doble clic y aparecer una caja de dialogo como la siguiente:
FIG.
3.3.28.2
2.- Seleccione el botn Add All Fields para tener todos los campos de la tabla seleccionada. 3.- Con los campos en la ventana de edicin puede borrar los campos que no desea que sean mostrados, y al finalizar de borrarlos de la edicin; seleccione el botn Ok. 4.- Presione F9 y vea sus datos seleccionados.
FIG.
3.3.28.3
3.3.30
El componente DBText es utilizado como un campo variante, que puede tomar los valores de un campo de la tabla que se active, para conectar este objeto a la tabla deseada solo se tiene que poner en la propiedad DataSource cual es la tabla que se le asociar. 1.- Cree una nueva aplicacin.
2.- De la hoja de componentes Data Access seleccione el componente Table y colquelo en la forma, con el inspector de objetos modifique la propiedad DatabaseName y coloque en ella el valor BCDEMOS, la propiedad TableName modifquela por el valor CUSTOMER.DB y la propiedad Active modifquela a true, para activar la tabla seleccionada, mientras este valor se encuentre en fase, la tabla estar desactivada.
3.- De la hoja de componentes Data Access seleccione el componente DataSource y colquelo en la forma, con el inspector de objetos modifique la propiedad DataSet colocando en ella Tabla1.
4.- De la hoja de componentes Data Controls seleccione el componente DBGrid y colquelo en la forma, modifique la propiedad DataSource a la opcin DataSource1, si la propiedad Auto Edit esta en true podr editar los datos de la tabla.
5.- De la hoja de componentes Data Controls seleccione el componente DBText y colquelo en la forma, y modifique la propiedad DataSource a la opcin DataSource1, y seleccione cual es el nombre del campo que quiere que se muestre en el componente DBText (Como por ejemplo Addr1).
FIG.
3.3.29.1
6.- Presione F9 para ejecutar su programa y cada vez que recorra un campo de la tabla aparecer la direccin del campo activo.
FIG.
3.3.29.2
3.3.31
El uso de este componente es igual que el componente Edit de la paleta de componentes Standard, pero con la ventaja de poderla asociar a una tabla de base de datos. Al ejercicio anterior anxele los siguientes pasos:
1.- De la hoja de componentes Data Controls seleccione un objeto DBEdit y colquelo en la forma, con el inspector de objetos modifique la propiedad DataSource al valor DataSource1, y en la propiedad DataField seleccione otro campo que quiera ser visualizado al igual que en DBText. 2.- Presione F9 para ver el resultado de la aplicacin.
FIG.
3.3.30.1
3.3.32
Como el componente DBEdit no puede presentar mas de una lnea a la vez, se provee de este campo DBMemo, para presentar campos que contengan ms de una lnea. El campo DBImage presenta la imagen almacenada en un campo de la base de datos. Para ver el uso de este componente siga las instrucciones: 1.- Seleccione Nueva Aplicacin.
2.- De la hoja de componentes Data Access seleccione el componente Table y colquelo en la forma, con el inspector de objetos modifique la propiedad DatabaseName y coloque en ella el valor BCDEMOS, la propiedad TableName modifquela por el valor BIOLIFE.DB y la propiedad Active modifquela a true, para activar la tabla seleccionada, mientras este valor se encuentre en fase, la tabla estar desactivada.
3.- De la hoja de componentes Data Access seleccione el componente DataSource y colquelo en la forma, con el inspector de objetos modifique la propiedad DataSet colocando en ella Tabla1.
4.- De la hoja de componentes Data Controls seleccione el componente DBGrid y colquelo en la forma, modifique la propiedad DataSource a la opcin DataSource1, si la propiedad Auto Edit esta en true podr editar los datos de la tabla.
5.- De la hoja de componentes Data Controls seleccione el componente DBMemo y colquelo en la forma, modifique la propiedad DataSource a la opcin DataSource1, y la propiedad DataField en la opcin Notes.
6.- De la hoja de componentes Data Controls seleccione el componente DBImage y colquelo en la forma, modifique la propiedad DataSource a la opcin DataSource1, y la propiedad DataField en la opcin Image. 7.- Presione la tecla F9 para observar los resultados.
FIG.
3.3.31.1
3.3.33
se usan tablas para navegar a travs de los registros de la base de datos, el componente DBNavigator le proporciona una forma de controlar y editar los campos por medio de botones, vea el siguiente ejemplo para conocer su funcionamiento. Utilice el programa anterior y anexe los siguientes pasos: 1.- De la hoja de Componentes Data Controls seleccione un objeto DBNavigetor y colquelo en la forma, en la propiedad DataSource seleccione la opcin DataSource1, y la propiedad ShowHint a true.
FIG.
3.3.32.1
3.3.34
El componente Query, sirve para filtrar datos segn el valor que se desee de algn campo. Siga el ejemplo para ver su uso.
2.- En la paleta de componentes Data Access seleccione el objeto Query y colquelo en la forma, en la propiedad DataBaseName seleccione BCDEMOS, haga doble clic en la porpiedad SQL para que introduzca el siguiente cdigo en editor de lneas: SELECT * FROM EVENTS WHERE VENUENO = 5; Y haga clic en el botn Ok. Modifique la propiedad Active a true.
3.- En la paleta de componentes Data Access seleccione el objeto DataSource colquelo en la forma, en la propiedad DataSet elija la opcin Query1.
4.- En la paleta de componentes Data Controls seleccione el objeto DBGrid y colquelo en la forma, en la propiedad DataSource elija la opcin DataSource1 y la propiedad Align en alBottom. 5.- Presione F9 para observar el resultado.
FIG.
3.3.33.1
La idea para la utilizacin del resto de los componentes es la misma, se han presentado solo algunos de los ms comunes en la programacin.
Captulo IV
Propiedad a) La propiedad Caption b) La propiedad ClientHeight c) La propiedad ClientWidth d) La propiedad Color e) La propiedad Icon f) La propiedad Left g) La propiedad Top
FIG.
4.1.1
3.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 4.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Valor o Texto Se elimina, ya que no se usar. 265 553 clBtnFace 208 144
5.- De la paleta de componentes Standard seleccione un objeto Button el Panel. 6.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
y colquelo en
7.- De la paleta de componentes Standard seleccione un objeto Memo el Panel. 8.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
y colquelo en
FIG. 4.1.2
Editor de Lneas
En el se teclear el siguiente Texto. INDICACIONES a).- Con el botn izquierdo del mouse selecciona en el sistema coordenado cartesiano, un punto, al seleccionarlo, obtendrs las coordenadas del punto que elegiste. b).- Puedes elegir una infinidad de puntos. c).- En el momento en que lo desees, puedes limpiar tu ventana o salir del modulo de puntos en el Sistema Coordenado Cartesiano, por medio del men de opciones que se encuentra en la parte superior izquierda de tu pantalla. 9.- Selecciona el botn Ok para cerrar la ventana de dialogo.
10.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 11.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
12.- De la paleta de componentes Additional seleccione un objeto Image en el Panel2. 13.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left f) La propiedad Top e) La propiedad Stretch f) La propiedad Picture
y colquelo
Presione el botn Load y obtendr una caja de dialogo para seleccionar el icono deseado o podr buscarlo en caso de no encontrarse en el directorio mostrado.
Oprima el botn Ok. 14.- De la paleta de componentes Standard seleccione un objeto Button en el Panel2. 15.- Modifiquemos los siguientes atributos: y colquelo
Propiedad
Valor o Texto
&Continuar Panel2->Visible=false;
16.- De la paleta de componentes Standard seleccione un Label Panel2 con otras dos copias. 17.- Modifiquemos los siguientes atributos: Label1. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size Label2. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
y colquelo en el
Valor o Texto JUAN CARLOS CRUZ VEGA 13 167 clGray 16 144 Bold Italic 9
Label3. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left
18.- De la paleta de componentes Standard seleccione un objeto Main Menu colquelo en la forma. 19.- haga doble clic en este componente y obtendr el diseador de menus: 20.- Con el inspector de objetos cambie las propiedades:
21.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo.
FIG.
4.1.6
Diseador de mens.
FIG.
4.1.7
23.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo. Componente Opcin &Limpiar; Evento OnClick Opcin &Salir; Evento OnClick Cdigo Invalidate();
Close(); Exit(1);
FIG.
4.1.8
25.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo. Componente Opcin &Uso; Evento OnClick Opcin a&Cerca de Evento OnClick Cdigo Panel1->Visible=true; Invalidate(); Panel2->Visible=true;
26.- Seleccione la forma haciendo un clic en ella, con el inspector de objetos en la hoja de eventos haga doble clic en el evento que se marca e introduzca el cdigo asociado.
Componente Form1
Cdigo Canvas->MoveTo(X,Y); Canvas->Pen->Color=clAqua; Canvas->Ellipse(X,Y,X,Y); Canvas->Ellipse(X,Y,X+1,Y+1); Canvas->Ellipse(X,Y,X+2,Y+2); Canvas->Ellipse(X,Y,X+3,Y+3); Canvas->Ellipse(X,Y,X+4,Y+4); old_x=X; old_y=Y; Pinta_Coordenada(old_x,old_y);
Accin Se selecciona un punto en la pantalla y se remarca de manera que no se vea un solo pixel, sino un grupo de pixeles.
Se hace una llamada a la funcin que pintar los valores numricos de la coordenada.
Evento OnMouseMove
Float X1,Y1; Se obtienen los valores de la X1=(float(X-(ClientWidth/2))/30.0); posicin del mouse mientras este Y1=(float((ClientHeight/2)-Y)/30.0); se esta moviendo. Sprintf(text," ",X1,Y1); Se realizan los clculos en base Canvas->TextOut(5,5,text); al valor en pixeles de la pantalla Canvas->TextOut(0,0,text); visual en la que se esta Canvas->TextOut(5,10,text); trabajando, se cambia de valor Canvas->Font->Color=clAqua; de pixeles a valor de unidades de Sprintf(text,"X= %2.1f Y= %2.1f medida. ",X1,Y1); Canvas->TextOut(5,5,text); Canvas->Font->Color=clWhite; Los valores obtenidos en las operaciones anteriores son desplegados en la pantalla visual. Ejes(); Se realiza una llamada a la funcin que marca las graduaciones de las coordenadas.
FIG.
4.1.9
Pero aun falta por anexar a nuestro mdulo para que funcione como lo planeamos, por lo que lo complementaremos con lo siguiente: Nota: La elaboracin y detalles del Hipertexto asociado a cada mdulo se presentar mas adelante en este captulo.
27.- Seleccione el editor de cdigo y al final de la funciones ya capturadas introduzca las siguientes funciones con las que complementar el modulo de programa.
//---------------------------------------------------------------------------------------------------------//Funcin: Ejes(); //Parmetros: Ninguno. //Objetivo: Pintar los ejes coordenados y sus graduaciones en la ventana visual. //---------------------------------------------------------------------------------------------------------void __fastcall TForm1::Ejes() { int i,j,k; int Ex=30; Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clSilver; LINEA(ClientWidth/2,0,ClientWidth/2,ClientHeight); LINEA(0,ClientHeight/2,ClientWidth,ClientHeight/2); k=0; for(i=1,j=0;i<=13,j<17;i++,j++) { LINEA((ClientWidth/2)+1,(ClientHeight/2)+k,(ClientWidth/2)+5,(ClientHeight/2)+k); LINEA((ClientWidth/2)+1,(ClientHeight/2)-k,(ClientWidth/2)+5,(ClientHeight/2)-k); LINEA((ClientWidth/2)+k,(ClientHeight/2)+1,(ClientWidth/2)+k,(ClientHeight/2)+5); LINEA((ClientWidth/2)-k,(ClientHeight/2)+1,(ClientWidth/2)-k,(ClientHeight/2)+5); Canvas->Font->Size=7; Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clWhite; Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)-30)-k,i); Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)+30)+k,-i); // Numeracin en Y Canvas->TextOut((ClientWidth/2)+k,(ClientHeight/2)+5,j); // Numeracin en X Canvas->TextOut((ClientWidth/2)-k,(ClientHeight/2)+5,-j); k+=Ex; } for(i=2;i<ClientWidth;i+=30) for(j=0;j<ClientHeight;j+=30) { Canvas->Pen->Color=clTeal; LINEA(i,j,i,j); LINEA(i,j,i+1,j+1); LINEA(i,j,i-1,j-1); } } //----------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------//Funcin: Pinta_Coordenada(ina A, int B); //Parmetros: (int A, int B) Valor en pixeles de la direccin en que se marc el punto. //Objetivo: Pintar los valores numricos de la coordenada en la ventana visual. //---------------------------------------------------------------------------------------------------------void __fastcall TForm1::Pinta_Coordenada(int A,int B) { int W=15; float X1,Y1; X1=(float(A-(ClientWidth/2))/30.0); Y1=(float((ClientHeight/2)-B)/30.0); Canvas->Pen->Style=psDashDot;//InsideFrame;// Canvas->Pen->Color=clFuchsia; LINEA(A,B,A,(ClientHeight/2)); LINEA(A,B,(ClientWidth/2),B); Canvas->Pen->Color=clWhite; sprintf(text,"(%.1f ,%.1f )",X1,Y1); sign =(B>(ClientHeight/2)+1 ? 1 : -1 ); Canvas->TextOut(A+(W*sign),B+(W*sign),text); } /*--------------------------------------------------------------------------------------------------------LINEA(int P1,int P2,int P3,int P4); Funcin: (int P1,int P2,int P3,int P4) Parmetros: Valor en pixeles de la direccin en que se marc el punto. Pintar un pixel o una serie de ellos en la ventana visual segn los Objetivo: parmetros recibidos. --------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::LINEA(int P1,int P2,int P3,int P4) { Canvas->MoveTo(P1,P2); Canvas->LineTo(P3,P4); } //-----------------------------------------------------------------------------28.- Seleccione el editor de cdigo con el botn derecho del mouse para obtener el men de utilidades, seleccione la opcin Open Source/Header File para obtener la hoja *.h de nuestra aplicacin, en ella anexaremos las lneas siguientes: private: // User declarations void __fastcall Ejes(); void __fastcall Pinta_Coordenada(int X,int Y); void __fastcall LINEA(int P1,int P2,int P3,int P4); char text[70]; int old_x,old_y,sign; public: // User declarations
29.- Seleccione File Save Project As y obtendr una ventana de dialogo en la que podr darle nombre a la aplicacin.
FIG.
4.1.10
FIG.
4.1.11
En esta parte se almacenan los mdulos .mak, .cpp del project manager, y .res 30.- Ahora puede presionar la tecla de funcin F9 para ejecutar la aplicacin.
FIG.
4.1.12
FIG.
4.1.13
&Salir
Propiedad a) La propiedad Caption b) La propiedad ClientHeight c) La propiedad ClientWidth d) La propiedad Color e) La propiedad Icon
0 0
FIG.
4.2.1
3.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 4.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
5.- De la paleta de componentes Standard seleccione un objeto Button el Panel. 6.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
7.- De la paleta de componentes Standard seleccione un objeto Memo el panel. 8.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
Aparecer el editor de Lneas, en el se teclear el siguiente Texto. Distancia Con el botn izquierdo del mouse puedes seleccionar arbitrariamente dos puntos. de los cuales se calcular su distancia siguiendo la frmula d = Raiz Cuadrada [ (Y2 - Y1)2 + (X2 - X1) 2 ] Podrs trazar el nmero de rectas que desees.
FIG.
4.2.2
10.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 11.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
12.- De la paleta de componentes Additional seleccione un objeto Image en el Panel2. 13.- Modificamos sus propiedades de la siguiente manera:
y colquelo
Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left f) La propiedad Top e) La propiedad Stretch f) La propiedad Picture
Presione el botn Load y obtendr una caja de dialogo para seleccionar el icono deseado o podr buscarlo en caso de no encontrarse en el directorio mostrado.
Oprima el botn Ok. 14.- De la paleta de componentes Standard seleccione un objeto Button en el Panel2. 15.- Modifiquemos los siguientes atributos: y colquelo
16.- De la paleta de componentes Standard seleccione un Label Panel2 con otras dos copias. 17.- Modifiquemos los siguientes atributos: Label1. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style
y colquelo en el
h) La propiedad Font Size Label2. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
10
Valor o Texto
Label3. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
Valor o Texto JUAN CARLOS CRUZ VEGA 11 128 clTeal 24 120 Bold Italic 7
18.- De la paleta de componentes Standard seleccione un objeto Main Menu colquelo en la forma. 19.- haga doble clic en este componente y obtendr el diseador de mens: 20.- Con el inspector de objetos cambie las propiedades:
21.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo.
FIG.
4.2.6
Diseador de mens.
FIG.
4.2.7
23.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo. Componente Opcin &Limpiar; Evento OnClick Opcin &Salir; Evento OnClick Cdigo Invalidate();
Close(); Exit(1);
FIG.
4.2.8
25.- Seleccione la forma haciendo un clic en ella, con el inspector de objetos en la hoja de eventos haga doble clic en el evento que se marca e introduzca el cdigo asociado.
Componente Form1
Accin Se realiza una llamada a una funcin que obtiene los puntos seleccionados para el clculo de la distancia. Me aseguro que las ventanas de mensaje creadas no estn visibles en este momento.
Evento OnMouseDown Form1 Float X1,Y1; X1=(float(X-(ClientWidth/2))/30.0); Y1=(float((ClientHeight/2)-Y)/30.0); Sprintf(text," ",X1,Y1); Canvas->TextOut(ClientWidth130,ClientHeight-40,text); Canvas->TextOut(ClientWidth130,ClientHeight-50,text); Canvas->TextOut(ClientWidth130,ClientHeight-60,text); Canvas->Font->Color=clAqua; Canvas->Font->Size=12; Sprintf(text,"X= %2.1f Y= %2.1f
Se obtienen los valores de la posicin del mouse mientras este se esta moviendo por la pantalla. Se realizan los clculos en base al valor en pixeles de la pantalla visual en la que se esta trabajando, se cambia de valor de pixeles a valor de unidades de medida.
Evento OnMouseMove
las son
",X1,Y1); Canvas->TextOut(ClientWidth150,ClientHeight-50,text); Canvas->Font->Color=clWhite; Form1 Evento OnPaint Invalidate(); Form1 Evento OnReSize Borra lo que se tena para el ajuste de tamao. Ejes(); Se redibujan graduaciones. los ejes y sus
FIG.
4.2.9
26.- Seleccione el editor de cdigo y al final de la funciones ya capturadas introduzca las funciones con las que complementar el modulo de programa, segn el Apndice b.
27.- Seleccione File Save Project As y obtendr una ventana de dialogo en la que podr darle nombre a la aplicacin.
FIG.
4.2.10
FIG.
4.2.11
En esta parte se almacenan los mdulos .mak, .cpp del project manager, y .res 28.- Ahora puede presionar la tecla de funcin F9 para ejecutar la aplicacin.
FIG.
4.2.12
FIG.
4.2.13
FIG.
4.2.14
Estrategia:
Para la elaboracin del tercer mdulo se disea una mscara que presenta: 1.2.3.4.Una ventana de dilogo que tenga las instrucciones de manejo del programa. Una ventana de dilogo que contenga informacin del modulo. Una ventana de dilogo que contenga aviso de Pendiente Indeterminada. Un men de opciones que contenga: a) Un Campo Opciones. &Salir Para finalizar el programa. &Limpiar Para limpiar la ventana de trabajo. b) Un Campo &Ayuda Informacin sobre el uso del mdulo. c) Un campo &Acerca de Informacin de la elaboracin del mdulo. d) Un Campo Base Terica. Hipertexto de lo esencial del tema. Diseo: La construccin del mdulo se realiz mediante los siguientes pasos: 1.- Seleccionamos del men principal File inicializar.
2.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad ClientHeight
c) La propiedad ClientWidth d) La propiedad Color e) La propiedad Icon f) La propiedad Left g) La propiedad Top
3.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 4.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
Valor o Texto Se elimina, ya que no se usar. 273 417 clBtnFace 248 158
5.- De la paleta de componentes Standard seleccione un objeto Button el Panel. 6.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
y colquelo en
8.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
Aparecer el editor de Lneas, en el se teclear el siguiente Texto. Distancia Con el botn izquierdo del mouse, puedes seleccionar arbitrariamente dos puntos de los cuales se calcular su distancia siguiendo la frmula : d = Raiz Cuadrada [ (Y2 - Y1)^2 + (X2 - X1)^2 ] Paralelamente se calcular la Pendiente o ngulo de inclinacin de la recta segn la formula: Y2 - Y1 m= ---------------------------X2 - X1 Puedes seleccionar varias rectas.
FIG.
4.3.1
10.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 11.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
Valor o Texto Se elimina, ya que no se usar. 233 369 clBtnFace 256 192
12.- De la paleta de componentes Standard seleccione un objeto Button en el Panel2. 13.- Modificamos sus propiedades de la siguiente manera:
y colquelo
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
14.- De la paleta de componentes Standard seleccione un objeto Memo en elPanel2. 15.- Modificamos sus propiedades de la siguiente manera:
y colquelo
Propiedad
Valor o Texto
a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
Aparecer el editor de Lneas, en el se teclear el siguiente Texto. Pendiente Indeterminada. Cuendo la lnea recta hace una paralela con la vertical los valores de las x para ambos puntos son iguales, y al hacer la resta queda cero; por lo tanto la frmula para la pendiente quedara de la siguiente manera: Y2 - Y1 m = -------------------------------0 Por lo que el valor de la pendiente es: INDETERMINADO.
FIG.
4.3.2
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
19.- De la paleta de componentes Additional seleccione un objeto Image en el Panel3. 20.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left f) La propiedad Top e) La propiedad Stretch f) La propiedad Picture
y colquelo
Presione el botn Load y obtendr una caja de dialogo para seleccionar el icono deseado o podr buscarlo en caso de no encontrarse en el directorio mostrado.
Oprima el botn Ok. 21.- De la paleta de componentes Standard seleccione un objeto Button en el Panel3. 22.- Modifiquemos los siguientes atributos: y colquelo
23.- De la paleta de componentes Standard seleccione un Label Panel3 con otras dos copias.
y colquelo en el
24.- Modifiquemos los siguientes atributos: Label1. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size Label2. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
Label3. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
Valor o Texto JUAN CARLOS CRUZ VEGA 11 128 clTeal 8 128 Bold Italic 7 y colquelo en
27.- De la paleta de componentes Standard seleccione un objeto Main Menu colquelo en la forma. 28.- Haga doble clic en este componente y obtendr el diseador de mens: 29.- Con el inspector de objetos cambie las propiedades:
Valor o Texto &Opciones &Ayuda A&Cerca de &Base terica + Enter + Enter + Enter + Enter
30.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo.
FIG.
4.3.6
Diseador de mens.
31.- En el sub men Opciones anexar 2 campos mas. Propiedad a) La propiedad Caption a) La propiedad Caption
FIG.
4.3.7
32.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo. Componente Opcin &Limpiar; Evento OnClick Opcin &Salir; Cdigo Invalidate();
Close(); Exit(1);
Evento OnClick
33.- En el sub men Ayuda colocar el siguiente cdigo en el evento OnClick: Propiedad a) Evento OnClick Valor o Texto Panel1->Visible=true;
34.- En el Sub men aCerca de colocar el siguiente cdigo en el evento OnClick: Propiedad a) Evento OnClick Valor o Texto Panel2->Visible=true;
35.- Seleccione la forma haciendo un clic en ella, con el inspector de objetos en la hoja de eventos haga doble clic en el evento que se marca e introduzca el cdigo asociado. Componente Form1 Cdigo Obten_Puntos(X,Y); Accin Se realiza una llamada a una funcin que obtiene los puntos seleccionados para el clculo de la distancia.
Evento OnMouseDown Form1 Float X1,Y1; X1=(float(X-(ClientWidth/2))/30.0); Y1=(float((ClientHeight/2)-Y)/30.0); Sprintf(text," ",X1,Y1); Canvas->TextOut(820,5,text); Canvas->TextOut(820,10,text); Canvas->TextOut(820,15,text); Canvas->Font->Size=12; Canvas->Font->Color=clRed; Sprintf(text,"X= %2.1f Y= %2.1f ",X1,Y1); Canvas->TextOut(820,10,text); Canvas->Font->Color=clWhite; Ejes();
Se obtienen los valores de la posicin del mouse mientras este se esta moviendo por la pantalla. Se realizan los clculos en base al valor en pixeles de la pantalla visual en la que se esta trabajando, se cambia de valor de pixeles a valor de unidades de medida.
Evento OnMouseMove
las son
Form1
Se rredibujan graduaciones.
los
ejes
sus
Evento OnPaint Invalidate(); Form1 Evento OnReSize Borra lo que se tenia para el ajuste de tamao.
FIG.
4.3.8
Nota: Los pasos 21 al 25 de la seccin anterior podran estar en un archivo de cabecera ya que son similares en estos dos casos, pero existen pequeas diferencias que se hicieron a propsito para que se construyan totalmente y se practique, posteriormente para efectos de espacio en almacenamiento y rapidez, se pueden integrar en un archivo de cabecera como una librera. 36.- Seleccione el editor de cdigo y al final de la funciones ya capturadas introduzca las funciones con las que complementar el modulo de programa, segn el Apndice b.
FIG.
4.3.9
Estrategia:
Parecer que este mdulo est de ms, ya que en el mdulo anterior se contempl el estudio de la pendiente, pero particularmente, ste implementa acciones sobre la lnea recta como son la rotacin o traslacin de un segmento fijo a otra posicin cualesquiera en la ventana visual. Para la elaboracin del cuarto mdulo se disea una mscara que presenta: 1.2.3.4.5.Una ventana de dilogo que tenga las instrucciones de manejo del programa. Una ventana de dilogo que contenga informacin del modulo. Una ventana de dilogo que contenga aviso de Pendiente Indeterminada. Una ventana de ayuda de las acciones permitidas. Un men de opciones que contenga: a) Un Campo &Opciones. &Limpiar Para limpiar la ventana de trabajo. b) Un Campo &Accin &Rotar Eventos que se realizan para rotar un punto. &Trasladar Eventos que se realizan para trasladar un punto. c) Un campo A&yuda &Uso Instrucciones Iniciales de uso. &Acerca de Informacin de la elaboracin del mdulo. d) Un Campo Base Terica. Hipertexto de lo esencial del tema. Diseo: La construccin del mdulo se realiz mediante los siguientes pasos:
&Salir
2.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad ClientHeight c) La propiedad ClientWidth d) La propiedad Color e) La propiedad Icon f) La propiedad Left g) La propiedad Top
3.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 4.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
Valor o Texto Se elimina, ya que no se usar. 211 425 clGray 248 158 y colquelo en
5.- De la paleta de componentes Standard seleccione un objeto Button el Panel. 6.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
Panel1->Visible=false;
7.- De la paleta de componentes Standard seleccione un objeto Memo elPanel. 8.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
Aparecer el editor de Lneas, en el se teclear el siguiente Texto. Pendiente. Con el botn izquierdo del mouse, puedes seleccionar arbitrariamente dos puntos de los cuales se calcular Pendiente o ngulo de inclinacin de la recta segn la formula: Y2 - Y1 m= ---------------------------X2 - X1
FIG.
4.4.1
10.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 11.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Align d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
12.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 13.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
14.- De la paleta de componentes Standard seleccione un objeto Button en el Panel3. 15.- Modificamos sus propiedades de la siguiente manera:
y colquelo
424 16
Haga doble clic en el botn Aceptar e introduzca el siguiente cdigo. Panel3->Visible=false; 16.- De la paleta de componentes Standard seleccione un objeto Memo en elPanel3. 17.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
y colquelo
por lo tanto la frmula para la pendiente quedara de la siguiente manera: Y2 - Y1 m = -------------------------------0 Por lo que el valor de la pendiente es: INDETERMINADO.
FIG.
4.4.2
19.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 20.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Valor o Texto Se elimina, ya que no se usar. 177 145 clTeal 736 144
21.- De la paleta de componentes Additional seleccione un objeto Image en el Panel4. 22.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left
y colquelo
Valor o Texto 73 57 48
Presione el botn Load y obtendr una caja de dialogo para seleccionar el icono deseado o podr buscarlo en caso de no encontrarse en el directorio mostrado.
Oprima el botn Ok. 23.- De la paleta de componentes Standard seleccione un objeto Button en el Panel4. y colquelo
25.- De la paleta de componentes Standard seleccione un Label Panel4 con otras dos copias. 26.- Modifiquemos los siguientes atributos: Label1. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style
y colquelo en el
h) La propiedad Font Size Label2. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
10
Valor o Texto
Label3. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
Valor o Texto JUAN CARLOS CRUZ VEGA 11 128 clTeal 8 128 Bold Italic 7 y colquelo en
27.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 28.- Modificamos sus propiedades de la siguiente manera:
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Left d) La propiedad Top f) La propiedad Color
29.- De la paleta de componentes Standard seleccione un objeto Button en el Panel5. 30.- Modificamos sus propiedades de la siguiente manera:
y colquelo
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
y colquelo
Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
lo sujetes podr s trasladar o mover la recta a la posicin que tu desees. Para soltar la recta, tendr s que hacer doble click con el boton izquierdo del mouse.
FIG.
4.4.6
33.- Selecciona el botn Ok para cerrar la ventana de dialogo. 34.- De la paleta de componentes Standard seleccione un objeto Main Menu colquelo en la forma. 35.- Haga doble clic en este componente y obtendr el diseador de menus: 36.- Con el inspector de objetos cambie las propiedades: y
Valor o Texto &Opciones &Ayuda A&Cerca de &Base terica + Enter + Enter + Enter + Enter
37.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo. Componente Opcin &Base Terica; Cdigo Application->HelpCommand(HELP_CONTENTS,0); Invalidate();
Propiedad
Valor o Texto
&Limpiar a) La propiedad Caption &Salir a) La propiedad Caption 39.- En el sub men Accin anexar 2 campos mas. Valor o Texto Propiedad &Rotar a) La propiedad Caption &Trasladar a) La propiedad Caption 40.- En el sub men Ayuda colocar el siguiente cdigo en el evento OnClick: Propiedad a) Evento OnClick
41.- En el Sub men aCerca de colocar el siguiente cdigo en el evento OnClick: Propiedad a) Evento OnClick
42.- Seleccione la forma haciendo un clic en ella, con el inspector de objetos en la hoja de eventos haga doble clic en el evento que se marca e introduzca el cdigo asociado.
Componente Form1
Accin Guarda la posicin de los puntos que se fijaron en el eje coordenado, la variables t y e guardan la posicin del primer y segundo punto por si ese se selecciona para trasladar o rotar
Evento OnMouseDown Form1 float t1,t2; t1=(float(X-(ClientWidth/2))/30.0); t2=(float((ClientHeight/2)-Y)/30.0); sprintf(text," ",X1,Y1); Canvas->TextOut(120,660,text); Canvas->TextOut(120,665,text); Canvas->TextOut(120,670,text); Canvas->Font->Size=12; Evento Canvas->Font->Color=clAqua; Y= %2.1f OnMouseMove Sprintf(text,"X= %2.1f ",t1,t2); Canvas->TextOut(120,665,text); Canvas->Font->Color=clWhite; if(Tag>=1){ Xf=X; Yf=Y; If(w==true) { Mueve(Xf,Yf); } if(ee==true) { Traslada(Xf,Yf); } } } Evento z=true; OnDblClick e=t=n=s=nn=ss=false; Form1 Ejes(); Evento OnPaint Invalidate(); Form1 Evento OnReSize
Calcla e imprime en la pantalla la posicin en el eje coordenado por el cual se est desplazando el mouse. Guarda las posiciones de los puntos puestos en el sistema coordenado para las acciones de rotacin y traslacin.
Se redibujan graduaciones.
los
ejes
sus
FIG.
4.4.7
44.- Seleccione el editor de cdigo y al final de la funciones ya capturadas introduzca las funciones con las que complementar el modulo de programa, segn el Apndice b. 45.- Seleccione File Save Project As Para almacenar al archivo en disco.
FIG.
4.4.8
&Salir
2.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad ClientHeight c) La propiedad ClientWidth d) La propiedad Color e) La propiedad Icon f) La propiedad Left g) La propiedad Top
3.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 4.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
5.- De la paleta de componentes Standard seleccione un objeto Button el Panel. 6.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
y colquelo en
7.- De la paleta de componentes Standard seleccione un objeto Memo el Panel. 8.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Aparecer el editor de Lneas, en el se teclear el siguiente Texto. Pendiente Indeterminada. Cuando la lnea recta hace una paralela con la vertical los valores de las x para ambos puntos son iguales, y al hacer la resta queda cero; por lo tanto la frmula para la pendiente quedara de la siguiente manera: Y2 - Y1 m = ------------------------ Por lo que el valor de la pendiente es: 0 INDETERMINADO.
FIG.
4.5.1
10.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 11.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width
y colquelo en
clTeal 601 0
12.- De la paleta de componentes Standard seleccione un objeto Label y colquelo en el Panel2, realice esta operacin 15 veces mas de manera que tenga 16 componentes Label en la forma2. 13.- Modificamos sus propiedades de la siguiente manera: Label1 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Label2 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label3 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Label5 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Label6 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label7 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label8 Propiedad a) La propiedad Caption b) La propiedad Height
Valor o Texto y = mx + b 29
c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label9 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label10 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label11 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label12 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
m ( x - x1 )
Valor o Texto
y = 29 25 clTeal 40 512
Valor o Texto
Valor o Texto
Label13 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Label14 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label15 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Label16 Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
14.- De la paleta de componentes Standard seleccione un objeto TEditl y colquelo en el Panel2, realice esta operacin 4 veces ms de manera que tenga 5 componentes TEdit en la forma2. 15.- Modificamos sus propiedades de la siguiente manera: Tedit1 Propiedad a) La propiedad Text b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Valor o Texto 0 32 57 clTeal 72 512 Cdigo float W; strcpy(text,MODIm->Text.c_str()); sscanf(text,"%f",&INTER1); IncM->Position=INTER1*10; W=INTER1; sprintf(text,"%.1f",W); Label16->Caption=text; R=INTER1; M=R; if(INTER1<=300) Traza_Recta(R); else Limpia();
Eventos OnChange
Tedit2 Propiedad a) La propiedad Text b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Eventos
OnChange
W=INTER; Recta2(W);
Tedit3 Propiedad a) La propiedad Text b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Eventos
OnChange
Valor o Texto 0 28 57 clTeal 8 624 float W; strcpy(text,MODIa->Text.c_str()); sscanf(text,"%f",&INTER1); W=INTER1; sprintf(text,"%.1f",W); Label16->Caption=text; MODIm->Text=text; COEX->Position=INTER1*10; IncM->Position=INTER1*10; R=INTER1; M=R; if(INTER1<=300) Traza_Recta(R); else Limpia();
Tedit4 Propiedad a) La propiedad Text b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top Eventos
OnChange
Valor o Texto 0
b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
Eventos
OnChange
16.- De la paleta de componentes Win95 seleccione un objeto UpDown y colquelo en el Panel2, realice esta operacin 4 veces ms de manera que tenga 5 componentes UpDown en la forma2. 17.- Modificamos sus propiedades de la siguiente manera: UpDown1 Propiedad a) La propiedad Increment b) La propiedad Height c) La propiedad Width d) La propiedad Max e) La propiedad Min f) La propiedad Left g) La propiedad Top h) La propiedad Name
// M ESTA
UpDown2 Propiedad a) La propiedad Increment b) La propiedad Height c) La propiedad Width d) La propiedad Max e) La propiedad Min f) La propiedad Left g) La propiedad Top h) La propiedad Name
Valor o Texto 1 33 17 500 -500 256 512 Incb Cdigo Eventos MODIb->Text=Incb->Position*0.1; strcpy(text,MODIb->Text.c_str()); sscanf(text,"%f",&INTER); EN reales b=INTER; Recta2(b);
OnClick
// M ESTA
UpDown3 Propiedad a) La propiedad Increment b) La propiedad Height c) La propiedad Width d) La propiedad Max e) La propiedad Min f) La propiedad Left g) La propiedad Top h) La propiedad Name
Eventos OnClick MODIa->Text=COEX->Position*0.1; strcpy(text,MODIa->Text.c_str()); sscanf(text,"%f",&INTER1); EN reales sprintf(text,"%.1f",INTER1); Label16->Caption=text; R=INTER1; M=R; Traza_Recta(R);
// M ESTA
UpDown4 Propiedad a) La propiedad Increment b) La propiedad Height c) La propiedad Width d) La propiedad Max e) La propiedad Min f) La propiedad Left g) La propiedad Top h) La propiedad Name
18.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 19.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad
Valor o Texto
a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
20.- De la paleta de componentes Additional seleccione un objeto Image en el Panel2. 21.- Modificamos sus propiedades de la siguiente manera: Propiedad Valor o Texto
y colquelo
a) La propiedad Height b) La propiedad Width c) La propiedad Left f) La propiedad Top e) La propiedad Stretch f) La propiedad Picture
Presione el botn Load y obtendr una caja de dialogo para seleccionar el icono deseado o podr buscarlo en caso de no encontrarse en el directorio mostrado.
Oprima el botn Ok. 22.- De la paleta de componentes Standard seleccione un objeto Button en el Panel2. 23.- Modifiquemos los siguientes atributos: y colquelo
Propiedad
Valor o Texto
&Continuar Panel2->Visible=false;
24.- De la paleta de componentes Standard seleccione un Label Panel2 con otras dos copias. 25.- Modifiquemos los siguientes atributos: Label1. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size Label2. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
y colquelo en el
Valor o Texto JUAN CARLOS CRUZ VEGA 13 167 clGray 16 144 Bold Italic 9
Label3. Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left
26.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 27.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
28.- De la paleta de componentes Standard seleccione un objeto Memo en el Panel. 29.- Modificamos sus propiedades de la siguiente manera:
Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Lines
Aparecer el editor de Lneas, en el se teclear el siguiente Texto. USO DE LA APLICACION. Despus de trazar la recta, y que conoscas los datos de la ecuacin original, puedes apreciar que al modificar la pendiente ( m ), el efecto que toma la recta es el de un giro apartir de un punto conocido. Si por el contrario modificas la b, observas que el efecto que toma la recta es de una traslacin a travs del
30.- Selecciona el botn Ok para cerrar la ventana de dialogo. 31.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 32.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
y colquelo en
33.- De la paleta de componentes Standard seleccione un objeto Memo en el Panel. 34.- Modificamos sus propiedades de la siguiente manera:
Aparecer el editor de Lneas, en el se teclear el siguiente Texto. INDICACIONES: Para iniciar, debes con el botn izquierdo del mouse seleccionar 2 puntos arbitrarios en tu Sistema Coordenado; A partir de estos puntos se calcular n Las siguientes ecuaciones de la recta. a) Pendiente. b) y - y1 = m ( x - x1) c) y = mx + b d) Ax + By + C = 0
36.- De la paleta de componentes Standard seleccione un objeto Main Men colquelo en la forma. 37.- haga doble clic en este componente y obtendr el diseador de mens:
Valor o Texto &Opciones &Ayuda A&cerca de &Base terica + + + + Enter Enter Enter Enter
39.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo.
FIG.
4.5.7
Diseador de mens.
a) La propiedad Caption
&Salir
41.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo. Componente Opcin &Limpiar; Evento OnClick Opcin &Salir; Evento OnClick Cdigo Invalidate();
Close(); Exit(1);
43.- Seleccione la hoja de eventos y haga doble clic en el evento OnClick e introduzca el siguiente cdigo. Componente Opcin &Uso; Evento OnClick Opcin a&Cerca de Evento OnClick 44.- Seleccione la forma haciendo un clic en ella, con el inspector de objetos en la hoja de eventos haga doble clic en el evento que se marca e introduzca el cdigo asociado. Cdigo Panel1->Visible=true; Invalidate(); Panel2->Visible=true;
Componente Form1
Cdigo Canvas->MoveTo(X,Y); Canvas->Pen->Color=clAqua; Canvas->Ellipse(X,Y,X,Y); Canvas->Ellipse(X,Y,X+1,Y+1); Canvas->Ellipse(X,Y,X+2,Y+2); Canvas->Ellipse(X,Y,X+3,Y+3); Canvas->Ellipse(X,Y,X+4,Y+4); old_x=X; old_y=Y; Pinta_Coordenada(old_x,old_y);
Accin Se selecciona un punto en la pantalla y se remarca de manera que no se vea un solo pixel, sino un grupo de pixeles.
Se hace una llamada a la funcin que pintar los valores numricos de la coordenada.
Evento OnMouseMove
float X1,Y1; Se obtienen los valores de la X1=(float(X-(ClientWidth/2))/30.0); posicin del mouse mientras este Y1=(float((ClientHeight/2)-Y)/30.0); se esta moviendo. Sprintf(text," ",X1,Y1); Se realizan los clculos en base Canvas->TextOut(5,5,text); al valor en pixeles de la pantalla Canvas->TextOut(0,0,text); visual en la que se esta Canvas->TextOut(5,10,text); trabajando, se cambia de valor Canvas->Font->Color=clAqua; de pixeles a valor de unidades de Sprintf(text,"X= %2.1f Y= %2.1f medida. ",X1,Y1); Canvas->TextOut(5,5,text); Canvas->Font->Color=clWhite; Los valores obtenidos en las operaciones anteriores son desplegados en la pantalla visual. Ejes(); Se realiza una llamada a la funcin que marca las graduaciones de las coordenadas.
45.- Seleccione el editor de cdigo y al final de la funciones ya capturadas introduzca las funciones con las que complementar el modulo de programa, segn el Apndice b. 46.- Seleccione File Save Project As podr darle nombre a la aplicacin. y obtendr una ventana de dialogo en la que
4.6
PRESENTACION (Sim.cpp)
1.2.3.4.-
El logotipo de la institucin donde se desarrollo el proyecto. El logotipo de la institucin donde se entregar el proyecto. Botones que controlen el acceso a los diferentes mdulos construidos. Un men de opciones que contenga: c) Una opcin para salir del proyecto. d) Una ventana de dialogo con informacin de la elaboracin del mdulo.
Propiedad a) La propiedad Caption b) La propiedad ClientHeight c) La propiedad ClientWidth d) La propiedad Color e) La propiedad Icon f) La propiedad Left g) La propiedad Top
Valor o Texto Herramientas Grficas Interactivas . 479 570 clTeal BildCim.ico 213 120
3.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 4.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Align
5.- De la paleta de componentes Standard seleccione un objeto Button la forma repitiendo la accin 4 veces mas colocndolos en el panel. 6.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
Haga doble clic en el botn Coordenada Rectangulares e introduzca el siguiente cdigo. WinExec("PUNTO1.EXE",SW_SHOWDEFAULT); Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
Haga doble clic en el botn Distancia Entre Puntos e introduzca el siguiente cdigo. WinExec("P2.EXE",SW_SHOWDEFAULT);
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Left e) La propiedad Top
Haga doble clic en el botn Ecuaciones de la Recta e introduzca el siguiente cdigo. WinExec("MXMASB.EXE",SW_SHOWDEFAULT);
7.- De la paleta de componentes Additional seleccione un objeto Image en la forma. 8.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Stretch f) La propiedad Picture
y colquelo
Presione el botn Load y obtendr una caja de dialogo para seleccionar el icono deseado o podr buscarlo en caso de no encontrarse en el directorio mostrado.
y colquelo
10.- Modificamos sus propiedades de la siguiente manera: Propiedad a) La propiedad Height b) La propiedad Width c) La propiedad Left d) La propiedad Top e) La propiedad Stretch f) La propiedad Picture
Presione el botn Load y obtendr una caja de dialogo para seleccionar el icono deseado o podr buscarlo en caso de no encontrarse en el directorio mostrado.
Oprima el botn Ok. Con estos pasos tendr las imgenes disponibles ya en su forma.
11.- De la paleta de componentes Standard seleccione un objeto Panel la forma. 12.- Modificamos sus propiedades de la siguiente manera:
y colquelo en
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top
13.- De la paleta de componentes Additional seleccione un objeto Image en el Panel2. 14.- Modificamos sus propiedades de la siguiente manera:
y colquelo
15.- De la paleta de componentes Standard seleccione un objeto Button en la forma. 16.- Modifiquemos los siguientes atributos: Propiedad a) La propiedad Caption b) El evento OnClick
y colquelo
17.- De la paleta de componentes Standard seleccione un Label forma con otras dos copias. 18.- Modifiquemos los siguientes atributos: Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
y colquelo en la
e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
Propiedad a) La propiedad Caption b) La propiedad Height c) La propiedad Width d) La propiedad Color e) La propiedad Left f) La propiedad Top g) La propiedad Font Style h) La propiedad Font Size
19.- De la paleta de componentes Standard seleccione un objeto Main Menu colquelo en la forma. 20.- haga doble clic en este componente y obtendr el diseador de mens:
FIG.
4.6.10
Diseador de mens.
21.- Con el inspector de objetos cambie las propiedades: Propiedad a) La propiedad Caption b) El evento OnClick
22.- Coloque el siguiente cdigo en la funcin mostrada: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->HelpFile = "DOCUMENTO.HLP"; }
FIG.
4.6.11
Aplicacin final.
4.7
Para la elaboracin del hipertexto, tom en cuenta los mdulos que se elaboraron, as que cada mdulo tendr en su aplicacin una opcin de revisin del texto asociado al tema:
Los Mdulos fueron los siguientes: 1.2.3.4.Puntos en el sistema coordenado cartesiano. Distancia entre dos puntos. Pendiente formada por la recta que pasa por dos puntos. Ecuaciones de la recta
Con estos puntos bien marcados, comenc a recopilar material sobre los distintos temas, en los libros mas comunes de Geometra Analtica, sobre el siguiente programa:
Recta real. Plano cartesiano. Coordenadas cartesianas. La recta que pasa por dos puntos. Formula de la distancia. Formula del punto medio. Pendiente Pendiente positiva. Pendiente negativa. Pendiente cero. Pendiente Indeterminada. Ecuaciones de la recta. Forma punto pendiente Forma pendiente ordenada al origen. Ecuacin de una recta vertical. Ecuacin general de la recta. Rectas Paralelas. Rectas perpendiculares.
Con el material recopilado, proced a esquematizar como presentara cada uno de los siguientes temas y cuales se relacionaran, por lo que decid hacer el siguiente esquema:
RECTA REAL
BHELP 100
PLANO CARTESIANO
BHELP 200
COORDENADAS CARTESIANAS
BHELP 210
FORMULA DE LA DISTANCIA
BHELP 400
PENDIENTE POSITIVA
PENDIENTE NEGATIVA
BHELP 620
PENDIENTE
BHELP 600
PENDIENTE CERO
BHELP 630
RECTAS PARALELAS
PENDIENTE INDETERMINADA
RECTAS PERPENDICULARES
ECUACIONES DE LA RECTA
BHELP 900
RECTA VERTICAL
BHELP 930
Antes de iniciar con el desarrollo del hipertexto, debo mencionar, que existen varios programas que ya realizan el hipertexto, usted solo tiene que introducir el texto y controlar sus relaciones; o existen varios editores de texto que en la opcin de salvar el documento, cuentan con la opcin de salvar en formato RTF (Rich Text Format); que es el formato que nos ayuda para la compilacin de este tipo de textos. Para este trabajo en particular utilic Word95 V6.0. Como nota adicional puedo comentar que en Word97 la opcin de salvar con formato RTF y algunas otras aplicaciones no funcionan, por lo que utilic la versin 6.0 de Word. PROCEDIMIENTO Agrup los temas que vea ms relacionados, y los divid por nmeros de nivel, para saber cuando un nivel superior llama a uno inferior, y saber como regresar paso a paso por los niveles en los que se baje. En la presentacin del hipertexto pondr un men que llamar CONTENIDO y tendr las siguientes directivas:
Directiva # $ + K
Accin Define un identificador nico para el tpico. La palabra que lo acompaa tiene un tpico asociado. Realiza la accin de paso atrs o adelante. La palabra que lo acompaa es la palabra clave para el Indexado.
Para asociarle un texto a una palabra, se hace lo siguiente: Si a la palabra Recta le quiero asociar un texto que se encuentra en otra seccin del escrito: 1.- Primero la marco con doble subrayado. Recta 2.- Junto a la palabra le escribo el identificador del texto al cual quiero asociarlo. RectaIr_Recta 3.- La palabra Ir_Recta la Marco con lnea oculta. 4.- El texto que est asociado debe estar en otra hoja u otras hojas pero debe tener el siguiente encabezado.
#$K+RECTA y en el pie de pgina la distribucin sera la siguiente: # Ir_Recta $ Ir_Recta K Ir_Recta + BHELP:110 Donde el Nmero 110 indica que tiene un tema predecesor marcado por el nmero 100, y posiblemente este tenga un predecesor con el nmero 10. Este texto est grabado en un formato RTF. 5.- Con el archivo almacenado con el formato rtf procedemos a la compilacin de este archivo para generar el archivo de ayuda. 6.- Abrimos una aplicacin en C++ Builder. 7.- De la barra de men principal seleccionamos. Tools
Hcw.exe
FIG.
4.7.1
Si no se encuentra en este sub men la utilidad Hcw.exe, Seleccione del mismo men tools dilogo:
FIG.
4.7.2
Configurado de Herramientas.
FIG.
4.7.3
Compilador de ayudas.
FIG.
4.7.4
10.- En ella seleccione Help Project y presione el botn OK. 11.- Obtendr otra ventana en la que dar nombre a la nueva aplicacin de ayuda.
FIG.
4.7.5
FIG.
4.7.6
Integracin de componentes.
13.- En la aadir el o los archivos que tenga para la elaboracin de la ayuda. (Archivos *.rtf), la ruta donde se encuentren las imgenes que valla a llevar la aplicacin. Los mapas o las bases de datos. Todo esto segn el botn. 14.- Solo pondr un archivo rtf.
FIG.
4.7.7
FIG.
4.7.8
16.- y nos mostrar el resultado de la compilacin, si hay errores se tendrn que corregir.
FIG.
4.7.9
Resultado de la compilacin.
FIG.
4.7.10
Visualizacin de la ayuda.
FIG.
4.7.11
FIG.
4.7.12
Ya tenemos un archivo ejecutable que nos muestra el hipertexto, este hipertexto lo podemos aadir a un programa en C++ Builder de la siguiente manera:
Application->HelpFile = "DOCUMENTO.HLP";
Donde DOCUMENTO.HLP es el nombre del hipertexto ya generado despus de la compilacin con el HCW.EXE
FIG.
4.7.13
Y el llamado particular es segn la opcin del men en la que se halla puesto: Ejemplo:
FIG.
4.7.14
FIG.
4.7.15
FIG.
4.7.16
Apndice
1. GLOSARIO DE TERMINOS
ABSTRACCION
El acto o resultado de eliminar ciertas distinciones entre los objetos, de modo que podamos observar los aspectos comunes. El resultado del proceso de abstraccin es un concepto (o tipo de objeto).
Un tipo de objeto que contiene la definicin de su estructura de datos y las operaciones permitidas. Los TDA dan a los objetos una interfaz pblica a travs de sus operaciones permitidas. Sin embargo, las representaciones y mtodos de estas interfaces son privadas. Tambin se conoce como tipo de objeto y se implanta en lod LPOO como una clase.
El sujeto, o variable independiente, de una funcin u operacin. Cualquier objeto que sea valor de un parmetro. Cuando se llena un argumento, se puede regresar el valor de una funcin, o bien se pueden producir los resultados de una operacin. Un medio para enlazar los tipos de objetos de manera significativa. Dos de las principales formas de asociacin son la relacin y la funcin. Una asociacin identificable entre un objeto y algun otro objeto o conjunto de objetos. Cada atributo es una instancia de un tipo atributo. Un cambio en la coleccin de todos los tipos de objetos que se aplican a un objeto dado. Un cambio en el estado de un objeto. (Es sinnimo de Evento), Una implantacin de un tipo atributo. (Sinnimo de variable de instancia.). Un campo de una estructura de datos o una operacin permitida
ARGUMENTO
ASOCIACION
ATRIBUTO
CARACTERISTICA
en un tipo de dato abstracto. La estructura de datos y las operaciones de un TDA son sus caractersticas. CLASE Una implantacin de un concepto o tipo de objeto. En los lenguajes de programacin OO, los tipos de datos abstractos se llaman clases. En matemticas, el significado de clase es similar al de conjunto. El significado de la definicin de la definicin de clase en los LPOO surge de la definicin matemtica. Una idea o nocin compartida que se aplica a siertas cosas (es decir objetos) de nuestra conciencia. Una persona tiene un concepto si comprende cuando se aplica ste y cundo no. Tambien se le llama tipo de objeto. La coleccin de todos los objetos a los que se aplica un tipo de objeto. (Se utiliza indistintamente con extencin.) Un constructor es una funcin especial que es miembro de la clase a la que pertenece y que se identifica por el mismo nombre de la clase Los destructores entran en la misma categora que los constructores, se utilizan para realizar ciertas operaciones que son necesariascuando ya no se utiliza un objeto. Una representacin grfica. Una representacin formal se llama esquema. La coleccin de todos los objetos asociados mediante una funcin. Varios enfoques del anlisis utilizan la palabra dominio en forma diferente. Por ejemplo, ciertos modeladores de relaciones entre entes se refieren al dominio como un tipo atributo. El dominio se tambien se refiere a una esfera delimitada de conocimiento a actividad. Envoltura protectora que oculta los detalles de implantacin de un objeto, haciendo que el acceso a los datos slo se realice mediante operaciones colocadas ah en forma intencional. Se suele usar indistintamente con ocultamiento de la informacin. Una representacin diagramtica formal. Un diagrama se considera formal cuando consta de un conjunto de smbolos definidos, junto con un conjunto de reglas que gobiernan la formacin de los diagramas que utilizan estos smbolos. Adems, el soporte de este esquema debe ser un medio de manejo de los smbolos para razonar y transformar sus construcciones en otras.
CONCEPTO
CONJUNTO
CONSTRUCTOR
DESTRUCTOR
DIAGRAMA
DOMINIO
ENCAPSULADO
ESQUEMA
EVENTO
Un cambio notable en el estado de un objeto. La conclusin con exito de llamado de una operacin. As, una operacin llamada es el potencial es el potencial para una cambio de estado; su cambio de estado real es su evento. El cambio se establece en trminos de un preestado de un evento y un postestado de un evento.
FUNCION
Un proceso de asociacin que, dado un objeto de un conjunto, regresa un conjunto de objetos en el mismo o diferente conjunto. Las funciones son operaciones que no cambian el estado de un objeto. Una funcin que siempre regresa un conjunto que contiene un nico objeto se llama univaluada. El acto o resultado de distinguir un tipo de objeto como ms general, o inclusive, que otro. La especificacin de un supertipo. Por ejemplo, persona es una generalizacin de hombre. La generalizacin no es una forma de abstraccin; es una comparacin entre las distintas abstracciones. La generalizacin define una relacin entre dos tipos de objetos; uno que es ms general que otro. La herencia de clase es una implantacin de generalizacin. Permite que todas las caractersticas de una clase de un LPOO estn disponibles o sean reutilizables para sus subclases, como si fueran las caractersticas de la subclase. La herencia de una clase a un objeto permite que las instancias de una clase hereden valores predefinidos. La herencia de un objeto a otro, tambien llamada delegacin, transfiere el estado de un objeto a otro. Sinnimo de objeto. Creacin de un objeto. Lenguajes de programacin orientados a objetos. Una especificacin de los pasos mediante los cuales se realiza una operacin. Es un guin de la implantacin de una operacin. Se pueden aplicar diferentes mtodos para realizar la misma operacin. Todo aquello a lo que se aplique un concpto o tipo de objeto; una instancia de un concpto o tipo de objeto. En los LPOO, es cualquier instancia de una clase.
GENERALIZACION
HERENCIA
OBJETO
OCULTAMIENTO DE LA INFORMACION
La nocin de ocultar la implantacin de un objeto, a la vez que se permite una interfaz pblica por medio de sus operaciones permitidas. Se utiliza a menudo en forma indistinta con encapsulado. Programacin orientada a objetos. Desarrollo de aplicaciones rapidas. Un tipo de objeto cuya extencin es un conjunto de n-adas. Un tipo de objeto con lugares. Por ejemplo EMPLEO es una relacin entre los tipos de objetos PERSONA y ORGANIZACION. EMPLEO es una relacin de dos lugares.
SUBCLASE
Una clase que es un subtipo de una o mas clases (llamadas superclases). Como tal, hereda todas las caractersticas de sus superclases (ver Herencia). En otras palabras, todas las caractersticas de una clase son reutilizables por sus subclases. Una clase que es un supertipo de una o ms clases (llamadas subclases). Como tal, es una clase cuyas caractersticas son heredadas por sus subclases. En otras palabras, todas las caractersticas de una superclase son reutilizables por las clases que son subtipos suyos. Vase campo.
SUPERCLASE
VARIABLE DE INSTANCIA
2. Cdigo Fuente
//------------------------------------------------------------------------------------------------------------PROGRAMA: PUNTO.CPP OBJETIVO: Colocar puntos en el sistema coodenado cartesiano y desplegar su coordenada. //--------------------------------------------------------------------------------------------------------------#include <vcl\vcl.h> #pragma hdrstop #include "Punto.h" #pragma resource "*.dfm" TForm1 *Form1; /*-------------------------------------------------------------------------------------------------------------FUNCION : TForm1: OBJETIVO: Crear una forma para una aplicacin. //--------------------------------------------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->HelpFile ="Punto.HLP"; } //---------------------------------------------------------------------------------------------------------------FUNCION : Limpiar1Click() OBJETIVO: Limpiar el area visual. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Limpiar1Click(TObject *Sender) { Invalidate(); } //----------------------------------------------------------------------------------------------------------------FUNCION : Salir1Click() OBJETIVO: Finalizar l;a ejecusin de un programa. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Salir1Click(TObject *Sender) { Close(); exit(1); } //----------------------------------------------------------------------------------------------------------------FUNCION : FormMouseDown() OBJETIVO: Guarda la posicion en pixeles en que se produjo un clic con el mouse. PARAMENTROS: *Sender: Un evento del mouse. Button: Identificacin de cual boton del mouse fue oprimido. Shift: Seleccin de tecla especial. Int X: Posicin en X en pixeles en que se oprimi un botn del mouse. Int Y: Posicin en Y en pixeles en que se oprimi un botn del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Canvas->MoveTo(X,Y); Canvas->Pen->Color=clAqua; Canvas->Ellipse(X,Y,X,Y); // remarcado de un punto.
Canvas->Ellipse(X,Y,X+1,Y+1); Canvas->Ellipse(X,Y,X+2,Y+2); Canvas->Ellipse(X,Y,X+3,Y+3); Canvas->Ellipse(X,Y,X+4,Y+4); old_x=X; old_y=Y; Pinta_Coordenada(old_x,old_y); } //----------------------------------------------------------------------------------------------------------------FUNCION : Pinta_Coordenada() OBJETIVO: Despliega en la pantalla la coordenada (numricas) del pixel en que se hizo un clic. PARAMENTROS: int A: Posicin en X del sistema coordenado. int B: Posicin en Y del sistema coordenado. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Pinta_Coordenada(int A,int B) { int W=15; float X1,Y1; X1=(float(A-(ClientWidth/2))/30.0); Y1=(float((ClientHeight/2)-B)/30.0); Canvas->Pen->Style=psDashDot;//InsideFrame;// Canvas->Pen->Color=clFuchsia; LINEA(A,B,A,(ClientHeight/2)); LINEA(A,B,(ClientWidth/2),B); Canvas->Pen->Color=clWhite; sprintf(text,"(%.1f ,%.1f )",X1,Y1); sign =(B>(ClientHeight/2)+1 ? 1 : -1 ); Canvas->TextOut(A+(W*sign),B+(W*sign),text); } //----------------------------------------------------------------------------------------------------------------FUNCION : Ejes() OBJETIVO: Dibuja los ejes y sus graduaciones. PARAMENTROS: Ninguno. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Ejes() { int i,j,k; int Ex=30; Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clSilver; LINEA(ClientWidth/2,0,ClientWidth/2,ClientHeight); LINEA(0,ClientHeight/2,ClientWidth,ClientHeight/2); k=0; for(i=1,j=0;i<=13,j<17;i++,j++) { LINEA((ClientWidth/2)+1,(ClientHeight/2)+k,(ClientWidth/2)+5,(ClientHeight/2)+k); LINEA((ClientWidth/2)+1,(ClientHeight/2)-k,(ClientWidth/2)+5,(ClientHeight/2)-k); LINEA((ClientWidth/2)+k,(ClientHeight/2)+1,(ClientWidth/2)+k,(ClientHeight/2)+5); LINEA((ClientWidth/2)-k,(ClientHeight/2)+1,(ClientWidth/2)-k,(ClientHeight/2)+5); Canvas->Font->Size=7; Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clWhite; Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)-30)-k,i); Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)+30)+k,-i); // Numeracin en Y Canvas->TextOut((ClientWidth/2)+k,(ClientHeight/2)+5,j); // Numeracin en X Canvas->TextOut((ClientWidth/2)-k,(ClientHeight/2)+5,-j);
k+=Ex; } for(i=2;i<ClientWidth;i+=30) for(j=0;j<ClientHeight;j+=30) { Canvas->Pen->Color=clTeal; LINEA(i,j,i,j); LINEA(i,j,i+1,j+1); LINEA(i,j,i-1,j-1); } } //----------------------------------------------------------------------------------------------------------------FUNCION : FormPaint() OBJETIVO: Repinta la pantalla despus de realizado algn movimiento en la ventana. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender) { Ejes(); } //----------------------------------------------------------------------------------------------------------------FUNCION : FormResize() OBJETIVO: Escala la ventana visual. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormResize(TObject *Sender) { Invalidate(); } //----------------------------------------------------------------------------------------------------------------FUNCION : Button1Click() OBJETIVO: Ocultar una ventana de dilogo. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Panel1->Visible=false; } //----------------------------------------------------------------------------------------------------------------FUNCION : LINEA() OBJETIVO: Pinta un segmento de linea de una coordenada inicial a una coordenada final. PARAMENTROS: int P1: Coordenada inicial X. int P2: Coordenada inicial Y. int P3: Coordenada final X. int P4: Coordenada final Y. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::LINEA(int P1,int P2,int P3,int P4) { Canvas->MoveTo(P1,P2); Canvas->LineTo(P3,P4); } //----------------------------------------------------------------------------------------------------------------FUNCION : Button2Click() OBJETIVO: Ocultar una ventana de dilogo. PARAMENTROS: *Sender: Un evento del mouse. //-----------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) { Panel2->Visible=false; } //----------------------------------------------------------------------------------------------------------------FUNCION : FormMouseMove () OBJETIVO: Rastrear el movimiento del mouse. PARAMENTROS: *Sender: Un evento del mouse. Shift: Checa si se activ alguna tecla de funcin. Int X: Posicin actual en la que se va moviendo el mouse en X. Int Y: Posicin actual en la que se va moviendo el mouse en Y. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { float X1,Y1; X1=(float(X-(ClientWidth/2))/30.0); Y1=(float((ClientHeight/2)-Y)/30.0); sprintf(text," ",X1,Y1); Canvas->TextOut(5,5,text); Canvas->TextOut(0,0,text); Canvas->TextOut(5,10,text); Canvas->Font->Color=clAqua; sprintf(text,"X= %2.1f Y= %2.1f ",X1,Y1); Canvas->TextOut(5,5,text); Canvas->Font->Color=clWhite; } //----------------------------------------------------------------------------------------------------------------FUNCION : Uso1Click() OBJETIVO: Hacer visible una ventana de dilogo. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Uso1Click(TObject *Sender) { Panel1->Visible=true; Invalidate(); } //----------------------------------------------------------------------------------------------------------------FUNCION : Acercade2Click() OBJETIVO: Hacer visible una ventana de dilogo. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Acercade2Click(TObject *Sender) { Panel2->Visible=true; } //----------------------------------------------------------------------------------------------------------------FUNCION : BaseTeorica1Click() OBJETIVO: Abre un archivo de ayuda. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::BaseTeorica1Click(TObject *Sender) { Application->HelpCommand(HELP_CONTENTS, 0); Invalidate(); }
//---------------------------------------------------------------------------
SU ARCHIVO DE CABECERA. //---------------------------------------------------------------------------------------------------------------ARCHIVO: PUNTO.H //---------------------------------------------------------------------------------------------------------------#ifndef PuntoH #define PuntoH #include <vcl\Classes.hpp> #include <vcl\Controls.hpp> #include <vcl\StdCtrls.hpp> #include <vcl\Forms.hpp> #include <vcl\Menus.hpp> #include <vcl\ExtCtrls.hpp> //-----------------------------------------------------------------------------------------------------------------class TForm1 : public TForm {__published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Opciones1; TMenuItem *Limpiar1; TMenuItem *Salir1; TPanel *Panel1; TMemo *Memo1; TButton *Button1; TMenuItem *Ayuda1; TPanel *Panel2; TImage *Image1; TButton *Button2; TLabel *Label1; TLabel *Label2; TLabel *Label3; TMenuItem *Uso1; TMenuItem *Acercade2; TMenuItem *BaseTeorica1; void __fastcall Limpiar1Click(TObject *Sender); void __fastcall Salir1Click(TObject *Sender); void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall FormPaint(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y); void __fastcall Uso1Click(TObject *Sender); void __fastcall Acercade2Click(TObject *Sender); void __fastcall BaseTeorica1Click(TObject *Sender); private: // User declarations public: // User declarations void __fastcall Ejes(); void __fastcall Pinta_Coordenada(int X,int Y); void __fastcall LINEA(int P1,int P2,int P3,int P4); char text[70]; int old_x,old_y,sign;
__fastcall TForm1(TComponent* Owner); }; extern TForm1 *Form1; #endif //------------------------------------------------------------------------------------------------------------PROGRAMA: XOTRA.CPP OBJETIVO: Trazar un segmento de recta y calcular la longitud de ese segmento en funcin de las coordenadas de los puntos de los extremos. //--------------------------------------------------------------------------------------------------------------#include <vcl\vcl.h> #pragma hdrstop #include "Xotra.h" #include "math.h" #pragma resource "*.dfm" TForm1 *Form1; /*-------------------------------------------------------------------------------------------------------------FUNCION : TForm1: OBJETIVO: Crear una forma para una aplicacin. //--------------------------------------------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->HelpFile="Distanc.hlp"; z=true; } //----------------------------------------------------------------------------------------------------------------FUNCION : FormPaint() OBJETIVO: Repinta la pantalla despus de realizado algn movimiento en la ventana. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender) { Ejes(); } //----------------------------------------------------------------------------------------------------------------FUNCION : FormResize() OBJETIVO: Escala la ventana visual. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormResize(TObject *Sender) { Invalidate(); } //----------------------------------------------------------------------------------------------------------------FUNCION : FormMouseDown() OBJETIVO: Guarda la posicion en pixeles en que se produjo un clic con el mouse. PARAMENTROS: *Sender: Un evento del mouse. Button: Identificacin de cual boton del mouse fue oprimido. Shift: Seleccin de tecla especial. Int X: Posicin en X en pixeles en que se oprimi un botn del mouse. Int Y: Posicin en Y en pixeles en que se oprimi un botn del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {
//----------------------------------------------------------------------------------------------------------------FUNCION : DIBUJA() OBJETIVO: Calcula y pinta las coordenadas de los 2 puntos que comprenden la recta La distancia entre ellos y su pendiente. PARAMENTROS: Int P1: Coordenada inicial en X. Int P2: Coordenada inicial en Y. Int P3: Coordenada final en X. Int P4: Coordenada final en Y. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::DIBUJA(int P1,int P2, int P3,int P4) { int W=15; X1=(float(P1-(ClientWidth/2))/30); Y1=(float((ClientHeight/2)-P2)/30); X2=(float(P3-(ClientWidth/2))/30); Y2=(float((ClientHeight/2)-P4)/30); if(X1==X2) { M=0; // Pendiente indeterminada aunque no se deba la dejo en cero } else // Clculo de la pendiente {M=((Y2-Y1)/(X2-X1)); } // Posicin de los puntos de la recta if(M>=0) sign=(X1<X2 ? 1.0 : -1.0); else if(M<0) sign=(X1<X2 ? -1.0 : 1.0); sprintf(text,"(%.1f ,%.1f )",X1,Y1); Canvas->TextOut(P1-W,P2+(W*sign),text); Canvas->Font->Color=clLime; sprintf(text,"(%.1f ,%.1f )",X2,Y2); Canvas->TextOut(P3-(W),P4-(W*sign),text); if(Tag==1){ Formula(); Calcula(); Tag=0; } //----------------------------------------------------------------------------------------------------------------FUNCION : Calcula() OBJETIVO: Realiza el clculo de la distancia segun los puntos obtenidos en la funcin MouseDown y que son descifrados por la funcin dibuja. PARAMENTROS: Ninguno. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Calcula() {float D,VX,VY; Canvas->Font->Size=15; Canvas->Pen->Color=clAqua; LINEA(0,650,ClientWidth,650); LINEA(0,651,ClientWidth,651); VX=pow(fabs(X2-X1),2); VY=pow(fabs(Y2-Y1),2); D=sqrt(VX + VY);
Canvas->Font->Color=clFuchsia;sprintf(text,"distancia = ( ) +( ) "); // Mascara de la frmula Canvas->TextOut(205,670,text); Canvas->Font->Color=clGreen; sprintf(text,"(%.1f)",Y2); // Y2 Canvas->TextOut(317,670,text); sprintf(text,"(%.1f)",X2); // X2 Canvas->TextOut(484,670,text); Canvas->Font->Color=clWhite; sprintf(text,"(%.1f)",Y1); // Y1 Canvas->TextOut(391,670,text); sprintf(text,"(%.1f)",X1); // X1 Canvas->TextOut(550,670,text); Canvas->Font->Color=clAqua; sprintf(text," distancia = %.1f",D); Canvas->TextOut(650,670,text); Canvas->Font->Color=clFuchsia; Canvas->Font->Size=5; sprintf(text,"2"); // Y2 Canvas->TextOut(448,668,text); Canvas->TextOut(605,668,text); Canvas->Pen->Color=clFuchsia;// dibuja la raiz cuadrada LINEA(310,690,310,662); LINEA(310,690,302,664); LINEA(310,662,640,662); } //----------------------------------------------------------------------------------------------------------------FUNCION : Ejes() OBJETIVO: Dibuja los ejes y sus graduaciones. PARAMENTROS: Ninguno. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Ejes() { int i,j,k; ClientWidth=ClientWidth; ClientHeight=ClientHeight; int Ex=30; Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clSilver; LINEA(ClientWidth/2,0,ClientWidth/2,ClientHeight-60); // Eje Y LINEA(0,ClientHeight/2,ClientWidth,ClientHeight/2);// Eje X k=0; for(i=1,j=0;i<=10,j<17;i++,j++) {LINEA(ClientWidth/2+1,ClientHeight/2+k,ClientWidth/2+5,ClientHeight/2+k);// Graduacin en Y LINEA(ClientWidth/2+1,ClientHeight/2-k,ClientWidth/2+5,ClientHeight/2-k); LINEA(ClientWidth/2+k,ClientHeight/2+1,ClientWidth/2+k,ClientHeight/2+5);// Graduacin en X LINEA(ClientWidth/2-k,ClientHeight/2+1,ClientWidth/2-k,ClientHeight/2+5); Canvas->Font->Size=7; Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clWhite; Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)-30)-k,i); if(i<10) { Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)+30)+k,-i); // Numeracin en Y } Canvas->TextOut((ClientWidth/2)+k,(ClientHeight/2)+5,j); // Numeracin en X Canvas->TextOut((ClientWidth/2)-k,(ClientHeight/2)+5,-j); k+=Ex;
} for(i=0;i<1024;i+=30) for(j=0;j<721;j+=30) {
Canvas->Pen->Color=clTeal; LINEA(i,j,i,j); LINEA(i,j,i+1,j+1); } } //---------------------------------------------------------------------------------------------------------------FUNCION : Limpiar1Click() OBJETIVO: Limpiar el area visual. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Limpiar1Click(TObject *Sender) { Invalidate(); } //----------------------------------------------------------------------------------------------------------------FUNCION : Salir1Click() OBJETIVO: Finalizar l;a ejecusin de un programa. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Salir1Click(TObject *) { Close(); exit(1); } //------------------------------------------------------------------------------------------------------------------FUNCION: Frmula(). OBJETIVO: Desplegar la formula de la recta en la pantalla. PARAMETROS: Ninguno. //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Formula() { Canvas->Font->Size=7; Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clFuchsia; Canvas->Font->Size=7; sprintf(text,"d = ( )^2 + ( )^2 "); Canvas->TextOut(15,675,text); Canvas->Font->Color=clGreen; sprintf(text,"Y2"); // Valor de Y2 Canvas->TextOut(60,675,text); Canvas->Font->Color=clWhite; sprintf(text,"Y1"); // Valor de Y1 Canvas->TextOut(83,675,text); Canvas->Font->Color=clGreen; sprintf(text,"X2"); // Valor de X2 Canvas->TextOut(133,675,text); Canvas->Font->Color=clWhite; sprintf(text,"X1"); // Valor de X1 Canvas->TextOut(158,675,text);
Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clFuchsia; LINEA(40,685,40,667); // Dibujo de la raiz LINEA(40,685,35,669); LINEA(40,667,205,667); } //------------------------------------------------------------------------------------------------------------------FUNCION: Button1Click(). OBJETIVO: Ocultar una ventana de dilogo. PARAMETROS: Ninguno. //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Panel1->Visible=false; } //------------------------------------------------------------------------------------------------------------------FUNCION: LINEA(). OBJETIVO: Traza un segmento de linea recta. PARAMETROS: . int Xi: Posicin inicial en X1. int Yi: Posicin inicial en Y1. int Xf: Posicin final en X2. int Yf: Posicin fianl en Y2. //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf) { Canvas->MoveTo(Xi,Yi); Canvas->LineTo(Xf,Yf); } //------------------------------------------------------------------------------------------------------------------FUNCION: Obten_Puntos(). OBJETIVO: Guarda la posicin del punto X,Y de una coordenada del sistema coordenado. PARAMETROS: int X: Posicion en X del punto en el sistema coordenado. Int Y: Posicin en Y del punto en el sistema coordenado. //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Obten_Puntos(int X,int Y) { Canvas->Font->Size=7; Canvas->Pen->Color=clFuchsia; if(z == true) { LINEA(X,Y,X,Y); old_x = X; old_y = Y; Canvas->Font->Color=clLime; } else { Canvas->Font->Color=clWhite; Canvas->Pen->Color=clFuchsia; LINEA(old_x,old_y,X,Y); Tag++; A=X; B=Y; DIBUJA(old_x,old_y,A,B); } z= (z==true ? false : true);
} //------------------------------------------------------------------------------------------------------------------FUNCION: Acercade1Click(). OBJETIVO: Hace visible una ventana de dilogo. PARAMETROS: *Sender: un evento del mouse. (Clic) //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Acercade1Click(TObject *Sender) { Panel2->Visible=true; } //------------------------------------------------------------------------------------------------------------------FUNCION: Button2Click(). OBJETIVO: Ocultar una ventana de dilogo. PARAMETROS: Ninguno. //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { Panel2->Visible=false; Invalidate(); } //------------------------------------------------------------------------------------------------------------------FUNCION: FormMouseMove(). OBJETIVO: Rastrear los movimientos del mouse. PARAMETROS: *Sender: Un evento del mouse (Movimiento). Shift: Checa si alguna tecla de funcion fue oprimida. Int X, int Y: Posicin del mouse. //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { float X1,Y1; X1=(float(X-(ClientWidth/2))/30.0); Y1=(float((ClientHeight/2)-Y)/30.0); sprintf(text," ",X1,Y1); Canvas->TextOut(ClientWidth-130,ClientHeight-40,text); Canvas->TextOut(ClientWidth-130,ClientHeight-50,text); Canvas->TextOut(ClientWidth-130,ClientHeight-60,text); Canvas->Font->Color=clAqua; Canvas->Font->Size=12; sprintf(text,"X= %2.1f Y= %2.1f ",X1,Y1); Canvas->TextOut(ClientWidth-150,ClientHeight-50,text); Canvas->Font->Color=clWhite; } //------------------------------------------------------------------------------------------------------------------FUNCION: BaseTeorica1Click(). OBJETIVO: abre un archivo de hipertexto. PARAMETROS: *Sender: Un evento del mouse. //-------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::BaseTeorica1Click(TObject *Sender) { Application->HelpCommand(HELP_CONTENTS,0); Invalidate(); } //---------------------------------------------------------------------------
SU ARCHIVO DE CABECERA //----------------------------------------------------------------------------------------------------------------------------ARCHIVO: XOTRA.H //----------------------------------------------------------------------------------------------------------------------------#ifndef XotraH #define XotraH #include <vcl\Classes.hpp> #include <vcl\Controls.hpp> #include <vcl\StdCtrls.hpp> #include <vcl\Forms.hpp> #include <vcl\Menus.hpp> #include <vcl\ExtCtrls.hpp> class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Limpiar1; TMenuItem *Salir1; TMenuItem *Menu1; TPanel *Panel1; TMemo *Memo1; TButton *Button1; TMenuItem *Acercade1; TPanel *Panel2; TButton *Button2; TImage *Image1; TLabel *Label1; TLabel *Label2; TLabel *Label3; TMenuItem *BaseTeorica1; void __fastcall FormPaint(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Limpiar1Click(TObject *Sender); void __fastcall Salir1Click(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Acercade1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y); void __fastcall BaseTeorica1Click(TObject *Sender); private: // User declarations public: // User declarations void __fastcall Ejes(); void __fastcall DIBUJA(int P1,int P2, int P3,int P4); void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf); void __fastcall Calcula(); void __fastcall Formula(); void __fastcall Obten_Puntos(int X,int Y); float X1,Y1,X2,Y2,old_x,old_y,A,B,sign,M,D;
char text[100]; bool z; __fastcall TForm1(TComponent* Owner); }; extern TForm1 *Form1; #endif
//------------------------------------------------------------------------------------------------------------------PROGRAMA: Pendient.h OBJETIVO: Colocar puntos en el sistema coodenado cartesiano y desplegar sus coordenadas. Calcular su pendiente y desplegar el valor. //------------------------------------------------------------------------------------------------------------------#include <vcl\vcl.h> #pragma hdrstop #include "Pendient.h" #include "math.h" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------------------------------------------------FUNCION: TForm1: OBJETIVO: Crear una forma para la aplicacion. //--------------------------------------------------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->HelpFile="Pend.hlp"; z=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: FormPaint(). OBJETIVO: Redibuja la aplicacin cuando de realiza algun borrado o escalado en la ventana visual. PARAMETROS: *Sender. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender) { Ejes(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: FormResize(). OBJETIVO: Escla la ventana visual. PARAMETROS: *Sender. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormResize(TObject *Sender) { Invalidate(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: FormMouseDown(). OBJETIVO: Guarda la posicin de las coordenadas del mouse cuando uno de sus botones es oprimido. PARAMETROS: *Sender. Button: Guarda cual de los botones del mouse fue oprimido. Shift: Checa si alguna tecla de funcion es oprimida. Int X, Y: Posicion en pixeles en que se produjo un clic. //--------------------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Obten_Puntos(X,Y); } //------------------------------------------------------------------------------------------------------------------------FUNCION: FormResize(). OBJETIVO: Calcula y pinta las coordenadas de los 2 puntos que comprenden la recta La distancia entre ellos y su pendiente PARAMETROS: *Sender. Int P1, P2, coordenadas del punto inicial. Int P3, P4 Coordenadas del punto final. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::DIBUJA(int P1,int P2, int P3,int P4) { int W=15; X1=(float(P1-(ClientWidth/2))/30); Y1=(float((ClientHeight/2)-P2)/30); X2=(float(P3-(ClientWidth/2))/30); Y2=(float((ClientHeight/2)-P4)/30); if(X1==X2) { Panel3->Visible=true; // Aviso sobre pendiente indeterminada. M=0; } else // Clculo de la pendiente. {M=((Y2-Y1)/(X2-X1)); } // Posicin de los puntos de la recta if(M>=0) sign=(X1<X2 ? 1.0 : -1.0); else if(M<0) sign=(X1<X2 ? -1.0 : 1.0); sprintf(text,"(%.1f ,%.1f )",X1,Y1); Canvas->TextOut(P1-W,P2+(W*sign),text); Canvas->Font->Color=clLime; sprintf(text,"(%.1f ,%.1f )",X2,Y2); Canvas->TextOut(P3-(W),P4-(W*sign),text); if(Tag==1){ Calcula(); Tag=0; } } //------------------------------------------------------------------------------------------------------------------------FUNCION: Calcula (). OBJETIVO: Realiza el clculo de la distancia segun los puntos obtenidos en la funcin Mouse Down. Y que son descifrados por la funcin dibuja. PARAMETROS: Ninguno. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Calcula() { float D,VX,VY; Canvas->Font->Size=12; Canvas->Pen->Color=clAqua; LINEA(0,ClientHeight-70,ClientWidth,ClientHeight-70); LINEA(0,ClientHeight-69,ClientWidth,ClientHeight-69); VX=pow(fabs(X2-X1),2); VY=pow(fabs(Y2-Y1),2); D=sqrt(VX + VY);
sprintf(text," "); Canvas->TextOut((ClientWidth/2)+100,ClientHeight-30,text); Canvas->TextOut((ClientWidth/2)+100,ClientHeight-60,text); Canvas->Font->Color=clFuchsia; sprintf(text,"distancia = ( ) +( ) "); // Mascara de la frmula Canvas->TextOut(ClientWidth/60,ClientHeight-50,text); Canvas->Font->Color=clLime; Canvas->Font->Size=10; sprintf(text,"(%.1f)",Y2); // Y2 Canvas->TextOut(ClientWidth/8-10,ClientHeight-50,text); sprintf(text,"(%.1f)",X2); // X2 Canvas->TextOut(ClientWidth/8+40,ClientHeight-50,text); Canvas->Font->Color=clWhite; sprintf(text,"(%.1f)",Y1); // Y1 Canvas->TextOut(ClientWidth/4-10,ClientHeight-50,text); sprintf(text,"(%.1f)",X1); // X1 Canvas->TextOut(ClientWidth/4+45,ClientHeight-50,text); sprintf(text," "); Canvas->TextOut(ClientWidth/2-140,ClientHeight-50,text); Canvas->Font->Size=12; Canvas->Font->Color=clAqua; sprintf(text," = %.1f",D); Canvas->TextOut(ClientWidth/2-140,ClientHeight-50,text); Canvas->Font->Color=clFuchsia; Canvas->Font->Size=5; sprintf(text,"2"); // Y2 Canvas->TextOut((ClientWidth/4)-40,ClientHeight-55,text); Canvas->TextOut((ClientWidth/3)+5,ClientHeight-55,text); Canvas->Pen->Color=clFuchsia; // dibuja la raiz cuadrada LINEA(ClientWidth/10,ClientHeight-30,ClientWidth/10,ClientHeight-60); LINEA(ClientWidth/10,ClientHeight-30,ClientWidth/10-8,ClientHeight-62); LINEA(ClientWidth/10,ClientHeight-60,ClientWidth/3+30,ClientHeight-60); Canvas->Font->Color=clFuchsia; sprintf(text,"PENDIENTE = -------------------- = ----------------------------- = "); Canvas->TextOut(ClientWidth/2+5,ClientHeight-50,text); Canvas->Font->Size=12; sprintf(text," - "); Canvas->TextOut(ClientWidth/2+105,ClientHeight-65,text); Canvas->TextOut(ClientWidth/2+180,ClientHeight-65,text); sprintf(text," - "); Canvas->TextOut(ClientWidth/2+105,ClientHeight-35,text); Canvas->TextOut(ClientWidth/2+180,ClientHeight-35,text); Canvas->Font->Color=clLime; Canvas->Font->Size=7; sprintf(text,"Y2"); Canvas->TextOut(ClientWidth/2+90,ClientHeight-60, text); sprintf(text,"X2"); Canvas->TextOut(ClientWidth/2+90,ClientHeight-35,text); Canvas->Font->Color=clWhite; sprintf(text,"Y1"); Canvas->TextOut(ClientWidth/2+130,ClientHeight-60,text); sprintf(text,"X1"); Canvas->TextOut(ClientWidth/2+130,ClientHeight-35,text); Canvas->Font->Color=clLime; Canvas->Font->Size=10; sprintf(text,"(%.1f)",Y2);
Canvas->TextOut(ClientWidth/2+155,ClientHeight-63,text); sprintf(text,"(%.1f)",X2); Canvas->TextOut(ClientWidth/2+155,ClientHeight-33,text); Canvas->Font->Color=clWhite; sprintf(text,"(%.1f)",Y1); Canvas->TextOut(ClientWidth/2+205,ClientHeight-63,text); sprintf(text,"(%.1f)",X1); Canvas->TextOut(ClientWidth/2+205,ClientHeight-33,text); Canvas->Font->Size=12; sprintf(text," "); Canvas->TextOut(ClientWidth/2+250,ClientHeight-50,text); Canvas->Font->Color=clAqua; sprintf(text,"%.2f",M); Canvas->TextOut(ClientWidth/2+250,ClientHeight-50,text); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Ejes(). OBJETIVO: Pinta los ejes y sus graduaciones. PARAMETROS: *Sender. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Ejes() { int k; int Ex=30; Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clSilver; LINEA(ClientWidth/2,0,ClientWidth/2,ClientHeight); // Eje Y LINEA(0,ClientHeight/2,ClientWidth,ClientHeight/2);// Eje X k=0; for(int i=1,j=0;i<=10,j<17;i++,j++) { LINEA(ClientWidth/2+1,ClientHeight/2+k,ClientWidth/2+5,ClientHeight/2+k);// Graduacin en Y LINEA(ClientWidth/2+1,ClientHeight/2-k,ClientWidth/2+5,ClientHeight/2-k); LINEA(ClientWidth/2+k,ClientHeight/2+1,ClientWidth/2+k,ClientHeight/2+5);// Graduacin en X LINEA(ClientWidth/2-k,ClientHeight/2+1,ClientWidth/2-k,ClientHeight/2+5); Canvas->Font->Color=clWhite; Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)-30)-k,i); if(i<10){ Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)+30)+k,-i); // Numeracin en Y } Canvas->TextOut((ClientWidth/2)+k,(ClientHeight/2)+5,j); // Numeracin en X Canvas->TextOut((ClientWidth/2)-k,(ClientHeight/2)+5,-j); k+=Ex; } } //------------------------------------------------------------------------------------------------------------------------FUNCION: Limpiar(). OBJETIVO: Limpia la ventana visual. PARAMETROS: *Sender : Un evento del mouse. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Limpiar1Click(TObject *Sender) { Invalidate(); }
//-------------------------------------------------------------------------------------------------------------------------------FUNCION : Salir1Click() OBJETIVO: Finalizar l;a ejecusin de un programa. PARAMENTROS: *Sender: Un evento del mouse. //----------------------------------------------------------------------------------------------------------------- ------------void __fastcall TForm1::Salir1Click(TObject *) { Close(); exit(1); } //-------------------------------------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------------------------------FUNCION: Button1Click(). OBJETIVO: Oculta una ventana de dilogo. PARAMETROS: *Sender. Un evento del mouse. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Panel1->Visible=false; Invalidate(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: LINEA(). OBJETIVO: Traza un segmento de linea. PARAMETROS: int Xi,Yi: Coordenadas del punto inicial. Int Xf,Yf: Coordenadas del punto final a trazar la recta. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf) { Canvas->MoveTo(Xi,Yi); Canvas->LineTo(Xf,Yf); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Obten_Puntos(). OBJETIVO: Guarda los puntos en que fue dado un clic con el mouse. PARAMETROS: int X,Y: Coordenadas del punto en el que se hizo un click. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Obten_Puntos(int X,int Y) { Canvas->Font->Size=7; Canvas->Pen->Color=clFuchsia; if(z == true) { Canvas->Pen->Color=clWhite; Panel2->Visible=false; LINEA(X,Y,X,Y); old_x = X; old_y = Y; Canvas->Font->Color=clLime; } else { Canvas->Font->Color=clWhite; Canvas->Pen->Color=clTeal; LINEA(old_x,old_y,X,Y); Tag++;
A=X; B=Y; DIBUJA(old_x,old_y,A,B); } z= (z==true ? false : true); } //------------------------------------------------------------------------------------------------------------------------FUNCION: cClick(). OBJETIVO: Oculta una ventana de dilogo. PARAMETROS: *Sender : Un evento del mouse. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::cClick(TObject *Sender) { Panel3->Visible=false; Invalidate(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Button2Click(). OBJETIVO: Oculta una ventana de dilogo. PARAMETROS: *Sender : Un evento del mouse. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { Panel4->Visible=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Ayuda1Click(). OBJETIVO: Hace visible una ventana de dilogo. PARAMETROS: *Sender : Un evento del mouse. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Ayuda1Click(TObject *Sender) { Panel1->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: aCercadeClick(). OBJETIVO: Hace visible una ventana de dilogo. PARAMETROS: *Sender : Un evento del mouse. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::aCercade1Click(TObject *Sender) { Panel4->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: FormMouseMove(). OBJETIVO: Rastrea la posici en coordenadas de pixeles por las que va pasando el mouse. PARAMETROS: *Sender : Un evento del mouse. (Movimiento) Shift : Checa si una tecla de funcin fue presionada. Int X,Y posicion en pixeles en donde va recorriendo el mouse. //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X,int Y) { float X1,Y1; X1=(float(X-(ClientWidth/2))/30.0); Y1=(float((ClientHeight/2)-Y)/30.0); sprintf(text," ",X1,Y1);
Canvas->TextOut(820,10,text); Canvas->Font->Color=clWhite; } //------------------------------------------------------------------------------------------------------------------------FUNCION: BaseTeorica1Click(). OBJETIVO: Llama a un archivo de ayuda. PARAMETROS: *Sender : Un evento del mouse (Clic). //-------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::BaseTorica1Click(TObject *Sender) { Application->HelpCommand(HELP_CONTENTS,0); Invalidate(); } //---------------------------------------------------------------------------------------------------------------------------
SU ARCHIVO DE CABECERA. //------------------------------------------------------------------------------------------------------------------------ARCHIVO: PENDIENT.H //-------------------------------------------------------------------------------------------------------------------------#ifndef PendientH #define PendientH #include <vcl\Classes.hpp> #include <vcl\Controls.hpp> #include <vcl\StdCtrls.hpp> #include <vcl\Forms.hpp> #include <vcl\Menus.hpp> #include <vcl\ExtCtrls.hpp> class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Limpiar1; TMenuItem *Salir1; TMenuItem *Menu1; TPanel *Panel1; TMemo *Memo1; TButton *Button1; TPanel *Panel2; TPanel *Panel3; TMemo *Memo2; TButton *boton2; TPanel *Panel4; TButton *Button2; TLabel *Label1; TLabel *Label2; TLabel *Label3; TImage *Image1; TMenuItem *Ayuda1; TMenuItem *aCercade1; TMenuItem *BaseTorica1; void __fastcall FormPaint(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Limpiar1Click(TObject *Sender); void __fastcall Salir1Click(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall cClick(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Ayuda1Click(TObject *Sender); void __fastcall aCercade1Click(TObject *Sender); void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y); void __fastcall BaseTorica1Click(TObject *Sender); private: // User declarations public: // User declarations void __fastcall Ejes(); void __fastcall DIBUJA(int P1,int P2, int P3,int P4); void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf); void __fastcall Calcula();
void __fastcall Obten_Puntos(int X,int Y); float X1,Y1,X2,Y2,old_x,old_y,A,B,sign,M,D; char text[100]; bool z; __fastcall TForm1(TComponent* Owner); }; extern TForm1 *Form1; #endif
//----------------------------------------------------------------------------------------------------------------------------ARCHIVO: NUEVPEND.H OBJETIVO: Mostrar graficamente la pendiente y el clculo de la misma. //----------------------------------------------------------------------------------------------------------------------------#include <vcl\vcl.h> #pragma hdrstop #include<conio.h> #include "nuevpend.h" #include "math.h" #pragma resource "*.dfm" TForm1 *Form1; //----------------------------------------------------------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { Application->HelpFile="Pend.hlp"; z=true; t=false; w=false; n=s=nn=ss=false; } //------------------------------------------------------------------------------------------------------------------------------FUNCION: FormPaint() OBJETIVO: Repintar la aplicacin cuando ocurre un evento de borrado. PARAMETROS: *Sender: Un evento del mouse. //-----------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender) { Ejes(); } //------------------------------------------------------------------------------------------------------------------------------FUNCION: FormResize() OBJETIVO: Escalar la ventana visual. PARAMETROS: *Sender: Un evento del mouse. //-----------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormResize(TObject *Sender) { Invalidate(); } //------------------------------------------------------------------------------------------------------------------------------FUNCION: FormMouseDown() OBJETIVO: Guardar las coordenadas en que se realiz un clic con el mouse. PARAMETROS: *Sender: Un evento del mouse. Button : Que botn del mouse fue presionado. Shift: Checa si se oprimi alguna tecla de funcin Int X,Y Posicin en pixeles en la que se hizo el clic. //-----------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,TShiftState Shift, int X, int Y) { if(Tag<1) Obten_Puntos(X,Y); if(t==true) Punto_A_mover(X,Y,1); if(e==true) Punto_A_mover(X,Y,2); }
/*------------------------------------------------------------------------------------------------------------------------------FUNCION : DIBUJA() OBJETIVO :Calcula y pinta las coordenadas de los 2 puntos que comprenden la recta, la distancia entre ellos y su pendiente PARAMETROS : P1 -> Coordenada en X del primer punto del segmento de recta P2 -> Coordenada en Y del primer punto del segmento de recta P3 -> Coordenada en X del Segundo punto del segmento de recta P4 -> Coordenada en Y del Segundo punto del segmento de recta ------------------------------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::DIBUJA(int P1,int P2, int P3,int P4,int accion) { int W=15; Canvas->Font->Size=7; Canvas->Font->Color=clWhite; X1=(float(P1-(ClientWidth/2))/30); Y1=(float((ClientHeight/2)-P2)/30); X2=(float(P3-(ClientWidth/2))/30); Y2=(float((ClientHeight/2)-P4)/30); if(X1==X2) { Panel3->Visible=true; M=0; } else { M=((Y2-Y1)/(X2-X1)); } if(M>=0) sign=(X1<X2 ? 1.0 : -1.0); else if(M<0) sign=(X1<X2 ? -1.0 : 1.0); if(accion==1) { Canvas->Font->Color=clWhite; sprintf(text,"(%.1f ,%.1f )",X1,Y1); Canvas->TextOut(P1-W,P2+(W*sign),text); Canvas->Font->Color=clLime; sprintf(text,"(%.1f ,%.1f )",X2,Y2); Canvas->TextOut(P3-(W),P4-(W*sign),text); if(Tag==1){ Calcula(X1,Y1,X2,Y2); } } if(accion==0) { if(n==true) { Canvas->Font->Color=clBlack; sprintf(text," "); Canvas->TextOut(P1-W-5,P2+(W*sign),text); } else if(s==true) { Canvas->Font->Color=clBlack; sprintf(text," "); Canvas->TextOut(P3-(W)-7,P4-(W*sign),text); } } }
/*--------------------------------------------------------------------------------------------------------------------------FUNCION : Calcula() OBJETIVO: Realiza el clculo de la distancia segn los puntos obtenidos en la funcin Mouse Down, y que son descifrados por la funcin dibuja. PARAMETROS : X1 -> Coordenada en X del primer punto del segmento de recta Y1 -> Coordenada en Y del primer punto del segmento de recta X2 -> Coordenada en X del Segundo punto del segmento de recta Y2 -> Coordenada en Y del Segundo punto del segmento de recta --------------------------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::Calcula(float X1,float Y1,float X2,float Y2) { Pinta_pendiente(X1,Y1,X2,Y2); } /*------------------------------------------------------------------------------------------------------------------------FUNCIN : Ejes() OBJETIVO: Dibuja los ejes y sus graduaciones PARAMETROS: Ninguno. -------------------------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::Ejes() { int k; int Ex=30; Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clSilver; LINEA(ClientWidth/2,0,ClientWidth/2,ClientHeight); // Eje Y LINEA(0,ClientHeight/2,ClientWidth,ClientHeight/2);// Eje X k=0; for(int i=1,j=0;i<=10,j<17;i++,j++) { LINEA(ClientWidth/2+1,ClientHeight/2+k,ClientWidth/2+5,ClientHeight/2+k);// Graduacin en Y LINEA(ClientWidth/2+1,ClientHeight/2-k,ClientWidth/2+5,ClientHeight/2-k); LINEA(ClientWidth/2+k,ClientHeight/2+1,ClientWidth/2+k,ClientHeight/2+5);// Graduacin en X LINEA(ClientWidth/2-k,ClientHeight/2+1,ClientWidth/2-k,ClientHeight/2+5); Canvas->Font->Size=7; Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clWhite; Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)-30)-k,i); if(i<10) { Canvas->TextOut((ClientWidth/2)+5,((ClientHeight/2)+30)+k,-i); // Numeracin en Y } Canvas->TextOut((ClientWidth/2)+k,(ClientHeight/2)+5,j); // Numeracin en X Canvas->TextOut((ClientWidth/2)-k,(ClientHeight/2)+5,-j); k+=Ex; } } /*---------------------------------------------------------------FUNCIN : Limpiar1Click() OBJETIVO: Realiza un refresco de la pantalla limpiando el area de trabajo. PARAMETROS : *Sender: Regresa un evento del mouse. -----------------------------------------------------------------------------*/ void __fastcall TForm1::Limpiar1Click(TObject *Sender) { Invalidate(); Tag=0; z=true; t=false;
w=n=s=false; } /*---------------------------------------------------------------FUNCIN : Salir1Click() OBJETIVO: Cierra todas las funciones y termina l;a aplicacin. PARAMETROS : *Sender Regresa un evento del mouse. -----------------------------------------------------------------------------*/ void __fastcall TForm1::Salir1Click(TObject *) { Close(); exit(1); } /*---------------------------------------------------------------FUNCIN : Button1Click() OBJETIVO: Cierra una ventana de dialogo. PARAMETROS : *Sender Regresa un evento del mouse. -----------------------------------------------------------------------------*/ void __fastcall TForm1::Button1Click(TObject *Sender) { Panel1->Visible=false; } /*---------------------------------------------------------------FUNCIN : Linea() OBJETIVO: Cierra una ventana de dialogo. PARAMETROS : Xi -> Coordenada en X del primer punto del segmento de recta Yi -> Coordenada en Y del primer punto del segmento de recta Xf -> Coordenada en X del Segundo punto del segmento de recta Yf -> Coordenada en Y del Segundo punto del segmento de recta -----------------------------------------------------------------------------*/ void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf) { Canvas->MoveTo(Xi,Yi); Canvas->LineTo(Xf,Yf); } /*-----------------------------------------------------------------------------FUNCION : Obten_Puntos() OBJETIVO: Toma del mouse las coordenadas donde se dio un Click para pintar los puntos que formaran la recta. PARAMETROS : X -> Coordenada en X del evento del mouse Y -> Coordenada en Y del evento del mouse ------------------------------------------------------------------------------*/ void __fastcall TForm1::Obten_Puntos(int X,int Y) { Canvas->Font->Size=7; Canvas->Pen->Color=clFuchsia; if(z == true) { Canvas->Pen->Color=clWhite; Panel2->Visible=false; LINEA(X,Y,X,Y); old_x = X; old_y = Y; Canvas->Font->Color=clLime; } else { Canvas->Font->Color=clWhite;
LINEA(old_x,old_y,X,Y); Tag++; Xi=X; Yi=Y; DIBUJA(old_x,old_y,Xi,Yi,1); } z=false; } /*--------------------------------------------------------------------------FUNCION : cClick() OBJETIVO: Cierra una ventana de dialogo PARAMETROS : *Sender Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::cClick(TObject *Sender) { Panel3->Visible=false; } /*--------------------------------------------------------------------------FUNCION : FormDblClick() OBJETIVO: Soltar el extremo de la recta fijandolo en el punto donde se realiz el DblClick. PARAMETROS : *Sender Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::FormDblClick(TObject *Sender) { z=true; e=t=n=s=nn=ss=false; } /*--------------------------------------------------------------------------FUNCION : FormMouseMove() OBJETIVO: Checa el movimiento del Mouse. PARAMETROS : Sender Un evento del Mouse. Shift Un evento del Mouse. X Coordenada en X donde se desplaza el Mouse Y Coordenada en Y donde se desplaza el Mouse ---------------------------------------------------------------------------*/ void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { float t1,t2; t1=(float(X-(ClientWidth/2))/30.0); t2=(float((ClientHeight/2)-Y)/30.0); sprintf(text," ",X1,Y1); Canvas->TextOut(120,660,text); Canvas->TextOut(120,665,text); Canvas->TextOut(120,670,text); Canvas->Font->Size=12; Canvas->Font->Color=clAqua; sprintf(text,"X= %2.1f Y= %2.1f ",t1,t2); Canvas->TextOut(120,665,text); Canvas->Font->Color=clWhite; if(Tag>=1){ Xf=X; Yf=Y; if(w==true) { Mueve(Xf,Yf);}
if(ee==true) { Traslada(Xf,Yf); } } } /*--------------------------------------------------------------------------FUNCION : Mueve() OBJETIVO: Cambia de posicion la recta segun las nuevas posiciones del Mouse PARAMETROS : Xf Coordenada en X donde se desplaza el Mouse Yf Coordenada en Y donde se desplaza el Mouse ---------------------------------------------------------------------------*/ void __fastcall TForm1::Mueve(int Xf,int Yf) { Ejes(); if(n==true){ // cuando el que se mueve es el primer punto if((Yf<Yi)||(Xi>Xf)||(Xi>Xf)) { Canvas->Font->Color=clBlack; sprintf(text," "); Canvas->TextOut(Xi-15,Yi+(15*sign),text); } Canvas->Pen->Color=clBlack; LINEA(old_x,old_y,Xi,Yi); DIBUJA(old_x,old_y,Xi,Yi,0); Canvas->Pen->Color=clFuchsia; LINEA(Xf,Yf,Xi,Yi); DIBUJA(Xf,Yf,Xi,Yi,1); old_x=Xf; old_y=Yf; } else if(s==true) // cuando el que se mueve es el segundo punto. { borr_ant(); Canvas->Pen->Color=clBlack; LINEA(old_x,old_y,Xi,Yi); DIBUJA(old_x,old_y,Xi,Yi,0); Canvas->Pen->Color=clFuchsia; LINEA(old_x,old_y,Xf,Yf); DIBUJA(old_x,old_y,Xf,Yf,1); Xi=Xf; Yi=Yf; } } /*--------------------------------------------------------------------------FUNCION : Rotar1Click() OBJETIVO: Prende la Vandera para permitir rotar la recta. PARAMETROS : *Sender Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Rotar1Click(TObject *Sender) { Panel4->Visible=true; t=true; } /*--------------------------------------------------------------------------FUNCION : Traslada() OBJETIVO: Tomando un punto mueve la recta segun la direccion que se la de al Mouse. PARAMETROS: Xf Coordenada en X de la posicion por la que se desplaza el mouse
Yf Coordenada en Y de la posicion por la que se desplaza el mouse ---------------------------------------------------------------------------*/ void __fastcall TForm1::Traslada(int Xf,int Yf) { int A,B; Ejes(); if(nn==true) // cuando el que se mueve es el primer punto. { borr_ant(); Canvas->Pen->Color=clBlack; LINEA(old_x,old_y,Xi,Yi); DIBUJA(old_x,old_y,Xi,Yi,0); A=Xi-old_x; B=Yi-old_y; Canvas->Pen->Color=clFuchsia; LINEA(Xf,Yf,Xf+A,Yf+B); DIBUJA(Xf,Yf,Xf+A,Yf+B,1); old_x=Xf; old_y=Yf; Xi=Xf+A; Yi=Yf+B; } else if(ss==true) // cuando el que se mueve es el segundo punto. { borr_ant(); Canvas->Pen->Color=clBlack; LINEA(old_x,old_y,Xi,Yi); DIBUJA(old_x,old_y,Xi,Yi,0); A=old_x-Xi; B=old_y-Yi; Canvas->Pen->Color=clFuchsia; LINEA(Xf+A,Yf+B,Xf,Yf); DIBUJA(Xf+A,Yf+B,Xf,Yf,1); old_x=Xf+A; old_y=Yf+B; Xi=Xf; Yi=Yf; } } /*--------------------------------------------------------------------------FUNCION : Mover1Click() OBJETIVO: Enciende la bandera que permite la traslacion de la recta. PARAMETROS: * Sender. Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Mover1Click(TObject *Sender) { Panel4->Visible=true; e=true; } /*--------------------------------------------------------------------------FUNCION : Punto_A_mover() OBJETIVO: Selecciona uno de los extremos de la recta para realizar los eventos de traslacion y rotacion. PARAMETROS : Tres enteros X Coordenada en X donde se encuentra el punto seleccionado. Y Coordenada en Y donde se encuentra el punto seleccionado. P Selecciona si es 1 rotacion o 2 traslacion. ---------------------------------------------------------------------------*/
void __fastcall TForm1::Punto_A_mover(int X,int Y,int P) { Panel4->Visible=false; if( (X==old_x || X==old_x-1) || (X==old_x-2 || X==old_x-3) || (X==old_x-4 || X==old_x-5) || (X==old_x+1||X==old_x+2) || (X==old_x+3 || X==old_x+4) || (X==old_x+5)|| (Y==old_y || Y==old_y-1) || (X==old_x-2 || X==old_x-3) || (Y==old_y-4 || Y==old_y-5)|| (Y==old_y+1||X==old_x+2) || (X==old_x+3 || Y==old_y+4) || (Y==old_y+5) ) { if(P==1) { w=true; n=true; Mueve(X,Y); } if(P==2) { ee=true; nn=true; Traslada(X,Y); } } else if((X==Xi||X==Xi-1)||(X==Xi-2||X==Xi-3)||(X==Xi-4 ||X==Xi-5)|| (X==Xi+1||X==Xi+2)||(X==Xi+3||X==Xi+4)||(X==Xi+5)|| (Y==Yi||Y==Yi-1)||(Y==Yi-2||Y==Yi-3)||(Y==Yi-4||Y==Yi-5)|| (Y==Yi+1)||(Y==Yi+2||Y==Yi+3)||(Y==Yi+4||Y==Yi+5)) { if(P==1) { w=true; s=true; Mueve(X,Y); } if(P==2) { ee=true; ss=true; Traslada(X,Y); } } } /*--------------------------------------------------------------------------FUNCION : borr_ant() OBJETIVO: Borra las coordenada pintadas. PARAMETROS: Ninguno. ---------------------------------------------------------------------------*/ void __fastcall TForm1::borr_ant() { if(M<0) { Canvas->Font->Color=clBlack; sprintf(text," "); Canvas->TextOut(old_x-15,old_y+(15*sign),text); Canvas->TextOut(Xi-15,Yi-(15*sign),text); } if(M>=0) { Canvas->Font->Color=clBlack; sprintf(text," ");
Canvas->TextOut(old_x-15,old_y+(15*sign),text); Canvas->TextOut(Xi-15,Yi-(15*sign),text); } } /*--------------------------------------------------------------------------FUNCION: Button2Click() OBJETIVO: Cierra una ventana de dialogo. PARAMETROS: *Sender. Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Button2Click(TObject *Sender) { Panel4->Visible=false; } /*--------------------------------------------------------------------------FUNCION : Pinta_pendiente() OBJETIVO: Calcula mediante las posiciones regresadas por el Mouse la pendiente del segmento de recta. PARAMETROS : 4 Flotantes. X1 Coordenada en X del Primer punto. Y1 Coordenada en Y del Primer punto. X2 Coordenada en X del Segundo punto. Y2 Coordenada en Y del Segundo punto. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Pinta_pendiente(float X1,float Y1,float X2,float Y2) { Canvas->Pen->Color=clAqua; LINEA(0,ClientHeight-70,ClientWidth,ClientHeight-70); LINEA(0,ClientHeight-69,ClientWidth,ClientHeight-69); Canvas->Font->Size=7; // despliega la pendiente Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clFuchsia; sprintf(text,"PENDIENTE = -------------------- = ----------------------------- = "); Canvas->TextOut(ClientWidth/2+5,ClientHeight-50,text); Canvas->Font->Size=12; sprintf(text," "); Canvas->TextOut(ClientWidth/2+140,ClientHeight-33,text); Canvas->TextOut(ClientWidth/2+140,ClientHeight-63,text); sprintf(text," - "); Canvas->TextOut(ClientWidth/2+105,ClientHeight-65,text); Canvas->TextOut(ClientWidth/2+180,ClientHeight-65,text); sprintf(text," - "); Canvas->TextOut(ClientWidth/2+105,ClientHeight-35,text); Canvas->TextOut(ClientWidth/2+180,ClientHeight-35,text); Canvas->Font->Color=clLime; Canvas->Font->Size=7; sprintf(text,"Y2"); Canvas->TextOut(ClientWidth/2+90,ClientHeight-60, text); sprintf(text,"X2"); Canvas->TextOut(ClientWidth/2+90,ClientHeight-35,text); Canvas->Font->Color=clWhite; sprintf(text,"Y1"); Canvas->TextOut(ClientWidth/2+130,ClientHeight-60,text); sprintf(text,"X1"); Canvas->TextOut(ClientWidth/2+130,ClientHeight-35,text); Canvas->Font->Color=clLime; Canvas->Font->Size=10; sprintf(text,"(%.1f)",Y2);
Canvas->TextOut(ClientWidth/2+155,ClientHeight-63,text); sprintf(text,"(%.1f)",X2); Canvas->TextOut(ClientWidth/2+155,ClientHeight-33,text); Canvas->Font->Color=clWhite; sprintf(text,"(%.1f)",Y1); Canvas->TextOut(ClientWidth/2+205,ClientHeight-63,text); sprintf(text,"(%.1f)",X1); Canvas->TextOut(ClientWidth/2+205,ClientHeight-33,text); Canvas->Font->Size=12; sprintf(text," "); Canvas->TextOut(ClientWidth/2+250,ClientHeight-50,text); Canvas->Font->Color=clAqua; sprintf(text,"%.2f",M); Canvas->TextOut(ClientWidth/2+250,ClientHeight-50,text); } /*--------------------------------------------------------------------------FUNCION: Button2Click() OBJETIVO: Cierra una ventana de dialogo. PARAMETROS: *Sender. Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Button3Click(TObject *Sender) { Panel5->Visible=false; } /*--------------------------------------------------------------------------FUNCION: BASETEORICA1CLICK() OBJETIVO: Llama a un archivo de ayuda. PARAMETROS: *Sender. Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Baseteorica1Click(TObject *Sender) { Application->HelpCommand(HELP_CONTENTS,0); Invalidate(); } /*--------------------------------------------------------------------------FUNCION: Uso1Click() OBJETIVO: Abre una ventana de dialogo. PARAMETROS: *Sender. Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Uso1Click(TObject *Sender) { Panel4->Visible=true; } /*--------------------------------------------------------------------------FUNCION: Acercade2Click() OBJETIVO: abre una ventana de dialogo. PARAMETROS: *Sender. Un evento del Mouse. ---------------------------------------------------------------------------*/ void __fastcall TForm1::Acercade2Click(TObject *Sender) { Panel5->Visible=true; } //---------------------------------------------------------------------------
SU ARCHIVO DE CABECERA. //---------------------------------------------------------------------------------------------------------------------------ARCHIVO: NUEVPEND.H //--------------------------------------------------------------------------------------------------------------------------#ifndef nuevpendH #define nuevpendH #include <vcl\Classes.hpp> #include <vcl\Controls.hpp> #include <vcl\StdCtrls.hpp> #include <vcl\Forms.hpp> #include <vcl\Menus.hpp> #include <vcl\ExtCtrls.hpp> //-------------------------------------------------------------------------------------------------------------------------class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Limpiar1; TMenuItem *Salir1; TMenuItem *Menu1; TPanel *Panel1; TMemo *Memo1; TButton *Button1; TPanel *Panel2; TPanel *Panel3; TMemo *Memo2; TButton *boton2; TMenuItem *Rotar1; TMenuItem *Accion1; TMenuItem *Mover1; TPanel *Panel4; TMemo *Memo3; TButton *Button2; TMenuItem *Ayuda1; TPanel *Panel5; TButton *Button3; TLabel *Label1; TLabel *Label2; TLabel *Label3; TImage *Image1; TMenuItem *Baseteorica1; TMenuItem *Uso1; TMenuItem *Acercade2; void __fastcall FormPaint(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Limpiar1Click(TObject *Sender); void __fastcall Salir1Click(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall cClick(TObject *Sender); void __fastcall FormDblClick(TObject *Sender); void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y); void __fastcall Rotar1Click(TObject *Sender); void __fastcall Mover1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall Baseteorica1Click(TObject *Sender); void __fastcall Uso1Click(TObject *Sender); void __fastcall Acercade2Click(TObject *Sender); private: // User declarations public: // User declarations void __fastcall Ejes(); void __fastcall DIBUJA(int P1,int P2, int P3,int P4,int accion); void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf); void __fastcall Calcula(float X1,float Y1,float X2,float Y2); void __fastcall Obten_Puntos(int X,int Y); void __fastcall Mueve(int Xf,int Yf); void __fastcall Traslada(int ,int ); void __fastcall borr_ant(); void __fastcall Punto_A_mover(int X,int Y,int P); void __fastcall Pinta_pendiente(float X1,float Y1,float X2,float Y2); char text[100]; bool z,t,w,n,s,e,nn,ss,ee; __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------extern TForm1 *Form1; //--------------------------------------------------------------------------#endif
//-------------------------------------------------------------------------------------------------------------------------------PROGRAMA: MXPLUSB.CPP OBJETIVO: Integrar los conceptos vistos en los programas anteriores en una solo. //-------------------------------------------------------------------------------------------------------------------------------#include <vcl\vcl.h> #pragma hdrstop #include<conio.h> #include "MXPLUSB.h" #include "math.h" #include "string.h" #pragma resource "*.dfm" TForm1 *Form1; int Xmant,Ymant,XMXant,YMXant; int VALOR1,VALOR2,VISUAL,XANT,YANT,PIXEL=30; float R,Z,res,m,INTER; float b,INTER1,NUM; char Buff[60]; //-------------------------------------------------------------------------------------------------------------------------------FUNCION: Tform1() OBJETIVO: Crea una nueva forma para la aplicacin. PARAMETROS: *Sender. Un evento del Mouse. //-------------------------------------------------------------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->HelpFile="Ecuac.hlp"; z=true; t=false; w=false; n=s=nn=ss=false; Panel4->Visible=true; } //-------------------------------------------------------------------------------------------------------------------------------FUNCION: Ejes() OBJETIVO: Pinta los ejes coordenados y sus graduaciones. PARAMETROS: *Sender. Un evento del Mouse. //-------------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender) { Ejes(); } //-------------------------------------------------------------------------------------------------------------------------------FUNCION: FormResize() OBJETIVO: Escala la ventana de trabajo. PARAMETROS: *Sender. Un evento del Mouse. //-------------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormResize(TObject *Sender) { Invalidate(); } //------------------------------------------------------------------------------------------------------------------------------FUNCION: FormMouseDown() OBJETIVO: Guardar las coordenadas en que se realiz un clic con el mouse. PARAMETROS: *Sender: Un evento del mouse. Button : Que botn del mouse fue presionado. Shift: Checa si se oprimi alguna tecla de funcin
Int X,Y Posicin en pixeles en la que se hizo el clic. //-----------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(Tag<1)Obten_Puntos(X,Y); } /*--------------------------------------------------------------------------FUNCION : DIBUJA() OBJETIVOS: Calcula y pinta las coordenadas de los 2 puntos que comprenden la recta, la distancia entre ellos y su pendiente PARAMETROS : P1 -> Coordenada en X del primer punto del segmento de recta P2 -> Coordenada en Y del primer punto del segmento de recta P3 -> Coordenada en X del Segundo punto del segmento de recta P4 -> Coordenada en Y del Segundo punto del segmento de recta ---------------------------------------------------------------------------*/ void __fastcall TForm1::DIBUJA(int P1,int P2, int P3,int P4,int accion) { Canvas->Font->Size=7; Canvas->Font->Color=clBlack; X1=(float(P1-(VISUAL/2))/30); Y1=(float((ClientHeight/2)-P2)/30); X2=(float(P3-(VISUAL/2))/30); Y2=(float((ClientHeight/2)-P4)/30); if(X2==X1) { Panel3->Visible=true; // Aviso sobre pendiente indeterminada. } else // Clculo de la pendiente { M=float(Y2-Y1)/float(X2-X1+0.0001); } CALCLIN(P1,P2,P3,P4); } /*-----------------------------------------------------------------------------FUNCIN : Ejes() OBJETIVOS: DIbuja los ejes y sus graduaciones PARAMETROS: Ninguno. ------------------------------------------------------------------------------*/ void __fastcall TForm1::Ejes() { int k; int Ex=30; int VENTANA; VENTANA=ClientWidth-600; VISUAL=ClientWidth-VENTANA; Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clSilver; LINEA(VISUAL/2,0,VISUAL/2,ClientHeight); // Eje Y LINEA(0,ClientHeight/2,VISUAL+60,ClientHeight/2);// Eje X k=0; for(int i=1,j=0;i<=11,j<12;i++,j++) { LINEA(VISUAL/2+1,ClientHeight/2+k,VISUAL/2+5,ClientHeight/2+k);// Graduacin en Y LINEA(VISUAL/2+1,ClientHeight/2-k,VISUAL/2+5,ClientHeight/2-k);
LINEA(VISUAL/2+k,ClientHeight/2+1,VISUAL/2+k,ClientHeight/2+5);// Graduacin en X LINEA(VISUAL/2-k,ClientHeight/2+1,VISUAL/2-k,ClientHeight/2+5); Canvas->Font->Size=7; Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clWhite; Canvas->TextOut((VISUAL/2)+5,((ClientHeight/2)-30)-k,i); Canvas->TextOut((VISUAL/2)+5,((ClientHeight/2)+30)+k,-i); // Numeracin en Y Canvas->TextOut((VISUAL/2)+k,(ClientHeight/2)+5,j); // Numeracin en X Canvas->TextOut((VISUAL/2)-k,(ClientHeight/2)+5,-j); k+=Ex; } } /*------------------------------------------------------------------------------------------------------------------------------FUNCIN : Limpiar1Click() OBJETIVO: Realiza un refresco de la pantalla limpiando el area de trabajo. Regresa un evento del mouse. PARAMETROS : Sender -------------------------------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::Limpiar1Click(TObject *Sender) { Invalidate(); Limpia(); } /*-----------------------------------------------------------------------------------------------------------------------------FUNCIN : Salir1Click() OBJETIVO: Cierra todas las funciones y termina l;a aplicacin. Regresa un evento del mouse. PARAMETROS : Sender ------------------------------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::Salir1Click(TObject *) { Close(); exit(1); } /*-------------------------------------------------------------------------------------------------------------------------FUNCIN : Linea() OBJETIVO: Cierra una ventana de dialogo. PARAMETROS : Xi -> Coordenada en X del primer punto del segmento de recta Yi -> Coordenada en Y del primer punto del segmento de recta Xf -> Coordenada en X del Segundo punto del segmento de recta Yf -> Coordenada en Y del Segundo punto del segmento de recta -------------------------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf) { Canvas->MoveTo(Xi,Yi); Canvas->LineTo(Xf,Yf); } /*-------------------------------------------------------------------------------------------------------------------------FUNCION : Obten_Puntos() OBJETIVO: Toma del mouse las coordenadas donde se dio un click para pintar los puntos que formarn la recta. Coordenada en X del evento del mouse PARAMETROS : X -> Y -> Coordenada en Y del evento del mouse --------------------------------------------------------------------------------------------------------------------------*/ void __fastcall TForm1::Obten_Puntos(int X,int Y) { Canvas->Font->Size=7; Canvas->Pen->Color=clFuchsia;
if(z == true) { Canvas->Pen->Color=clAqua; old_x = X; old_y = Y; Canvas->Font->Color=clLime; } else { Tag++; Xi=X; Yi=Y; DIBUJA(old_x,old_y,Xi,Yi,0); //1 Xi } z=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION : cClick() Cierra una ventana de dialogo OBJETIVO: Un evento del Mouse. PARAMETROS : Sender //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::cClick(TObject *Sender) { Panel3->Visible=false; z=true; Invalidate(); } //------------------------------------------------------------------------------------------------------------------------FUNCION : FormDblClick() OBJETIVO: Soltar el extremo de la recta fijandolo en el punto donde se realiz el DblClick. Un evento del Mouse. PARAMETROS : Sender //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormDblClick(TObject *Sender) { z=true; e=t=n=s=nn=ss=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Button2Click() OBJETIVO: Cierra una ventana de dialogo. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { Panel6->Visible=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Uso1Click() OBJETIVO: Abre una ventana de dialogo. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Uso1Click(TObject *Sender) { Panel3->Visible=false; Panel4->Visible=false; Panel6->Visible=true;
} //------------------------------------------------------------------------------------------------------------------------FUNCION: Indicaciones1Click() OBJETIVO: Abre una ventana de dialogo. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Indicaciones1Click(TObject *Sender) { Panel4->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Calclin() OBJETIVO: Calcula la distancia de dos puntos dados. PARAMETROS: int old_x, old_y, X, Y: Coordenadas del punto inicial y final de un segmento de recta. //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::CALCLIN(int old_x,int old_y,int X,int Y) { int xmin,ymin,xmax,ymax; float W; X1=(float(old_x-(float)(VISUAL/2.0))/30.0); Y1=(float((float)(ClientHeight/2.0)-old_y)/30.0); X2=(float(X-((float)VISUAL/2.0))/30.0); Y2=(float(((float)ClientHeight/2.0)-Y)/30.0); presenta(X1,Y1,X2,Y2); M=(Y2-Y1)/(X2-X1+0.0001); // y - y1 = m*(x-x1) m=M; W=M; sprintf(text,"%.1f",W); MODIm->Text=text; Calcb(); sprintf(text,"(%.1f)",Y1); Label9->Caption=text; sprintf(text,"(%.1f)",X1); Label10->Caption=text; } //------------------------------------------------------------------------------------------------------------------------FUNCION: MODImChange() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::MODImChange(TObject *Sender) { float W; strcpy(text,MODIm->Text.c_str()); sscanf(text,"%f",&INTER1); IncM->Position=INTER1*10; W=INTER1; sprintf(text,"%.1f",W); Label16->Caption=text; R=INTER1; M=R; if(INTER1<=300) Traza_Recta(R); else Limpia(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: MODIbChange()
OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::MODIbChange(TObject *Sender) { float W; strcpy(text,MODIb->Text.c_str()); sscanf(text,"%f",&INTER); Incb->Position=INTER*10.0; W=INTER; Recta2(W); } //------------------------------------------------------------------------------------------------------------------------FUNCION: IncMclick() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta pasa este valor a modimclick. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::IncMClick(TObject *Sender, TUDBtnType Button) { MODIm->Text=IncM->Position*0.1; strcpy(text,MODIm->Text.c_str()); sscanf(text,"%f",&INTER1); // M ESTA EN reales sprintf(text,"%.1f",INTER1); Label16->Caption=text; R=INTER1; M=R; Traza_Recta(R); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Incbclick() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta pasa este valor a modibclick. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::IncbClick(TObject *Sender, TUDBtnType Button) { MODIb->Text=Incb->Position*0.1; strcpy(text,MODIb->Text.c_str()); sscanf(text,"%f",&INTER); // M ESTA EN reales b=INTER; Recta2(b); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Traza_Recta() OBJETIVO: trazar la recta segun los cambios que se hagan a la formula original. Un real, R Modificacion a la pendiente. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Traza_Recta(float R) { float t; int xxmax, yymax, xxmin, yymin; Canvas->Pen->Color=clBlack; Canvas->Ellipse(XANT,YANT,XANT,YANT); Canvas->Ellipse(XANT-1,YANT-1,XANT+1,YANT+1);
Canvas->Ellipse(XANT-2,YANT-2,XANT+2,YANT+2); Canvas->Ellipse(XANT-3,YANT-3,XANT+3,YANT+3); t=-R; xxmax = VISUAL; yymax = t*(xxmax-old_x) + old_y; if(yymax > ClientHeight) { yymax = ClientHeight; xxmax = (int)((yymax - old_y)/(t+0.0001) + old_x); } xxmin = 0; yymin = t*(xxmin-old_x) + old_y; if(yymin < 0) { yymin = 0; xxmin = (yymin - old_y)/(t+0.0001)+ old_x; } Xi=xxmax; Yi=yymax; Calcb(); Canvas->Pen->Color=clBlack; LINEA(Xmant,Ymant,XMXant,YMXant); Ejes(); Canvas->Pen->Color=clAqua; Canvas->Ellipse(old_x,old_y,old_x,old_y); Canvas->Ellipse(old_x-1,old_y-1,old_x+1,old_y+1); Canvas->Ellipse(old_x-2,old_y-2,old_x+2,old_y+2); Canvas->Pen->Color=clFuchsia; LINEA(xxmin,yymin,xxmax,yymax); Panel4->Visible=false; Xmant=xxmin; Ymant=yymin; XMXant=xxmax; YMXant=yymax; XANT=old_x; YANT=old_y; } //------------------------------------------------------------------------------------------------------------------------FUNCION: COEXClick() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta pasa este valor a modiCclick. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::COEXClick(TObject *Sender, TUDBtnType Button) { MODIa->Text=COEX->Position*0.1; strcpy(text,MODIa->Text.c_str()); sscanf(text,"%f",&INTER1); // M ESTA EN reales sprintf(text,"%.1f",INTER1); Label16->Caption=text; R=INTER1; M=R; Traza_Recta(R); }
//------------------------------------------------------------------------------------------------------------------------FUNCION: CTECclick() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::CTEClick(TObject *Sender, TUDBtnType Button) { float cte; MODIC->Text=CTE->Position*0.1; strcpy(text,MODIC->Text.c_str()); sscanf(text,"%f",&cte); } //------------------------------------------------------------------------------------------------------------------------FUNCION: MODIaChange() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::MODIaChange(TObject *Sender) { float W; strcpy(text,MODIa->Text.c_str()); sscanf(text,"%f",&INTER1); W=INTER1; sprintf(text,"%.1f",W); Label16->Caption=text; MODIm->Text=text; COEX->Position=INTER1*10; IncM->Position=INTER1*10; R=INTER1; M=R; if(INTER1<=300) Traza_Recta(R); else Limpia(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: MODICChange() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::MODICChange(TObject *Sender) { float W; strcpy(text,MODIC->Text.c_str()); sscanf(text,"%f",&INTER); CTE->Position=INTER*10.0; Incb->Position=INTER*10.0; sprintf(text,"%.1f",INTER); MODIb->Text=text; W=INTER; Recta2(W); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Calcb() OBJETIVO: Calcula la pendiente. Ninguno. PARAMETROS: //-------------------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::Calcb() { float W; b=Y1-(M*X1); W=b; sprintf(text,"%.1f",W); MODIb->Text=text; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Recta2() OBJETIVO: Traza la recta con los nuevos valores. Un real: b la nueva pendiente. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Recta2(float b) { int xxmax, yymax, xxmin, yymin; float i,j,k; float t=-M; X1=(float(old_x-(float)(VISUAL/2.0))/30.0); Y1=(M*X1)+ b; i=t; j=1; k=b; sprintf(text,"(%.2f)",i); MODIa->Text=text; sprintf(text,"(%.2f)",j); MODIBY->Text=text; sprintf(text,"(%.2f)",-k); MODIC->Text=text; sprintf(text,"(%.1f)",Y1); Label9->Caption=text; sprintf(text,"(%.1f)",X1); Label10->Caption=text; presenta(X1,Y1,X2,Y2); old_y= ClientHeight/2.0 - (Y1*30); xxmax = VISUAL; yymax = t*(xxmax-old_x) + old_y; if(yymax > ClientHeight) { yymax = ClientHeight; xxmax = (yymax - old_y)/(t+0.0001) + old_x; } xxmin = 0; yymin = t*(xxmin-old_x) + old_y; if(yymin < 0) { yymin = 0; xxmin = (yymin - old_y)/(t+0.0001)+ old_x; } Canvas->Pen->Color=clBlack; LINEA(Xmant,Ymant,XMXant,YMXant); Canvas->Ellipse(XANT,YANT,XANT,YANT); Canvas->Ellipse(XANT-1,YANT-1,XANT+1,YANT+1); Canvas->Ellipse(XANT-2,YANT-2,XANT+2,YANT+2); Canvas->Ellipse(XANT-3,YANT-3,XANT+3,YANT+3); Canvas->Pen->Color=clFuchsia;
Ejes(); Canvas->Pen->Color=clAqua; Canvas->Ellipse(old_x,old_y,old_x,old_y); Canvas->Ellipse(old_x-1,old_y-1,old_x+1,old_y+1); Canvas->Ellipse(old_x-2,old_y-2,old_x+2,old_y+2); Canvas->Pen->Color=clFuchsia; LINEA(xxmin,yymin,xxmax,yymax); Panel4->Visible=false; Xmant=xxmin; Ymant=yymin; XMXant=xxmax; YMXant=yymax; XANT=old_x; YANT=old_y; old_x=(X1*30)+(VISUAL/2); old_y=(ClientHeight/2)-(Y1*30); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Presenta() OBJETIVO: Pinta el valor del resultado de la ecuacin de la recta. float X1,Y1,X2,Y2 Puntos sobre los cuales se trazar la recta. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::presenta(float X1,float Y1,float X2,float Y2) { float t; char uno[25],dos[25],tres[25],cuatro[25]; sprintf(uno,"y = 0 "); Label13->Caption=uno; sprintf(dos,"m = (%.2f)",M); Label1->Caption=dos; t = M*X1; sprintf(tres,"- (%.2f) ",t); sprintf(cuatro,"+ (%.2f ) ",Y1); strcpy(text,uno); strcat(text,tres); strcat(text,cuatro); Label13->Caption=text; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Limpia() OBJETIVO: limpia la pantalla visual. Ninguno. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Limpia() { MODIm->Text=0; IncM->Position=0; MODIb->Text=0; Incb->Position=0; Label9->Caption="y1"; Label10->Caption="x1"; Panel4->Visible=true; Tag=0; z=true; t=false; w=n=s=false;
} //------------------------------------------------------------------------------------------------------------------------FUNCION: Button1Clic() OBJETIVO: Oculta una ventana de dilogo. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Panel1->Visible=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Acercade() OBJETIVO: Abre una ventana de dilogo. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Acercade1Click(TObject *Sender) { Panel1->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: INCREMYClick() OBJETIVO: Guarda los incrementos hechos para modificar la ecuacion de la recta. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::INCREMYClick(TObject *Sender, TUDBtnType Button) {/* float cteY; MODIBY->Text=INCREMY->Position*0.1; strcpy(text,MODIBY->Text.c_str()); sscanf(text,"%f",&cteY); Label12->Caption=text;*/ } //------------------------------------------------------------------------------------------------------------------------FUNCION: BaseTeorica() OBJETIVO: Abre una ventana de dilogo. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::BaseTorica1Click(TObject *Sender) { Application->HelpCommand(HELP_CONTENTS,0); Invalidate(); } //--------------------------------------------------------------------------------------------------------------------------
SU ARCHIVO DE CABECERA. //------------------------------------------------------------------------------------------------------------------------ARCHIVO: AMXPLUSB.H //------------------------------------------------------------------------------------------------------------------------#ifndef MXPLUSBH #define MXPLUSBH #include <vcl\Classes.hpp> #include <vcl\Controls.hpp> #include <vcl\StdCtrls.hpp> #include <vcl\Forms.hpp> #include <vcl\Menus.hpp> #include <vcl\ExtCtrls.hpp> #include <vcl\ComCtrls.hpp> //----------------------------------------------------------------------------------------------------------------------class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Limpiar1; TMenuItem *Salir1; TMenuItem *Menu1; TPanel *Panel3; TMemo *Memo2; TButton *boton2; TMenuItem *Ayuda1; TPanel *Panel5; TMemo *Memo4; TPanel *Panel6; TMemo *Memo5; TMenuItem *Uso1; TMenuItem *Indicaciones1; TEdit *MODIm; TEdit *MODIb; TUpDown *IncM; TUpDown *Incb; TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TEdit *MODIa; TLabel *Label5; TEdit *MODIBY; TLabel *Label6; TUpDown *COEX; TEdit *MODIC; TUpDown *CTE; TLabel *Label7; TPanel *Panel4; TMemo *Memo1; TLabel *Label8; TLabel *Label9; TLabel *Label10; TLabel *Label11; TLabel *Label12; TLabel *Label13;
TLabel *Label16; TPanel *Panel1; TButton *Button1; TLabel *Label14; TLabel *Label15; TImage *Image1; TMenuItem *Acercade1; TLabel *Label17; TLabel *Label18; TLabel *Label19; TLabel *Label20; TLabel *Label21; TUpDown *INCREMY; TMenuItem *BaseTorica1; void __fastcall FormPaint(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Limpiar1Click(TObject *Sender); void __fastcall Salir1Click(TObject *Sender); void __fastcall cClick(TObject *Sender); void __fastcall FormDblClick(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Uso1Click(TObject *Sender); void __fastcall Indicaciones1Click(TObject *Sender); void __fastcall MODImChange(TObject *Sender); void __fastcall MODIbChange(TObject *Sender); void __fastcall MODIaChange(TObject *Sender); void __fastcall MODIBYChange(TObject *Sender); void __fastcall MODICChange(TObject *Sender); void __fastcall IncMClick(TObject *Sender, TUDBtnType Button); void __fastcall IncbClick(TObject *Sender, TUDBtnType Button); void __fastcall COEXClick(TObject *Sender, TUDBtnType Button); void __fastcall CTEClick(TObject *Sender, TUDBtnType Button); void __fastcall Button1Click(TObject *Sender); void __fastcall Acercade1Click(TObject *Sender); void __fastcall INCREMYClick(TObject *Sender, TUDBtnType Button); void __fastcall BaseTorica1Click(TObject *Sender); private: // User declarations public: // User declarations void __fastcall Ejes(); void __fastcall DIBUJA(int P1,int P2, int P3,int P4,int accion); void __fastcall TForm1::LINEA(int Xi,int Yi,int Xf,int Yf); void __fastcall Obten_Puntos(int X,int Y); void __fastcall Punto_A_mover(int X,int Y,int P); void __fastcall CALCLIN(int old_x,int old_y,int X,int Y); void __fastcall Traza_Recta(float R); void __fastcall Calcb(); void __fastcall Recta2(float b); void __fastcall presenta(float X1,float Y1,float X2,float Y2); void __fastcall Limpia(); float X1,Y1,X2,Y2,old_x,old_y,Xf,Yf,sign,M,D; int Xi,Yi; char text[100]; bool z,t,w,n,s,e,nn,ss,ee; __fastcall TForm1(TComponent* Owner);
//------------------------------------------------------------------------------------------------------------------------ARCHIVO: SIM1.CPP OBJETIVO: Caratula de presentacin e integracin de los anteriores mdulos. //------------------------------------------------------------------------------------------------------------------------#include <vcl\vcl.h> #include<dos.h> #pragma hdrstop #include "sim1.h" #pragma resource "*.dfm" TForm1 *Form1; int VISUAL; bool VIS=true; //------------------------------------------------------------------------------------------------------------------------FUNCION: TForm1() OBJETIVO: Crea una nueva forma. //------------------------------------------------------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Panel2->Visible=true; Application->HelpFile = "DOCUMENTO.HLP"; } /*-----------------------------------------------------------------------------FUNCIN : Ejes() OBJETIVO: Dibuja los ejes y sus graduaciones PARAMETROS: Ninguno. ------------------------------------------------------------------------------*/ void __fastcall TForm1::Ejes() { int k; int Ex=30; int VENTANA; VENTANA=ClientWidth-600; VISUAL=ClientWidth-VENTANA; Canvas->Pen->Style=psSolid; Canvas->Pen->Color=clBlack; LINEA(VISUAL/2,0,VISUAL/2,ClientHeight); // Eje Y LINEA(0,ClientHeight/2,VISUAL+60,ClientHeight/2);// Eje X k=0; for(int i=1,j=0;i<=11,j<12;i++,j++) { LINEA(VISUAL/2+1,ClientHeight/2+k,VISUAL/2+5,ClientHeight/2+k);// Graduacin en Y LINEA(VISUAL/2+1,ClientHeight/2-k,VISUAL/2+5,ClientHeight/2-k); LINEA(VISUAL/2+k,ClientHeight/2+1,VISUAL/2+k,ClientHeight/2+5);// Graduacin en X LINEA(VISUAL/2-k,ClientHeight/2+1,VISUAL/2-k,ClientHeight/2+5); Canvas->Font->Size=7; Canvas->Font->Pitch=fpDefault; Canvas->Font->Color=clBlack; Canvas->TextOut((VISUAL/2)+5,((ClientHeight/2)-30)-k,i); Canvas->TextOut((VISUAL/2)+5,((ClientHeight/2)+30)+k,-i); // Numeracin en Y Canvas->TextOut((VISUAL/2)+k,(ClientHeight/2)+5,j); // Numeracin en X Canvas->TextOut((VISUAL/2)-k,(ClientHeight/2)+5,-j); k+=Ex; } }
//------------------------------------------------------------------------------------------------------------------------FUNCION: LINEA() OBJETIVO: Traza una linea por los puntos establecidos. int P1, P2, P3, P4, Coordenadas del punto inicial y punto fianl del trazo de la linea. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::LINEA(int P1,int P2,int P3,int P4) { Canvas->MoveTo(P1,P2); Canvas->LineTo(P3,P4); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Paint() OBJETIVO: repintar la aplicacin. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender) { Ejes(); Panel2->Visible =true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: resize() OBJETIVO: Escala la ventana de trabajo. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::FormResize(TObject *Sender) { Invalidate(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Salir() OBJETIVO: Finaliza la tarea. *Sender. Un evento del Mouse. PARAMETROS: //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Salir1Click(TObject *Sender) { Close(); exit(1); } //------------------------------------------------------------------------------------------------------------------------FUNCION: PENDPOS() OBJETIVO: traza rectas con pendiente positiva. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::PENDPOS() { int X,X0,X1,Y1,X2,Y2,i,j; Panel2->Visible=true; X=X1=0; Y1=ClientHeight; X0=X2=VISUAL; Y2=0; Canvas->Pen->Color=clSilver; LINEA(X1,Y1,X2,Y2); j=30; for(i=0;i<20;i++)
{ LINEA(X1+=j,Y1,X2+=j,Y2); LINEA(X-=j,Y1,X0-=j,Y2); } sleep(3); Panel2->Visible=false; Invalidate(); Panel3->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Limpiar() OBJETIVO: Limpia la ventana de trabajo. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Limpiar1Click(TObject *Sender) { Invalidate(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: PENDNEG() OBJETIVO: traza rectas con pendiente negativa. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::PENDNEG() { int X,X0,X1,Y1,X2,Y2,i,j; Panel3->Visible=true; Ejes(); X=X1=0; Y1=0; X0=X2=VISUAL; Y2=ClientHeight; Panel3->Visible=true; Canvas->Pen->Color=clSilver; LINEA(X1,Y1,X2,Y2); j=30; for(i=0;i<20;i++) { LINEA(X1+=j,Y1,X2+=j,Y2); LINEA(X-=j,Y1,X0-=j,Y2); } sleep(3); Panel3->Visible=false; Invalidate(); Panel4->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Button1Click() OBJETIVO: Llama la funcion PENDPOS. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { PENDPOS(); } //-------------------------------------------------------------------------------------------------------------------------
FUNCION: Button2Click() OBJETIVO: oculta una ventana de dialogo y llama a la funcin PENDNEG(). PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { Panel2->Visible=false; PENDNEG(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: PENDCERO() OBJETIVO: traza rectas con pendiente cero. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::PENDCERO() { int i,y,y1; y=y1=ClientHeight/2; Panel2->Visible=false; Panel4->Visible=true; Ejes(); Canvas->Pen->Color=clSilver; LINEA(0,ClientHeight/2,VISUAL+60,ClientHeight/2); for(i=0;i<=10;i++) { y-=30; y1+=30; LINEA(0,y,VISUAL+60,y); LINEA(0,y1,VISUAL+60,y1); } sleep(3); Panel4->Visible=false; Invalidate(); Panel5->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: PEND90() OBJETIVO: traza rectas con pendiente de 90 grados. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::PEND90() { int i,y,y1; y=y1=VISUAL/2; Panel5->Visible=true; Ejes(); Canvas->Pen->Color=clSilver; LINEA(VISUAL/2,0,VISUAL/2,ClientHeight); for(i=0;i<=10;i++) { y-=30; y1+=30; LINEA(y,0,y,ClientHeight); LINEA(y1,0,y1,ClientHeight); } sleep(2);
Invalidate(); Panel5->Visible=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Button3Click() OBJETIVO: Oculta una ventana de dialogo y llama a la funcion PENDCERO. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender) { Panel3->Visible=false; PENDCERO(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Button4Click() OBJETIVO: Oculta una ventana de dialogo y llama a la funcion PEND90. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender) { PEND90(); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Positiva1Click() OBJETIVO: Oculta varias ventanas de dialogo.. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Positiva1Click(TObject *Sender) { Panel3->Visible=false; Panel4->Visible=false; Panel5->Visible=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Negativa1Click() OBJETIVO: Oculta varias ventanas de dialogo. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Negativa1Click(TObject *Sender) { Panel2->Visible=false; Panel4->Visible=false; Panel5->Visible=false; Panel3->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Cero1Click() OBJETIVO: Oculta varias ventanas de dialogo y abre una. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Cero1Click(TObject *Sender) { Panel3->Visible=false; Panel2->Visible=false; Panel5->Visible=false; Panel4->Visible=true;
} //------------------------------------------------------------------------------------------------------------------------FUNCION: Indeterminada() OBJETIVO: Oculta varias ventanas de dialogo. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Indeterminada1Click(TObject *Sender) { Panel3->Visible=false; Panel4->Visible=false; Panel2->Visible=false; Panel5->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Acercade1Click() OBJETIVO: Abre una ventanas de dialogo. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Acercade1Click(TObject *Sender) { Panel6->Visible=true; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Button5Click() OBJETIVO: Oculta una ventanas de dialogo. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Button5Click(TObject *Sender) { Panel6->Visible=false; } //------------------------------------------------------------------------------------------------------------------------FUNCION: Contenido1Click() OBJETIVO: Llama un archivo de ayuda. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Contenido1Click(TObject *Sender) { Application->HelpCommand(HELP_CONTENTS, 0); } //------------------------------------------------------------------------------------------------------------------------FUNCION: Busquedapor1Click() OBJETIVO: llama al indexado del archivo de ayuda. PARAMETROS: Ninguno //------------------------------------------------------------------------------------------------------------------------void __fastcall TForm1::Busquedapor1Click(TObject *Sender) { Application->HelpCommand(HELP_PARTIALKEY, (long) ""); } //---------------------------------------------------------------------------
SU ARCHIVO DE CABECERA. //---------------------------------------------------------------------------------------------------------------------ARCHIVO: SIM1.HPP //---------------------------------------------------------------------------------------------------------------------#ifndef sim1H #define sim1H #include <vcl\Classes.hpp> #include <vcl\Controls.hpp> #include <vcl\StdCtrls.hpp> #include <vcl\Forms.hpp> #include <vcl\ExtCtrls.hpp> #include <vcl\Menus.hpp> //--------------------------------------------------------------------------class TForm1 : public TForm { __published: // IDE-managed Components TPanel *Panel1; TPanel *Panel2; TMainMenu *MainMenu1; TMenuItem *Salir1; TMenuItem *Limpiar1; TMemo *Memo1; TPanel *Panel3; TMemo *Memo2; TButton *Button1; TButton *Button2; TPanel *Panel4; TPanel *Panel5; TMemo *Memo3; TMemo *Memo4; TButton *Button3; TButton *Button4; TMenuItem *Opciones1; TMenuItem *Positiva1; TMenuItem *Negativa1; TMenuItem *Cero1; TMenuItem *Indeterminada1; TMenuItem *Acercade1; TPanel *Panel6; TLabel *Label1; TLabel *Label2; TLabel *Label3; TImage *Image1; TButton *Button5; TMenuItem *aYuda1; TMenuItem *Contenido1; TMenuItem *Busquedapor1; void __fastcall Ejes(); void __fastcall PENDPOS(); void __fastcall PENDNEG(); void __fastcall PENDCERO(); void __fastcall PEND90(); void __fastcall LINEA(int P1, int P2,int P3,int P4); void __fastcall FormPaint(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall Salir1Click(TObject *Sender);
void __fastcall Limpiar1Click(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall Button4Click(TObject *Sender); void __fastcall Positiva1Click(TObject *Sender); void __fastcall Negativa1Click(TObject *Sender); void __fastcall Cero1Click(TObject *Sender); void __fastcall Indeterminada1Click(TObject *Sender); void __fastcall Acercade1Click(TObject *Sender); void __fastcall Button5Click(TObject *Sender); void __fastcall Contenido1Click(TObject *Sender); void __fastcall Busquedapor1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; extern TForm1 *Form1; #endif