<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7310571696968123006</id><updated>2024-10-04T20:06:34.366-06:00</updated><title type='text'>Graficación</title><subtitle type='html'>By Vicente Vázquez</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-8622772902832633205</id><published>2012-04-11T19:12:00.001-05:00</published><updated>2017-03-18T16:19:28.109-06:00</updated><title type='text'>Linea DDA en C# Con Open GL</title><content type='html'>Hola chavos! Me da gusto saludarlos y que me acompañen a realizar más aplicaciones de graficación. El día de hoy vamos a continuar con aplicaciones en C#, vamos a volver a realizar la aplicación del algoritmo DDA para dibujar líneas pero ésta vez lo vamos a hacer utilizando las librerías de Open GL.&lt;br /&gt;
&lt;br /&gt;
Lo primero que tenemos que hacer es descargar la aplicación taoframework (en mi caso estoy usando la versión 2.1.0). Lo instalamos normalmente dando &quot;Next&quot; a cada ventana que nos salga. Ahora creamos una nueva aplicación en consola en C#. Aun no podemos utilizar las librerías de Open GL sino que tenemos que agregar las referencias al nuestro proyecto, lo anterior lo hacemos abriendo el menú &quot;Proyecto&quot;, luego &quot;Agregar referencia...&quot;, después nos vamos a la pestaña &quot;Examinar&quot; y ahí buscamos la carpeta donde hayamos instalado el taoframework y en alguna de las carpetas buscamos los archivos &quot;Tao.OpenGL.dll&quot; y &quot;Tao.FreeGlut.dll&quot; y le damos clic a &quot;Aceptar&quot;. Ahora tenemos que agregar los &quot;using&quot; para poder acceder a las clases de estas librerías, agregamos los siguientes &quot;using&quot; al final de los que están cargados por defecto:&lt;br /&gt;
&lt;br /&gt;
using Tao.FreeGlut;&lt;br /&gt;
using Tao.OpenGl;&lt;br /&gt;
&lt;br /&gt;
Ahora declaramos las siguientes variables de manera local:&lt;br /&gt;
&lt;br /&gt;
static double x1, y1, x2, y2;&lt;br /&gt;
&lt;br /&gt;
Ahora dentro del método Main() que es el principal de nuestra aplicación, escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
static void Main(string[] args)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.WriteLine(&quot;introduzca el valor de X1&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x1 = Convert.ToDouble(Console.ReadLine());&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.WriteLine(&quot;introduzca el valor de Y1&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y1 = Convert.ToDouble(Console.ReadLine());&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.WriteLine(&quot;introduzca el valor de X2&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x2 = Convert.ToDouble(Console.ReadLine());&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.WriteLine(&quot;introduzca el valor de Y2&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y2 = Convert.ToDouble(Console.ReadLine());&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glut.glutInit();//funciones propias de opengl&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glut.glutInitWindowSize(640, 480);//creamos una ventana&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glut.glutCreateWindow(&quot;**************Algoritmo DDA**************&quot;);//colocamos titulo a la ventana&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //llamamos a la funcion dda&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glut.glutDisplayFunc(dda);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glut.glutMainLoop(); &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
Después declaramos un método estático llamado dda(), el cual dibujará unas líneas que dividirán la pantalla representando los 4 cuadrantes y llamará al método que dibujará la línea DDA:&lt;br /&gt;
&lt;br /&gt;
public static void dda()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //componentes necesarios de opengl&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);//limpia el buffer de la pantall&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glColor3f(0.6F, 0.6F, 0.6F);//poner color a los pixeles&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glLoadIdentity();//&#39;&#39;muy importante;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glPointSize(0.5f);//medida de los puntos&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glBegin(Gl.GL_POINTS);//funcion para dibujar puntos&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //dibujando el plano&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float z = -1, w = 1, c = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; 200; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glColor3f(w, c, z);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glVertex2d(z, 0);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glVertex2d(0, w);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; z += .01f;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; w -= .01f;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; c += .1f;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glEnd();//termina funcion para dibujar puntos&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //pasamos las&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glPointSize(3.0f);//sirve para el tamaño de los pixeles&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glColor3f(1.0f, 0.0f, 0.0f);//sirve para el color de los pixeles&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ddaDibujar(x1, y1, x2, y2);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
Finalmente escribimos el método que contiene el algoritmo para dibujar la línea DDA en este caso el nombre del método es ddaDibujar() y el código es el siguiente:&lt;br /&gt;
&lt;br /&gt;
public static void ddaDibujar(double x1, double y1, double x2, double y2)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double xinicial = x1, yinicial = y1, xfinal = x2, yfinal = y2, x, y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double deltax, deltay, xincremento, yincremento;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double pasos;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; deltax = xfinal - xinicial;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; deltay = yfinal - yinicial;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Math.Abs(deltax) &amp;gt; Math.Abs(deltay))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pasos = Math.Abs(deltax);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pasos = Math.Abs(deltay);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xincremento = (deltax / pasos) / 25;//10;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; yincremento = (deltay / pasos) / 25;// 10;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = xinicial;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = yinicial;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glBegin(Gl.GL_POINTS);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (double k = .1; k &amp;lt;= pasos; k += .1)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = (x + xincremento);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = (y + yincremento);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glVertex2d(x, y);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gl.glEnd();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //termina dda&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
Y eso es todo amigos, si instalaron bien el taoframework y agregaron bien las referencias de las librerías a la aplicación no deberían de tener problemas ya que el resto fue bastante sencillo ahora compilamos y corremos nuestra aplicación y nos saldrá una ventana de consola pidiendo los valores de x1, y1, x2 y y2, que serán las coordenadas iniciales y finales de la línea a dibujar:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-oR3gCFweIl8/T4Ycjxw4RCI/AAAAAAAAAKo/xHJK47u3krQ/s1600/DDA+C%23(OpenGL)+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVxeYngYiN4m28h8Og88nbfp78tvHpc4fcIR4Vk05uAPy-Qx9XNKwUmWqHKBH51lK0-Gtj_FrhklT3ih2Eh6MBjG7PdQg1GEfhfBFmfV5FqDYrJmw-W6cJY8ysuwnp6RyrZtD1fxL8z7U/s1600/DDA+C%2523%2528OpenGL%2529+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;159&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVxeYngYiN4m28h8Og88nbfp78tvHpc4fcIR4Vk05uAPy-Qx9XNKwUmWqHKBH51lK0-Gtj_FrhklT3ih2Eh6MBjG7PdQg1GEfhfBFmfV5FqDYrJmw-W6cJY8ysuwnp6RyrZtD1fxL8z7U/s320/DDA+C%2523%2528OpenGL%2529+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=7310571696968123006&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;Podemos teclear los valore que nosotros deseemos, tanto valores negativos como valores positivos ya que tenemos representados los 4 cuadrantes. En mi caso a manera de ejemplo colocaré las coordenadas de: 0, 0, 1, 1. La línea que me saldrá a mi estará representada en el primer cuadrante debido a que estoy utilizando solo valores positivos, aquí lo tenemos:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-N9bCIn_M2uQ/T4YdVqRl2II/AAAAAAAAAKw/q_V6mdAxaCI/s1600/DDA+C%23(OpenGL)+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzWy01NrvcHg-tH6eo0yKhjE6kDTXvRRBIUjx1l9H3LVGyU32n-B1lQWmV6Qpr3R2HxfJa8V0pR1SkSRWS3vAkdOTlhZ42f9KqANMaH68qIZ6EDRbh4P_Cviw0UscN1OXPmagMrj_hRKw/s1600/DDA+C%2523%2528OpenGL%2529+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzWy01NrvcHg-tH6eo0yKhjE6kDTXvRRBIUjx1l9H3LVGyU32n-B1lQWmV6Qpr3R2HxfJa8V0pR1SkSRWS3vAkdOTlhZ42f9KqANMaH68qIZ6EDRbh4P_Cviw0UscN1OXPmagMrj_hRKw/s320/DDA+C%2523%2528OpenGL%2529+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Y bien amigos pues eso es todo por esta ocasión, los espero en la próxima para ver más figuras que podemos graficar y las diferentes maneras que tenemos para hacerlo. La próxima semana regresaremos a realizar aplicaciones en C++ Builder que ha sido nuestra principal herramienta de programación a lo largo de este semestre. Hasta la próxima amigos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/8622772902832633205/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/linea-dda-en-c-con-open-gl.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/8622772902832633205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/8622772902832633205'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/linea-dda-en-c-con-open-gl.html' title='Linea DDA en C# Con Open GL'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVxeYngYiN4m28h8Og88nbfp78tvHpc4fcIR4Vk05uAPy-Qx9XNKwUmWqHKBH51lK0-Gtj_FrhklT3ih2Eh6MBjG7PdQg1GEfhfBFmfV5FqDYrJmw-W6cJY8ysuwnp6RyrZtD1fxL8z7U/s72-c/DDA+C%2523%2528OpenGL%2529+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-4695569723669703612</id><published>2012-04-10T13:51:00.000-05:00</published><updated>2017-03-18T16:18:30.318-06:00</updated><title type='text'>Linea DDA en C#</title><content type='html'>Hola una vez más amigos, me alegro de poder saludarlos de nueva cuenta y hay que seguir con más aplicaciones de programación, pero esta vez no serán en C++ Builder, sino que la aplicación de hoy la programaremos en C#. La aplicación que vamos a realizar será la misma que hicimos la vez pasada del algoritmo DDA para dibujar líneas solo que ahora estará en C#.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Bien pues empezamos, lo primero será colocar los siguientes componentes en la Forma:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
-1 pictureBox&lt;/div&gt;
&lt;div&gt;
-1 panel&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Dentro del panel colocamos los siguientes componentes:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
-6 label&lt;/div&gt;
&lt;div&gt;
-4 textBox&lt;/div&gt;
&lt;div&gt;
-5 button&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Además también necesitaremos:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
-1 colorDialog&lt;/div&gt;
&lt;div&gt;
-3 timer&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Los componentes pueden acomodarlos de la manera como ustedes gusten como siempre, en mi caso yo los acomode de la siguiente manera:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-fmWaLsML0nk/T4R6Xm8MVzI/AAAAAAAAAKA/lCDh1koXfGc/s1600/AlgoritmoDDA+C%23+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4AGn6UKWrJEKekcOAJK8Lka-9zMhU3qXSY8_p3ge8AiueXCMgxCyzIOj9cE21lIDAS6uKkEAqJAwmZAKdd0d0qv-8sPYiQKLbhqM0LMLO39IkVGSHeP6CI9zushZJVDiMfIgZGIFS7DA/s1600/AlgoritmoDDA+C%2523+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;241&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4AGn6UKWrJEKekcOAJK8Lka-9zMhU3qXSY8_p3ge8AiueXCMgxCyzIOj9cE21lIDAS6uKkEAqJAwmZAKdd0d0qv-8sPYiQKLbhqM0LMLO39IkVGSHeP6CI9zushZJVDiMfIgZGIFS7DA/s320/AlgoritmoDDA+C%2523+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora para nuestra aplicación también necesitaremos crear nuestra propia clase. Para esto nos vamos al menú &quot;Proyecto&quot; y luego &quot;Agregar clase...&quot; y le damos el nombre de &quot;Graficos&quot;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Luego necesitaremos agregar un &quot;using&quot; para poder utilizar las clases de los componentes que colocamos sobre la Forma, la siguiente línea la agregamos al final de los &quot;using&quot; ya por default:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
using System.Windows.Forms;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Bien ahora si comenzamos con la codificación del método para dibujar la linea DDA, al igual que la aplicación realizada en C++ Builder, nuestro método tendrá 2 sobrecargas, una para dibujar la línea normal y la otra para dibujarla con el color que deseemos. A diferencia de C++ Builder, aquí además de los 4 parámetros que necesitamos, agregaremos un parámetro más, el cual será el pictureBox donde estamos graficando. Enseguida tenemos el código de nuestro primer método LineaDDA():&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
public void lineaDDA(int x1, int y1, int x2, int y2, PictureBox p1)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int dx, dy, pasos, k;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_inc, y_inc, x, y;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dx = x2 - x1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dy = y2 - y1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Math.Abs(dx) &amp;gt; Math.Abs(dy))&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pasos = Math.Abs(dx);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pasos = Math.Abs(dy);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_inc = (float)dx / pasos;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_inc = (float)dy / pasos;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Bitmap bmp = new Bitmap(p1.ClientSize.Width, p1.ClientSize.Height);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bmp.SetPixel((int)x, (int)y, Color.Gray);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (k = 1; k &amp;lt; pasos + 1; k++)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x + x_inc;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y + y_inc;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bmp.SetPixel((int)x, (int)y, Color.Gray);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics g = p1.CreateGraphics();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora codificamos la segunda sobrecarga del método, con el parámetro del color:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
public void lineaDDA(int x1, int y1, int x2, int y2, PictureBox p1, Color color)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int dx, dy, pasos, k;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_inc, y_inc, x, y;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dx = x2 - x1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dy = y2 - y1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Math.Abs(dx) &amp;gt; Math.Abs(dy))&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pasos = Math.Abs(dx);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pasos = Math.Abs(dy);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_inc = (float)dx / pasos;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_inc = (float)dy / pasos;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Bitmap bmp = new Bitmap(p1.ClientSize.Width, p1.ClientSize.Height);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bmp.SetPixel((int)x, (int)y, Color.Red);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (k = 1; k &amp;lt; pasos + 1; k++)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x + x_inc;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y + y_inc;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bmp.SetPixel((int)x, (int)y, color);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics g = p1.CreateGraphics();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora nos vamos al código de nuestro Form1.cs. Ahí declarmos las siguientes variables y objetos de manera global:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graficos g = new Graficos();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x1, y1, x2, y2, lenght=80;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color color = Color.Black;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bool cono=false, circ=false, pol=false;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora abrimos el primer botón, el cual en mi caso es el botón que nos servirá para cambiar el color de la línea. En ese botón escribimos el siguiente código:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void button1_Click(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (colorDialog1.ShowDialog() == DialogResult.OK)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = colorDialog1.Color;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora damos clic en el button2, el cual será el que trazará la línea con las coordenadas dadas en los textBox, el código lo tenemos a continuación:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void button2_Click(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.Refresh();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x1 = Convert.ToInt16(textBox1.Text);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y1 = Convert.ToInt16(textBox2.Text);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x2 = Convert.ToInt16(textBox3.Text);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y2 = Convert.ToInt16(textBox4.Text);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g.lineaDDA(x1, y1, x2, y2, pictureBox1, color);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En nuestra aplicación también tendremos varios efectos generados con líneas, el primer botón habilitará el primer efecto es caso de estar inhabilitado y lo inhabilitará en caso de que esté habilitado:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void button3_Click(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (cono == false)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cono = true;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer1.Enabled = true;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cono = false;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer1.Enabled = false;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
El siguiente botón hace exactamente lo mismo que el anterior solo que con el segundo efecto que generaremos:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void button4_Click(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (circ == false)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; circ = true;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer2.Enabled = true;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; circ = false;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer2.Enabled = false;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora hacemos doble clic en el último botón el cual hará lo mismo que los 2 anteriores solo que con el último efecto que vamos a generar:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void button5_Click(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (pol == false)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pol = true;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer3.Enabled = true;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pol = false;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer3.Enabled = false;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Cada uno de los efectos estará dentro de un timer. Vamos a codificar el primero, el cual generará el efecto de que se está dibujando un cono con líneas de diferentes colores:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void timer1_Tick(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int centro_x = 150;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int centro_y = 150;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics gr = pictureBox1.CreateGraphics();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float pos_x, pos_y;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Random ran = new Random();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Pen pluma;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle = 0; angle &amp;lt; 360 * 10; angle++)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_x = (float)(centro_x + lenght * Math.Sin(angle / (180 * Math.PI)));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_y = (float)(centro_y + lenght * Math.Cos(angle / (180 * Math.PI)));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pluma = new Pen(Color.FromArgb(ran.Next(256), ran.Next(256), ran.Next(256)));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gr.DrawLine(pluma, centro_x, centro_y, pos_x+80, pos_y+180);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Thread.Sleep(100);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora vamos a codificar el efecto que estará en el segundo timer. Este efecto dibujará un circulo con líneas de diferentes colores:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void timer2_Tick(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int centro_x = 150;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int centro_y = 150;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics gr = pictureBox1.CreateGraphics();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float pos_x, pos_y;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Random ran = new Random();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Pen pluma;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle = 0; angle &amp;lt; 360*10; angle++)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_x = (float)(centro_x + lenght * Math.Sin(angle / (180 * Math.PI)));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_y = (float)(centro_y + lenght * Math.Cos(angle / (180 * Math.PI)));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pluma = new Pen(Color.FromArgb(ran.Next(256), ran.Next(256), ran.Next(256)));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gr.DrawLine(pluma, centro_x, centro_y, pos_x, pos_y);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Finalmente codificamos el último de nuestros efectos, el cuál dibujará un cuadrado que gira sobre una de sus esquinas dibujando un par de círculos concéntricos, el código lo tenemos a continuación:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
private void timer3_Tick(object sender, EventArgs e)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int centro_x = pictureBox1.Width / 2;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int centro_y = pictureBox1.Height / 2;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lenght = 90;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float pos_x, pos_y, pos_x2, pos_y2, pos_x3, pos_y3;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double hypot = Math.Sqrt(lenght * lenght + lenght * lenght);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Random ran = new Random();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle = 0; angle &amp;lt; 360; angle++)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = Color.FromArgb(ran.Next(255), ran.Next(255), ran.Next(255));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_y = (float)(centro_y + lenght * Math.Sin(angle / 180.0 * Math.PI));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_x = (float)(centro_x + lenght * Math.Cos(angle / 180.0 * Math.PI));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_y2 = (float)(centro_y + hypot * Math.Sin((angle + 45) / 180.0 * Math.PI));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_x2 = (float)(centro_x + hypot * Math.Cos((angle + 45) / 180.0 * Math.PI));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g.lineaDDA((int)pos_x, (int)pos_y, (int)pos_x2, (int)pos_y2, pictureBox1, color);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_y3 = (float)(centro_y + lenght * Math.Sin((angle + 90) / 180.0 * Math.PI));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos_x3 = (float)(centro_x + lenght * Math.Cos((angle + 90) / 180.0 * Math.PI));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g.lineaDDA((int)pos_x2, (int)pos_y2, (int)pos_x3, (int)pos_y3, pictureBox1, color);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g.lineaDDA((int)pos_x3, (int)pos_y3, (int)centro_x, (int)centro_y, pictureBox1, color);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Thread.Sleep(1);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Bien ahora solo compilamos y corremos nuestra aplicación y vemos los diferentes resultados que tenemos. Deben ser como los siguientes:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-Yw6IQx6QEpY/T4R_lkE17pI/AAAAAAAAAKI/vr6zr9W_qPI/s1600/AlgoritmoDDA+C%23+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhStIfK122oI1mQcH5XS5LOEANSf0nqmSQXMog7l6W35bMTFSIqrduiCg5v6QGDzMBemfCvI3m06EtYV-8sJbjkOF_8JDxtn3UAvs8PCe-_5Pt6jVSMxpYj86qTYI16FPVVV93WeXGB4Og/s1600/AlgoritmoDDA+C%2523+%25282%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;231&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhStIfK122oI1mQcH5XS5LOEANSf0nqmSQXMog7l6W35bMTFSIqrduiCg5v6QGDzMBemfCvI3m06EtYV-8sJbjkOF_8JDxtn3UAvs8PCe-_5Pt6jVSMxpYj86qTYI16FPVVV93WeXGB4Og/s320/AlgoritmoDDA+C%2523+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-XJ4UMSioGZI/T4R_ziT07bI/AAAAAAAAAKQ/3pon5TavIgk/s1600/AlgoritmoDDA+C%23+(3).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlD1DCBHlB7g-J2cD7AGb2-ptvXpK4Ucj_xR_BN-R29C0uEDEnDCicGrQpRu2fUYpkaxjzu8ITcxJljwuk1mIpCLcZDwfYTOmjxwgVD4VA0eB2wDLRoOZVs4oyJ7DNjBVkeXMG91yJZao/s1600/AlgoritmoDDA+C%2523+%25283%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlD1DCBHlB7g-J2cD7AGb2-ptvXpK4Ucj_xR_BN-R29C0uEDEnDCicGrQpRu2fUYpkaxjzu8ITcxJljwuk1mIpCLcZDwfYTOmjxwgVD4VA0eB2wDLRoOZVs4oyJ7DNjBVkeXMG91yJZao/s320/AlgoritmoDDA+C%2523+%25283%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-nEbjUr2RtxE/T4SAA15A6CI/AAAAAAAAAKY/laCcUH57svA/s1600/AlgoritmoDDA+C%23+(4).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB0L6lDy52MDUopgIWNGMQeMSKMOSGF-GfR71oTqnqIgyaa0OQA8HMXBwhD8IwDbrc5G0v3lnEVCbu4vgPTtpb6AhAFG6eyAUYfzS_got3u0fVrsSMUeupvv1WYgpHhEqdkp8oPGrAy20/s1600/AlgoritmoDDA+C%2523+%25284%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;231&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB0L6lDy52MDUopgIWNGMQeMSKMOSGF-GfR71oTqnqIgyaa0OQA8HMXBwhD8IwDbrc5G0v3lnEVCbu4vgPTtpb6AhAFG6eyAUYfzS_got3u0fVrsSMUeupvv1WYgpHhEqdkp8oPGrAy20/s320/AlgoritmoDDA+C%2523+%25284%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-y5vlyUn2ylg/T4SAeQoklcI/AAAAAAAAAKg/784IuIoCeIs/s1600/AlgoritmoDDA+C%23+(5).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=7310571696968123006&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjauWcjZdT9zYNa87H9QUZrYTGKrAceqdvGLS1R8Pz5ctBQWYD8ySeodha4M-yNffhRFNqkcEuLyJ8b353f_GfW6o_yl7o6WEMiTjZAKXVQolV7Me-y7EbWlGPfJZFfqk5bK1_GLdz5C5I/s1600/AlgoritmoDDA+C%2523+%25285%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjauWcjZdT9zYNa87H9QUZrYTGKrAceqdvGLS1R8Pz5ctBQWYD8ySeodha4M-yNffhRFNqkcEuLyJ8b353f_GfW6o_yl7o6WEMiTjZAKXVQolV7Me-y7EbWlGPfJZFfqk5bK1_GLdz5C5I/s320/AlgoritmoDDA+C%2523+%25285%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Bien amigos eso es todo por el día de hoy. Espero que hayan comprendido bien el funcionamiento de nuestro programa en C# &amp;nbsp;que prácticamente son muy pocas las diferencias entre éste y el programa que hicimos en C++ Builder y que ambos realizan lo mismo. Nos vemos en la próxima para continuar con más aplicaciones y aprendiendo un poco más de graficación, ya sea en C++ Builder o en C#. Hasta pronto amigos!.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/4695569723669703612/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/linea-dda-en-c.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/4695569723669703612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/4695569723669703612'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/linea-dda-en-c.html' title='Linea DDA en C#'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4AGn6UKWrJEKekcOAJK8Lka-9zMhU3qXSY8_p3ge8AiueXCMgxCyzIOj9cE21lIDAS6uKkEAqJAwmZAKdd0d0qv-8sPYiQKLbhqM0LMLO39IkVGSHeP6CI9zushZJVDiMfIgZGIFS7DA/s72-c/AlgoritmoDDA+C%2523+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-2048001133801978417</id><published>2012-04-09T17:59:00.001-05:00</published><updated>2017-03-18T16:16:47.352-06:00</updated><title type='text'>Linea DDA</title><content type='html'>&lt;br /&gt;
Hola amigos espero que estén de lo mejor y me alegro de saludarlos de nuevo y de que me acompañen a realizar más aplicaciones en C++ Builder. En esta ocasión vamos a comenzar con el trazo de líneas mediante el algoritmo conocido como DDA (Analizador Diferencial Digital).&lt;br /&gt;
&lt;br /&gt;
Antes de codificar este algoritmo vamos a explicar un poco de como funciona. Lo que hace el algoritmo de la línea DDA es ir calculando las posiciones de cada uno de los pixeles a lo largo de una línea. Esta tarea la lleva a cabo realizando pasos o incrementos unitarios en una de las coordenadas, y realizando los cálculos necesarios para encontrar el valor de la otra coordenada. Básicamente ese es el funcionamiento del algoritmo.&lt;br /&gt;
&lt;br /&gt;
Bien pues comenzamos con nuestra aplicación para dibujar nuestra línea DDA. Ésta aplicación tendrá bastantes componentes dentro de la Forma, dichos componentes los tenemos en la siguiente lista:&lt;br /&gt;
&lt;br /&gt;
-1 PaintBox&lt;br /&gt;
-1 ColorDialog&lt;br /&gt;
-7 Timer (todos tienen que estar con su propiedad Enabled en false)&lt;br /&gt;
-1 Panel&lt;br /&gt;
&lt;br /&gt;
Dentro del Panel tenemos los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
-1 Label&lt;br /&gt;
-1 ComboBox, y en su propiedad Items agregamos las siguientes cadenas:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Cono&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Círculo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Polígono&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Efecto Propio 1&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Efecto Propio 2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Efecto Propio 3&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Efecto Propio 4&lt;br /&gt;
&lt;br /&gt;
-3 Button&lt;br /&gt;
-1GroupBox&lt;br /&gt;
&lt;br /&gt;
Dentro del GroupBox tendremos los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
-5 Label&lt;br /&gt;
-4 Edit&lt;br /&gt;
-1 SpeedButton (podemos crear nuestro propio Bitmap para agregarlo a su propiedad Glyph, lo hacemos desde el Image Editor accesible desde el menú Tools de C++ Builder)&lt;br /&gt;
&lt;br /&gt;
Y por la parte visual de nuestra aplicación eso sería todo. Los componentes pueden acomodarlos de la manera que ustedes gusten, en mi caso yo lo hice de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-XL_TcEvvilM/T4NUyq7dKQI/AAAAAAAAAJY/mJuZGe8VS7k/s1600/Algoritmo+DDA+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0lSr3tF4wBLsFxj4e9aDIANDOIkoWOhc4q2rdnq7gkqxk3emdxosc9IdwnSVN6YZH3baKy9y2a9zw_1lfLaqRgoJew2OZYG64AGFUnnTGDuVZ0l-J6kZSQxHyq1lz_OZFeCG49Qfh550/s1600/Algoritmo+DDA+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0lSr3tF4wBLsFxj4e9aDIANDOIkoWOhc4q2rdnq7gkqxk3emdxosc9IdwnSVN6YZH3baKy9y2a9zw_1lfLaqRgoJew2OZYG64AGFUnnTGDuVZ0l-J6kZSQxHyq1lz_OZFeCG49Qfh550/s320/Algoritmo+DDA+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora vamos con la parte del código. Nuestra línea DDA la dibujaremos desde una clase que vamos a crear nosotros mismos. Para hacer esto abrimos el menú &quot;File&quot;, después la primera opción &quot;New&quot; y seleccionamos &quot;Unit&quot;. A nuestra nueva clase la llamaremos &quot;Graficos&quot;.&lt;br /&gt;
&lt;br /&gt;
Para crear nuestra clase gráficos primero nos vamos al archivo H de la nueva unidad que creamos, y definimos el constructor el cual recibirá el Canvas del componente donde estemos dibujando y lo asignará al de la clase Graficos para con el dibujar la línea DDA, además también definiremos el método LineaDDA(), el cual tendrá 2 sobrecargas, la primera para dibujar la línea normalmente y la segunda para dibujar la línea con un color que hayamos elegido. El código del archivo H de nuestra clase Graficos lo tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
class Graficos&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TCanvas *canvas;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graficos(TCanvas *CanvaS)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; canvas = CanvaS;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int round(float n);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void LineaDDA(int x1, int y1, int x2, int y2);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void LineaDDA(int x1, int y1, int x2, int y2, TColor color);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Debemos cuidar que el código anterior lo hayamos escrito antes de la línea:&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
Ahora en el archivo .cpp, en la parte superior escribimos la línea de código para incluir la clase Math en nuestra aplicación ya que la utilizaremos más adelante:&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora debajo de la línea de código:&lt;br /&gt;
#pragma package(smart_init)&lt;br /&gt;
comenzamos a escribir nuestros métodos para la línea DDA.&lt;br /&gt;
&lt;br /&gt;
Primero escribiremos un método propio para redondear los números que deseemos. El código es bastante sencillo y lo tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
int Graficos::round(float n)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return int(n+0.5);&lt;br /&gt;
}&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora codificamos el método para dibujar nuestra línea DDA los parámetros que necesitamos son las coordenadas iniciales de la línea y las coordenadas finales. El código para dibujar la línea DDA es el siguiente:&lt;br /&gt;
&lt;br /&gt;
void Graficos::LineaDDA(int x1, int y1, int x2, int y2)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int dx, dy, steps, k;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_inc, y_inc, x, y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dx = x2 - x1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dy = y2 - y1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (abs(dx) &amp;gt; abs(dy))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; steps = abs(dx);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; steps = abs(dy);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_inc = (float)dx/steps;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_inc = (float)dy/steps;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; canvas-&amp;gt;Pixels[floor(x+0.5)][floor(y+0.5)];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (k = 1; k &amp;lt; steps+1; k++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x + x_inc;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y + y_inc;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; canvas-&amp;gt;Pixels[floor(x+0.5)][floor(y+0.5)];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora escribimos la segunda sobrecarga del método LineaDDA(), en la cual incluimos el color personalizado de la línea, el código es prácticamente el mismo:&lt;br /&gt;
&lt;br /&gt;
void Graficos::LineaDDA(int x1, int y1, int x2, int y2, TColor color)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int dx, dy, steps, k;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_inc, y_inc, x, y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dx = x2 - x1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dy = y2 - y1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (abs(dx) &amp;gt; abs(dy))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; steps = abs(dx);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; steps = abs(dy);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_inc = (float)dx/steps;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_inc = (float)dy/steps;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; canvas-&amp;gt;Pixels[floor(x+0.5)][floor(y+0.5)] = color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (k = 1; k &amp;lt; steps+1; k++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = x + x_inc;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = y + y_inc;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; canvas-&amp;gt;Pixels[floor(x+0.5)][floor(y+0.5)] = color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Y con eso tenemos lista nuestra clase Graficos desde la cual podremos dibujar nuestra Linea DDA.&lt;br /&gt;
&lt;br /&gt;
Ahora nos vamos al archivo .cpp de nuestra aplicación y ahí declaramos de manera global las siguientes variables, las cuales son 4 enteros que serán las coordenadas iniciales y finales de la línea en el momento de dibujarla de manera dinámica con el mouse, y un puntero de la clase Graficos para poder llamar los métodos LineaDDA():&lt;br /&gt;
&lt;br /&gt;
#pragma package(smart_init)&lt;br /&gt;
#pragma resource &quot;*.dfm&quot;&lt;br /&gt;
TForm1 *Form1;&lt;br /&gt;
Graficos *graf;&lt;br /&gt;
int x1, y1, x2, y2;&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora en el evento en el que llamamos a la creación de nuestra Forma colocamos el siguiente código para inicializar los valores y crear el objeto &quot;graf&quot;:&lt;br /&gt;
&lt;br /&gt;
_fastcall TForm1::TForm1(TComponent* Owner)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : TForm(Owner)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf = new Graficos(PaintBox1-&amp;gt;Canvas);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboBox1-&amp;gt;ItemIndex = 0;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Bien ahora abrimos el evento OnMouseDown del PaintBox que habíamos colocado en la Forma y en el evento escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; TMouseButton Button, TShiftState Shift, int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Shift.Contains(ssLeft))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x1 = X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y1 = Y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el evento OnMouseMove también del PaintBox y escribimos el código siguiente:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::PaintBox1MouseMove(TObject *Sender,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; TShiftState Shift, int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Shift.Contains(ssLeft))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1MouseUp(Sender, mbLeft, Shift, X, Y);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Y finalmente abrimos el evento OnMouseUp del PaintBox y tecleamos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; TMouseButton Button, TShiftState Shift, int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Button==mbLeft)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x2 = X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y2 = Y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x1, y1, x2, y2, Canvas-&amp;gt;Pen-&amp;gt;Color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Edit1-&amp;gt;Text = x1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Edit2-&amp;gt;Text = y1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Edit3-&amp;gt;Text = x2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Edit4-&amp;gt;Text = y2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora comenzamos con la codificación de los componentes primero hacemos doble clic en el SpeedButton y escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (ColorDialog1-&amp;gt;Execute())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Pen-&amp;gt;Color = ColorDialog1-&amp;gt;Color;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora damos doble clic en el Button1 y escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1-&amp;gt;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(Edit1-&amp;gt;Text.ToInt(), Edit2-&amp;gt;Text.ToInt(), Edit3-&amp;gt;Text.ToInt(), Edit4-&amp;gt;Text.ToInt(), Canvas-&amp;gt;Pen-&amp;gt;Color);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora damos clic en el Button2 el cual iniciará unos efectos que vamos a formar con las líneas que vayamos dibujando, dependiendo de cual de los efectos hayamos elegido en el ComboBox1:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox2-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer1-&amp;gt;Enabled = true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer2-&amp;gt;Enabled = true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer3-&amp;gt;Enabled = true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer4-&amp;gt;Enabled = true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 4:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer5-&amp;gt;Enabled = true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 5:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer6-&amp;gt;Enabled = true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 6:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer7-&amp;gt;Enabled = true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Después damos doble clic en el Button3 el cual detendrá el efecto con líneas que este seleccionado en el ComboBox1:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button3Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox2-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer1-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer2-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer3-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer4-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 4:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer5-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 5:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer6-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 6:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer7-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a codificar los efectos que se irán formando cada efecto estará dentro de un Timer. El primero de nuestros efectos formará un cono dibujando líneas que generen ese efecto, el código es el siguiente:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer1Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_pos, y_pos;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x_center = PaintBox1-&amp;gt;ClientWidth/4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int y_center = PaintBox1-&amp;gt;ClientHeight/4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int length = 80;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle=0; angle&amp;lt;360; angle++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos = y_center+length*sin(angle/180.0*M_PI);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos = x_center+length*cos(angle/180.0*M_PI);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_center, y_center, x_pos+80, y_pos+180, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
El segundo efecto formará un circulo dibujando líneas, el código lo tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer2Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_pos, y_pos;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x_center = PaintBox1-&amp;gt;ClientWidth/4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int y_center = PaintBox1-&amp;gt;ClientHeight/4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int length = 80;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle=0; angle&amp;lt;360; angle++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos = y_center+length*sin(angle/180.0*M_PI);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos = x_center+length*cos(angle/180.0*M_PI);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_center, y_center, x_pos, y_pos, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
El tercero de los efecto es un cuadrado dibujado por líneas que girará y formara el efecto de 2 círculos circuncéntricos:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer3Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_pos, y_pos, x_pos2, y_pos2, x_pos3, y_pos3;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x_center = PaintBox1-&amp;gt;ClientWidth/2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int y_center = PaintBox1-&amp;gt;ClientHeight/2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int length = 120;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double hypot = sqrt(length * length + length * length);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle = 0; angle &amp;lt; 360; angle++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos = (float)(y_center + length * sin(angle / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos = (float)(x_center + length * cos(angle / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos2 = (float)(y_center + hypot * sin((angle + 45) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos2 = (float)(x_center + hypot * cos((angle + 45) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_pos, y_pos, x_pos2, y_pos2, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos3 = (float)(y_center + length * sin((angle + 90) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos3 = (float)(x_center + length * cos((angle + 90) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_pos2, y_pos2, x_pos3, y_pos3, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_pos3, y_pos3, x_center, y_center, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
El efecto siguiente dará la impresión de estar dibujando un diamante mediante líneas:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer4Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_pos, y_pos;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x_center = PaintBox1-&amp;gt;ClientWidth/4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int y_center = PaintBox1-&amp;gt;ClientHeight/4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int length = 80;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle=0; angle&amp;lt;360; angle++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos = y_center+length*sin(angle/180.0*M_PI)*3;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos = x_center+length*cos(angle/180.0*M_PI*10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_pos+130, x_center+130, y_center+130, y_pos+130, color);//(x_center, y_center, x_pos, y_pos, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
El siguiente efecto son líneas que se van dibujando desde el centro hacia las esquinas para terminar dibujando un cuadrado con un círculo inscrito dentro:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer5Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int i,x,posx,posy;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posx=PaintBox1-&amp;gt;ClientWidth-48;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posy=PaintBox1-&amp;gt;ClientHeight-48;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0,x=posx,y=posy-200;i&amp;lt;21;x-=15,y+=10,i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x,posy,posx,y, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posx=44;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posy=PaintBox1-&amp;gt;ClientHeight-48;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0,x=posx,y=posy-200;i&amp;lt;21;x+=15,y+=10,i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x,posy,posx,y,color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posx=44;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posy=44;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0,x=posx,y=posy+200;i&amp;lt;21;x+=15,y-=10,i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x,posx,posy,y,color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posx=PaintBox1-&amp;gt;ClientWidth-48;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; posy=44;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0,x=posx,y=posy+200;i&amp;lt;21;x-=15,y-=10,i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x,posy,posx,y,color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
El penúltimo de los efectos dibujará líneas verticales y horizontales para que quede finalmente una cuadrícula:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer6Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x = 0; x &amp;lt; Width; x += 20)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x, 0, x, Height, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y = 0; y &amp;lt; Height; y += 20)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(0, y, Width, y, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
El último de los efectos dibujará dos 2 círculos a la vez para terminar formando un efecto de un ovalo al centro rodeado de líneas a su alrededor:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer7Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float x_pos, y_pos, x_pos2, y_pos2, x_pos3, y_pos3;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x_center = PaintBox1-&amp;gt;ClientWidth/2-50;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int y_center = PaintBox1-&amp;gt;ClientHeight/2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int length = 120;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int angle;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double hypot = sqrt(length * length + length * length);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (angle = 0; angle &amp;lt; 360; angle++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = (TColor)random(52548899);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos = (float)(y_center + length * sin(angle / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos = (float)(x_center + length * cos(angle / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos2 = (float)(y_center + hypot * sin((angle + 45) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos2 = (float)(x_center + hypot * cos((angle + 45) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_pos+100, y_pos, x_pos2, y_pos2, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y_pos3 = (float)(y_center + length * sin((angle + 90) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x_pos3 = (float)(x_center + length * cos((angle + 90) / 180.0 * M_PI));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graf-&amp;gt;LineaDDA(x_pos2+100, y_pos2, x_pos3, y_pos3, color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Y con eso terminamos amigos, este programa estuvo un poco largo y medio complicado pero finalmente lo terminamos. Ahora solo compilamos y corremos nuestra aplicación y podemos dibujar la línea dando clic y arrastrando el mouse. Y podemos dar clic al botón &quot;Iniciar&quot; para comenzar a ver nuestros efectos, nuestra aplicación debería verse de la siguiente manera:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-20PCLshcf84/T4NnkikiMeI/AAAAAAAAAJg/pUiS8TQcTLg/s1600/Algoritmo+DDA+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR0C_vRGPs0lQQrToOU2XsPryeB7i2cKOovbdAUt6-VP2CqtIZZYvsg1nURAGAFg6eylSfUO-Xbkx7dXE0g-DGtMFQ8WwRbU7R1IPHD0KunqwVs949hhbnNQI9OwTOftq1ieFXepubqLA/s1600/Algoritmo+DDA+%25282%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR0C_vRGPs0lQQrToOU2XsPryeB7i2cKOovbdAUt6-VP2CqtIZZYvsg1nURAGAFg6eylSfUO-Xbkx7dXE0g-DGtMFQ8WwRbU7R1IPHD0KunqwVs949hhbnNQI9OwTOftq1ieFXepubqLA/s320/Algoritmo+DDA+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-ShkgoqyDLYM/T4NnzMgss1I/AAAAAAAAAJo/eyrXQI2rONY/s1600/Algoritmo+DDA+(3).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; display: inline !important; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy_7_bldF04AQA-vD5uw9CchI6IXmWXp3iRdceF-ig3iOXhP8zWq16G29AupVOUq4fUtO_wwMmEUlVs9Fv1tARro44ElyerVRT59vmGPYV2PbgPJdTOKQHD_iMz1bTjZ7ikR45eq__u-U/s1600/Algoritmo+DDA+%25283%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;241&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy_7_bldF04AQA-vD5uw9CchI6IXmWXp3iRdceF-ig3iOXhP8zWq16G29AupVOUq4fUtO_wwMmEUlVs9Fv1tARro44ElyerVRT59vmGPYV2PbgPJdTOKQHD_iMz1bTjZ7ikR45eq__u-U/s320/Algoritmo+DDA+%25283%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisSwVtd5YydREDJMdcZiOaQ_z7vNNeAWufgaHd6T5s6nuMQwUpVSm5N5NGrJM1cQiHDuMCNbroa07X8q4g-T4i_ptD9IrbGCgTnnL3PRly5P8UvMdQz-Fyby2ZZK1SkBffLvTazalwsFM/s1600/Algoritmo+DDA+%25284%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;239&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisSwVtd5YydREDJMdcZiOaQ_z7vNNeAWufgaHd6T5s6nuMQwUpVSm5N5NGrJM1cQiHDuMCNbroa07X8q4g-T4i_ptD9IrbGCgTnnL3PRly5P8UvMdQz-Fyby2ZZK1SkBffLvTazalwsFM/s320/Algoritmo+DDA+%25284%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=7310571696968123006&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJK0MMFfRsJqe7hIIIbJSvAItJsbiyyIC_cjC1AcDf3FvxrG_lc0li3c_X7zHSnSpr-rMnWtGwCGZkavKMBZ-iJZkqZilJBdt6JWxdpi-tw-9ESfj6__AczPn_r98AkKfLKauF_uQEt9M/s1600/Algoritmo+DDA+%25285%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;241&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJK0MMFfRsJqe7hIIIbJSvAItJsbiyyIC_cjC1AcDf3FvxrG_lc0li3c_X7zHSnSpr-rMnWtGwCGZkavKMBZ-iJZkqZilJBdt6JWxdpi-tw-9ESfj6__AczPn_r98AkKfLKauF_uQEt9M/s320/Algoritmo+DDA+%25285%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=7310571696968123006&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;Y bien amigos pues eso es todo por esta ocasión espero que hayan comprendido muy bien la aplicación del día de hoy ya que con ella continuaremos trabajando para realizar aplicaciones mas adelante. Por lo pronto me despido de ustedes y los espero en la próxima ocasión para continuar practicando. Hasta la vista chavos!.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/2048001133801978417/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/linea-dda.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/2048001133801978417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/2048001133801978417'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/linea-dda.html' title='Linea DDA'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0lSr3tF4wBLsFxj4e9aDIANDOIkoWOhc4q2rdnq7gkqxk3emdxosc9IdwnSVN6YZH3baKy9y2a9zw_1lfLaqRgoJew2OZYG64AGFUnnTGDuVZ0l-J6kZSQxHyq1lz_OZFeCG49Qfh550/s72-c/Algoritmo+DDA+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-1112339489225259728</id><published>2012-04-08T17:02:00.000-05:00</published><updated>2017-03-18T16:08:48.463-06:00</updated><title type='text'>Fractal De Landscape</title><content type='html'>Que onda chavos pues aquí nos encontramos de nueva cuenta para finalizar con este tema de los fractales, y como les había comentado en la ocasión pasada el fractal que nos falta es un fractal que genera un paisaje, dicho paisaje consta de montañas, el mar y el sol. Este fractal que vamos a programar se le conoce como escena fractal o fractal de Landscape.&lt;br /&gt;
&lt;br /&gt;
Bien pues comenzamos ya con el final de este tema. Para empezar lo primero que haremos será cambiar el color de la Forma ya que dependiendo del color que le pongamos a la Forma es el color que van a tener las montañas de nuestra escena fractal, ustedes pueden elegir el color que mas les guste o que mas se acople al paisaje, yo en mi caso elegí el color gris para la Forma. Después todo lo que necesitamos es colocar un Timer sobre la Forma y terminamos con la parte gráfica, nuestra Forma debe de haber quedado de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-fAaLM1l-U4I/T4HuW5DCXuI/AAAAAAAAAJI/PZf7OTvuivA/s1600/Escena+Fractal+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjbg4ucOP3BVzqlED8VWz6dIRl76NbPFR9AmtlYPXfuqMJSWuh-RZH3lXUjoosXxHBbGHpSZx0Ym0NOr2pYM_k_l4kol2tUoBYriW_GDDUQ1ePG93JOqWpex59K6aNUzDqmNAZXikXDvg/s1600/Escena+Fractal+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjbg4ucOP3BVzqlED8VWz6dIRl76NbPFR9AmtlYPXfuqMJSWuh-RZH3lXUjoosXxHBbGHpSZx0Ym0NOr2pYM_k_l4kol2tUoBYriW_GDDUQ1ePG93JOqWpex59K6aNUzDqmNAZXikXDvg/s320/Escena+Fractal+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno ahora continuamos con la parte del código. Primero nos vamos al archivo H y en la parte de declaraciones privadas escribimos las siguientes variables:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int MAXSIZE,MAXLEVEL;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double frctl[1000];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int cw,ch,x1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora en la parte de declaraciones públicas escribimos las siguientes definiciones de los métodos que utilizaremos más adelante:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __fastcall TForm1(TComponent* Owner);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::subdivide(int f1, int f2, double std, double ratio);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::fractal(int y1, int y2, int maxlevel, double h, double scale);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::draw_fractal(void);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora nos regresamos a la Forma y abrimos el evento OnCreate de nuestra Forma y en él escribimos el siguiente código para darle valor a las variables apenas corra nuestra aplicación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x1=10;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MAXSIZE=1000;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MAXLEVEL=6;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cw=ClientWidth-10;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ch=ClientHeight-10;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;DoubleBuffered = true;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También escribimos en la línea final del código pasado la asignación de la propiedad DoubleBuffered en true, para con esto reducir el parpadeo que se genera al momento de repintar o refrescar la Forma.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a codificar los métodos que utilizaremos para generar el fractal, el primero que codificaremos será el método llamado fractal():&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void TForm1::fractal(int y1,int y2,int maxlevel,double h,double scale)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int first, last;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double ratio,std;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; first=0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; last=(int)pow(2.0,(double)maxlevel);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; frctl[first]=y1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; frctl[last]=y2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ratio=1.0/pow(2.0,h);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; std=scale*ratio;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subdivide(first,last,std,ratio);&lt;br /&gt;
}&lt;br /&gt;
//--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Continuamos codificando los métodos ahora le toca el turno al método conocido como subdivide(), el código lo tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void TForm1::subdivide(int p1,int p2,double std,double ratio)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int midpnt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double stdmid;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; midpnt = (p1 + p2) / 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(midpnt != p1 &amp;amp;&amp;amp; midpnt != p2)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; frctl[midpnt] = (frctl[p1] + frctl[p2]) / 2 + (double)((random(16)-8)) /8.0*std;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stdmid = std * ratio;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subdivide(p1,midpnt,stdmid,ratio);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subdivide(midpnt,p2,stdmid,ratio);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para terminar de codificar los 3 métodos que vamos a utilizar codificamos el último de los métodos el cual lo hemos llamado draw_fractal():&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void TForm1::draw_fractal()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int i,x,xinc,l;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; l=(int)pow(2.0,(double)MAXLEVEL);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xinc = cw / l * 3 / 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(0,100);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=0,x=0;i&amp;lt;l;i++,x+=xinc)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(x,(int)frctl[i]);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y con eso terminamos la parte de codificación de los métodos ya solo nos resta teclear el código que irá dentro del Timer y que es el que irá generando el efecto. En el código del Timer hemos agregado una variable x1 que se irá incrementando cada vez que se vuelva a ejecutar el Timer y así dar el efecto de que el sol está en movimiento. Además también hacemos uso de la función FloodFill(), la cual nos sirve para rellenar un área especifica que tenga un color, con otro color que nosotros hayamos especificado. Los parámetros de esta función consta de un par de coordenadas que estén dentro del área que deseamos colorear, el color que tiene el área que deseamos colorear, y el parámetro fsSurface que pintará el área completamente hasta encontrar otro color (si desean conocer más sobre esta función pueden colocar el cursor sobre la palabra FloodFill y oprimir la tecla F1 y se abrirá el menú de ayuda y ahí podrán leer más sobre el funcionamiento de ésta función). El código del Timer1 lo tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer1Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x1++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Repaint();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; randomize();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Pen-&amp;gt;Color=clBlack;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Brush-&amp;gt;Color=clSkyBlue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fractal(100,100,MAXLEVEL,0.5,50.0);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_fractal();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;FloodFill(1,1,this-&amp;gt;Color,fsSurface);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Brush-&amp;gt;Color=clTeal;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fractal(170,170,MAXLEVEL,0.9,30.0);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_fractal();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;FloodFill(1,ch-1,this-&amp;gt;Color,fsSurface);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Brush-&amp;gt;Color=clYellow;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Ellipse(10+x1,10,80+x1,80);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;FloodFill(cw,50,this-&amp;gt;Color,fsSurface);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y pues eso es todo chavos ya solo queda compilar y ejecutar nuestra aplicación y automáticamente comenzará a generar el efecto debido a que el código lo escribimos en un Timer. El efecto de nuestra escena fractal debería de ser como lo que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-YyaLNnRB85s/T4IKTUOKCCI/AAAAAAAAAJQ/Rbk5BEQdHFA/s1600/Escena+Fractal+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFkdqCSsxU5PRzV75Du_hWwWTzmgTQYvKzRLV2KiUKApsMQll1BuZHNjU0pkDr-HF0-e47nT7WY-_JNrzRuHu21lTn_hF0Yy2iZvUGW1AdwdtIrfpcdLx2sbvCXHhS6Peq2Vm0XsxvLwA/s1600/Escena+Fractal+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFkdqCSsxU5PRzV75Du_hWwWTzmgTQYvKzRLV2KiUKApsMQll1BuZHNjU0pkDr-HF0-e47nT7WY-_JNrzRuHu21lTn_hF0Yy2iZvUGW1AdwdtIrfpcdLx2sbvCXHhS6Peq2Vm0XsxvLwA/s320/Escena+Fractal+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Y con este último fractal podemos dar por terminado este tema de los fractales. Si quieren pueden seguir buscando y en internet encontrarán muchísimos ejemplos más sobre fractales y si quieren seguir practicando pues pueden programarlos en C++ Builder. Bien pues gracias por haberme acompañado y nos vemos en la próxima ocasión para seguir realizando más aplicaciones de C++ pero ahora con un tema diferente. Hasta pronto amigos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/1112339489225259728/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-landscape.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/1112339489225259728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/1112339489225259728'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-landscape.html' title='Fractal De Landscape'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjbg4ucOP3BVzqlED8VWz6dIRl76NbPFR9AmtlYPXfuqMJSWuh-RZH3lXUjoosXxHBbGHpSZx0Ym0NOr2pYM_k_l4kol2tUoBYriW_GDDUQ1ePG93JOqWpex59K6aNUzDqmNAZXikXDvg/s72-c/Escena+Fractal+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-8325795205326668230</id><published>2012-04-07T18:10:00.000-05:00</published><updated>2017-03-18T16:07:46.968-06:00</updated><title type='text'>Fractal De Sierpinski</title><content type='html'>Hola de nuevo amigos me da gusto saludarlos una vez mas y poder seguir practicando con mas aplicaciones en C++ Builder. Bueno ya casi hemos terminado con el tema de los fractales, pero aun nos quedan un par de ejemplo mas para realizar. El fractal que programaremos el día de hoy es el conocido como fractal de Sierpinski.&lt;br /&gt;
&lt;br /&gt;
Bien amigos pues el día de hoy lo haremos un poco más rápido de lo normal debido a que tengo un poco de prisa, entonces me saltaré la parte de cambiarle el color a la Forma y lo único que haré en ella será colocar un botón con la leyenda &quot;Dibujar Sierpinski&quot;. Nuestra Forma queda de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/--9AiIvzdR0Q/T4DGdFcSXyI/AAAAAAAAAI4/Y4Pf5YvSTD0/s1600/Fractal+Sierpinski+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfD2y3gMWb4zMoEnLE3VWmn_8lkLLCCWbTemIUDgmywn2P84abzsFroAaVzOUnYa5eMK1RD2vO3AYBfBpn9DFVqRUDDcyZvqAq8NTI7QOLWYvCM8pHOUHE8lr-EBygK_ZF7p-1EfJNroI/s1600/Fractal+Sierpinski+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfD2y3gMWb4zMoEnLE3VWmn_8lkLLCCWbTemIUDgmywn2P84abzsFroAaVzOUnYa5eMK1RD2vO3AYBfBpn9DFVqRUDDcyZvqAq8NTI7QOLWYvCM8pHOUHE8lr-EBygK_ZF7p-1EfJNroI/s320/Fractal+Sierpinski+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bien ahora pasamos a la parte de código y primero nos vamos al archivo H y en la parte de declaraciones privadas declaramos las siguientes variables que utilizaremos más adelante y la definición de los métodos que declararemos más adelante y que son los que nos darán el efecto del fractal:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int depth;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int w,h;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void subTriangle(int n, float x1, float y1, float x2, float y2, float x3, float y3);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void drawSierpinski(float x1, float y1, float x2, float y2, float x3, float y3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora nos preparamos para generar el efecto del fractal de Sierpinski y primero que nada tenemos que abrir el evento OnCreate de la Forma y en él escribimos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; depth=7;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;ClientWidth=640;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;ClientHeight=480;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; w=this-&amp;gt;ClientWidth;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; h=this-&amp;gt;ClientHeight;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bien enseguida vamos a codificar los métodos definidos anteriormente primero lo haremos con el método drawSierpinski(), el código de dicho método lo tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Esta funcion dibujara solo 1 triangulo y entonces empezara la funcion de recursividad a si mismo&lt;br /&gt;
void TForm1::drawSierpinski(float x1, float y1, float x2, float y2, float x3, float y3)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Aqui dibujamos las 3 lineas del triangulo, uniendo los 3 puntos para generar lineas&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Pen-&amp;gt;Color=(TColor)random(65000);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(x1,y1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(x2,y2);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(x2,y2);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(x3,y3);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(x3,y3);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(x1,y1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Llamamos a la funcion de recursividad y pintara el resto de los tringulos, las 3 esquinas de triangulo son simempre el centro de su posicion&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subTriangle&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1, //Esto representa la primer recursicion&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x2) / 2, //coordenada x de la primera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y2) / 2, //coordenada y de la primera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x3) / 2, //coordenada x de la segunda esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y3) / 2, //coordenada y de la segunda esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x2 + x3) / 2, //coordenada x de la tercera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y2 + y3) / 2 &amp;nbsp;//coordenada y de la tercera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;br /&gt;
}&lt;br /&gt;
//-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora codificaremos el siguiente método el cual es llamado subTriangle(), el código se muestra enseguida:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//La funcion de recursividad subtriangulo pintara todo lo que esta dentro del tringulo mayor a este&lt;br /&gt;
void TForm1::subTriangle(int n, float x1, float y1, float x2, float y2, float x3, float y3)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Dibujamos los 3 lados del subtriangulo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(x1,y1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(x2,y2);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(x2,y2);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(x3,y3);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(x3,y3);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(x1,y1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Llamadas a si mismo 3 veces con nuevas esquinas,pero solo si el actual numero de recurrencias es menor que la profundidad maxima&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(n &amp;lt; depth)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Triangulo mas pequeño #1&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;subTriangle&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n+1, //numero de recurrencias para la siguiente llamada con aumento de 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x2) / 2 + (x2 - x3) / 2, //coordenada x de la primera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y2) / 2 + (y2 - y3) / 2, //coordenada y de la primera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x2) / 2 + (x1 - x3) / 2, //coordenada x de la segunda esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y2) / 2 + (y1 - y3) / 2, //coordenada y de la segunda esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x2) / 2, //coordendaa x de la tercera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y2) / 2 &amp;nbsp;//coordenada y de la tercera esquina&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Triangulo mas pequeño #2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subTriangle&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n+1, //numero de recurrencias para la siguiente llamada con aumento de 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x3 + x2) / 2 + (x2 - x1) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y3 + y2) / 2 + (y2 - y1) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x3 + x2) / 2 + (x3 - x1) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y3 + y2) / 2 + (y3 - y1) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x3 + x2) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y3 + y2) / 2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Triangulo mas pequeño #3&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subTriangle&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n+1, //numero de recurrencias para la siguiente llamada con aumento de 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x3) / 2 + (x3 - x2) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y3) / 2 + (y3 - y2) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x3) / 2 + (x1 - x2) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y3) / 2 + (y1 - y2) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (x1 + x3) / 2,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (y1 + y3) / 2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El código de los 2 métodos anteriores es algo largo y relativamente un poco complicado sin embargo en el código se incluyen comentarios para ayudarnos a saber que hace cada parte del código y así comprender mejor el comportamiento de este fractal.&lt;br /&gt;
&lt;br /&gt;
Ya para terminar solo nos resta escribir la llamada al método drawSierpinski() dentro del evento clic del Button1 (solo se hace la llamada el método drawSierpinski() ya que dentro de éste método se llama al segundo método que es el subTriangle()), el código lo tenemos enseguida:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Repaint();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Button1-&amp;gt;Enabled=false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Llamamos a la función de Sierpinski (funciona con cualquier esquina dentro de la pantalla)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Asignamos las coordenadas del tringulo principal &quot;el mas grande&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; drawSierpinski(10, h - 10, w - 10, h - 10, w / 2, 10);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Button1-&amp;gt;Enabled=true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Button1-&amp;gt;SetFocus(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bien chavos pues eso es todo lo que tenemos que hacer ahora solo compilamos y corremos nuestra aplicación y observamos el efecto que nos genera el cual es un poco tardado así que solo dejen el programa correr tranquilamente, dicho efecto debe ser como lo que tenemos enseguida:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-9CLUYR0k5EU/T4DJH8XvgMI/AAAAAAAAAJA/s9i1QyHPd18/s1600/Fractal+Sierpinski+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zNlWTL4S6DemGGOtY0kKuuCTurSPbt2plzab5io0kl1RAVxw9qmogqxt_2uBFLC17RwxVKftwi38KmMqMYymv-LQ6hK0vMHjsJpo1sxADdHkFc9RzYVbG78snpjS8kn6EnsP8wU-1BA/s1600/Fractal+Sierpinski+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;252&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zNlWTL4S6DemGGOtY0kKuuCTurSPbt2plzab5io0kl1RAVxw9qmogqxt_2uBFLC17RwxVKftwi38KmMqMYymv-LQ6hK0vMHjsJpo1sxADdHkFc9RzYVbG78snpjS8kn6EnsP8wU-1BA/s320/Fractal+Sierpinski+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Y bueno amigos eso fue todo por hoy, ya solo nos queda un fractal más para concluir con este tema, el fractal restante es el conocido como fractal de Landscape, y nos genera el efecto de un paisaje. Pero todo eso ya lo veremos en la siguiente ocasión. Hasta la próxima amigos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/8325795205326668230/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-sierpinski.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/8325795205326668230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/8325795205326668230'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-sierpinski.html' title='Fractal De Sierpinski'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfD2y3gMWb4zMoEnLE3VWmn_8lkLLCCWbTemIUDgmywn2P84abzsFroAaVzOUnYa5eMK1RD2vO3AYBfBpn9DFVqRUDDcyZvqAq8NTI7QOLWYvCM8pHOUHE8lr-EBygK_ZF7p-1EfJNroI/s72-c/Fractal+Sierpinski+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-2794984116468253912</id><published>2012-04-06T13:47:00.000-05:00</published><updated>2017-03-18T16:07:05.688-06:00</updated><title type='text'>Fractal De Malthus 2</title><content type='html'>Que onda chavos me da gusto saludarlos de nuevo y en esta ocasión para continuar con el tema de los fractales, programaremos el fractal conocido como el fractal de Malthus 2, como ya se los había dicho en la vez pasada.&lt;br /&gt;
&lt;br /&gt;
Bien pues rápidamente comencemos. Lo primero será como ya hemos estado acostumbrando hacer será cambiar el color de la Forma. Como ya les había mencionado en ocasiones pasadas esto es opcional, si quieren lo pueden hacer e incluso pueden elegir el color que ustedes deseen, en mi caso yo cambiaré el color de la Forma a color rojo. Inmediatamente después tenemos que colocar un botón sobre la Forma.&lt;br /&gt;
&lt;br /&gt;
Nuestra interfaz debería verse mas o menos de la siguiente manera, dependiendo de lo que hayan elegido ustedes:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-ubMgam7B8zw/T384RQ7ZjGI/AAAAAAAAAIg/__wqSt7-OTs/s1600/Fractal+Malthus2+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyT5yVUMKg3l7W2PMi2iu8uvA8Bm22-xk00mO1g2g-tlrqg7wBUbS1cUhlgxzdCIcz1_qZrjB1uN5YmFLpPpORhttSMb7HbuQjMeqv7dArw6vYD1oQY_Kl631nDr-JWN9GK3JjOlZqnqg/s1600/Fractal+Malthus2+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyT5yVUMKg3l7W2PMi2iu8uvA8Bm22-xk00mO1g2g-tlrqg7wBUbS1cUhlgxzdCIcz1_qZrjB1uN5YmFLpPpORhttSMb7HbuQjMeqv7dArw6vYD1oQY_Kl631nDr-JWN9GK3JjOlZqnqg/s320/Fractal+Malthus2+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora nos vamos a la parte del código la cual será bastante sencilla. Primero nos vamos al archivo H y en la parte de declaraciones privadas declaramos las siguientes variables:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int maxX, maxY;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luego en la parte de las declaraciones públicas escribimos la definición del método ExtranioConfinador(), el cual es diferente a los que ya hemos utilizado antes a pesar de tener el mismo nombre:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __fastcall TForm1(TComponent* Owner);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::ExtranioConfinador();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno ahora nos vamos a la Forma y en sus respectivos eventos buscamos el evento OnCreate y damos doble clic, luego en él escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxX = this-&amp;gt;ClientWidth;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxY = this-&amp;gt;ClientHeight; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es hora pues de codificar el método ExtranioConfinador(), el código que necesitaremos para poder generar el efecto del fractal es el que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void TForm1::ExtranioConfinador()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int i, j, k, l, Color, Contador;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double PobAnt, PobNueva, X, Y, Razon;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobAnt = PobNueva = 0.0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Razon = 2.3;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( j = 1; j &amp;lt;= 15; j++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( Color &amp;gt; clWhite )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color = clBlue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( k = 1; k &amp;lt;= 10; k++ )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Razon = Razon + 0.01;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobAnt = 0.01;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( i = 1; &amp;nbsp;i &amp;lt;= 1000; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobNueva = Razon * ( PobAnt * ( 1 - PobAnt ) );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; X = PobNueva - PobAnt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Pixels[(X*maxX/2)+maxX/2][(maxY/2)-(Y*maxY/2)]=(TColor)Color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( PobAnt == PobNueva )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( Contador &amp;gt; 100 )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i = 10000;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobAnt = PobNueva;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y = X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;TextOutA(10, 10, &quot;Flujo Maltusiano&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ya para terminar damos doble clic en el botón que habíamos colocado sobre la Forma y en el escribimos la llamada el método ExtranioConfinador(), el código es así:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Repaint();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ExtranioConfinador(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y es todo chavos ahora todo lo que tenemos que hacer es compilar y correr nuestra aplicación y aquí tenemos el efecto que se debe de generar:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-9j4lnEREiL8/T385_UC48nI/AAAAAAAAAIw/psTg_3WSDsA/s1600/Fractal+Malthus2+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFxRjJjM_GqCSdiR2aMEz6tZlCiEsZ1adEad8bT0vmbAk8WFVYigLeddeNNIT1X3A3Gf7hhmLzGPVqqvvl4722jtp0Bwm9b1ijYLOB2SZmDR1UJ8WCfyhidmbBSl0FPRvoMNMftJCFxQw/s1600/Fractal+Malthus2+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFxRjJjM_GqCSdiR2aMEz6tZlCiEsZ1adEad8bT0vmbAk8WFVYigLeddeNNIT1X3A3Gf7hhmLzGPVqqvvl4722jtp0Bwm9b1ijYLOB2SZmDR1UJ8WCfyhidmbBSl0FPRvoMNMftJCFxQw/s320/Fractal+Malthus2+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bien chavos por esta ocasión fue todo, como pueden ir viendo generar los fractales es algo bastante sencillo y rápido pero también muy interesante debido a los efectos que se van formando. Aun nos quedan unos cuantos por ver, pero eso ya será en otra ocasión. Hasta la vista amigos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/2794984116468253912/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-malthus-2.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/2794984116468253912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/2794984116468253912'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-malthus-2.html' title='Fractal De Malthus 2'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyT5yVUMKg3l7W2PMi2iu8uvA8Bm22-xk00mO1g2g-tlrqg7wBUbS1cUhlgxzdCIcz1_qZrjB1uN5YmFLpPpORhttSMb7HbuQjMeqv7dArw6vYD1oQY_Kl631nDr-JWN9GK3JjOlZqnqg/s72-c/Fractal+Malthus2+%25281%2529.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-823141578893506440</id><published>2012-04-05T15:55:00.000-05:00</published><updated>2017-03-18T16:06:17.665-06:00</updated><title type='text'>Fractal De Malthus 1</title><content type='html'>Hola chavos! Espero que anden de lo mejor y yo aquí ando pasando rápidamente para mostrarles otro ejemplo de los fractales por supuesto programado en C++ Builder. En esta ocasión el fractal que programaremos será el conocido como el fractal de Malthus 1.&lt;br /&gt;
&lt;br /&gt;
Bien pues como siempre ya saben que el primer paso que realizo es opcional, si quieren pueden seguirlo y si no &amp;nbsp;pues no hay problema todo funcionará normalmente. Lo primero que haré yo será cambiar el color de la Forma en su propiedad color buscamos el color clTeal y lo elegimos. Ahora colocamos un botón sobre la Forma y eso será todo lo que tenemos que hacer sobre la Forma, la cual nos quedará de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-lTN72bHuflk/T34AfhERhpI/AAAAAAAAAIQ/CPftbbowlBU/s1600/Fractal+Malthus1+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYERwXXQZs-R6LikXrsxdns8N1D-M7ukW8Yim3d4rY2z8qi1xwJ0fXCeFbkKrorCOKcVDire9ojxxhYwvlu03KqsY1ktwe-qvig9KVlCNg6_mByBhfQrKwC3Y6K4iBkhJIBEcD-eioMkI/s1600/Fractal+Malthus1+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYERwXXQZs-R6LikXrsxdns8N1D-M7ukW8Yim3d4rY2z8qi1xwJ0fXCeFbkKrorCOKcVDire9ojxxhYwvlu03KqsY1ktwe-qvig9KVlCNg6_mByBhfQrKwC3Y6K4iBkhJIBEcD-eioMkI/s320/Fractal+Malthus1+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bien ahora nos cambiamos a la parte del editor de código y nos vamos al archivo cabecera del programa, es &amp;nbsp;decir al archivo H y en la parte de declaraciones privadas tecleamos las siguientes variables:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int maxX, maxY, MaxGen;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora en la parte de las declaraciones públicas escribimos la siguiente definición del método ExtranioConfinador(), que aunque su nombre es igual al método que utilizamos en el fractal pasado su funcionamiento es completamente diferente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __fastcall TForm1(TComponent* Owner);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::ExtranioConfinador();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno ahora nos vamos a la Forma y en sus eventos elegimos el llamado OnCreate y le damos doble clic, ahí tecleamos el siguiente código, que nos servirá para que las siguientes variables tomen un valor cada vez que ejecutemos nuestra aplicación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MaxGen = 0x00FF;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxX = this-&amp;gt;ClientWidth;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxY = this-&amp;gt;ClientHeight;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enseguida escribimos el método ExtranioConfinador(), el código que necesitamos para generar el efecto del fractal es el que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void TForm1::ExtranioConfinador()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int i, j, k, l, Color, Contador, X, Y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double PobAnt, PobNueva, Razon;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobNueva = 0.0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Razon = 2.3;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color = clBlack;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for( j = 1; j &amp;lt;= 151; j++ )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( Color &amp;gt;= clWhite )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color = clBlue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Razon += 0.01;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobAnt = 0.01;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for( i = 1; i &amp;lt;= MaxGen; i++ )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobNueva = Razon * ( PobAnt * ( 1 - PobAnt ) );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; X = PobAnt * maxX;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y = maxY - ( PobNueva * maxY );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Pixels[X][Y] = (TColor)Color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( PobAnt == PobNueva )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( Contador &amp;gt; 10 )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i = MaxGen;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PobAnt = PobNueva;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;TextOutA(10, 10, &quot;Flujo Maltusiano&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(5);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalmente solo queda escribir la llamada al método en el evento OnClic del botón que habíamos colocado sobre la Forma:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Repaint();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ExtranioConfinador();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y así de fácil fue todo chavos ahora compilamos y corremos nuestra aplicación y si hicimos todo correctamente obtendremos un efecto como el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-UdcyNPlbX_U/T34GVQcCMnI/AAAAAAAAAIY/8gNzLzm0gVU/s1600/Fractal+Malthus1+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyY4U4D3e23gGhIWes3_uw9U8UpaMTA-zn6TrrO9ljxtcbQVCTyO6tp2rxM4v2pjdqmhZF6kFCe_IA3j_na_69ISE14kqxyG_yXDVR_oLdjj5gUdIYB_DGgb1BgVFSNG1x0Dz3-smsYEM/s1600/Fractal+Malthus1+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyY4U4D3e23gGhIWes3_uw9U8UpaMTA-zn6TrrO9ljxtcbQVCTyO6tp2rxM4v2pjdqmhZF6kFCe_IA3j_na_69ISE14kqxyG_yXDVR_oLdjj5gUdIYB_DGgb1BgVFSNG1x0Dz3-smsYEM/s320/Fractal+Malthus1+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno amigos pues ya hemos visto un montón de fractales diferentes pero aun nos quedan unos cuantos más por mostrar, ya que como les había dicho antes este tema es bastante amplio e interesante. Por hoy eso fue todo chavos nos vemos en la siguiente ocasión para continuar con más de este mismo tema y mostrar otro fractal parecido al de hoy conocido como el fractal de Malthus 2, hasta entonces amigos!!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/823141578893506440/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-malthus-1.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/823141578893506440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/823141578893506440'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-malthus-1.html' title='Fractal De Malthus 1'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYERwXXQZs-R6LikXrsxdns8N1D-M7ukW8Yim3d4rY2z8qi1xwJ0fXCeFbkKrorCOKcVDire9ojxxhYwvlu03KqsY1ktwe-qvig9KVlCNg6_mByBhfQrKwC3Y6K4iBkhJIBEcD-eioMkI/s72-c/Fractal+Malthus1+%25281%2529.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-6719198943063459648</id><published>2012-04-04T17:57:00.001-05:00</published><updated>2017-03-18T16:05:36.472-06:00</updated><title type='text'>Fractal De Henon</title><content type='html'>Hola de nueva cuenta amigos! Aquí me encuentro otra vez para continuar con más aplicaciones en C++ Builder. En este momento estamos analizando el tema de los fractales y en esta ocasión programaremos uno más el cual es llamado el fractal de Henon.&lt;br /&gt;
&lt;br /&gt;
Para realizar esto lo primero que haremos será cambiar el colo de la Forma a verde (como siempre ya saben que este paso es opcional). Después todo lo que necesitaremos será colocar un botón sobre la Forma. Entonces procedemos con la parte del código, por lo pronto nuestra Forma debe quedar mas o menos así:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-N2z-xjydTyc/T3zPkrjtCRI/AAAAAAAAAIA/ppK_-lM0BGU/s1600/Fractal+Henon+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTSjZcpKDCBeM-J4x7vU54FnK1m2hpquD3p5TSgOBBfpBN2hP0l6wZcjATtU7bUM9LxWNmGfzI9xl2CNqxl6D-DbwtBxTDDvv-XH4hMMWFuGcVZpLx6jUpKG0Tmc1-VUCfLpNHOoEeWkU/s1600/Fractal+Henon+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;163&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTSjZcpKDCBeM-J4x7vU54FnK1m2hpquD3p5TSgOBBfpBN2hP0l6wZcjATtU7bUM9LxWNmGfzI9xl2CNqxl6D-DbwtBxTDDvv-XH4hMMWFuGcVZpLx6jUpKG0Tmc1-VUCfLpNHOoEeWkU/s320/Fractal+Henon+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora nos vamos al archivo H de nuestra aplicación y en la parte privada declaramos las siguientes variables:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int maxX, maxY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double EscalaX, EscalaY, DespX, DespY;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luego en la parte pública escribimos la definición del método que utilizaremos para generar el fractal:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __fastcall TForm1(TComponent* Owner);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::ExtranioConfinador();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno ahora abrimos el evento OnCreate de la Forma y en él escribimos el siguiente código para que las variables maxX y maxY carguen los valores apenas corramos nuestra aplicación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxX=this-&amp;gt;ClientWidth;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxY=this-&amp;gt;ClientHeight; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enseguida escribimos el código del método anteriormente definido, es decir, el método ExtranioConfinador(), este es el codigo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void TForm1::ExtranioConfinador()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int a,i,PosX,PosY, Color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double Xant,Xnuevo,Yant,Ynuevo;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HDC hdc;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Xant = Xnuevo = Yant = Ynuevo = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(Color=1; Color&amp;lt;=15; Color++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i=1; i&amp;lt;=0x02ff; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Xnuevo = Yant + 1 - (1.4*Xant *Xant);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Ynuevo = 0.3 * Xant;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PosX = ( Xnuevo * maxX / 3 * EscalaX ) + maxX / 2 + DespX;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PosY = ( Ynuevo * maxY * EscalaY ) + maxY / 2 + DespY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(( PosX&amp;gt;=0)&amp;amp;&amp;amp;(PosX&amp;lt;=maxX)&amp;amp;&amp;amp;(PosY&amp;gt;=0)&amp;amp;&amp;amp;(PosY&amp;lt;=maxY))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Pixels[PosX][PosY]=(TColor)Color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Xant=Xnuevo;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yant=Ynuevo;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;TextOutA(10,110,&quot;CONFINADOR HENON&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;TextOutA(10,130,EscalaX);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;TextOutA(10,150,EscalaY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;TextOutA(10,170,DespX);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;TextOutA(10,190,DespY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Bien para terminar solo damos doble clic en el botón que habíamos colocado sobre la Forma y en el evento OnClic que se abre escribimos el código que tenemos a continuación:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;/div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Repaint();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EscalaX=1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EscalaY=1;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DespX=0;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DespY=0;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ExtranioConfinador();&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
//---------------------------------------------------------------------------&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Eso es todos chavos ahora solo queda compilar y correr nuestra aplicación y nos generará el efecto de la curva de Henon además nos desplegará en pantalla los valores de la escala en X, la escala en Y, así como los desplazamientos en X y en Y. Nuestra aplicación quedará de la siguiente manera:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-YVDcJybudxk/T3zRl4XrLMI/AAAAAAAAAII/My46qb9FPso/s1600/Fractal+Henon+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-x7XUvcNtyvFtNJ46ZUp5gAHIY0TzfhqN9chvvRHbTzoC8nwSSKyhT2BriPjJrLXX_RQJBfVN1UWgWNWUf6HCgam67-RItir35SI6bwQH1fg31QTzYRMfCTy15Snn5np6NgGGylDHSNo/s1600/Fractal+Henon+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-x7XUvcNtyvFtNJ46ZUp5gAHIY0TzfhqN9chvvRHbTzoC8nwSSKyhT2BriPjJrLXX_RQJBfVN1UWgWNWUf6HCgam67-RItir35SI6bwQH1fg31QTzYRMfCTy15Snn5np6NgGGylDHSNo/s320/Fractal+Henon+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Eso es todo por hoy amigos nos vemos en la próxima con un ejemplo más de los diferentes fractales que podemos generar mediante programación, espero que ya se sientan todos unos expertos en el C++ Builder y sino pues no queda de otra que seguir practicando. Hasta la vista amigos!.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/6719198943063459648/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-henon.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6719198943063459648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6719198943063459648'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-henon.html' title='Fractal De Henon'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTSjZcpKDCBeM-J4x7vU54FnK1m2hpquD3p5TSgOBBfpBN2hP0l6wZcjATtU7bUM9LxWNmGfzI9xl2CNqxl6D-DbwtBxTDDvv-XH4hMMWFuGcVZpLx6jUpKG0Tmc1-VUCfLpNHOoEeWkU/s72-c/Fractal+Henon+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-5497951858922656145</id><published>2012-04-03T10:55:00.000-05:00</published><updated>2017-03-18T16:05:03.370-06:00</updated><title type='text'>Fractal De Mandelbrot</title><content type='html'>Hola amigos! En esta ocasión vamos a continuar rápidamente con el tema de los fractales y programaremos otro diferente a los que ya hemos hecho anteriormente, hoy le toca el turno al fractal de Mandelbrot.&lt;br /&gt;
&lt;br /&gt;
Bien pues para comenzar lo primero es que tenemos que pintar la Forma de color (esto es opcional), damos clic en la propiedad Color de la forma y elegimos clNavy. Ahora colocamos un botón sobre la forma y eso es todo lo que necesitamos para comenzar a programar. Nuestra forma debería verse mas o menos de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-QwAEPlRWjeA/T3sb0iWLYqI/AAAAAAAAAHw/aUSab_G30z4/s1600/Fractal+Mandelbrot+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTxnP2f9IP7pepLzHGczzmvEvcAALCKWm12Ym8KdpMsX4RBbsbNEi-AW0O-v2g6Im8IYlYiQFs97703ivAF4MXm9PeE-BVA6K5eNytN1VkbOzSpQoYFLSwVCghNAS-z2uHHnVu8Gpyouc/s1600/Fractal+Mandelbrot+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTxnP2f9IP7pepLzHGczzmvEvcAALCKWm12Ym8KdpMsX4RBbsbNEi-AW0O-v2g6Im8IYlYiQFs97703ivAF4MXm9PeE-BVA6K5eNytN1VkbOzSpQoYFLSwVCghNAS-z2uHHnVu8Gpyouc/s320/Fractal+Mandelbrot+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Con la interfaz ya lista comenzamos entonces con la programación del fractal de Mandelbrot. Primero nos vamos a el archivo H y en la parte pública declaramos las siguientes variables que utilizaremos más adelante:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int maxX, maxY, Limite, i, j, Pasos, Terminar;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; double PasoX, PasoY, PosX, PosY, OrigX, OrigY, DimX, DimY, IterX, IterY, TempX;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esto será bastante sencillo y rápido chavos ahora nos cambiamos al archivo .cpp, o nos vamos a la Forma y damos doble clic en el botón para abrir su evento OnClic y ahí escribimos el siguiente código que será el que nos formará el efecto de Mandelbrot:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxX = Form1-&amp;gt;ClientWidth;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxY = Form1-&amp;gt;ClientHeight;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Limite = 100;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OrigX = -2.0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OrigY = -1.25;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DimX = 0.5;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DimY = 1.25;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PasoX = ( DimX - OrigX ) / maxX;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PasoY = ( DimY - OrigY ) / maxY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( i = 0; i &amp;lt;= maxX; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( j = 0; j &amp;lt;= maxY; j++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PosX = OrigX + i * PasoX;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PosY = OrigY + j * PasoY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IterX = 0.0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IterY = 0.0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Terminar = Pasos = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ( !Terminar )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TempX = ( IterX * IterX ) - ( IterY * IterY ) + PosX;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IterY = 2 * ( IterX * IterY ) + PosY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IterX = TempX;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Pasos++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( hypot( fabs(IterX), fabs(IterY)) &amp;gt;= 2.0)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Terminar++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( Pasos &amp;gt;= Limite )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Terminar++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( Pasos &amp;lt; Limite )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Pixels[i][j] = (TColor)Pasos;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y pues aunque no lo crean es todo chavos, ahora solo tenemos que compilar nuestra programa y correrlo para ver su funcionamiento y si todo salió bien nuestra aplicación debería verse así:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-WRYvqCwDomc/T3sdF-AWI-I/AAAAAAAAAH4/LdcjoHX0R74/s1600/Fractal+Mandelbrot+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBhbd4Z9WqR_Ki1_F-F5QiLrkNeGMliIjQd1GpfGRDALz_C6-6FZgZdvB63J5jQk2Y7FMq_LJOQFf1vlADF-tpjgCwzWeOH3XdVEfmthAETXpiXp_Db6eX9lLaXP16l2Pmuuhyphenhyphen7EPnxdI/s1600/Fractal+Mandelbrot+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBhbd4Z9WqR_Ki1_F-F5QiLrkNeGMliIjQd1GpfGRDALz_C6-6FZgZdvB63J5jQk2Y7FMq_LJOQFf1vlADF-tpjgCwzWeOH3XdVEfmthAETXpiXp_Db6eX9lLaXP16l2Pmuuhyphenhyphen7EPnxdI/s320/Fractal+Mandelbrot+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Y por hoy eso fue todo amigos nos vemos la próxima ocasión en la que programaremos otro fractal más para que sigan viendo las diferentes opciones que tenemos en este amplio tema. Hasta la vista chavos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/5497951858922656145/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-mandelbrot.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/5497951858922656145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/5497951858922656145'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-mandelbrot.html' title='Fractal De Mandelbrot'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTxnP2f9IP7pepLzHGczzmvEvcAALCKWm12Ym8KdpMsX4RBbsbNEi-AW0O-v2g6Im8IYlYiQFs97703ivAF4MXm9PeE-BVA6K5eNytN1VkbOzSpQoYFLSwVCghNAS-z2uHHnVu8Gpyouc/s72-c/Fractal+Mandelbrot+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-3613831883599329387</id><published>2012-04-02T16:33:00.002-05:00</published><updated>2017-03-18T16:04:05.292-06:00</updated><title type='text'>Fractal Del Dragón</title><content type='html'>Hola de nueva cuenta amigos! Es hora de continuar practicando con el C++ Builder, en esta ocasión programaremos otro fractal como el de la vez anterior pero este genera un efecto diferente y es conocido como el fractal del dragón.&lt;br /&gt;
&lt;br /&gt;
Bien pues para empezar primero cambiamos el color de la Forma a negro, y colocamos los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
-1 botón&lt;br /&gt;
-1 Edit (con un valor inicial de 2)&lt;br /&gt;
-1 Edit (con un valor inicial de 12)&lt;br /&gt;
-1 UpDown (con un valor mínimo de 1 y máximo de 10, asociado con el Edit1)&lt;br /&gt;
-1 UpDown (con un valor mínimo de 1 y máximo de 13, asociado con el Edit2)&lt;br /&gt;
&lt;br /&gt;
La forma en mi caso queda de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-crOWElCGpHU/T3oaQulKh2I/AAAAAAAAAHg/RG198XCmb84/s1600/Fractal+Dragon+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtDe-rGZ6pl5VyxmwzFrc73hcWRjHME2OA75B6e1fck9bJy1vVPyT1SBsthNBNJGUXx9jR9oA8Dho-NE3y7X68-WOy5KmIZ3bw9rTIJ2g0C_vSPEoXaVypOV0s3-5MpASdyWXC4ZXzNE0/s1600/Fractal+Dragon+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;184&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtDe-rGZ6pl5VyxmwzFrc73hcWRjHME2OA75B6e1fck9bJy1vVPyT1SBsthNBNJGUXx9jR9oA8Dho-NE3y7X68-WOy5KmIZ3bw9rTIJ2g0C_vSPEoXaVypOV0s3-5MpASdyWXC4ZXzNE0/s320/Fractal+Dragon+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora abrimos el archivo H y en la parte privada declaramos las siguientes variables:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int Paso, Signo, EjeX[4098], EjeY[4098], x1, y1, x2, y2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y en la parte pública declaramos la definición de los métodos que utilizaremos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __fastcall TForm1(TComponent* Owner);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::GenerarDragon();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno pues enseguida declaramos el método GenerarDragon(), ahora en el archivo .cpp:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void TForm1::GenerarDragon()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int i, j, dx, dy;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; j = Paso / 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(i = 1; i &amp;lt;= 4096; i += Paso)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dx = EjeX[Paso+i] - EjeX[i];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dy = EjeY[Paso+i] - EjeY[i];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Signo *= -1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EjeX[i + j] = EjeX[i] + (dx + (dy * Signo)) / Edit1-&amp;gt;Text.ToInt();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EjeY[i + j] = EjeY[i] + (dy - (dx * Signo)) / Edit1-&amp;gt;Text.ToInt();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(EjeX[i],EjeY[i]);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(EjeX[i+j],EjeY[i+j]);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(EjeX[i+j],EjeY[i+j]);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(EjeX[i+Paso],EjeY[i+Paso]);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sleep(1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//--------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el Button1 y escribimos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Paso = 4096;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Signo = -1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EjeX[1] = this-&amp;gt;ClientWidth / 4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EjeX[4097] = 3 * this-&amp;gt;ClientWidth / 4;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EjeY[1] = EjeY[4097] = 2 * this-&amp;gt;ClientHeight / 3;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;Pen-&amp;gt;Color = clRed;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;MoveTo(EjeX[1],EjeY[1]);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Canvas-&amp;gt;LineTo(EjeX[4097],EjeY[4097]);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 1; i &amp;lt;= Edit2-&amp;gt;Text.ToInt(); i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;Repaint();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GenerarDragon();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Paso /= 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos en evento OnPaint de la Forma y escribimos la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormResize(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Invalidate();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y pues eso es todo chavos ahora solo queda compilar nuestra aplicación y correrla para ver como funciona. Pueden mover los valores de los Edits para ver los diferentes efectos que se forman, el primero afectará la forma que tendrá el fractal al formarse y el segundo es el número de iteraciones que realizará la aplicación para formar el fractal. El resultado final es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-gbCfQffaa1A/T3obDFuyuKI/AAAAAAAAAHo/FEwCWhfyQtY/s1600/Fractal+Dragon+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgigYSJvM0KJX5nLi3yOBYUbLVGrLJHIp1bDXpPfDaX-GbmUzenEarqwxbxvlqbvmuZnDPvs1vkrmy9hQ7QGuOcnBFi77hWgt58FB9cd5kcN4uAmY7oWI_iK0iA3LAFBADAADv8Q03rMYU/s1600/Fractal+Dragon+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;182&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgigYSJvM0KJX5nLi3yOBYUbLVGrLJHIp1bDXpPfDaX-GbmUzenEarqwxbxvlqbvmuZnDPvs1vkrmy9hQ7QGuOcnBFi77hWgt58FB9cd5kcN4uAmY7oWI_iK0iA3LAFBADAADv8Q03rMYU/s320/Fractal+Dragon+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Por hoy eso fue todo amigos nos vemos en la siguiente ocasión para seguir con más de este tema de los fractales que es bastante amplio y ay mucha variedad de ellos. Nos vemos chavos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/3613831883599329387/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-del-dragon.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3613831883599329387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3613831883599329387'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-del-dragon.html' title='Fractal Del Dragón'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtDe-rGZ6pl5VyxmwzFrc73hcWRjHME2OA75B6e1fck9bJy1vVPyT1SBsthNBNJGUXx9jR9oA8Dho-NE3y7X68-WOy5KmIZ3bw9rTIJ2g0C_vSPEoXaVypOV0s3-5MpASdyWXC4ZXzNE0/s72-c/Fractal+Dragon+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-7643974690564211501</id><published>2012-04-01T17:53:00.000-05:00</published><updated>2017-03-18T16:03:22.447-06:00</updated><title type='text'>Fractal De Newton-Raphson</title><content type='html'>Hola a todos amigos!! Después de tanto tiempo de no andar por aquí les pido una disculpa y es hora de que volvamos a seguir con las prácticas de aplicaciones gráficas en C++ Builder. Bueno en esta ocasión empezaremos con le tema de los fractales. Si no sabemos lo que son los fractales podemos seguir el siguiente enlace y nuestra buena amiga doña Wikipedia nos lo dirá:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://es.wikipedia.org/wiki/Fractal&quot;&gt;http://es.wikipedia.org/wiki/Fractal&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
El fractal que programaremos hoy será el conocido como Newton-Raphson. Lo que haremos hoy será un poco diferente a lo que hacemos regularmente ya que esta vez no utilizaremos la Forma que nos da el C++ Builder sino que llamaremos directo a Windows para que nos cree una al tamaño que nosotros deseemos etc.&lt;br /&gt;
&lt;br /&gt;
Bueno pues empezamos por crear una nueva aplicación en C++ Builder y luego nos vamos al menú &quot;Project&quot; luego al sub-menú &quot;Remove From Project&quot; y en la ventana que se abre seleccionamos la opción &quot;Unit1.cpp&quot; y le damos en OK. Esto nos eliminará la Forma ahora abrimos el menú &quot;View&quot; y después el sub-menú &quot;Project Manager&quot; y en la ventana damos doble clic en &quot;Project1.cpp&quot;. Una vez que se nos haya abierto el editor de código borramos todo el código que haya escrito y escribimos todo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
#include &amp;lt;vcl.h&amp;gt;&lt;br /&gt;
#pragma hdrstop&lt;br /&gt;
&lt;br /&gt;
//--- Declaración de funciones del programa ------------------------------&lt;br /&gt;
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int );&lt;br /&gt;
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );&lt;br /&gt;
void CrearPaleta(void);&lt;br /&gt;
&lt;br /&gt;
//--- Declaración de variables del programa ------------------------------&lt;br /&gt;
char WindowName[] &amp;nbsp;= &quot;Ventana de Windows&quot;;&lt;br /&gt;
char WindowTitle[] = &quot;Fractal de Newton-Raphson&quot;;&lt;br /&gt;
BYTE ColorRGB[256][3];&lt;br /&gt;
&lt;br /&gt;
void CrearPaleta(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;int i;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;for (i=0; i&amp;lt;256; i++)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;if (i&amp;lt;64)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][0] = 192 + i;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][1] = 0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][2] = 0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;else if ((i&amp;gt;63) &amp;amp;&amp;amp; (i&amp;lt;128))&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][0] = 0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][1] = (192 + i)-64;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][2] = 0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;else if ((i&amp;gt;127)&amp;amp;&amp;amp;(i&amp;lt;192))&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][0] = 0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][1] = 0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;ColorRGB[i][2] = (192 + i)-128;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=== Función principal WinMain() ========================================&lt;br /&gt;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt; &amp;nbsp; &amp;nbsp;LPSTR lpCmdLine, int nCmdShow )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;HWND hwnd; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// handle a la ventana ppal.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;MSG msg; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// estructura de mensaje&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;WNDCLASSEX wcx; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // estructura de la ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// Definimos la estructura de clase de ventana (campos):&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.cbSize = sizeof( WNDCLASSEX ); &amp;nbsp; &amp;nbsp; &amp;nbsp;// tamaño de la estructura&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.style = CS_HREDRAW | CS_VREDRAW; &amp;nbsp; &amp;nbsp;// valores más usuales&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.lpfnWndProc = WndProc; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// función de ventana (Wnd)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.cbClsExtra = 0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.cbWndExtra = 0; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // informaciones extra&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.hInstance = hInstance; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// instancia actual&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// icono, cursor, fondo e icono pequeño de la clase de ventana:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.hIcon = LoadIcon(NULL, IDI_WINLOGO);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.hCursor = LoadCursor(NULL, IDC_ARROW);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; wcx.hIconSm = LoadIcon(NULL, IDI_WINLOGO);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.lpszMenuName = NULL; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// nombre del menú&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;wcx.lpszClassName = WindowName; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // nombre de la ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// Registramos la clase de ventana ya preparada:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;if( !RegisterClassEx( &amp;amp;wcx ) )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;return( FALSE ); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// en caso de error, salir&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// Creamos la ventana con CreateWindowEx():&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;hwnd = CreateWindowEx(&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;WS_EX_OVERLAPPEDWINDOW, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // estilo extendido&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;WindowName, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // nombre de la ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;WindowTitle, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// título de la ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;WS_OVERLAPPEDWINDOW, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// estilo de ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;CW_USEDEFAULT, CW_USEDEFAULT, &amp;nbsp; &amp;nbsp; &amp;nbsp; // Posición (x,y) en pantalla&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;400, 400, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ancho y alto de la ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;NULL, NULL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ventana padre e hija+menú&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;hInstance, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// instancia actual&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// no hay más información&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// Comprobamos la creación de la ventana:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;if( !hwnd )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;return( FALSE ); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// en caso de error, salir&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// Hacemos visible la ventana y la actualizamos:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;ShowWindow( hwnd, nCmdShow );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;UpdateWindow( hwnd );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// Bucle de mensajes, envía los mensajes hacia WndProc&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;while( GetMessage( &amp;amp;msg, NULL, 0, 0 ) )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;TranslateMessage( &amp;amp;msg ); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // convertimos el mensaje&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;DispatchMessage( &amp;amp;msg ); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// devolvemos el control a w95&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// devolvemos el valor recibido por PostQuitMessage().&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;return( msg.wParam );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=== Función del procedimiento de ventana WndProc() =====================&lt;br /&gt;
LRESULT CALLBACK WndProc( HWND hwnd, UINT message,&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt; &amp;nbsp;WPARAM wParam, LPARAM lParam )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;HDC hdc;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;PAINTSTRUCT ps;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;RECT rect;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;BYTE R, G, B;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;double deltax, deltay, x, y, tmp, xx, yy, d;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;float &amp;nbsp;xmin = -2.0, ymin=-2.0, xmax=2.0, ymax=2.0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;int maxiter = 2048;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;int maxcol, maxrow;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;int color, row, col, count;&lt;br /&gt;
&amp;nbsp;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;switch( message )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// mensaje producido en la creación de la ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;case WM_CREATE:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //dibuja el fractal de Newton-Raphson&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;case WM_PAINT:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;CrearPaleta();&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;hdc = BeginPaint( hwnd, &amp;amp;ps );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;GetClientRect(hwnd, &amp;amp;rect);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxcol = &amp;nbsp;rect.right - rect.left ;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;maxrow = &amp;nbsp;rect.bottom - rect.top;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;deltax = (xmax - xmin)/maxcol;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;deltay = (ymax - ymin)/maxrow;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;for (col=0; col&amp;lt;=maxcol; col++)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;     &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;     &lt;/span&gt;for (row=0; row&amp;lt;=maxrow; row++)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;x = xmin + col * deltax;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;y = ymin + row * deltay;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;count=0;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;while (count&amp;lt;maxiter)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;xx = x*x;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;yy = y*y;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;d = 3.0*((xx - yy)*(xx - yy) + 4.0*xx*yy);&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;if (d == 0.0)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;        &lt;/span&gt;d = 0.000001;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;tmp=x;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;x = (2.0/3.0)*x + (xx - yy)/d;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;y = (2.0/3.0)*y - 2.0*tmp*y/d;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;count+=1;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;if (x&amp;gt;0.0)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;color = count%64;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;else&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;if ((x&amp;lt;-0.3) &amp;amp;&amp;amp; (y&amp;gt;0.0))&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;        &lt;/span&gt;color = (count%64) + 64;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;else&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;        &lt;/span&gt;color = (count%64) + 128;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;       &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;     &lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; R=ColorRGB[color][0];&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;G=ColorRGB[color][1];&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;B=ColorRGB[color][2];&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;SetPixel(hdc, col, row, RGB(R,G,B));&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;     &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;EndPaint( hwnd, &amp;amp;ps );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// mensaje producido al cerrar la ventana&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;case WM_DESTROY:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;PostQuitMessage( 0 );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// resto de mensajes, dar una respuesta estándar.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;default:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;    &lt;/span&gt;return( DefWindowProc( hwnd, message, wParam, lParam ) );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=== Fin del archivo ====================================================&lt;br /&gt;
&lt;br /&gt;
Ahora compilamos y corremos nuestra aplicación y obtendremos nuestro fractal resultante:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-coWq2xb-FNg/T3jcFhTDfdI/AAAAAAAAAHY/JZzW3kJ4KGc/s1600/Fractal+NewtonRaphson+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHC4ryqXV2jAeR_UeR4rX8QKOAqslGD2yv7-qhIDN2PbfGx_QrXiRSDIU4OuUHlBTeIwn5ckjFNLmUj63qgtwBRfZEbzjabHpp30-xWATzml2pA9xv8U43Uung3BVtaTGleEotta1XU_I/s1600/Fractal+NewtonRaphson+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHC4ryqXV2jAeR_UeR4rX8QKOAqslGD2yv7-qhIDN2PbfGx_QrXiRSDIU4OuUHlBTeIwn5ckjFNLmUj63qgtwBRfZEbzjabHpp30-xWATzml2pA9xv8U43Uung3BVtaTGleEotta1XU_I/s320/Fractal+NewtonRaphson+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Y bueno amigos por esta ocasión eso fue todo nos vemos más adelante para continuar y ver un poco más de fractales ya que son muy interesantes. Hasta la próxima!!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/7643974690564211501/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-newton-raphson.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/7643974690564211501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/7643974690564211501'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/04/fractal-de-newton-raphson.html' title='Fractal De Newton-Raphson'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHC4ryqXV2jAeR_UeR4rX8QKOAqslGD2yv7-qhIDN2PbfGx_QrXiRSDIU4OuUHlBTeIwn5ckjFNLmUj63qgtwBRfZEbzjabHpp30-xWATzml2pA9xv8U43Uung3BVtaTGleEotta1XU_I/s72-c/Fractal+NewtonRaphson+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-7365883342772442482</id><published>2012-03-05T18:11:00.003-06:00</published><updated>2017-03-18T16:02:24.523-06:00</updated><title type='text'>Manipulación Y Manejo De Pixeles De Bitmap</title><content type='html'>Hola amigos! En esta ocasión aprenderemos algo muy útil y que nos hará aprender mucho. En nuestra aplicación que realizaremos en esta ocasión aprenderemos como manipular los pixeles de una imágen bitmap, aprenderemos a tomar los pixeles de una imágen personal que cargaremos en el programa y ponerla de cabeza, acostada, cambiar todas las tonalidades por un solo color, y también aprenderemos como hacer zoom a un área en específico de la imágen utilizando la función CopyRect.&lt;br /&gt;
&lt;br /&gt;
Bueno pues comenzamos agregando los componentes que necesitamos en la Forma, los cuales listamos a continuación:&lt;br /&gt;
&lt;br /&gt;
-1 ComboBox&lt;br /&gt;
-2 Image (Del mismo tamaño)&lt;br /&gt;
-1 Label&lt;br /&gt;
-7 Botones&lt;br /&gt;
-1 OpenPictureDialog&lt;br /&gt;
&lt;br /&gt;
La Forma debe quedar de la siguiente manera, en mi caso con la imágen del dragón ya cargada en el Image1:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-r7S45ymr-94/T1VFucr-UwI/AAAAAAAAAHI/QMXYKsNqNDM/s1600/ColoresBitmap+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmpDcGVG5CbGpZM5APD4R3UtDHbQZJ3CkdIwcP9x6QUerFNaqdPEbLvCgocn0G9rYXgMRixUMqAUdcTzaK_tBtlCA6zY4jO6idLP-00jI99Nq7-qbaio-vg8WXdDOdlWCe8VpdvwDjIq0/s1600/Colores+Bitmap+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;182&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmpDcGVG5CbGpZM5APD4R3UtDHbQZJ3CkdIwcP9x6QUerFNaqdPEbLvCgocn0G9rYXgMRixUMqAUdcTzaK_tBtlCA6zY4jO6idLP-00jI99Nq7-qbaio-vg8WXdDOdlWCe8VpdvwDjIq0/s320/Colores+Bitmap+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora configuraremos varios de los componentes. El primero de ellos es el Image1, en su propiedad Picture cargamos la imágen de tipo bitmap que deseemos, en mi caso cargo la imágen de un dragón (yo he descargado varias y les recomiendo hacer lo mismo para tener variedad de imágenes y seleccionar otra cuando queramos). Luego en el ComboBox1 en su propiedad Items agregamos los siguientes:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*AND&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*OR&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*XOR&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*NOT&lt;br /&gt;
&lt;br /&gt;
Ahora vamos al archivo H y en la parte de Private declaramos las siguientes variables:&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int color, left, top, right, bottom;&lt;br /&gt;
&lt;br /&gt;
Y en la parte Public declaramos los métodos Dibujar() y Zoom() que utilizaremos más delante:&lt;br /&gt;
&lt;br /&gt;
public:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __fastcall TForm1(TComponent* Owner);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::Dibujar();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void TForm1::Zoom();&lt;br /&gt;
&lt;br /&gt;
Bien pues ahora comenzaremos con la codificación. Primero en el evento de creación del TForm1() agregamos la siguiente línea de código para indicar que al correr la aplicación estará seleccionada la primera opción en el ComboBox:&lt;br /&gt;
&lt;br /&gt;
__fastcall TForm1::TForm1(TComponent* Owner)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : TForm(Owner)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboBox1-&amp;gt;ItemIndex = 0;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Antes de todo abrimos el evento OnCreate de la Forma y escribimos el código siguiente que nos ayudará a reducir el parpadeo:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;DoubleBuffered=true;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Después, primero definimos los dos métodos que habíamos declarado anteriormente ya que los utilizaremos más adelante. Primero el método Dibujar():&lt;br /&gt;
&lt;br /&gt;
void TForm1::Dibujar()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Canvas-&amp;gt;DrawFocusRect(Rect(left+Image1-&amp;gt;Left,top+Image1-&amp;gt;Top,right+Image1-&amp;gt;Left,bottom+Image1-&amp;gt;Top));&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------
&lt;br /&gt;
&lt;br /&gt;
Después el método Zoom():&lt;br /&gt;
&lt;br /&gt;
void TForm1::Zoom()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics::TBitmap *Bitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TRect rect1, rect2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rect1 = Rect(left,top,right,bottom);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rect2 = Rect(430,50,750,390);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Bitmap=Image1-&amp;gt;Picture-&amp;gt;Bitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Canvas-&amp;gt;CopyRect(rect2, Bitmap-&amp;gt;Canvas, rect1);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora escribiremos el botón que dice rojo, el cual dependiendo de la opción que esté seleccionada en el ComboBox realizará una operación de &quot;&amp;amp;&quot;, &quot;|&quot;, &quot;!&quot; ó &quot;^&quot; con el número hexadecimal &quot;0x0000ff&quot; para cambiar todos los colores del bitmap por tonalidades de color rojo:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox1-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color&amp;amp;0x0000ff;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color|0x0000ff;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color^0x0000ff;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = ~(TColor)color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora damos doble clic en el botón con la leyenda &quot;Verde&quot; el cual realizará una operación con el numero hexadecimal &quot;0x00ff00&quot; dependiendo de la opción seleccionada en el ComboBox para cambiar todos los colores del bitmap por tonalidades verdes, escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox1-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color&amp;amp;0x00ff00;//(TColor)color&amp;amp;255&amp;lt;&amp;lt;8;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color|0x00ff00;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color^0x00ff00;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = ~(TColor)color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora damos doble clic en el botón que dice &quot;Azul&quot;, el cual hará exactamente lo mismo que los anteriores con la diferencia de que éste cambiará todos los colores por tonalidades azules, el código es el siguiente:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button3Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox1-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color&amp;amp;0xff0000;//(TColor)color&amp;amp;255&amp;lt;&amp;lt;16;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color|0xff0000;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = (TColor)color^0xff0000;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0; x&amp;lt;Image1-&amp;gt;Width; x++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0; y&amp;lt;Image1-&amp;gt;Height; y++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color=Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x][y] = ~(TColor)color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora en el botón &quot;CopyBrush&quot; escribimos el código para ejemplificar el funcionamiento de las funciones CopyBrush y CopyRect, el código lo tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button13Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics::TBitmap *Bitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TRect rect1, rect2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rect1 = Rect(10,10,100,100);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rect2 = Rect(450,111,550,201);//(10,111,100,201);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Bitmap=Image1-&amp;gt;Picture-&amp;gt;Bitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Canvas-&amp;gt;BrushCopy(rect2, Bitmap, rect1, (TColor)color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Canvas-&amp;gt;CopyRect(rect2, Bitmap-&amp;gt;Canvas, rect1);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Enseguida manipularemos los pixeles de la imágen bitmap para invertirla, es decir, la dibujaremos de cabeza, el código se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button14Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0, x2=Image2-&amp;gt;Width; x&amp;lt;Image1-&amp;gt;Width; x++, x2--)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0, y2=Image2-&amp;gt;Height; y&amp;lt;Image1-&amp;gt;Height; y++, y2--)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[x2][y2] = Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Luego lo que haremos será colocar la imágen de lado, es decir tomaremos los pixeles y dibujaremos la imágen acostada con el siguiente código:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button15Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TRect Rect(0,0,Image2-&amp;gt;Width,Image2-&amp;gt;Height);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;FillRect(Rect);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int x=0, x2=Image2-&amp;gt;Width; x&amp;lt;Image1-&amp;gt;Width; x++, x2--)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int y=0, y2=Image2-&amp;gt;Height; y&amp;lt;Image1-&amp;gt;Height; y++, y2--)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image2-&amp;gt;Canvas-&amp;gt;Pixels[y2][x2] = Image1-&amp;gt;Canvas-&amp;gt;Pixels[x][y];&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora trabajaremos para realizar el zoom a un área de la imágen, para esto utilizaremos 3 eventos. El primero de los eventos que necesitamos es el evento OnMouseDown de el Image1, en el escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Image1MouseDown(TObject *Sender,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; TMouseButton Button, TShiftState Shift, int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Shift.Contains(ssLeft))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; left = X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; top = Y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el evento OnMouseMove de el Image1 y escribimos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Shift.Contains(ssLeft))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1MouseUp(Sender, mbLeft, Shift, X, Y);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
El último de los eventos que necesitamos es el OnMouseUp de el Image1, en el cual tecleamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; TShiftState Shift, int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Button==mbLeft)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; right = X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bottom = Y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Dibujar();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Zoom();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Con esto ya podemos dibujar un rectángulo sobre el área sobre la cual queremos realizar el zoom y esta aparecerá con el zoom realizado en la parte derecha de la Forma.&lt;br /&gt;
&lt;br /&gt;
Ahora realizaremos otra tarea aprovechando el evento OnMouseDown del Image1, pero esta vez con la opción del botón clic derecho. Lo que haremos será copiar la imágen del Image1 en el Image2 pero quitando los pixeles del color al que le hayamos dado clic en la imágen original, el código es el siguiente (está debajo del código utilizado para el zoom):&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Image1MouseDown(TObject *Sender,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; TMouseButton Button, TShiftState Shift, int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Shift.Contains(ssLeft))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; left = X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; top = Y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(Shift.Contains(ssRight))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TColor color = Image1-&amp;gt;Canvas-&amp;gt;Pixels[X][Y];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics::TBitmap *Bitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TRect rect1, rect2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rect1 = Rect(0,0,Image1-&amp;gt;Width,Image1-&amp;gt;Height);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rect2 = Rect(Image2-&amp;gt;Left,Image2-&amp;gt;Top,Image2-&amp;gt;Left+Image2-&amp;gt;Width,Image2-&amp;gt;Height+Image2-&amp;gt;Top);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Bitmap=Image1-&amp;gt;Picture-&amp;gt;Bitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Canvas-&amp;gt;BrushCopy(rect2, Bitmap, rect1, (TColor)color);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Finalmente codificaremos el botón &quot;Cargar Bitmap&quot; para tener la opción de elegir otro bitmap que tengamos en nuestra computadora y poder realizar las mismas acciones que codificamos anteriormente, el código lo tenemos enseguida:&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button4Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Podemos seleccionar un bitmap para cargarlo en la aplicación&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Form1-&amp;gt;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String name;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(OpenPictureDialog1-&amp;gt;Execute())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name = OpenPictureDialog1-&amp;gt;FileName;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1-&amp;gt;Picture-&amp;gt;LoadFromFile(name);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Y eso es todo chavos, compilamos nuestra aplicación y la corremos para poder probar todas las acciones codificadas, deberíamos tener algo como lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-8mqskziJoWM/T1VV5W25ttI/AAAAAAAAAHQ/IXIXYRdgiyc/s1600/Colores+Bitmap+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqeLGuDM6uaZ4KWybFR4FFw4BdqB5ET9jo-VPHc0KNvj_e-qhc3SVCA-FZnvJWy4OSSeWq2_GI0YoCTFnVgwjIadpPQlgc1jIIdq-Bip40s43Vpkr5y7_pYykVKoL0hJRh9BBx7DDc-vM/s1600/Colores+Bitmap+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;183&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqeLGuDM6uaZ4KWybFR4FFw4BdqB5ET9jo-VPHc0KNvj_e-qhc3SVCA-FZnvJWy4OSSeWq2_GI0YoCTFnVgwjIadpPQlgc1jIIdq-Bip40s43Vpkr5y7_pYykVKoL0hJRh9BBx7DDc-vM/s320/Colores+Bitmap+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno chavos pues es todo por mi parte, creo que hoy aprendimos muchas cosas nuevas diferentes a las que ya sabíamos anteriormente, yo los espero en la próxima para continuar con más aplicaciones gráficas en C++ Builder. Nos vemos amigos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/7365883342772442482/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/03/manipulacion-y-manejo-de-pixeles-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/7365883342772442482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/7365883342772442482'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/03/manipulacion-y-manejo-de-pixeles-de.html' title='Manipulación Y Manejo De Pixeles De Bitmap'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmpDcGVG5CbGpZM5APD4R3UtDHbQZJ3CkdIwcP9x6QUerFNaqdPEbLvCgocn0G9rYXgMRixUMqAUdcTzaK_tBtlCA6zY4jO6idLP-00jI99Nq7-qbaio-vg8WXdDOdlWCe8VpdvwDjIq0/s72-c/Colores+Bitmap+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-7275442684094837684</id><published>2012-02-29T18:55:00.000-06:00</published><updated>2017-03-18T16:00:45.988-06:00</updated><title type='text'>Etiquetas De Formato De HTML con C#</title><content type='html'>Hola chavos! Bueno pues en esta ocasión trabajaremos con algo un poco diferente a lo que habitualmente veníamos haciendo. Por esta vez no utilizaremos el lenguaje de programación C++ sino que utilizaremos el ya conocido C#. Supongo que ya todos deberían haber trabajado alguna vez con C# (casi siempre utilizado con la interfaz Microsoft Visual Studio), &amp;nbsp;es relativamente un lenguaje más sencillo que C++ ya que la interfaz de usuario proporciona muchísima ayuda y es muy amigable con el usuario al momento de compilar y corregir errores ya que siempre muestra en donde se encuentran éstos. Ambos lenguajes son muy parecidos el uno al otro así que no nos será muy difícil poder trabajar en ambos.&lt;br /&gt;
&lt;br /&gt;
Nuestra aplicación lo que hará será probar como se vería el cuerpo de una página HTML con diferentes combinaciones de colores de fondo, color de texto, color de los links dentro de la página, color de los links activos y color de los links ya visitados. Los colores los definiremos con el famoso RGB que ya tantas veces hemos utilizado antes en C++. Una vez que hayamos encontrado la combinación de colores que más nos agrade podremos copiar el código de etiquetas para poder copiarlo dentro de un documento HTML para crear nuestra propia página.&lt;br /&gt;
&lt;br /&gt;
La aplicación contendrá muchos componentes en la Forma, enseguida los enlistamos:&lt;br /&gt;
&lt;br /&gt;
-2 GroupBox&lt;br /&gt;
-5 RadioButton&lt;br /&gt;
-6 Labels o etiquetas&lt;br /&gt;
-3 ScrollBar (TrackBar en C++ Builder)&lt;br /&gt;
-2 Panel&lt;br /&gt;
-13 TextBox (Edit en C++ Builder)&lt;br /&gt;
-2 botones&lt;br /&gt;
&lt;br /&gt;
Al igual que siempre pueden crear el diseño como deseen, en mi caso lo&amp;nbsp;realice&amp;nbsp;de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-JkvYhJ8NSGM/T07HUx9IbUI/AAAAAAAAAG4/O4gNQSvrzkE/s1600/HTML+Body+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9opgBzc1rFwbZLD46TCrVtAQwmoQGuof_BR_DtL4T45tAeEKRcs4cNSxWK6LtP-eIBtXcj5aSqveDn6qu8-CBUwF1iRR40ChyphenhyphenGJIZwxDU18UzL25J_5uNGY63SG5VeUmkvTMAxecmLYU/s1600/HTML+Body+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9opgBzc1rFwbZLD46TCrVtAQwmoQGuof_BR_DtL4T45tAeEKRcs4cNSxWK6LtP-eIBtXcj5aSqveDn6qu8-CBUwF1iRR40ChyphenhyphenGJIZwxDU18UzL25J_5uNGY63SG5VeUmkvTMAxecmLYU/s320/HTML+Body+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora comenzamos con la codificación de los componentes,para ir al código presionamos F7. Ya estando ahí lo primero que haremos será definir algunas variables y métodos que necesitaremos, comenzamos por declarar las siguiente variables globales en el Form1.cs:&lt;br /&gt;
&lt;br /&gt;
private string HexBG, HexText, HexLink, HexALink, HexVLink;&lt;br /&gt;
&lt;br /&gt;
Enseguida definiremos 2 métodos que utilizaremos para los colores, primero para aplicar los colores:&lt;br /&gt;
&lt;br /&gt;
internal void ApplyColor()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexBG = txtBackground.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexText = txtText.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexLink = txtLink.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexALink = txtActiveLink.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexVLink = txtVisitedLink.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string strRed = Convert.ToString(255 - scrRed.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string strGreen = Convert.ToString(255 - scrGreen.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string strBlue = Convert.ToString(255 - scrBlue.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtRed.Text = strRed;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtGreen.Text = strGreen;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtBlue.Text = strBlue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pnlPreview.BackColor=Color.FromArgb(255-scrRed.Value,255-scrGreen.Value,255-scrBlue.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string FmtRed = (255 - scrRed.Value).ToString(&quot;X&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (FmtRed.Length == 1)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FmtRed = String.Concat(&quot;0&quot;, FmtRed);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string FmtGreen = (255 - scrGreen.Value).ToString(&quot;X&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (FmtGreen.Length == 1)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FmtGreen = String.Concat(&quot;0&quot;, FmtGreen);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string FmtBlue = (255 - scrBlue.Value).ToString(&quot;X&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (FmtBlue.Length == 1)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FmtBlue = String.Concat(&quot;0&quot;, FmtBlue);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rdoBackground.Checked == true)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string BG = &quot;#&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BG = String.Concat(BG, FmtRed);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BG = String.Concat(BG, FmtGreen);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BG = String.Concat(BG, FmtBlue);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtBackground.Text = BG;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pnlBody.BackColor = pnlPreview.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtTextPreview.BackColor = pnlPreview.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtLinkPreview.BackColor = pnlPreview.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtALinkPreview.BackColor = pnlPreview.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtVLinkPreview.BackColor = pnlPreview.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexBG = txtBackground.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (rdoText.Checked == true)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string Txt = &quot;#&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Txt = String.Concat(Txt, FmtRed);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Txt = String.Concat(Txt, FmtGreen);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Txt = String.Concat(Txt, FmtBlue);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtText.Text = Txt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtTextPreview.ForeColor=Color.FromArgb(255-scrRed.Value,255-scrGreen.Value,255-scrBlue.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexText = txtText.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (rdoLink.Checked == true)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string TL = &quot;#&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TL = String.Concat(TL, FmtRed);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TL = String.Concat(TL, FmtGreen);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TL = String.Concat(TL, FmtBlue);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtLink.Text = TL;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtLinkPreview.ForeColor=Color.FromArgb(255-scrRed.Value,255-scrGreen.Value,255-scrBlue.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexLink = txtLink.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (rdoActiveLink.Checked == true)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string AL = &quot;#&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AL = String.Concat(AL, FmtRed);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AL = String.Concat(AL, FmtGreen);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AL = String.Concat(AL, FmtBlue);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtActiveLink.Text = AL;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtALinkPreview.ForeColor=Color.FromArgb(255-scrRed.Value,255-scrGreen.Value,255-scrBlue.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexALink = txtActiveLink.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (rdoVisitedLink.Checked == true)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string VL = &quot;#&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VL = String.Concat(VL, FmtRed);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VL = String.Concat(VL, FmtGreen);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VL = String.Concat(VL, FmtBlue);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtVisitedLink.Text = VL;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtVLinkPreview.ForeColor=Color.FromArgb(255-scrRed.Value,255-scrGreen.Value,255-scrBlue.Value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexVLink = txtVisitedLink.Text;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string BD = &quot;&amp;lt;body bgcolor=\&quot;&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, HexBG);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, &quot;\&quot; text=\&quot;&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, HexText);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, &quot;\&quot; link=\&quot;&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, HexLink);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, &quot;\&quot; alink=\&quot;&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, HexALink);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, &quot;\&quot; vlink=\&quot;&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, HexVLink);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BD = String.Concat(BD, &quot;\&quot;&amp;gt;&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtResult.Text = BD;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Ahora para saber que opción tenemos seleccionada actualmente, si el fondo, texto, links, etc.:&lt;br /&gt;
&lt;br /&gt;
internal void ClickOption(System.Drawing.Color Clr, String Result)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int red, green, blue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pnlPreview.BackColor = Clr;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; red = 255 - pnlPreview.BackColor.R;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; green = 255 - pnlPreview.BackColor.G;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; blue = 255 - pnlPreview.BackColor.B;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scrRed.Value = red;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scrGreen.Value = green;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scrBlue.Value = blue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtRed.Text = red.ToString();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtGreen.Text = green.ToString();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtBlue.Text = blue.ToString();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result = String.Concat(Result, &quot;#&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result = String.Concat(Result, red.ToString(&quot;X&quot;));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result = String.Concat(Result, green.ToString(&quot;X&quot;));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result = String.Concat(Result, blue.ToString(&quot;X&quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Ahora sí empezamos con los componentes los primeros serán los ScrollBar, he aquí el primero:&lt;br /&gt;
&lt;br /&gt;
private void scrRed_Scroll(object sender, ScrollEventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ApplyColor();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Como el código de las 3 ScrollBar es el mismo utilizaremos el mismo evento para todos. Para hacer esto seleccionamos el segundo ScrollBar y en la ventana de Propiedades nos vamos a la pestaña Eventos (es donde está la imágen del relámpago) y en el evento Scroll seleccionamos la opción scrRed_Scroll. Realizamos lo mismo con el ScrollBar restante. Luego sigue la codificación de los RadioButton, damos doble clic en el que dice Background y escribimos el siguiente código en el evento:&lt;br /&gt;
&lt;br /&gt;
private void rdoBackground_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color BGColor = pnlBody.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pnlBody.BackColor = BGColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ClickOption(pnlBody.BackColor, txtBackground.Text);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexBG = txtBackground.Text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Ahora seleccionamos el RadioButton con la etiqueta Text:&lt;br /&gt;
&lt;br /&gt;
private void rdoText_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color BGColor = pnlBody.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtTextPreview.BackColor = BGColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ClickOption(txtTextPreview.ForeColor, txtText.Text);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexText = txtText.Text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
El que sigue es el RadioButton que tiene la etiqueta Link:&lt;br /&gt;
&lt;br /&gt;
private void rdoActiveLink_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color BGColor = pnlBody.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtALinkPreview.BackColor = BGColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ClickOption(txtALinkPreview.ForeColor, txtActiveLink.Text);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexALink = txtActiveLink.Text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Enseguida damos doble clic en el que está etiquetado como ActiveLink:&lt;br /&gt;
&lt;br /&gt;
private void rdoActiveLink_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color BGColor = pnlBody.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtALinkPreview.BackColor = BGColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ClickOption(txtALinkPreview.ForeColor, txtActiveLink.Text);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexALink = txtActiveLink.Text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Finalmente para terminar con los RadioButton damos doble clic en el que está etiquetado como VisitedLink:&lt;br /&gt;
&lt;br /&gt;
private void rdoVisitedLink_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Color BGColor = pnlBody.BackColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtVLinkPreview.BackColor = BGColor;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ClickOption(txtVLinkPreview.ForeColor, txtVisitedLink.Text);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HexVLink = txtVisitedLink.Text; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Para terminar codificaremos los botones, primero escribimos el siguiente código en el botón con el texto Copy:&lt;br /&gt;
&lt;br /&gt;
private void btnCopy_Click(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtResult.SelectAll();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txtResult.Copy();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Y por último escribimos en el botón Close el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
private void btnClose_Click(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Y ahora guardan su aplicación y la corren presionando ctrl+F5 o simplemente F5, el resultado será algo como lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-8nzkMCgJL0Y/T07IC7DAfGI/AAAAAAAAAHA/sL-Cf5J0SQo/s1600/HTML+Body+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdEC2pRjjZgXk3yA90KgPRall6-QhFHNvo_kvjFdMdWM48Gf3657zRx05yi1IbqXdn0StQU3x7-qD2oQ_UBEciDCRMlsThLph26q6zxQRkgHHXG9OCOaTA20VgcxQE5cZOrzshBkruJ-0/s1600/HTML+Body+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdEC2pRjjZgXk3yA90KgPRall6-QhFHNvo_kvjFdMdWM48Gf3657zRx05yi1IbqXdn0StQU3x7-qD2oQ_UBEciDCRMlsThLph26q6zxQRkgHHXG9OCOaTA20VgcxQE5cZOrzshBkruJ-0/s320/HTML+Body+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno amigos pues eso fue todo, espero que todo haya salido bien y que la aplicación les sirva para poder utilizarla más adelante en el diseño de alguna página web en HTML que quieran realizar. Por hoy me despido y espero que sigamos en contacto para seguir con más aplicaciones gráficas, la mayoría en C++ pero también algunas más en C#. Nos vemos chavos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/7275442684094837684/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/etiquetas-de-formato-de-html-con-c.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/7275442684094837684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/7275442684094837684'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/etiquetas-de-formato-de-html-con-c.html' title='Etiquetas De Formato De HTML con C#'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9opgBzc1rFwbZLD46TCrVtAQwmoQGuof_BR_DtL4T45tAeEKRcs4cNSxWK6LtP-eIBtXcj5aSqveDn6qu8-CBUwF1iRR40ChyphenhyphenGJIZwxDU18UzL25J_5uNGY63SG5VeUmkvTMAxecmLYU/s72-c/HTML+Body+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-4453759236652680881</id><published>2012-02-28T18:09:00.001-06:00</published><updated>2017-03-18T15:59:52.960-06:00</updated><title type='text'>Manipulación De Colores Con Corrimientos</title><content type='html'>Hola chavos! Aquí estoy de nuevo para continuar realizando aplicaciones gráficas con C++ Builder.&lt;br /&gt;
&lt;br /&gt;
Bien pues no se si recuerdan que hace algún tiempo realizamos una aplicación en consola en C++ en la que comprobamos el funcionamiento de los corrimientos de bits. Sino lo recuerdan pues más vale que echen un vistazo unas entradas atrás o a sus aplicaciones guardadas ya que lo utilizaremos para realizar esta aplicación. Nuestra aplicación lo que hará será colorear un PaintBox según el botón que presionemos manipulando los colores por separado y no conjuntamente con el RGB como lo veníamos haciendo anteriormente. Precisamente para poder manipular los colores por separado será para lo que utilizaremos los corrimientos en esta ocasión.&lt;br /&gt;
&lt;br /&gt;
Primeramente prepararemos la Forma, la cual tenemos que cambiar el color a negro (aunque es por gusto, si desean no hacerlo pueden dejarla como esta), cambiando la propiedad color a clBlack. Los componentes que tenemos que tener son los siguientes:&lt;br /&gt;
&lt;br /&gt;
-1 Shape&lt;br /&gt;
-1 PaintBox (el cual tenemos que colocar sobre el shape)&lt;br /&gt;
-3 botones&lt;br /&gt;
-3 Timers&lt;br /&gt;
&lt;br /&gt;
La Forma en mi caso quedo de la siguiente manera (aunque saben que cada quien puede tener su propio diseño):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-v1K_gF0Qf_w/T01fSWyaikI/AAAAAAAAAGo/qIeALZi-eNM/s1600/Pintar+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSxFFJMfxPN382eFIUM6I7r6iLm79kVrdhmoU0GoQG9Z_Y5uKkZ5YGraiH-r46aDmvH8K0g6xjFbFj6qp24g7oc-EbYct5J9uW71QaoFdZEpLah_7HeWhLfRyeuhfLC_NTXqRfsXO9caw/s1600/Pintar+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSxFFJMfxPN382eFIUM6I7r6iLm79kVrdhmoU0GoQG9Z_Y5uKkZ5YGraiH-r46aDmvH8K0g6xjFbFj6qp24g7oc-EbYct5J9uW71QaoFdZEpLah_7HeWhLfRyeuhfLC_NTXqRfsXO9caw/s320/Pintar+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno pues comenzamos con la programación de los componentes, primeramente lo haremos con el primer botón que contiene la cadena &quot;ROJO&quot;, en él colocamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1-&amp;gt;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer2-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer3-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer1-&amp;gt;Enabled = true;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con el anterior código lo que hacemos es refrescar el PaintBox para volver a pintarlo, así mismo habilitamos el primer Timer y deshabilitamos 2 restantes. Ahora continuamos con el segundo botón que contiene la cadena &quot;VERDE&quot; y escribimos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1-&amp;gt;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer1-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer3-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer2-&amp;gt;Enabled = true;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Al igual que el botón anterior primero refrescamos el PaintBox para volverlo a pintar y habilitamos el segundo Timer mientras deshabilitamos los otros 2. Luego codificamos el tercer y último botón, él cual contiene la leyenda &quot;AZUL&quot;, el código es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button3Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1-&amp;gt;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer1-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer2-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer3-&amp;gt;Enabled = true;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este último realiza una función similar a los anteriores, refresca el PaintBox y habilita el tercer Timer para deshabilitar los otros 2. Después comenzamos con la codificación de los Timers, a continuación tenemos el Timer1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer1Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; randomize();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i=0; i&amp;lt;10000; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = random(100) + 155;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1-&amp;gt;Canvas-&amp;gt;Pixels[random(PaintBox1-&amp;gt;Width)][random(PaintBox1-&amp;gt;Height)] = (TColor)color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este código como vemos lo que hace es dibujar 10,000 pixeles en algún lugar aleatorio dentro del PaintBox. El color lo definimos con números aleatorios entre 0 y 100 y luego le sumamos 155 para asegurarnos de obtener una tonalidad en rojo. Ahora codificamos el Timer2:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer2Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; randomize();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i=0; i&amp;lt;10000; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = random(100)+155;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color &amp;lt;&amp;lt;= 8;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1-&amp;gt;Canvas-&amp;gt;Pixels[random(PaintBox1-&amp;gt;Width)][random(PaintBox1-&amp;gt;Height)] = (TColor)color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El código es parecido al anterior ya que igualmente dibujamos pixeles aleatoriamente dentro del PaintBox. Solo que en este botón el color además de definirlo con un número aleatorio y sumarle 155, le realizamos un corrimiento de 8 bits hacia la izquierda, para mover todos los bits hacia la izquierda y de esa manera cambiar todas las tonalidades de rojo a verde. Finalmente codificamos el Timer3:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer3Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; randomize();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i=0; i&amp;lt;10000; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color = random(100)+155;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color &amp;lt;&amp;lt;= 16;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PaintBox1-&amp;gt;Canvas-&amp;gt;Pixels[random(PaintBox1-&amp;gt;Width)][random(PaintBox1-&amp;gt;Height)] = (TColor)color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con este código se realiza una función similar a la anterior, calculando primero un número aleatorio y luego realizandole un corrimiento de 16 bits a la izquierda para asegurarnos de cambiar todos los colores rojos a azules.&lt;br /&gt;
&lt;br /&gt;
Para terminar solo compilamos el programa y lo corremos y observamos el resultado:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-7f3BVXReCak/T01pT6pNnhI/AAAAAAAAAGw/FkZ-IcR0k3U/s1600/Pintar+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3kGc6nmw4yv0MqJEPaZGQQJG2VyvLphdjIU9HKjiaF4v3PCelPDv7jinTR4YpjgQujK3WcnKG4V211N0s5wIOQ_UKVU8o_rkdMLcUNeB8KJ65aBVLwYjinO32IPgx9tLvHpY7bRT3I9k/s1600/Pintar+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;273&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3kGc6nmw4yv0MqJEPaZGQQJG2VyvLphdjIU9HKjiaF4v3PCelPDv7jinTR4YpjgQujK3WcnKG4V211N0s5wIOQ_UKVU8o_rkdMLcUNeB8KJ65aBVLwYjinO32IPgx9tLvHpY7bRT3I9k/s320/Pintar+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bien amigos pues por hoy es todo espero que hayan aprendido a manipular los colores de manera independiente. Ahora que conocemos ambas maneras de manejar los colores tendremos la oportunidad de elegir que manera queremos utilizar dependiendo de cual necesitemos o cual se nos haga mas sencillo. Yo los espero en la próxima para continuar con las aplicaciones. Hasta la vista amigos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/4453759236652680881/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/manipulacion-de-colores-con.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/4453759236652680881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/4453759236652680881'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/manipulacion-de-colores-con.html' title='Manipulación De Colores Con Corrimientos'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSxFFJMfxPN382eFIUM6I7r6iLm79kVrdhmoU0GoQG9Z_Y5uKkZ5YGraiH-r46aDmvH8K0g6xjFbFj6qp24g7oc-EbYct5J9uW71QaoFdZEpLah_7HeWhLfRyeuhfLC_NTXqRfsXO9caw/s72-c/Pintar+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-5586780774476480004</id><published>2012-02-26T15:45:00.000-06:00</published><updated>2017-03-18T15:58:51.541-06:00</updated><title type='text'>Manipulación Y Manejo De Colores</title><content type='html'>Hola de nuevo amigos, ya estoy de nueva cuenta aquí para seguir realizando más aplicaciones gráficas en C++ Builder.&lt;br /&gt;
&lt;br /&gt;
Bien pues en esta ocasión haremos una aplicación para mostrar un poco más sobre el manejo de los colores en C++. Será bastante sencillo pero muy importante para más adelante usarlo.&lt;br /&gt;
&lt;br /&gt;
Bueno pues comenzamos como siempre con los componentes que necesitamos colocar en la Forma, los cuales los listamos a continuación:&lt;br /&gt;
&lt;br /&gt;
-3 Labels&lt;br /&gt;
-3 TrackBar (con valores de 0 a 255)&lt;br /&gt;
-1 Panel&lt;br /&gt;
-1 Shape&lt;br /&gt;
-3 BitBtn (los cuales son como los botones normales pero a estos les podemos colocar una imágen personalizada en su propiedad Glyph)&lt;br /&gt;
&lt;br /&gt;
La Forma en mi caso queda de la siguiente manera, aunque ustedes pueden acomodar sus componentes como gusten:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-L15tRAPfDVg/T0qhz2cCKeI/AAAAAAAAAGY/Hr3IUyGoAD8/s1600/Manipulacion+Colores+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJwniOc7_dWvoM2flNl0wGQqEFUOcki3zm_LUkypAFLME4Wb13r36sLrNMRn1aIviUJBNwsctIVfPqP2HyG96X_fQeQF9x83P5c-r1wK9V_L-NPFJ9trCE7Jf3klNhThFAIVH2HbYiHg/s1600/Manipulacion+Colores+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJwniOc7_dWvoM2flNl0wGQqEFUOcki3zm_LUkypAFLME4Wb13r36sLrNMRn1aIviUJBNwsctIVfPqP2HyG96X_fQeQF9x83P5c-r1wK9V_L-NPFJ9trCE7Jf3klNhThFAIVH2HbYiHg/s320/Manipulacion+Colores+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora comenzamos con la codificación de los componentes correspondientes. El primero que necesitamos será el TrackBar1, damos clic en él y escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::TrackBar1Change(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Panel1-&amp;gt;Color=(TColor)RGB(TrackBar1-&amp;gt;Position,TrackBar2-&amp;gt;Position,TrackBar3-&amp;gt;Position); &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para ahorrar espacio y no escribir tanto código utilizaremos el evento del TrackBar1 para los 2 restantes, ya que para todos el código es el mismo. Lo anterior lo haremos seleccionando uno de los TrackBar que no tienen código, luego en el Object Inspector que se encuentra en la parte inferior izquierda cambiamos a la pestaña Events y en la lista desplegable del evento OnChange seleccionamos la opción TrackBar1Change. Hacemos lo mismo con el último TrackBar.&lt;br /&gt;
&lt;br /&gt;
Ahora damos doble clic en el botón que dice &quot;Rojo&quot;, y escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::BitBtn1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TRect Rect(0,0,Image1-&amp;gt;Width,Image1-&amp;gt;Height);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1-&amp;gt;Canvas-&amp;gt;FillRect(Rect);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Randomize();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i=0; i&amp;lt;15000; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1-&amp;gt;Canvas-&amp;gt;Pixels[random(Image1-&amp;gt;Width)][random(Image1-&amp;gt;Height)]=(TColor)RGB(255,0,0);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con lo anterior dibujamos 15,000 puntos de color rojo en un lugar aleatorio dentro del área del Shape. Luego damos doble clic en el botón &quot;Verde&quot; y escribimos el código siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::BitBtn2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TRect Rect(0,0,Image1-&amp;gt;Width,Image1-&amp;gt;Height);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1-&amp;gt;Canvas-&amp;gt;FillRect(Rect);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Randomize();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i=0; i&amp;lt;15000; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1-&amp;gt;Canvas-&amp;gt;Pixels[random(Image1-&amp;gt;Width)][random(Image1-&amp;gt;Height)]=(TColor)RGB(0,255,0);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con esto lo que hacemos es dibujar en posiciones aleatorias 15,000 puntos de color verde dentro del área del Shape. Ahora en el ultimo BitbBtn que dice &quot;Azul&quot;, escribimos este código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::BitBtn3Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TRect Rect(0,0,Image1-&amp;gt;Width,Image1-&amp;gt;Height);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1-&amp;gt;Canvas-&amp;gt;FillRect(Rect);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i=0; i&amp;lt;15000; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Image1-&amp;gt;Canvas-&amp;gt;Pixels[random(Image1-&amp;gt;Width)][random(Image1-&amp;gt;Height)]=(TColor)RGB(0,0,255);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esto lo que hará sera dibujar 15,000 puntos en algún lugar aleatorio dentro del área del Shape.&lt;br /&gt;
&lt;br /&gt;
Finalmente abrimos el evento OnCreate de la forma y en él escribimos el siguiente código que nos servirá para evitar el parpadeo al momento de repintar los componentes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;DoubleBuffered=true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Randomize();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ya para terminar compilan y corren su aplicación y el resultado debe ser algo como lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-DSYhfQdU6Xk/T0qnthjs47I/AAAAAAAAAGg/7x8f8whNK-8/s1600/Manipulacion+Colores+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhggfElhGsaLOcP6d9i1KHixCDxkl0jC2WBR4aXeHm9efypOpWalOaOqShbdQYUVCS8cCj-eTGLBvQ5-NA6334PZDxeXn3rpor41qWQybc_LNoJLCRVyyMMA6qVT6XCYNeJ2Nxi3jMK5Q0/s1600/Manipulacion+Colores+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhggfElhGsaLOcP6d9i1KHixCDxkl0jC2WBR4aXeHm9efypOpWalOaOqShbdQYUVCS8cCj-eTGLBvQ5-NA6334PZDxeXn3rpor41qWQybc_LNoJLCRVyyMMA6qVT6XCYNeJ2Nxi3jMK5Q0/s320/Manipulacion+Colores+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno amigos pues por hoy eso es todo, nos vemos la próxima ocasión para realizar otra aplicación de graficación en C++ Builder. Hasta la próxima chavos.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/5586780774476480004/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/manipulacion-y-manejo-de-colores.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/5586780774476480004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/5586780774476480004'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/manipulacion-y-manejo-de-colores.html' title='Manipulación Y Manejo De Colores'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJwniOc7_dWvoM2flNl0wGQqEFUOcki3zm_LUkypAFLME4Wb13r36sLrNMRn1aIviUJBNwsctIVfPqP2HyG96X_fQeQF9x83P5c-r1wK9V_L-NPFJ9trCE7Jf3klNhThFAIVH2HbYiHg/s72-c/Manipulacion+Colores+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-6416514093254625182</id><published>2012-02-25T17:20:00.001-06:00</published><updated>2017-03-18T15:58:03.585-06:00</updated><title type='text'>Pixel En Movimiento</title><content type='html'>Hola amigos! Aquí ando de nueva cuenta para seguir mostrándoles ejemplos de aplicaciones gráficas en C++ Builder y así seguir aprendiendo cada vez más cosas nuevas.&lt;br /&gt;
&lt;br /&gt;
Bueno pues en esta ocasión realizaremos una aplicación para crear un pixel y moverlo alrededor del perímetro de la forma, y cada vez que complete la vuelta volverá a hacer los mismo pero cada vez más hacia el centro, formando el llamado efecto serpiente.&lt;br /&gt;
&lt;br /&gt;
Para realizar esta aplicación lo que necesitamos es pintar la forma de color negro cambiando la propiedad Color a clBlack. Por esta vez el único componente que necesitaremos en la forma será un Timer.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-C33psMlAlBw/T0lpAXML51I/AAAAAAAAAGI/cNxwCD_sx50/s1600/Movimiento+Pixel+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8r7w7cL5HwZREI_comswsqh2TCe3NLEcoKk1aYGXdzj3r06X2ed41T4T7d4ZyDmLu-oDQ8bH68sEW1MIqoXT1nfcRcSo2hrIMlbOXYnrX7nKQkLyHuA1pYyOtoI4g7MUBIpJ4k6yJmCE/s1600/Movimiento+Pixel+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8r7w7cL5HwZREI_comswsqh2TCe3NLEcoKk1aYGXdzj3r06X2ed41T4T7d4ZyDmLu-oDQ8bH68sEW1MIqoXT1nfcRcSo2hrIMlbOXYnrX7nKQkLyHuA1pYyOtoI4g7MUBIpJ4k6yJmCE/s320/Movimiento+Pixel+%25281%2529.png&quot; width=&quot;295&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora nos vamos al archivo H y en las declaraciones de usuario declaramos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POINTS Puntos[1000];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int inicioX;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int inicioY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int fin;&lt;br /&gt;
&lt;br /&gt;
Bien, habiendo realizado lo anterior procedemos con la codificación de el único componente que tenemos en la forma, es decir, el Timer, en él escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer1Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Puntos[0].x &amp;lt;= ClientWidth &amp;amp;&amp;amp; Puntos[0].y == inicioY)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Puntos[0].x++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Puntos[0].x == ClientWidth - fin)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Puntos[0].y++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Puntos[0].y == ClientHeight - fin)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Puntos[0].x--;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Puntos[0].x == inicioY + 2)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inicioY = inicioY + 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Puntos[0].x == inicioY)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Puntos[0].y--;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(Puntos[0].y == inicioX+2)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inicioX = inicioX + 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fin = fin + 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Pixels[Puntos[0].x][Puntos[0].y] = clYellow;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En la línea final del código podemos notar que el color lo tenemos siempre que corramos el programa en amarillo, ustedes pueden cambiar esa parte del código y poner el color que más les guste si así lo desean.&lt;br /&gt;
&lt;br /&gt;
Ahora necesitamos 2 eventos, el primero de ellos es el evento OnCreate de la forma, lo abrimos y colocamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inicioX = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inicioY = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fin = 1;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Con este código lo que hacemos es inicializar las variables, ahora el segundo evento que necesitamos es el llamado OnResize, también de la forma, una vez que lo hayamos abierto colocamos el siguiente código en él:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormResize(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Invalidate();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con esto redimensionamos todo en caso de que la forma cambie de tamaño.&lt;br /&gt;
&lt;br /&gt;
Y pues ya saben lo que sigue chavos, compilan y corren su aplicación y debería verse de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-q5xifgFSZFA/T0lrX1IQHvI/AAAAAAAAAGQ/7mrvFevjajU/s1600/Movimiento+Pixel+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh775FwUejWnT-iYPzfNXTS8TXQXOJVCJrmupHc57ZE4y8auiiZYP3u9okUIMSxDMi5YNlnegcuZOFgu92jR4IUwOct4KK5Fw44JpWdtPmcw7hpPqyS7QnhuUNv1G47xgefTN_fa0j_dtk/s1600/Movimiento+Pixel+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh775FwUejWnT-iYPzfNXTS8TXQXOJVCJrmupHc57ZE4y8auiiZYP3u9okUIMSxDMi5YNlnegcuZOFgu92jR4IUwOct4KK5Fw44JpWdtPmcw7hpPqyS7QnhuUNv1G47xgefTN_fa0j_dtk/s320/Movimiento+Pixel+%25282%2529.png&quot; width=&quot;297&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Espero que pueda notarse el efecto del movimiento del pixel en la parte superior e izquierda de la forma, sino es así pues ya verán en su aplicación el efecto que genera al ir simulando el movimiento.&lt;br /&gt;
&lt;br /&gt;
Pues en esta ocasión fue todo amigos, continúen practicando lo que hemos aprendido hasta ahora y nos vemos en la próxima para seguir realizando más aplicaciones en C++ Builder. Nos vemos amigos!&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/6416514093254625182/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/pixel-en-movimiento.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6416514093254625182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6416514093254625182'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/pixel-en-movimiento.html' title='Pixel En Movimiento'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8r7w7cL5HwZREI_comswsqh2TCe3NLEcoKk1aYGXdzj3r06X2ed41T4T7d4ZyDmLu-oDQ8bH68sEW1MIqoXT1nfcRcSo2hrIMlbOXYnrX7nKQkLyHuA1pYyOtoI4g7MUBIpJ4k6yJmCE/s72-c/Movimiento+Pixel+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-6474392657398343647</id><published>2012-02-23T16:43:00.001-06:00</published><updated>2017-03-18T15:56:57.845-06:00</updated><title type='text'>Efecto Spray</title><content type='html'>Hola de nuevo amigos! Me alegro de saludarlos y pues en esta ocasión continuaremos con las aplicaciones gráficas en C++ Builder. El programa que realizaremos en esta ocasión será el famoso efecto de spray que puede tomar la brocha en el programa paint de Windows, ya alguna vez debieron de haberlo utilizado.&lt;br /&gt;
&lt;br /&gt;
Pues empezamos con nuestra aplicación y lo primero que necesitamos es cambiar el color de la forma a blanco en su propiedad Color cambiamos el valor por defecto a clWhite. Después colocamos los siguientes componentes en la forma:&lt;br /&gt;
&lt;br /&gt;
-1 GroupBox&lt;br /&gt;
-4 etiquetas o Labels&lt;br /&gt;
-3 TrackBar&lt;br /&gt;
-1 Edit o caja de texto&lt;br /&gt;
-1 UpDown&lt;br /&gt;
&lt;br /&gt;
La forma debe quedar de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-Qabo3lxIeMo/T0a9dC3QM3I/AAAAAAAAAF4/iHiad5qDhHo/s1600/Efecto+Spray+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidfSfWREOnHpg_fLBQq1M6SjlLEjDECHKOKQBnw7ds2x537407XWGHZHUGde9xqHpjtHkeMJ0KCXFNKq19Ulo1-cLWKlJVnqVaUZZDr41i4iniHHXhm_YUZydXX0dTbMf4KX7SkA9CZnQ/s1600/Efecto+Spray+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidfSfWREOnHpg_fLBQq1M6SjlLEjDECHKOKQBnw7ds2x537407XWGHZHUGde9xqHpjtHkeMJ0KCXFNKq19Ulo1-cLWKlJVnqVaUZZDr41i4iniHHXhm_YUZydXX0dTbMf4KX7SkA9CZnQ/s320/Efecto+Spray+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Lo primero que necesitamos es asociar al UpDown con el Edit. Luego configuramos los valores del UpDown en 0 como mínimo y 100 como máximo.&lt;br /&gt;
&lt;br /&gt;
Bien pues en esta aplicación trabajaremos sobre los eventos de la forma, especialmente en 2. El primero de ellos es el evento OnMouseDown de dicha forma, en él escribimos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; TShiftState Shift, int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int N = 0; N &amp;lt; 100; N++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Puntos[N].x = random(Edit1-&amp;gt;Text.ToInt()) + X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Puntos[N].y = random(Edit1-&amp;gt;Text.ToInt()) + Y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Pixels[Puntos[N].x][Puntos[N].y]=(TColor)RGB(TrackBar1-&amp;gt;Position,TrackBar2-&amp;gt;Position,TrackBar3-&amp;gt;Position);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El código anterior nos sirve para dibujar de manera aleatoria los pixeles y simular el efecto spray de la brocha&amp;nbsp;con el color dependiendo de las posiciones de los TrackBar, siendo cada una de éstas uno de los valores del RGB. Ahora abrimos el evento OnMouseMove de la forma y tecleamos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Shift.Contains(ssLeft))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FormMouseDown(Sender, mbLeft, Shift, X, Y);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En el evento anterior lo que hacemos es llamar al evento FormMouseMove cada vez que se mueve el cursor del mouse sobre la forma, dibujando los pixeles aleatorios por cada parte de la forma por la que se mueve el mouse.&lt;br /&gt;
&lt;br /&gt;
Ahora compilamos nuestra aplicación y la corremos para observar nuestro resultado:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-c7_mwFdwm_8/T0bAfT2wxkI/AAAAAAAAAGA/9_Zs5CPYssM/s1600/Efecto+Spray+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi72Ex7j5scmIvNRMKRn3Nkg_kjGsslupBBZxUMIxeA_a_kV9DifT8MuY0lY3grpHxjE6qNISXwo1dLsqZ7SLMO-IRXC3bk1vZPWfLfLuMOnCs-g2nev5d3WK0_xnsi7YdB8lqhVaEKAXs/s1600/Efecto+Spray+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi72Ex7j5scmIvNRMKRn3Nkg_kjGsslupBBZxUMIxeA_a_kV9DifT8MuY0lY3grpHxjE6qNISXwo1dLsqZ7SLMO-IRXC3bk1vZPWfLfLuMOnCs-g2nev5d3WK0_xnsi7YdB8lqhVaEKAXs/s320/Efecto+Spray+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
De ésta manera descubrimos que los efectos que se generan en programas como el paint de Windows no son por obra de magia sino que son efectos que nosotros podemos programar. Y bueno pues por esta ocasión es todo por mi parte, espero que hayamos aprendido un poco más de lo que ya sabíamos y nos vemos en la siguiente ocasión para seguir con más aplicaciones. Hasta luego amigos!</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/6474392657398343647/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/efecto-spray.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6474392657398343647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6474392657398343647'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/efecto-spray.html' title='Efecto Spray'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidfSfWREOnHpg_fLBQq1M6SjlLEjDECHKOKQBnw7ds2x537407XWGHZHUGde9xqHpjtHkeMJ0KCXFNKq19Ulo1-cLWKlJVnqVaUZZDr41i4iniHHXhm_YUZydXX0dTbMf4KX7SkA9CZnQ/s72-c/Efecto+Spray+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-3372472614417907949</id><published>2012-02-22T17:05:00.000-06:00</published><updated>2017-03-18T15:55:42.939-06:00</updated><title type='text'>Corrimientos En Consola</title><content type='html'>Hola amigos, por esta ocasión tengo un poco de prisa así que haremos otra aplicación sencilla pero que nos servirá para realizar aplicaciones más adelante.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Lo que vamos a ver en esta ocasión serán las operaciones con bits llamadas corrimientos. Se preguntarán ustedes, ¿qué son los corrimientos?. Bueno pues son operaciones a nivel de bits representadas con los operadores &quot;&amp;lt;&amp;lt;&quot; (corrimiento a la izquierda) y &quot;&amp;gt;&amp;gt;&quot; (corrimiento a la derecha). Ambos operadores lo único que hacen es mover los bits del operando de la izquierda el número de posiciones indicadas por el operador de la derecha. Dichos desplazamientos ocurren en la dirección indicada por el mismo operador.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Pues ahora realizaremos una aplicación para mostrar un ejemplo de corrimientos con bits. La diferencia con las aplicaciones pasadas es que esta vez no la realizaremos en el modo visual sino en el modo consola.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Primeramente abrimos el C++ Builder 6 y le damos clic a la opción &quot;File&quot; de la barra de menús, después seleccionamos &quot;Other...&quot; y en la nueva ventana que se abre buscamos la opción &quot;Console Wizard&quot;. Al darle clic en &quot;OK&quot; se abrirá otra ventana, en ella seleccionamos la opción C++ y damos &quot;OK&quot;.&lt;br /&gt;
&lt;br /&gt;
Ahora tendremos el método main con una linea de código por default, lo primero que tenemos que hacer es borrar dicha línea de código y escribir las siguientes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int a=1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cout&amp;lt;&amp;lt;&quot;Valor de a: &quot;&amp;lt;&amp;lt;a;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a=a&amp;lt;&amp;lt;8;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cout&amp;lt;&amp;lt;&quot;\nValor de a: &quot;&amp;lt;&amp;lt;a;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cin.get();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno pues vemos que primero le asignamos a la variable &quot;a&quot; el valor de 1, luego imprimimos en pantalla ese valor, después aplicamos el corrimiento de dicho valor 8 bits a la izquierda e imprimimos de nuevo el valor en pantalla.&lt;br /&gt;
&lt;br /&gt;
Compilamos nuestra aplicación y la corremos y tendremos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-b9-Tj2xjmKI/T0V0C38aHgI/AAAAAAAAAFw/BdXn5_fw8vI/s1600/Corrimiento+Consola+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcnQ8cmL20TXrEpVBt-_zLbdLQvZSjLD28CxDRDgCkWuQCi45nsuQwXmU84vpEwhTN4fwYfuoTGw4EDajh2zTijICnKoFtZlqTgi2p4NFpRx30xRsYZMsmUJ4_2DYvU1ChlxFQHrRNxGg/s1600/Corrimiento+Consola+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcnQ8cmL20TXrEpVBt-_zLbdLQvZSjLD28CxDRDgCkWuQCi45nsuQwXmU84vpEwhTN4fwYfuoTGw4EDajh2zTijICnKoFtZlqTgi2p4NFpRx30xRsYZMsmUJ4_2DYvU1ChlxFQHrRNxGg/s320/Corrimiento+Consola+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno chavos por hoy es todo, espero que comprendan, la próxima ocasión realizaremos otra aplicación en modo visual de graficación con C++. Hasta la vista amigos!.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/3372472614417907949/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/hola-amigos-por-esta-ocasion-tengo-un.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3372472614417907949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3372472614417907949'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/hola-amigos-por-esta-ocasion-tengo-un.html' title='Corrimientos En Consola'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcnQ8cmL20TXrEpVBt-_zLbdLQvZSjLD28CxDRDgCkWuQCi45nsuQwXmU84vpEwhTN4fwYfuoTGw4EDajh2zTijICnKoFtZlqTgi2p4NFpRx30xRsYZMsmUJ4_2DYvU1ChlxFQHrRNxGg/s72-c/Corrimiento+Consola+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-3855343477902096334</id><published>2012-02-20T16:09:00.000-06:00</published><updated>2017-03-18T15:54:32.225-06:00</updated><title type='text'>Copiar Texto</title><content type='html'>Hola chavos! Espero que sigan practicando mucho con el C++ Builder y que ya se consideren todos unos buenos programadores de aplicaciones gráficas en C++.&lt;br /&gt;
&lt;br /&gt;
Pues en esta ocasión mostraremos algo muy sencillo y muy rápido de hacer, esto es bastante simple en comparación con aplicaciones pasadas, pero siempre es bueno mostrar otras maneras diferentes de hacer las cosas. En este aplicación les enseñare 2 distintas maneras de copiar texto, primero de un Edit (o textBox como se le conoce en C#) a un label y después de un Edit a otro Edit.&lt;br /&gt;
&lt;br /&gt;
Para realizar esta aplicación necesitaremos colocar los siguientes componentes en la forma:&lt;br /&gt;
-2 botones&lt;br /&gt;
-3 cajas de texto (Edit)&lt;br /&gt;
- 1 etiqueta (label)&lt;br /&gt;
&lt;br /&gt;
Los podemos acomodar de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-h8P2Xg5QpCM/T0LCKNb5UPI/AAAAAAAAAFg/OvovJC2mYgY/s1600/Copiar+Texto+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZF2bAidkSITkzsXEdeLTNwB8UNTTw7jy2AAElwk4yxHWyb6U7KiNKuWQ9bwe63txvPxJix1SCP1uzIvANHfVRWg5WUi3II-ttlKH-FNYS8gHO82NTHSDMbskQFU1RDjba1_DS9IrHikk/s1600/Copiar+Texto+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;270&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZF2bAidkSITkzsXEdeLTNwB8UNTTw7jy2AAElwk4yxHWyb6U7KiNKuWQ9bwe63txvPxJix1SCP1uzIvANHfVRWg5WUi3II-ttlKH-FNYS8gHO82NTHSDMbskQFU1RDjba1_DS9IrHikk/s320/Copiar+Texto+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno pues&amp;nbsp;comenzamos&amp;nbsp;con el código que es bastante sencillo y simple, primero colocamos el siguiente código en el evento clic del primer botón, el cual nos servirá para copiar el texto del primer Edit al label que tenemos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *cad = new char[Edit1-&amp;gt;Text.Length()];&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strcpy(cad, Edit1-&amp;gt;Text.c_str());&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Label1-&amp;gt;Caption = cad; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En el código anterior podemos notar que utilizamos un arreglo de char llamado *cad, que es un puntero. Utilizamos la función strcpy() para poder copiar el texto del Edit en el arreglo de char, finalmente asignamos el arreglo a la propiedad Caption del label para escribirlo en la etiqueta.&lt;br /&gt;
&lt;br /&gt;
Ahora escribimos el código del segundo botón:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int n = Edit2-&amp;gt;Text.ToIntDef(30);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( n&amp;gt;29 &amp;amp;&amp;amp; n&amp;lt;100)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Edit3-&amp;gt;Text = Edit2-&amp;gt;Text;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno pues en este botón lo primero transformamos el texto escrito en el Edit2 en variables enteras y finalmente verificamos si son letras y si esto es así copiamos el texto del Edit2 al Edit3.&lt;br /&gt;
&lt;br /&gt;
Por último la aplicación corriendo debería ser algo como lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-5QejW3toxQk/T0LEWeY5LhI/AAAAAAAAAFo/W7-qn1qdDtc/s1600/Copiar+Texto+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgBaiWTHcZIVqUhtLALcgrzo6OFupVQEwqeRG6H27f5B_KFMaGrDw6Y3S6vWlM5QETn2MNe34aqSfBPpuQMRKj49SJdazJDarAe53FcIm1mIEDCVcxlxleZFbLmUEuVdlNutwTtW8HXWI/s1600/Copiar+Texto+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;269&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgBaiWTHcZIVqUhtLALcgrzo6OFupVQEwqeRG6H27f5B_KFMaGrDw6Y3S6vWlM5QETn2MNe34aqSfBPpuQMRKj49SJdazJDarAe53FcIm1mIEDCVcxlxleZFbLmUEuVdlNutwTtW8HXWI/s320/Copiar+Texto+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno amigos por hoy fue todo, solo realizamos esta simple aplicación pero pues todo nos sirve para algo, así que nos vemos en la próxima. Hasta luego!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/3855343477902096334/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/copiar-texto.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3855343477902096334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3855343477902096334'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/copiar-texto.html' title='Copiar Texto'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZF2bAidkSITkzsXEdeLTNwB8UNTTw7jy2AAElwk4yxHWyb6U7KiNKuWQ9bwe63txvPxJix1SCP1uzIvANHfVRWg5WUi3II-ttlKH-FNYS8gHO82NTHSDMbskQFU1RDjba1_DS9IrHikk/s72-c/Copiar+Texto+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-6627014787036400779</id><published>2012-02-19T16:54:00.000-06:00</published><updated>2017-03-18T15:53:26.936-06:00</updated><title type='text'>Diseño De Un ScreenSaver</title><content type='html'>Hola de nuevo chavos! Es hora de continuar con la creación de aplicaciones de graficación en C++ Builder y para esta ocasión lo que haremos será mostrar como de manera simple se puede crear un protector de pantalla en el cual se&amp;nbsp;irán&amp;nbsp;dibujando de manera aleatoria figuras que tendremos contenidas en archivos bmp, para hacer esto utilizaremos un arreglo de objetos de tipo TBitmap.&lt;br /&gt;
&lt;br /&gt;
Las 10 imágenes bmp que utilizaremos pueden ser diseñadas por uno mismo o pueden ser descargadas de internet como se desee.&lt;br /&gt;
&lt;br /&gt;
Bueno pues para comenzar lo único que necesitamos de componentes en la forma es un Timer:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-lkWU-Mk3bU0/T0F4n7524lI/AAAAAAAAAFI/R20B_a2r3mg/s1600/Ejemplo+6+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9lDfMw0o3tdEE_ZZaijXkmQGes7dC-v2HUutOHrtuNW66tlauhcN0QHBIoQlwRIxPAXkEeqBTvJJWIvRko7JeTA7sLiEqO-rL1L1tkX2V2xxRPE3sH-JQJKF8egpcl0R4okaMpWttCMg/s1600/Ejemplo+6+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9lDfMw0o3tdEE_ZZaijXkmQGes7dC-v2HUutOHrtuNW66tlauhcN0QHBIoQlwRIxPAXkEeqBTvJJWIvRko7JeTA7sLiEqO-rL1L1tkX2V2xxRPE3sH-JQJKF8egpcl0R4okaMpWttCMg/s320/Ejemplo+6+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Una vez echo esto vamos a la propiedad WndowState de la forma y cambiamos su valor por: wsMaximized. Y en la propiedad BorderStyle de la forma elegimos lo siguiente: bsNone.&lt;br /&gt;
&lt;br /&gt;
Ahora declaramos el arreglo en el que tendremos las imágenes que se mostraran en el protector de pantalla, para esto vamos a el archivo H de la forma y declaramos el arreglo, a estas alturas ya deberíamos de saber cómo hacerlo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TForm1 : public TForm&lt;br /&gt;
{&lt;br /&gt;
__published:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// IDE-managed Components&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TTimer *Timer1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void __fastcall Timer1Timer(TObject *Sender);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void __fastcall FormCreate(TObject *Sender);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void __fastcall FormKeyPress(TObject *Sender, char &amp;amp;Key);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int X, int Y);&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Graphics::TBitmap *ImageObject[10];&lt;br /&gt;
public:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __fastcall TForm1(TComponent* Owner);&lt;br /&gt;
};&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El siguiente código lo escribimos en el siguiente evento:&amp;nbsp;__fastcall TForm1::TForm1(TComponent* Owner)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : TForm(Owner), éste es el pequeño código que se crea cuando iniciamos una nueva aplicación visual en C++ Builder, dentro de él escribimos el código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__fastcall TForm1::TForm1(TComponent* Owner)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : TForm(Owner)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[0] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[0]-&amp;gt;LoadFromFile(&quot;Image1.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[0]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[1] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[1]-&amp;gt;LoadFromFile(&quot;Image2.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[1]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[2] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[2]-&amp;gt;LoadFromFile(&quot;Image3.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[2]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[3] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[3]-&amp;gt;LoadFromFile(&quot;Image4.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[3]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[4] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[4]-&amp;gt;LoadFromFile(&quot;Image5.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[4]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[5] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[5]-&amp;gt;LoadFromFile(&quot;Image6.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[5]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[6] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[6]-&amp;gt;LoadFromFile(&quot;Image7.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[6]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[7] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[7]-&amp;gt;LoadFromFile(&quot;Image8.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[7]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[8] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[8]-&amp;gt;LoadFromFile(&quot;Image9.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[8]-&amp;gt;Transparent = True;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[9] = new Graphics::TBitmap;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[9]-&amp;gt;LoadFromFile(&quot;Image10.bmp&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageObject[9]-&amp;gt;Transparent = True;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Después viene el código que escribiremos en el evento del Timer que colocamos en la forma:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer1Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x = random(Width-100);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int y = random(Height-150);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Draw(x-60, y-60, ImageObject[random(10)]);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El código anterior nos sirve para calcular de forma aleatoria el lugar donde se colocara la imágen cuando aparezca en el protector de pantalla.&lt;br /&gt;
&lt;br /&gt;
Luego abrimos el evento OnCreate de la forma y en el escribimos el código para mantener el cursor oculto mientras este activo el protector de pantalla:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormCreate(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ShowCursor(FALSE);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el evento OnKeyPress también de la forma para que el protector de pantalla se cierre si presionamos alguna tecla:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &amp;amp;Key)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Close();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalmente abrimos otro evento de la forma que sería el OnMouseMove en el cual colocamos el código para que cuando se mueva el cursor del mouse se cierre el protector de pantalla:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static int MoveCounter = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( MoveCounter &amp;gt;= 15 )&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Close();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MoveCounter++;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y pues eso es todo, ¿muy fácil verdad? pues lo siguiente es compilar y correr nuestro programa y deberíamos obtener algo como lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-Iub8ehiNkGs/T0F9RokHVfI/AAAAAAAAAFQ/gIc1VaDNLdU/s1600/Ejemplo+6+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4bZz5_msUib0qH5WRPfHzSy0lg95dlnpxxu2n72y6KONMzy5B20TWz1OhRCDHeegaaGcAvaTLV53wNwrWAgJXxhZ_Oa5iai2fEqLVQcblGAdKBDiXlqdH6fYUF_YL7iprkaXbRI-4Gew/s1600/Ejemplo+6+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4bZz5_msUib0qH5WRPfHzSy0lg95dlnpxxu2n72y6KONMzy5B20TWz1OhRCDHeegaaGcAvaTLV53wNwrWAgJXxhZ_Oa5iai2fEqLVQcblGAdKBDiXlqdH6fYUF_YL7iprkaXbRI-4Gew/s320/Ejemplo+6+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno amigos pues por esta ocasión sería todo pero ya saben, nos vemos más adelante para seguir mostrando ejemplos de aplicaciones en C++ Builder. Hasta la próxima chavos!</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/6627014787036400779/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/diseno-de-un-screensaver.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6627014787036400779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/6627014787036400779'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/diseno-de-un-screensaver.html' title='Diseño De Un ScreenSaver'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9lDfMw0o3tdEE_ZZaijXkmQGes7dC-v2HUutOHrtuNW66tlauhcN0QHBIoQlwRIxPAXkEeqBTvJJWIvRko7JeTA7sLiEqO-rL1L1tkX2V2xxRPE3sH-JQJKF8egpcl0R4okaMpWttCMg/s72-c/Ejemplo+6+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-559272702640609867</id><published>2012-02-18T17:43:00.000-06:00</published><updated>2017-03-18T15:51:47.455-06:00</updated><title type='text'>Objetos Gráficos</title><content type='html'>Hola chavos aquí de nuevo saludándolos y &amp;nbsp;comenzando con una nueva aplicación de graficación en C++ Builder. Bueno pues en esta ocasión realizaremos una aplicación para mostrar como dibujar los objetos gráficos más comunes como lo son: rectángulo, elipse, pie, arco, trazo de lineas, entre otros. Además también veremos cómo modificar el color y estilo de la brocha así como el color y estilo de la pluma.&lt;br /&gt;
&lt;br /&gt;
Bueno pues esta aplicación contiene muchos componentes en la forma, así que empezemos por ir colocándolos, tales componentes son los siguientes:&lt;br /&gt;
&lt;br /&gt;
-Un panel con la propiedad Caption en &quot;cadena vacía&quot; y el color clTeal.&lt;br /&gt;
-Un label que su propiedad Caption sea &quot;Objeto Gráfico&quot;&lt;br /&gt;
-Un ComboBox en el cual su propiedad Texto se la borramos, y en la colección de items escribimos la siguiente lista:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Línea&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Rectángulo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Rectángulo Redondeado&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Elipse&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Circulo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Pie&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Arco&lt;br /&gt;
-Otro panel dentro del panel anterior con la propiedad Caption como cadena vacía.&lt;br /&gt;
-Un label dentro del segundo panel con la propiedad Caption con la cadena &quot;Brocha&quot;&lt;br /&gt;
-Otro label dentro del segundo panel con la palabra &quot;Estilo&quot; en la propiedad Caption&lt;br /&gt;
-Un ComboBox también dentro del segundo panel también con la propiedad Texto borrada, y en su lista de items escribimos la siguiente:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Sólido&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Transparente&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Horizontal&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Vertical&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Diagonal Derecha&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Diagonal Izquierda&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Cuadrícula&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Cuadrícula Diagonal&lt;br /&gt;
-Otro label más dentro del segundo panel con el valor &quot;Color&quot; en su propiedad Caption&lt;br /&gt;
-Un SpeedButton en el cual colocamos en su propiedad Glyph un archivo bmp que hayamos creado nosotros mismos (lo anterior lo podemos realizar desde el Image Editor, accesible desde el menú Tools del C++ Builder 6)&lt;br /&gt;
-Colocamor un tercer panel dentro del panel principal que habíamos colocado al principio al igual que los anteriores con la propiedad Caption vacía.&lt;br /&gt;
-Dentro de éste último panel colocamos un label cuya propiedad Caption sea &quot;Pluma&quot;&lt;br /&gt;
-Otro label dentro del mismo panel que el anterior con la propiedad Caption &quot;Estilo&quot;&lt;br /&gt;
-Un ComboBox dentro del tercer panel con la propiedad Caption vacía y en su lista de ítems agregamos los siguientes elementos:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Sólido&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Dash&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Dot&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *DashDot&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *DashDotDot&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *Clear&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *InsideFrame&lt;br /&gt;
-Un label más con la palabra &quot;Color&quot; en su propiedad Caption&lt;br /&gt;
-También dentro del tercer panel un SpeedButton con una imágen bmp personalizada en su propiedad Gylph&lt;br /&gt;
-Finalmente dentro del panel principal que habíamos puesto al principio colocamos un ColorDialog&lt;br /&gt;
&lt;br /&gt;
Como siempre todos estos componentes pueden ser acomodados de la manera que ustedes quieran pero en mi caso yo los acomode de la manera siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-NEz9GiKzIoE/T0AzP7qn_oI/AAAAAAAAAE4/rhQEsmvfrXs/s1600/Ejemplo+5+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCZkEmwEx3w_nISpjqVQ6YFna3-jQKl5Q9S9UtYqboojRVRPh-RaO-wpdFlitI4c0UyMNS9YOt9VPcQUKyZvBlKAWgBhu_tvf7JyBYlWrU20Xt9RI_Q5HvmRnLgY_N_FRuouWOrJe4-_Y/s1600/Ejemplo+5+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;207&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCZkEmwEx3w_nISpjqVQ6YFna3-jQKl5Q9S9UtYqboojRVRPh-RaO-wpdFlitI4c0UyMNS9YOt9VPcQUKyZvBlKAWgBhu_tvf7JyBYlWrU20Xt9RI_Q5HvmRnLgY_N_FRuouWOrJe4-_Y/s320/Ejemplo+5+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Enseguida comenzamos con la codificación de los componentes, realmente el código no es tan grande, ya que la mayoría de los componentes que pusimos fueron más que nada para cuestiones de diseño y de buena presentación de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Primeramente colocamos en el primer ComboBox que pusimos el código siguiente, el cual nos servirá para dibujar los objetos gráficos en la forma:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::ComboBox1Change(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Repaint();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox1-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0: Canvas-&amp;gt;MoveTo(100,100);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(300,200);//Linea&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1: Canvas-&amp;gt;Rectangle(250,100,450,200);//Rectangulo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2: Canvas-&amp;gt;RoundRect(250,100,450,200,10,10);//Rectangulo Redondeado&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3: Canvas-&amp;gt;Ellipse(250,100,450,200);//Elipse&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 4: Canvas-&amp;gt;Ellipse(250,50,450,250);//Circulo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 5: Canvas-&amp;gt;Pie(250,50,450,250,350,50,450,100);//Pie&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 6: Canvas-&amp;gt;Arc(250,100,450,200,420,180,350,100);//Arco&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora colocamos el código en el segundo ComboBox que pusimos, este código servirá para cambiar el estilo de la brocha, es decir, del relleno del objeto, y después redibujará automáticamente el objeto gráfico con el nuevo estilo de brocha:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::ComboBox2Change(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox2-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0: Canvas-&amp;gt;Brush-&amp;gt;Style = bsSolid;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1: Canvas-&amp;gt;Brush-&amp;gt;Style = bsClear;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2: Canvas-&amp;gt;Brush-&amp;gt;Style = bsHorizontal;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3: Canvas-&amp;gt;Brush-&amp;gt;Style = bsVertical;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 4: Canvas-&amp;gt;Brush-&amp;gt;Style = bsFDiagonal;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 5: Canvas-&amp;gt;Brush-&amp;gt;Style = bsBDiagonal;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 6: Canvas-&amp;gt;Brush-&amp;gt;Style = bsCross;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 7: Canvas-&amp;gt;Brush-&amp;gt;Style = bsDiagCross;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboBox1Change(Sender);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Después colocamos el código que tenemos a continuación en el tercer ComboBox que colocamos, con él podremos cambiar el estilo de la pluma, es decir del contorno de el objeto, para después redibujar automáticamente el objeto gráfico en la forma con el nuevo estilo de pluma:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::ComboBox3Change(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(ComboBox3-&amp;gt;ItemIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0: Canvas-&amp;gt;Pen-&amp;gt;Style = psSolid;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1: Canvas-&amp;gt;Pen-&amp;gt;Style = psDash;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 2: Canvas-&amp;gt;Pen-&amp;gt;Style = psDot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 3: Canvas-&amp;gt;Pen-&amp;gt;Style = psDashDot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 4: Canvas-&amp;gt;Pen-&amp;gt;Style = psDashDotDot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 5: Canvas-&amp;gt;Pen-&amp;gt;Style = psClear;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 6: Canvas-&amp;gt;Pen-&amp;gt;Style = psInsideFrame;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboBox1Change(Sender);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luego damos doble clic en el primer SpeedButton que colocamos y escribimos el siguiente código, con el cual cambiaremos el color a la brocha y después se redibujará el objeto gráfico con el nuevo color elegido:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ColorDialog1-&amp;gt;Execute())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Brush-&amp;gt;Color = ColorDialog1-&amp;gt;Color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboBox1Change(Sender);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalmente codificamos el último SpeedButton que colocamos, para esto utilizaremos el siguiente código con el cual cambiaremos el color de la pluma para que al igual que los componentes anteriores se redibuje el objeto gráfico en la forma con el nuevo color de pluma elegido:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ColorDialog1-&amp;gt;Execute())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Pen-&amp;gt;Color = ColorDialog1-&amp;gt;Color;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboBox1Change(Sender);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pues ese fue todo el código que necesitamos amigos, ahora compilamos y corremos nuestra aplicación y debe de funcionar de maravilla:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-eqAhdZl5u6Q/T0A3WmBCnNI/AAAAAAAAAFA/2boSvpT94Bs/s1600/Ejemplo+5+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHaivBLxpz1N42uQlk_4ahmnHb5G_SCbjUI9vnH7R4nzpIMbBSTHRxUEfqJr_LHjru-xGCO3978kcGP2JZUvsAWnnV6KbIXaNijD0lGMV-_JqZZxMKcXlxI6qcQUpi8hQ3O2W4eLswM7A/s1600/Ejemplo+5+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;208&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHaivBLxpz1N42uQlk_4ahmnHb5G_SCbjUI9vnH7R4nzpIMbBSTHRxUEfqJr_LHjru-xGCO3978kcGP2JZUvsAWnnV6KbIXaNijD0lGMV-_JqZZxMKcXlxI6qcQUpi8hQ3O2W4eLswM7A/s320/Ejemplo+5+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Pues si funcionó su aplicación felicidades chavos!! y si no fue así pues revisen bien para ver que errores pueden haber cometido. Por mi parte esto fue todo por hoy y nos vemos en la siguiente ocasión para continuar con aplicaciones de graficación en el C++ Builder.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/559272702640609867/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/objetos-graficos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/559272702640609867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/559272702640609867'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/objetos-graficos.html' title='Objetos Gráficos'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCZkEmwEx3w_nISpjqVQ6YFna3-jQKl5Q9S9UtYqboojRVRPh-RaO-wpdFlitI4c0UyMNS9YOt9VPcQUKyZvBlKAWgBhu_tvf7JyBYlWrU20Xt9RI_Q5HvmRnLgY_N_FRuouWOrJe4-_Y/s72-c/Ejemplo+5+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-8658659475308268974</id><published>2012-02-16T19:45:00.000-06:00</published><updated>2017-03-18T15:50:27.428-06:00</updated><title type='text'>Escribir Texto Con Angulo De Rotación (Versión 2)</title><content type='html'>Hola amigos!!! Espero que estén de lo mejor y pues es hora de continuar con más aplicaciones de graficación en C++ Builder. Creo que aun recuerdan la aplicación que realizamos la ocasión pasada en la cual escribiamos una cadena de texto en la forma. Bueno pues ahora trabajaremos con esa misma aplicación como base y la modificaremos de manera que el texto gire en su propio eje en el sentido de las manecillas del reloj y en sentido contrario, además de poder girarlo en el ángulo que nosotros deseemos.&lt;br /&gt;
&lt;br /&gt;
Para comenzar con la aplicación debemos modificar la forma de manera que debemos de tener los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
-2 botones (los mismos que teníamos en la aplicación pasada)&lt;br /&gt;
-1 label&lt;br /&gt;
-1 TrackBar (con valor mínimo de 0 y máximo de 255)&lt;br /&gt;
-2 timers&lt;br /&gt;
&lt;br /&gt;
Los componentes pueden acomodarlos con el diseño que quieran, en este caso yo los acomodé de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-Y8nYjPTqs7k/Tz2qXgGxdVI/AAAAAAAAAEo/AQ4OF7cKeYY/s1600/Practica+4+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiNXu7F5KPBgt5wZCzG7VGAlHLHpxgqvOeoZpsvkEdgIdgrNhOBLZ4ZERvWGAXZvKDIx8nveIP2XLctA2sMs0wiMDjXfxxx49zWz6lmHqWdsbX7Js9oBHKGMFcTx9bXG_bCvph1dOrq8M/s1600/Practica+4+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiNXu7F5KPBgt5wZCzG7VGAlHLHpxgqvOeoZpsvkEdgIdgrNhOBLZ4ZERvWGAXZvKDIx8nveIP2XLctA2sMs0wiMDjXfxxx49zWz6lmHqWdsbX7Js9oBHKGMFcTx9bXG_bCvph1dOrq8M/s320/Practica+4+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora empezamos con la codificación de la aplicación, primeramente abrimos el archivo H del programa y declaramos las siguientes variables (ya vimos como y dónde hacerlo en aplicaciones pasadas):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int n, n2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación escribimos el código del botón para cerrar la aplicación, ya lo hemos visto antes muchas veces, y sabemos que es bastante sencillo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Close();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enseguida escribimos el código del botón para mostrar texto:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Canvas-&amp;gt;Font-&amp;gt;Color = clBlue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Font-&amp;gt;Size = 30; //Tamaño del Font&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Font-&amp;gt;Name = &quot;SimSun&quot;;//&quot;Tahoma&quot;;//&quot;Times Roman&quot;; //Nombre del&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Font&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Declaramos una variable LOGFONT&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LOGFONT lgfont;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetObject(Canvas-&amp;gt;Font-&amp;gt;Handle, sizeof(LOGFONT), &amp;amp;lgfont);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Propiedades que nos permiten modificar la orientación de la salida del Texto&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lgfont.lfEscapement = n*10;//0;//-900;//45*10; //Angulo *10&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lgfont.lfOrientation = n2*10;//0;//-900;//45*10; //Angulo *10&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Creamos un font logico con las caracteristicas especificadas en la&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Estructura LOGFONT&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Consultar en la ayuda LOGFONT para conocer su definición&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Font-&amp;gt;Handle = CreateFontIndirect(&amp;amp;lgfont);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SetGraphicsMode(Canvas-&amp;gt;Handle, GM_ADVANCED);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String text = &quot;Tec. De La Laguna&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;TextOut(ClientWidth/2,ClientHeight/2, text); //Dibujamos el Texto&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notamos que las modificaciones que tiene respecto a la aplicación pasada es que el ángulo en que está escrito el texto y la orientación ahora tienen unos valores variables, los cuales declaramos en el archivo H.&lt;br /&gt;
&lt;br /&gt;
A continuación tenemos el código del TrackBar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::TrackBar1Change(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n = TrackBar1-&amp;gt;Position;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Button1Click(Sender);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notamos que lo único que realiza el TrackBar es cambiar el valor de la variable n asignandole el valor de la posición que tiene el TrackBar y después mandamos llamar al evento Button1Click(Sender) para mostrar de nuevo el texto pero ahora con el nuevo ángulo del texto.&lt;br /&gt;
&lt;br /&gt;
Ahora escribimos el código de los 2 timers, primero el código del Timer1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer1Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;n++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Button1Click(Sender);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luego el código del Timer2:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Timer2Timer(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;n--;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;n2++;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Refresh();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Button1Click(Sender);&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El código de los Timers lo que hará será girar el texto en sentido de las manecillas del reloj y en el sentido contrario. Los Timers se habilitan y se deshabilitan dando clic o doble clic en la forma, para esto utilizamos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormClick(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer2-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer1-&amp;gt;Enabled = true;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
void __fastcall TForm1::FormDblClick(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer1-&amp;gt;Enabled = false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Timer2-&amp;gt;Enabled = true;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en el código al dar un clic en la forma deshabilitamos el Timer2 y habilitamos el Timer1 con lo que el texto girará en sentido contrario a las manecillas del reloj. Por el contrario si damos doble clic en la forma deshabilitamos el Timer1 y habilitamos el Timer2 con lo que el texto girará en sentido de las manecillas del reloj.&lt;br /&gt;
&lt;br /&gt;
Compilamos nuestro programa y lo corremos, si hicimos todo de manera correcta nuestra aplicación se verá &amp;nbsp;de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-9hXCGwCK4Z4/Tz2wxlDyerI/AAAAAAAAAEw/sxn5kslKrw4/s1600/Practica+4+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKBa9USXFxWwAGf0FHoJnx5AnPJz1dvOwre-TxMB0bZdJE2vG4tQ893KXgXTkIsUD2LKSTzLdf6rZ_5W21YTUH3QN9DG6gghf6GNihMvJDCl6A5r4EgfbOIw-Cv4C9cdR8DvKcwNZQxok/s1600/Practica+4+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;177&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKBa9USXFxWwAGf0FHoJnx5AnPJz1dvOwre-TxMB0bZdJE2vG4tQ893KXgXTkIsUD2LKSTzLdf6rZ_5W21YTUH3QN9DG6gghf6GNihMvJDCl6A5r4EgfbOIw-Cv4C9cdR8DvKcwNZQxok/s320/Practica+4+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
El texto podemos moverlo automáticamente desde el TrackBar o automáticamente dando clic o doble clic en la forma.&lt;br /&gt;
&lt;br /&gt;
Y pues eso es todo por hoy chavos, espero que todo haya quedado claro y que hayamos aprendido algo. Nos vemos en la próxima ocasión para realizar una aplicación diferente y seguir aprendiendo cosas nuevas en C++ Builder. Hasta la próxima amigos!.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/8658659475308268974/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/escribir-texto-con-angulo-de-rotacion_16.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/8658659475308268974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/8658659475308268974'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/escribir-texto-con-angulo-de-rotacion_16.html' title='Escribir Texto Con Angulo De Rotación (Versión 2)'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiNXu7F5KPBgt5wZCzG7VGAlHLHpxgqvOeoZpsvkEdgIdgrNhOBLZ4ZERvWGAXZvKDIx8nveIP2XLctA2sMs0wiMDjXfxxx49zWz6lmHqWdsbX7Js9oBHKGMFcTx9bXG_bCvph1dOrq8M/s72-c/Practica+4+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-1441781905130711542</id><published>2012-02-15T20:38:00.000-06:00</published><updated>2017-03-18T15:49:21.739-06:00</updated><title type='text'>Escribir Texto Con Angulo De Rotación</title><content type='html'>Hola de nuevo chavos!! Espero que estén de lo mejor y preparados para seguir con los ejercicios de graficación en C++ Builder.&lt;br /&gt;
&lt;br /&gt;
Bueno pues en esta ocasión realizaremos algo rápido y simple pero que nos puede llegar a ser útil más adelante en otras aplicaciones. Nuestro ejemplo de hoy se tratará de escribir texto en la forma. Para realizar esto no necesitaremos de muchos componentes así que lo único que haremos será colocar 2 botones en la forma, la cual debería quedar así:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-SSHEAbm-5kY/TzxlxzoTZeI/AAAAAAAAAEY/VAa2gYH_Klw/s1600/Ejemplo+4+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqohjoM5G5jQpF0r5gCrqU0w1faWbJaX6h8Rix190o6RRqdpHxQOcsKI8ftuieQSzmIzS3X1yoKqm41geyLf93o2AAGJa23i4L95VT0Ar7iwRLYz3VF-k2cihye42R52xI97xzZmvfETE/s1600/Ejemplo+4+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqohjoM5G5jQpF0r5gCrqU0w1faWbJaX6h8Rix190o6RRqdpHxQOcsKI8ftuieQSzmIzS3X1yoKqm41geyLf93o2AAGJa23i4L95VT0Ar7iwRLYz3VF-k2cihye42R52xI97xzZmvfETE/s320/Ejemplo+4+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
En el primer botón escribiremos el código para dibujar el texto en la forma y el segundo botón solo nos servirá para cerrar la forma.&lt;br /&gt;
&lt;br /&gt;
Empezamos con el código y en el botón de Mostrar Texto escribimos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Canvas-&amp;gt;Font-&amp;gt;Color = clBlue;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Font-&amp;gt;Size = 30; //Tamaño del Font&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Font-&amp;gt;Name = &quot;SimSun&quot;;//&quot;Tahoma&quot;;//&quot;Times Roman&quot;; //Nombre del&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Font&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Declaramos una variable LOGFONT&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LOGFONT lgfont;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetObject(Canvas-&amp;gt;Font-&amp;gt;Handle, sizeof(LOGFONT), &amp;amp;lgfont);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Propiedades que nos permiten modificar la orientación de la salida del Texto&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lgfont.lfEscapement = 45*10;//0;//-900;//45*10; //Angulo *10&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lgfont.lfOrientation = 45*10;//0;//-900;//45*10; //Angulo *10&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Creamos un font logico con las caracteristicas especificadas en la&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Estructura LOGFONT&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Consultar en la ayuda LOGFONT para conocer su definición&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Font-&amp;gt;Handle = CreateFontIndirect(&amp;amp;lgfont);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SetGraphicsMode(Canvas-&amp;gt;Handle, GM_ADVANCED);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String text = &quot;Tec. De La Laguna&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;TextOut(0,310, text); //Dibujamos el Texto&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como vemos en el código podemos modificar el color, el tamaño y el tipo de letra del texto que vamos a escribir en la forma, además podemos elegir que cadena es la que imprimiremos en pantalla.&lt;br /&gt;
&lt;br /&gt;
En el segundo botón lo único que haremos será cerrar la aplicación, por lo tanto el código será el que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::Button2Click(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Close();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno pues ahora compilamos nuestra aplicación y corremos el programa y al dar clic en el botón con la leyenda &quot;Mostrar Texto&quot; nos tiene que dar algo como lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-8lqBvURkfG8/TzxrtVU_mjI/AAAAAAAAAEg/FnccCbCrToA/s1600/Ejemplo+4+(2).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjFfwpf6mXlQIUGk1i9RlRPV2mK3pldzbCeRlFj3BzHEcU-KBHuzdDx1e9HTsSve0QDvEl9lWFxQteqSkh0gD2VhY7oeUbfvymg_ij33P_O0a3aCJZM7fVknYi3TRZmL00RPKEUhlivK4/s1600/Ejemplo+4+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvpRIJWz8JXzb02b0wpb8MLDdLcqozbelcW7cnq3JoieC6gxO7nL9iIAFxlGSmXOokTZEFH0QixCVtRzbp7U_B5UFX59P92ImuvOSjVRAKJnnReEgZJgWQvcxVJQLg0905j6WdKZ5rE-E/s1600/Ejemplo+4+%25282%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvpRIJWz8JXzb02b0wpb8MLDdLcqozbelcW7cnq3JoieC6gxO7nL9iIAFxlGSmXOokTZEFH0QixCVtRzbp7U_B5UFX59P92ImuvOSjVRAKJnnReEgZJgWQvcxVJQLg0905j6WdKZ5rE-E/s320/Ejemplo+4+%25282%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno amigos pues esta aplicación nos podría servir en un futuro para crear presentaciones de nuestro programa y cosas así. En la próxima práctica que hagamos veremos como mover el texto, es decir que gire automáticamente, así que guarden su aplicación para realizar la siguiente y pues hasta entonces chavos!</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/1441781905130711542/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/escribir-texto-con-angulo-de-rotacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/1441781905130711542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/1441781905130711542'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/escribir-texto-con-angulo-de-rotacion.html' title='Escribir Texto Con Angulo De Rotación'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqohjoM5G5jQpF0r5gCrqU0w1faWbJaX6h8Rix190o6RRqdpHxQOcsKI8ftuieQSzmIzS3X1yoKqm41geyLf93o2AAGJa23i4L95VT0Ar7iwRLYz3VF-k2cihye42R52xI97xzZmvfETE/s72-c/Ejemplo+4+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-3850424684636427118</id><published>2012-02-14T21:40:00.000-06:00</published><updated>2017-03-18T11:40:23.273-06:00</updated><title type='text'>Efecto Con Lineas (Versión 2)</title><content type='html'>Hola amigos! Pues vamos a continuar con las aplicaciones en C++ Builder. Y pues en esta ocasión será algo tan rápido como la aplicación que realizamos la vez anterior y de hecho como les mencione en el post pasado utilizaremos la aplicación anterior como base para realizar la de ahora. Las modificaciones que le haremos a nuestra aplicación anterior será que ahora el centro del dibujo en lugar de estar en el centro de la forma, estará en el lugar en donde coloquemos el cursor del mouse.&lt;br /&gt;
&lt;br /&gt;
Bueno pues al igual que la ocasión pasada en la forma no tenemos ningún componente ya que solo trabajaremos sobre eventos de la forma.&lt;br /&gt;
&lt;br /&gt;
Bueno pues para ésta aplicación abrimos el archivo H de la aplicación y en la parte de las declaraciones de usuario privadas declaramos 2 enteros, en mi caso los llamé &quot;x&quot; y &quot;y&quot;, debe quedar de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// User declarations&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int x, y;&lt;br /&gt;
&lt;br /&gt;
Bueno pues ahora abrimos el evento OnPaint de la forma y colocamos el código que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormPaint(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int CentroX, CentroY, Contador = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Líneas con trazo discontinuo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Pen-&amp;gt;Style = psSolid;//psDot;//psDashDotDot;;//psDashDot;//psDash;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Calcular el centro del área de dibujo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CentroX = x;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CentroY = y;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Recorrer toda la anchura del área de dibujo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (Contador &amp;lt; ClientWidth) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Trazando líneas desde el centro&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // hasta los bordes superior e inferior&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(Contador, 0);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(Contador, ClientHeight);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador += 10; // Incrementar el contador&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador = 0; // Contador de nuevo a cero&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Para recorrer la altura del área de dibujo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (Contador &amp;lt; ClientHeight)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Trazando líneas desde el centro&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // hasta los bordes izquierdo y derecho&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(0, Contador);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(ClientWidth, Contador);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador += 10; // Incrementar el contador&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Invalidate(); //sirve para el movimiento del centro con el mouse&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this-&amp;gt;DoubleBuffered=true; //reduce el parpadeo&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bueno pues los únicos cambios que tenemos en el código es que al momento de calcular el centro del área de dibujo, en lugar de que sean el centro del ancho y alto de la forma serán unos valores X y Y, que es donde está ubicado el cursor del mouse. Así mismo podemos notar que al final tenemos 2 lineas de código más; la primera línea sirve para refrescar la imágen cuando se mueva el cursor dentro de la forma, y la segunda línea de código nos sirve para reducir notablemente el parpadeo, ya que sin ésta se vería de la imágen parpadearía cada vez que movamos el cursor al estarse redibujando.&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el evento OnResize de la forma y escribimos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormResize(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Invalidate();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esto nos sirve para redimensionar las lineas trazadas en caso de que la ventana donde está ejecutándose la aplicación sea maximizada o cambiada de tamaño.&lt;br /&gt;
&lt;br /&gt;
Finalmente abrimos el evento OnMouseMove y dentro del evento escribimos el código que a continuación tenemos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; int X, int Y)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x = X;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y = Y;&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con este evento lo que hacemos es obtener la posición del cursor del ratón cuando se mueve por encima de la forma y le asignamos esas posiciones a los valores enteros que antes ya habiamos declarado, después esos valores entero se asignan a el centro del área de dibujo para que se muevan las lineas cada vez que se mueve el cursor.&lt;br /&gt;
&lt;br /&gt;
Ahora finalmente compilamos y corremos nuestra aplicación y debe verse algo por el estilo:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-3w28ypIs1Ss/TzsnGnpalxI/AAAAAAAAAD4/EyC8KBeihTg/s1600/Practica+3+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;img border=&quot;0&quot; height=&quot;102&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2QIayARl_6bGNdyCvFYMtXMqS0_HeMsBw98SMhDRnoh_7BREcAD3HvBh6mwml6j6C2cHxDSIgVXNrdRbJxSD66jXmKpr8oXir8w7r-UqIxriOHXruk8QAH5zIz4ZE30_0bShYusSILPs/s200/Practica+3+%25281%2529.png&quot; width=&quot;200&quot; /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnKvQL8oRGhPZCFCBkAej1tdZFySEoqQTL_dK0QA9lu5USqjO54BqgPkYrWaM-NjJFkUYgGWjDnYojmH_HyuS6lbUw-N34b0rVcPE8S2tdQwBzjTUAtwlGfW9QjYULAMUn2rSRfmZJJtg/s1600/Practica+3+%25282%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;103&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnKvQL8oRGhPZCFCBkAej1tdZFySEoqQTL_dK0QA9lu5USqjO54BqgPkYrWaM-NjJFkUYgGWjDnYojmH_HyuS6lbUw-N34b0rVcPE8S2tdQwBzjTUAtwlGfW9QjYULAMUn2rSRfmZJJtg/s200/Practica+3+%25282%2529.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-9kTHP9qYoOQ/Tzsn4UvKU6I/AAAAAAAAAEI/H3ujW4CfGCQ/s1600/Practica+3+(3).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img border=&quot;0&quot; height=&quot;103&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzgDnHGt4jQqJdSHKxPuZsBkeN0p-xAmJorvv4MJhYADlsAcyp9aPQ1_pRRXzY2eBT_1b0nT68PGjFB-BKPfITF1k0rb6tLXkLFr_QRMWZlwdTnhraQH5Dh4L2SELSrgDWp3KoI1K7i2Y/s200/Practica+3+%25283%2529.png&quot; width=&quot;200&quot; /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0MnyHrrqocgxEgyzvK-tSa-4BZctZsqLcro5GrRE8LDraEixH88k1R-I6jvfEOK4ji2MAU4RNKSQRRIcxuuq76Yd1t7jp5MltdmXl_uxs4r-FkCbgSQOG0aTENkLre_3KXBrf8sxEZ_A/s1600/Practica+3+%25284%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;103&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0MnyHrrqocgxEgyzvK-tSa-4BZctZsqLcro5GrRE8LDraEixH88k1R-I6jvfEOK4ji2MAU4RNKSQRRIcxuuq76Yd1t7jp5MltdmXl_uxs4r-FkCbgSQOG0aTENkLre_3KXBrf8sxEZ_A/s200/Practica+3+%25284%2529.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Bueno amigos pues analizen el código y entiendanlo ya que es importante que sepan que es lo que se está haciendo y porqué se esta haciendo, y pues piensen en que otras modificaciones podrían hacerse a la aplicación y traten de hacerlo. Eso es todo por hoy y nos vemos la próxima ocasión para continuar con más aplicaciones en C++ Builder, hasta la próxima amigos!!!.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/3850424684636427118/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/hola-amigos-pues-vamos-continuar-con.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3850424684636427118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/3850424684636427118'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/hola-amigos-pues-vamos-continuar-con.html' title='Efecto Con Lineas (Versión 2)'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2QIayARl_6bGNdyCvFYMtXMqS0_HeMsBw98SMhDRnoh_7BREcAD3HvBh6mwml6j6C2cHxDSIgVXNrdRbJxSD66jXmKpr8oXir8w7r-UqIxriOHXruk8QAH5zIz4ZE30_0bShYusSILPs/s72-c/Practica+3+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7310571696968123006.post-5869802275913688889</id><published>2012-02-13T17:07:00.000-06:00</published><updated>2017-03-18T11:20:03.132-06:00</updated><title type='text'>Efecto Con Lineas</title><content type='html'>Hola de nuevo amigos!! Bueno pues es hora de continuar con más aplicaciones en C++ Builder, en esta ocasión realizaremos una aplicación bastante sencilla y muy rápida.&lt;br /&gt;
&lt;br /&gt;
Para este programa no utilizaremos ningún componente aparte de la forma, ya que todo lo que haremos será trazar lineas y aprovechar el escalonamiento que se produce en el trazo de las mismas para obtener un efecto en la salida.&lt;br /&gt;
&lt;br /&gt;
Bueno pues lo primero es después de haber creado una nueva aplicación, abrir el evento OnPaint de la forma y en el escribir el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormPaint(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int CentroX, CentroY, Contador = 0;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Líneas con trazo discontinuo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;Pen-&amp;gt;Style = psSolid;//psDot;//psDashDotDot;;//psDashDot;//psDash;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Calcular el centro del área de dibujo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CentroX = ClientWidth / 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CentroY = ClientHeight / 2;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Recorrer toda la anchura del área de dibujo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (Contador &amp;lt; ClientWidth) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Trazando líneas desde el centro&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // hasta los bordes superior e inferior&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(Contador, 0);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(Contador, ClientHeight);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador += 4; // Incrementar el contador&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador = 0; // Contador de nuevo a cero&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Para recorrer la altura del área de dibujo&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (Contador &amp;lt; ClientHeight)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Trazando líneas desde el centro&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // hasta los bordes izquierdo y derecho&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(0, Contador);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;MoveTo(CentroX, CentroY);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Canvas-&amp;gt;LineTo(ClientWidth, Contador);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Contador += 4; // Incrementar el contador&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De esta manera dibujamos las lineas con el efecto que deseamos.&lt;br /&gt;
&lt;br /&gt;
Ahora abrimos el evento OnResize también de la forma y colocamos el código que tenemos a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::FormResize(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Invalidate();&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con esto se redimensionan las lineas que dibujamos en la forma en caso de que esta se maximíze o se cambie de tamaño.&lt;br /&gt;
&lt;br /&gt;
Finalmente compilamos y corremos nuestra aplicación y tenemos que tener como resultado algo como lo que enseguida se muestra:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-bsHLyMcwX5E/TzmW3VMsZoI/AAAAAAAAADw/W4UsF3IkGM4/s1600/Ejemplo+3+(1).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJcJQhrbOzCCAGALl0Cc9eNaJRBkIiFRiUTVvB_umxqTwCk_YLhX9BhkZAVrYylPgp__ClyivYjawGS9YNG6JdzV_Sx6KKCeWozH-J8pohE6WPiJqZIyzWUge16E6teLGfaaRFqBPdHuM/s1600/Ejemplo+3+%25281%2529.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJcJQhrbOzCCAGALl0Cc9eNaJRBkIiFRiUTVvB_umxqTwCk_YLhX9BhkZAVrYylPgp__ClyivYjawGS9YNG6JdzV_Sx6KKCeWozH-J8pohE6WPiJqZIyzWUge16E6teLGfaaRFqBPdHuM/s320/Ejemplo+3+%25281%2529.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Bueno pues por esta ocasión es todo, ¿verdad que estuvo muy fácil?. Pues así poco a poco iremos aprendiendo cosas más difíciles. Por ultimo guarden la aplicación que realizaron porque la necesitaremos para la próxima ocasión trabajar sobre ella y hacerle unas pequeñas modificaciones para obtener resultados diferentes. Hasta pronto y sigan practicando programación chavos.</content><link rel='replies' type='application/atom+xml' href='http://graficacionitl.blogspot.com/feeds/5869802275913688889/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/efecto-con-lineas.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/5869802275913688889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7310571696968123006/posts/default/5869802275913688889'/><link rel='alternate' type='text/html' href='http://graficacionitl.blogspot.com/2012/02/efecto-con-lineas.html' title='Efecto Con Lineas'/><author><name>Vicente Vázquez</name><uri>http://www.blogger.com/profile/05854496060888195922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjhvj94Llq8Qj0VCO1kbMgSqXnCWiwzFh6s3WpRuBaGPJW8XPeTxDDWNtg1IKxgts1QIH-_2e5w7VzCAEi6xfj2mmpkEriljWRj13GtXFBItUlX3rH_vnp1JLrbSMqzA/s220/icono+de+c%2B%2B.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJcJQhrbOzCCAGALl0Cc9eNaJRBkIiFRiUTVvB_umxqTwCk_YLhX9BhkZAVrYylPgp__ClyivYjawGS9YNG6JdzV_Sx6KKCeWozH-J8pohE6WPiJqZIyzWUge16E6teLGfaaRFqBPdHuM/s72-c/Ejemplo+3+%25281%2529.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>