Vous êtes sur la page 1sur 2

Captcha em Delphi

Esta uma dica interessante principalmente para quem trabalha com webbroker. Para fazer este exemplo, crie uma nova
aplicao e adicione ao formulrio um componente TImage, um TEdit e um TButton. Configure a propriedade CharCase do TEdit
para ecUpperCase.

No cdigo fonte, vamos declarar a funo que far a gerao do cdigo e da imagem. V seo public e faa:

public
{ Public declarations }
function GeraImagem(Img: TImage): string;

Em seguida, pressionando CTRL + SHIFT + C, fazemos a implementao da funo:

function TForm1.GeraImagem(Img: TImage): string;


const
f: array [0..4] of string = ('Courier New', 'Impact', 'Times New Roman',
'Verdana', 'Arial');
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
c: array [0..14] of TColor = (clAqua, clBlack, clBlue, clFuchsia, clGray,
clGreen, clLime, clMaroon, clNavy, clOlive,
clPurple, clRed, clSilver, clTeal, clYellow);
var
i, x, y: integer;
r: string;

begin
randomize;
Img.Width := 160;
Img.Height := 60;
for i := 0 to 3 do
r := r + s[Random(length(s)-1)+1];

with Img.Picture.Bitmap do
begin
width := Img.Width;
Height := Img.Height;
Canvas.Brush.Color := $00EFEFEF;
Canvas.FillRect(Img.ClientRect);

for i := 0 to 3 do
begin
Canvas.Font.Size := random(20) + 20;
Canvas.Font.Name := f[High(f)];
Canvas.Font.Color := c[random(High(c))];
Canvas.TextOut(i*40,0, r[i+1]);
end;

for i := 0 to 2 do
begin
Canvas.Pen.Color := c[random(High(c))];
Canvas.Pen.Width := 2;
canvas.MoveTo(random(Width), 0);
Canvas.LineTo(random(Width), Height);
Canvas.Pen.Width := 1;
x := random(Width-10);
y := random(Height-10);
Canvas.Rectangle(x, y, x+10, y+10);
end;
end;

Result := r;
end;

Para testar, primeiro devemos adicionar uma varivel global, conforme abaixo:

var
Form1: TForm1;
validapost: string;

Agora, no evento onClick do boto, fazemos a validao:

procedure TForm1.Button1Click(Sender: TObject);


begin
if (Edit1.Text = validapost) then
Application.MessageBox('Parabns, muito bem!', 'Sucesso',
MB_OK + MB_ICONINFORMATION)
else
Application.MessageBox('Ops! Voc errou.', 'Falhou',
MB_OK + MB_ICONWARNING);
FormShow(self);
end;

E por ltimo, o evento onShow do form, que chamar a funo para gerar uma nova imagem:

procedure TForm1.FormShow(Sender: TObject);


begin
Edit1.Clear;
Edit1.SetFocus;
validapost := GeraImagem(Image1);
end;

Fonte: http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=1287