BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN. PRACTICA # 5 GRAFICADO GUIADO POR EVENTOS CON DELPHI PARA EL CURSO DE GRAFICACION M. C. Graciano Cruz Almanza OBJETIVO: El alumno comprenderá la estructura de una aplicación gráfica desarrollada en Delphi con la característica de ser guiado por eventos. Aplicará en el pintado de líneas usando un Form, Label, Button e Image. Se crearan los procedimientos asociados al movimiento del ratón, así como al presionar y soltar el botón del ratón. Se complementa el ejercicio con cambio de propiedades como el grueso de la pluma y el modo de pintado. ACTIVIDADES: 1. Crear una Forma VCL. 2. Declare las variables x1, y1, x2, y2 de tipo entero. 3. Incluir una región para imágenes (TImage). 4. Incluir un Panel. 5. Incluir en el panel dos editores (TEdit) para la posición del cursor. 6. Asociar el código para capturar en los editores la posición del cursor (OnMouseMove en Eventos de Image1). 7. Incluir dos etiquetas Cx y Cy para la posición del cursor. 8. Modificar la Propiedad Visual del Cursor a crCross. 9. Incluir cuatro editores (TEdit) para las variables x1, y1, x2, y2. 10. Asociar el código para que al modificarse el contenido de los editores, se actualice las variables x1, y1, x2, y2 que deben declararse en el programa principal. 11. Incluir las cuatro etiquetas correspondientes. 12. Incluir en el panel, un botón para pintar una línea de P a Q. 13. Hacer pruebas de pintado de líneas 14. 15. Asociar el código para que al presionar el botón del ratón en Image1, se almacene (y modifique) la posición del cursor en los editores asociados a x1, y1 (OnMouseDown en Eventos de Image1). Note que esta modificación genera automáticamente la actualización en el programa de las variables correspondientes ya que se generó un evento. 16. Asocie el código correspondiente para OnMouseUp y x2, y2. 17. Hacer pruebas de pintado de líneas. 18. 19. Incluir un botón para cambiar el Ancho de la Pluma. 20. Incluir un botón para modificar el modo de pintado (pmNot, pmCopy). 21. Incluir un botón para limpiar la zona de trabajo y un botón para terminar (close). 22. Fin. CODIGO var Form1: TForm1; x1, y1, x2, y2 : Integer; // Pinta Linea de P a Q procedure TForm1.Button1Click(Sender: TObject); begin Image1.Canvas.MoveTo( x1, y1); Image1.Canvas.LineTo( x2, y2); end; // Cambia el modo de la Pluma procedure TForm1.Button2Click(Sender: TObject); begin Image1.Canvas.Pen.Mode := pmNot ; end; // Salir procedure TForm1.Button3Click(Sender: TObject); begin close; end; // Limpia la zona de dibujo procedure TForm1.Button4Click(Sender: TObject); begin Image1.Canvas.Pen.Mode := pmCopy; // Modo de Pintado Image1.Canvas.Pen.Width := 1; Image1.Canvas.Rectangle(0, 0, 500, 250); end; // Cambia el Ancho de la Pluma procedure TForm1.Button5Click(Sender: TObject); begin Image1.Canvas.Pen.Width := 4; end; // Obtiene los datos x1, y1, x2, y2 procedure TForm1.Edit1Change(Sender: TObject); begin x1 := StrToInt( Edit1.Text ); end; procedure TForm1.Edit2Change(Sender: TObject); begin y1 := StrToInt( Edit2.Text ); end; procedure TForm1.Edit3Change(Sender: TObject); begin x2 := StrToInt( Edit3.Text ); end; procedure TForm1.Edit4Change(Sender: TObject); begin y2 := StrToInt( Edit4.Text ); end; // Constructor de Forma procedure TForm1.FormCreate(Sender: TObject); begin Image1.Canvas.Rectangle(0, 0, 500, 250); end; // Actualiza Posicion del cursor en Editores, al presionar Boton de Raton procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Edit1.Text := IntToStr( X ); Edit2.Text := IntToStr( Y ); end; // Posicion del curso FUERA procedure TForm1.Image1MouseLeave(Sender: TObject); begin Edit5.Text := 'Fuera'; Edit6.Text := 'Fuera'; end; // Actualiza Posicion del Cursor en Editores al Mover el Raton procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Edit5.Text := IntToStr( X ); Edit6.Text := IntToStr( Y ); end; // Actualiza Posicion del cursor en Editores al Soltar Boton de Raton procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Edit3.Text := IntToStr( X ); Edit4.Text := IntToStr( Y ); end; end.