Olá galera, nesta Quick Tips, irei mostra como podemos utilizar um componente não muito popular, pelo menos não tão quanto o TSQLQuery, ou até mesmo nosso velho TButton, seu nome é TPaintBox, localizado na Unit ExtCtrls e descendente de TGraphicControl, com ele podemos desenha figura geométricas livremente assim como fazemos no famosos Microsoft Paint.

 

Para construção deste exemplo vamos criar uma aplicação e nela adicionar um simples TPaintBox, localizado na palheta System

 

1 TPaintBox

unit uFrmPrincipal;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;

type

TFrmPrincipal = class(TForm)

Label1: TLabel;

Panel1: TPanel;

PaintBox1: TPaintBox;

procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure PaintBox1Paint(Sender: TObject);

private

{ Veja a criação de um Array para podermos gravar as posições que temos no nosso TPaintBox }

FPosicoes : array of TPoint;

public

{ Public declarations }

end;

var

FrmPrincipal: TFrmPrincipal;

implementation

{$R *.dfm}

 

{ Este evento é responsável por captar a posição do curso e armazenar esta no nosso Array of TPoint, para ser utilizada no enveto Paint do nosso PaintBox }

 

procedure TFrmPrincipal.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var

i : integer;

begin

   i := High(FPosicoes)+1;

   SetLength(FPosicoes,i+1);

   FPosicoes[i].X := x;

   FPosicoes[i].y := y;

   PaintBox1.Invalidate;

end;

{ Neste evento Paint, podemos observar que será pintado utilizando Canvas, e as posições armazenadas no Array FPosicoes que criamos no inicio de nosso projeto}

 

procedure TFrmPrincipal.PaintBox1Paint(Sender: TObject);

var

   K : Integer;

begin

   K := High(FPosicoes);

   if K < 0 then

      Exit;

   with PaintBox1.Canvas do

   begin

      with FPosicoes[0] do

         Ellipse(X-2, Y-2, X+2, Y+2);

      if K > 0 then

      begin

         with FPosicoes[K] do

            Ellipse(X-2, Y-2, X+2, Y+2);

         with FPosicoes[0] do

            MoveTo(X, Y);

         for K := 1 to K do

            LineTo(FPosicoes[K].x, FPosicoes[K].y);

         end;

      end;

end;

 

end.

 

Vejamos o resultado final após toda esta implementação :

 


 

 

Fico por aqui ate à próxima Quick Tips. Neste post você pode baixar o exemplo completo deste artigo.

Um abraço

Wesley Y

wyamazack@rwsolution.com.br