Fonte: www.activedelphi.com.br
Esta é uma dica interessante principalmente para quem trabalha com webbroker. Se você não sabe do que estamos falando, leia este artigo sobre captcha, no wikipedia.
Para fazer este exemplo, crie uma nova aplicação e adicione ao formulário um componente TImage, um TEdit e um TButton. Configure a propriedade CharCase do TEdit para ecUpperCase.
No código fonte, vamos declarar a função que fará a geração do código e da imagem. Vá à seção public e faça:
public
{ Public declarations }
function GeraImagem(Img: TImage): string;
Em seguida, pressionando CTRL + SHIFT + C, fazemos a implementação da função:
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 variável global, conforme abaixo:
var
Form1: TForm1;
validapost: string;
Agora, no evento onClick do botão, fazemos a validação:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text = validapost) then
Application.MessageBox('Parabéns, 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 função para gerar uma nova imagem:
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Clear;
Edit1.SetFocus;
validapost := GeraImagem(Image1);
end;
Agora é só rodar e brincar com seu captcha! Espero que tenham gostado!
Clique aqui para baixar o código fonte de exemplo. (206 KB)
Para fazer este exemplo, crie uma nova aplicação e adicione ao formulário um componente TImage, um TEdit e um TButton. Configure a propriedade CharCase do TEdit para ecUpperCase.
No código fonte, vamos declarar a função que fará a geração do código e da imagem. Vá à seção public e faça:
public
{ Public declarations }
function GeraImagem(Img: TImage): string;
Em seguida, pressionando CTRL + SHIFT + C, fazemos a implementação da função:
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 variável global, conforme abaixo:
var
Form1: TForm1;
validapost: string;
Agora, no evento onClick do botão, fazemos a validação:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text = validapost) then
Application.MessageBox('Parabéns, 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 função para gerar uma nova imagem:
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Clear;
Edit1.SetFocus;
validapost := GeraImagem(Image1);
end;
Agora é só rodar e brincar com seu captcha! Espero que tenham gostado!
Clique aqui para baixar o código fonte de exemplo. (206 KB)
Nenhum comentário:
Postar um comentário