?? dibujo3.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>Un programa de Dibujo III</title>
</head>
<body bgcolor="#FFFFFF">
<p align="right">13 de Diciembre de 1999</p>
<p align="center"><strong><big><big><big>Un programa de Dibujo III</big></big></big></strong></p>
<p> Vamos a construir un pequeqo programa de dibujo con todo lo
aprendido, y alguna cosa mas. Lo primero es saber como hacer formas basicas, hasta
ahora solo pintabamos, pero vamos a hacer lineas cuadrados y circulos (o elipsis, que
viene a ser lo mismo a la hora de dibujarlas). Para ello contamos con tres mitodos que se
pueden aplicar sobre el Canvas:</p>
<p align="center"><strong>Mitodos aplicables al Canvas</strong></p>
<div align="center"><center>
<table border="1" width="587" height="154">
<tr>
<td width="150" height="52" align="center" bgcolor="#C0C0C0"><strong>Mitodo</strong></td>
<td width="425" height="52" align="center" bgcolor="#C0C0C0"><strong>Descripcisn</strong></td>
</tr>
<tr>
<td width="150" height="27" align="center">LineTo (X,Y)</td>
<td width="425" height="27">Traza una lmnea desde el punto actual donde se haya el lapiz
al punto indicado por las coordenas X,Y</td>
</tr>
<tr>
<td width="150" height="29" align="center" bgcolor="#C0C0C0">Rectangle(Origen.X,Origen.Y,Punto.X,Punto.Y);</td>
<td width="425" height="29" bgcolor="#C0C0C0">Dibuja un cuadrado usando las primeras
coordenadas como esquina izquierda superior, y la zltimas como esquina derecha inferior</td>
</tr>
<tr>
<td width="150" height="25" align="center">Ellipse (Origen.X,Origen.Y,Punto.X,Punto.Y);</td>
<td width="425" height="25">Dibuja una elipse (o circulo) usando la lmnea formado por el
par de coordenadas, como diametro.</td>
</tr>
</table>
</center></div>
<p>Lo siguiente a tener en cuenta es que el usuario debe poder elegir que quiere hacer, un
cuadrado, una lmnea, etc. Para ello he dispuesto un menz, en el cual elige la forma.
Tambien he dispuesto otro menz con el cual se puede cambiar las propiedades del lapiz
(ver capmtulo anterior). </p>
<p align="center"><strong> Menz Formas</strong></p>
<div align="center"><center>
<table border="1" width="281" height="138">
<tr>
<td width="127" height="33" align="center" bgcolor="#C0C0C0"><strong>Nombre</strong></td>
<td width="142" height="33" align="center" bgcolor="#C0C0C0"><strong>Descripcisn</strong></td>
</tr>
<tr>
<td width="127" height="29" align="center">Pincel</td>
<td width="142" height="29" align="left">Pinta continuo</td>
</tr>
<tr>
<td width="127" height="33" align="center" bgcolor="#C0C0C0">Lmneas</td>
<td width="142" height="33" align="left" bgcolor="#C0C0C0">Pinta una lmnea</td>
</tr>
<tr>
<td width="127" height="33" align="center">Cuadrados</td>
<td width="142" height="33" align="left">Pinta un cuadrado</td>
</tr>
<tr>
<td width="127" height="33" align="center" bgcolor="#C0C0C0">Circulos</td>
<td width="142" height="33" align="left" bgcolor="#C0C0C0">Pinta un circulo</td>
</tr>
</table>
</center></div>
<p align="left">Cada vez que el usuario selecciona un forma a dibujar debemos registrarlo
en algun sitio. Para ello estan las variables, se puede asignar un valor a una variable
segzn la seleccion del usuario, que la podemos llamar herramienta. Podriamos asignar el
valor uno, al pincel, el dos Lineas, etc. Por ejemplo si selecciona el pincel:</p>
<p align="left"> Herramienta := 1;</p>
<p align="left">Todo esto esta bien teoricamente, pero a la hora de seguir y entender un
programa se puede complicar, y de hecho es sera dificil de entender. Se puede mejor el
sistema si en lugar de colocar un valor numirico colocamos una constante (declarada
anteriormente), algo asi:</p>
<p align="left"> Herramienta := Pincel;</p>
<p align="left">Este sistema tiene buena pinta, pero nos obliga a tener que declarar las
constantes, y ademas tiene la pega que cualquier constante o valor nzmerico puede ser
asignado, lo cual puede generar un error lsgico (el programa no hace lo que esperamos), y
sera dificil de rastrear. Por ellos el lenguaje Pascal, y por extensisn el Delphi, pone
a nuestra disposicisn un tipo de variables, que son tipos definidos. Estas aburrido de
usarlos, por ejemplo, muchas propiedades de los componentes de Delphi, solo admiten
una serie de valores, y no otros. Podemos usar este tipo de variables, y definir que
valores seran permitidos a nuestro antojo. </p>
<p align="left">Lo primero es definir la variable, para ello esta la palabra reservada
Type. Antes de la declaracisn del formulario coloca esto:</p>
<p align="left"><em><strong>Type</strong><br>
THerramientas = (hrPincel,hrLinea,hrCirculo,hrCuadrado);</em></p>
<p align="left">Con esto hemos creado un nuevo tipo de variable que solo podra contener
los valores que hemos indicado. Pero solo hemos creado el tipo de variable, ahora en la
seccisn private (tambiin se puede poner en la seccisn public, ver capmtulos
anteriores) colocamos la declaracisn de la variable:</p>
<p align="left"><strong>private</strong><br>
<font color="#0000FF"><em>{ Private declarations }</em></font><br>
Herramienta : THerramientas; <font color="#0000FF">//Almacena la herramienta en uso</font><br>
</p>
<p align="left">Ahora en cada vez que el usuario seleccione un herramienta cargamos el
valor que nos interese. Esto son los eventos de dos d menus.</p>
<pre><b>procedure </b>TForm1.Pincel1Click(Sender: TObject);
<b>begin
</b>Pincel1.Checked := True;
Herramienta := hrPincel;
<b>end</b>;
<b>procedure </b>TForm1.Circulos1Click(Sender: TObject);
<b>begin
</b>Circulos1.Checked := True;
Herramienta := hrCirculo;
<b>end</b>;.</pre>
<p>Pues este es el secreto de este programa. El otro menz seleccion el tipo de lapiz
(Pen) y le asigna el color, aqui os pongo el csdigo fuente, aunque tambien lo podeis
descargar en la seccisn de ficheros.<br>
<br>
<br>
</p>
<hr>
<pre><b>unit </b>uMain;
<b>interface
uses
</b>Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ExtCtrls;
<b>type
</b>THerramientas = (hrPincel,hrLinea,hrCirculo,hrCuadrado);
<b>type
</b>TForm1 = <b>class</b>(TForm)
MainMenu1: TMainMenu;
Image1: TImage;
Archivo1: TMenuItem;
Salir1: TMenuItem;
Formas1: TMenuItem;
Lineas1: TMenuItem;
Cuadrados1: TMenuItem;
Circulos1: TMenuItem;
Lapiz1: TMenuItem;
Color1: TMenuItem;
Estilo1: TMenuItem;
Ancho1: TMenuItem;
Fino1: TMenuItem;
Mediano1: TMenuItem;
Grueso1: TMenuItem;
Lineacontinua1: TMenuItem;
Lineadiscontinua1: TMenuItem;
Lineadepuintos1: TMenuItem;
Pincel1: TMenuItem;
ColorDialog1: TColorDialog;
<b>procedure </b>Lineas1Click(Sender: TObject);
<b>procedure </b>Cuadrados1Click(Sender: TObject);
<b>procedure </b>FormCreate(Sender: TObject);
<b>procedure </b>Pincel1Click(Sender: TObject);
<b>procedure </b>Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
<b>procedure </b>Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
<b>procedure </b>Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
<b>procedure </b>Circulos1Click(Sender: TObject);
<b>procedure </b>Color1Click(Sender: TObject);
<b>procedure </b>Lineacontinua1Click(Sender: TObject);
<b>procedure </b>Lineadiscontinua1Click(Sender: TObject);
<b>procedure </b>Lineadepuintos1Click(Sender: TObject);
<b>procedure </b>Fino1Click(Sender: TObject);
<b>procedure </b>Mediano1Click(Sender: TObject);
<b>procedure </b>Grueso1Click(Sender: TObject);
<b>procedure </b>Salir1Click(Sender: TObject);
<b>private
</b><font
COLOR="Navy"><i>{ Private declarations }
</i></font>Herramienta : THerramientas; <font
COLOR="Navy"><i>//Almacena la herramienta en uso
</i></font>Pintando : Boolean; <font
COLOR="Navy"><i>//Indica si estamos pintado o no
</i></font>Origen, <font COLOR="Navy"><i>//Punto donde se estabamos;
</i></font>Punto: TPoint; <font
COLOR="Navy"><i>//Puntos donde estamos
</i></font><b>Procedure </b>Linea (<b>Const </b>X,Y : Integer); <font
COLOR="Navy"><i>//Dibuja una linea
</i></font><b>Procedure </b>Cuadrado (<b>Const </b>X,Y : Integer);//Dibuja un el cuadrado;
<b>Procedure </b>Circulo (<b>Const </b>X,Y : Integer); <font
COLOR="Navy"><i>//Dibuja un circulo
</i></font><b>Procedure </b>Pincel (<b>Const </b>X,Y : Integer); <font
COLOR="Navy"><i>//Dibuja seguido
</i></font><b>public
</b><font COLOR="Navy"><i>{ Public declarations }
</i></font><b>end</b>;
<b>var
</b>Form1: TForm1;
<b>implementation
</b><font
COLOR="Navy"><i>{$R *.DFM}
</i></font><b>procedure </b>TForm1.Lineas1Click(Sender: TObject);
<b>begin
</b>Lineas1.Checked := True;
Herramienta := hrLinea
<b>end</b>;
<b>procedure </b>TForm1.Cuadrados1Click(Sender: TObject);
<b>begin
</b>Cuadrados1.checked := True;
Herramienta := hrCuadrado;
<b>end</b>;
<b>procedure </b>TForm1.FormCreate(Sender: TObject);
<b>begin
</b>Herramienta := hrPincel;
Pintando := False;
Image1.Canvas.Refresh;
<b>end</b>;
<b>procedure </b>TForm1.Pincel1Click(Sender: TObject);
<b>begin
</b>Pincel1.Checked := True;
Herramienta := hrPincel;
<b>end</b>;
<b>procedure </b>TForm1.Circulos1Click(Sender: TObject);
<b>begin
</b>Circulos1.Checked := True;
Herramienta := hrCirculo;
<b>end</b>;
<b>procedure </b>TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
<b>begin
If </b>Button = mbLeft <b>Then
Begin
</b>Pintando := True;
Image1.Canvas.MoveTo (X,Y);
Origen.X := X;
Origen.Y := Y;
<b>end</b>;
<b>end</b>;
<b>procedure </b>TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
<b>begin
If </b>Button = mbLeft <b>Then
Begin
</b>Pintando := False;
Image1.Canvas.MoveTo (X,Y);
<b>end</b>;
<b>end</b>;
<b>procedure </b>TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
<b>begin
If </b>Pintando <b>Then
Begin
Case </b>Herramienta <b>Of
</b>hrLinea:
Linea (X,Y);
hrCuadrado:
Cuadrado (X,Y);
hrCirculo:
Circulo (X,Y);
hrPincel:
Pincel (X,Y);
<b>end</b>; <font
COLOR="Navy"><i>//Final del Case
</i></font><b>end</b>; <font COLOR="Navy"><i>//Final del If
</i></font>Punto := Point (X,Y);
Image1.Canvas.Pen.Mode := pmCopy;
<b>end</b>;
<b>Procedure </b>TForm1.Cuadrado (<b>Const </b>X,Y :integer);
<b>Begin
With </b>Image1.Canvas <b>Do Begin
</b>Pen.Mode := pmNotXor;
MoveTo (Origen.X,Origen.Y);
Rectangle (Origen.X,Origen.Y,Punto.X,Punto.Y);
MoveTo (Origen.X,Origen.Y);
Rectangle (Origen.X,Origen.Y,X,Y);
<b>end</b>; <font
COLOR="Navy"><i>//Final del With Image1.Canvas
</i></font><b>end</b>;
<b>Procedure </b>TForm1.Linea (<b>Const </b>X,Y : Integer);
<b>Begin
With </b>Image1 <b>Do Begin
</b>Canvas.Pen.Mode := pmNotXor;
Canvas.MoveTo (Origen.X,Origen.Y);
Canvas.LineTo (Punto.X,Punto.Y);
Canvas.MoveTo (Origen.X,Origen.Y);
Canvas.LineTo (X,Y);
<b>end</b>;
<b>end</b>;
<b>Procedure </b>TForm1.Circulo (<b>Const </b>X,Y : Integer);
<b>Begin
With </b>Image1.Canvas <b>Do Begin
</b>Pen.Mode := pmNotXor;
MoveTo (Origen.X,Origen.Y);
Ellipse (Origen.X,Origen.Y,Punto.X,Punto.Y);
MoveTo (Origen.X,Origen.Y);
Ellipse (Origen.X,Origen.Y,X,Y);
<b>end</b>; <font
COLOR="Navy"><i>//Final del With Image1.Canvas
</i></font><b>end</b>;
<b>Procedure </b>TForm1.Pincel (<b>Const </b>X,Y : Integer);
<b>Begin
With </b>Image1.Canvas <b>Do Begin
</b>Pen.Mode := pmNotXor;
LineTo (X,Y);
<b>end</b>;
<b>end</b>;
<b>procedure </b>TForm1.Color1Click(Sender: TObject);
<b>begin
If </b>ColorDialog1.Execute <b>Then
</b>Image1.Canvas.Pen.Color := ColorDialog1.Color;
<b>end</b>;
<b>procedure </b>TForm1.Lineacontinua1Click(Sender: TObject);
<b>begin
</b>Image1.Canvas.Pen.Style := psSolid;
LineaContinua1.Checked := True;
<b>end</b>;
<b>procedure </b>TForm1.Lineadiscontinua1Click(Sender: TObject);
<b>begin
</b>Image1.Canvas.Pen.Style := psDash;
LineaDiscontinua1.Checked := True;
<b>end</b>;
<b>procedure </b>TForm1.Lineadepuintos1Click(Sender: TObject);
<b>begin
</b>Image1.Canvas.Pen.Style := psDot;
Lineadepuintos1.Checked := True;
<b>end</b>;
<b>procedure </b>TForm1.Fino1Click(Sender: TObject);
<b>begin
</b>Image1.Canvas.Pen.Width := 1;
Fino1.Checked := True;
<b>end</b>;
<b>procedure </b>TForm1.Mediano1Click(Sender: TObject);
<b>begin
</b>Image1.Canvas.Pen.Width := 5;
Mediano1.Checked := True;
<b>end</b>;
<b>procedure </b>TForm1.Grueso1Click(Sender: TObject);
<b>begin
</b>Image1.Canvas.Pen.Width := 10;
Grueso1.Checked := True;
<b>end</b>;
<b>procedure </b>TForm1.Salir1Click(Sender: TObject);
<b>begin
</b>Close;
<b>end</b>;
<b>end</b>.</pre>
<hr>
<p><a href="dibujo2.htm" target="centro"><img SRC="atras.gif" BORDER="0" WIDTH="75"
HEIGHT="26"></a></p>
<p align="center"><a HREF="formu.htm" target="_self"><img SRC="correo.gif"
ALT="Correo Electrsnico" BORDER="0" WIDTH="50" HEIGHT="67"></a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -