Un programa de dibujo. Delphi

Windows es un sistema operativo gráfico, las ventanas, los controles, los botones no son más que gráficos o dibujos si lo prefieres. Cuando colocamos un control sobre una ventana, este es dibujado sobre la ventana. Todo es posible por la capacidad que tiene Windows para dibujar, pero tiene una pega, si deseas dibujar usando los servicios de Windows, pues es te enfrentas a una gran cantidad de instrucciones y pasos necesarios para llegar a dibujar sobre la ventana. Pero de nuevo Delphi pone a nuestra disposición una seria de recursos que nos facilitan el trabajo.

Pero antes de empezar hay que tener presente un concepto fundamental. Este es como windows interpreta sus ventanas para poder dibujar sobre ellas. Windows solo permite que se dibuje sobre el fondo de las ventanas, o también conocido como el área cliente. Esta zona es lo que queda de la ventana, si le quitamos los bordes y banda superior donde esta el nombre de la aplicación y los controles para minimizar, maximizar o cerrar la ventana. Pues esta zona, cuando hablamos de dibujar, se llama Lienzo (en inglés Canvas). Para poder dibujar sobre el lienzo, debemos indicar donde queremos dibujar, y eso  se consigue indicando las coordenadas del punto donde queremos dibujar. El sistema de coordenadas usado por Windows, es un sistema cartesiano, o sea el sistema de coordenadas con dos ejes, el horizontal representado por al letra X y el vertical representado por la letra Y, con el centro del coordenadas en la esquina superior izquierda del lienzo.

Un ejemplo rápido:

Después de esta parrafada, y sabiendo que el ratón por medio de sus eventos devuelve la posición del cursor sobre el lienzo, es fácil hacer un programa que dibuje. Para ello vamos a hacer un pequeño ejemplo. Para ello debemos tener en cuenta un detalles. Vamos a dibujar sobre la ventana, cuando tengamos el botón izquierdo pulsado del ratón y se mueva. Para conseguir esto, debemos capturar los eventos del ratón, que son tres, OnMouseDown, OnMouseMove y OnMouseUp.Así pues cuando se pulse un botón (OnMouseDown) y este sea el botón izquierdo, pondremos una variable lógica (tipo Boolean) a verdadero (True); cuando se mueva el ratón y antes se haya pulsado el botón izquierdo, lo que es indicado por la variable usada en el evento anterior, pues dibujaremos un punto (pixel) en las coordenadas del ratón; cuando soltemos el botón izquierdo cambiaremos el valor de la variable que hemos usado antes. Como la variable es usada en tres procedimiento diferentes, esta debe ser declarada en la sección privada del formulario. Aquí debajo el código necesario para realizar esto:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
    Pintando : Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Pintando := False;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
If Button = mbleft Then
   pintando := True;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 If Button = mbLeft Then
  pintando := false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 If Pintando = True Then
   Canvas.Pixels [X,Y] := clblack;
end;
end.

Como pueden ver, la variable que indica si está pulsado el botón izquierdo se llama Pulsando, y toma el valor verdadero, cuando el botón pulsado es el izquierdo. Se conoce cual es el botón pulsado ya que el procedimiento que se ejecuta cuando se produce el evento, contiene una variable que se llama Button, la cual indica el botón pulsado, estos son los valores que puede tomar:

Valor

Descripción

mbRightBotón Derecho pulsado
mbLeftBotón Izquierdo pulsado
mbMiddleBotón Central pulsado

Prueba el programa; para dibujar mantén pulsado el botón izquierdo y mueve el ratón, para dejar de dibujar suelta el botón. Lo primero que observas es que no genera una línea constante, sino que cuanto más rápido mueves el ratón más separados salen los puntos. Esto se produce porque el evento OnMouseMove no se produce cada vez que se desplaza un pixel el ratón, sino cada vez que hay un desplazamiento significativo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *