Suriu
30-03-2012, 23:17:35
Hola, estoy creando una aplicacion que realiza algo paresido al pincel en el paint, pero utilizando la propiedad canvas de in TImagen. E estado mirando por hay y ya he hecho algo parecido.
El TImagen es de color predeterminado ( Blanco ) y sobre este pinto una linea de estilo libre mediante canvas.Pen, la cual pongo en blanco mediante el evento OnCreate del Form; y en megro mediante un Timer la propiedad Interval en 1000 , para que al acabar el tiempo lanse un evento mediante el OnTimer que cambie el canvas.Pen a negro.
Hasta aqui todo bien el problema es que al hacer clik en el TImagen me enpiesa a pintar en blanco y trascurrodo el tiempo es que empiesa a pintar en negro. Este es el problema " como diminuir el tiempo para cambiar de un color a otro de forma que paresca instantaneo ". La otra pregunta seria " Como hacerlo sin el Timer".
Codigo:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, Buttons,ExtCtrls, ShellAPI, TypInfo;
type
TForm2 = class(TForm)
Image11: TImage;
Timer1: TTimer;
procedure Image11MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image11MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image11MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Image11DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
img: TImage;
end;
var
Form2: TForm2;
implementation
uses Unit3, Unit1;
{$R *.dfm}
var
Rect: TRect = (Left: -1);
z,c: integer;
hola : boolean;
procedure TForm2.Image11MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
Rect.TopLeft := Point(X,Y);
Rect.BottomRight := Point(X, Y);
hola := true;
Timer1.Enabled := true;
end;
procedure TForm2.Image11MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Rect.Left > -1 then
Rect.TopLeft := Point(X,Y);
z := x;
c := y;
if hola then
Image11.Canvas.LineTo(x,y);
end;
procedure TForm2.Image11MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
Rect.Left := -1;
hola := false;
Image11.Canvas.Pen.Color := clWhite;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Image11.Canvas.Pen.Color := clWhite;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Image11.Canvas.Pen.Color := clBlack;
Timer1.Enabled := false;
end;
procedure TForm2.Image11DblClick(Sender: TObject);
begin
hola := False;
end;
end.
El TImagen es de color predeterminado ( Blanco ) y sobre este pinto una linea de estilo libre mediante canvas.Pen, la cual pongo en blanco mediante el evento OnCreate del Form; y en megro mediante un Timer la propiedad Interval en 1000 , para que al acabar el tiempo lanse un evento mediante el OnTimer que cambie el canvas.Pen a negro.
Hasta aqui todo bien el problema es que al hacer clik en el TImagen me enpiesa a pintar en blanco y trascurrodo el tiempo es que empiesa a pintar en negro. Este es el problema " como diminuir el tiempo para cambiar de un color a otro de forma que paresca instantaneo ". La otra pregunta seria " Como hacerlo sin el Timer".
Codigo:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, Buttons,ExtCtrls, ShellAPI, TypInfo;
type
TForm2 = class(TForm)
Image11: TImage;
Timer1: TTimer;
procedure Image11MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image11MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image11MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Image11DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
img: TImage;
end;
var
Form2: TForm2;
implementation
uses Unit3, Unit1;
{$R *.dfm}
var
Rect: TRect = (Left: -1);
z,c: integer;
hola : boolean;
procedure TForm2.Image11MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
Rect.TopLeft := Point(X,Y);
Rect.BottomRight := Point(X, Y);
hola := true;
Timer1.Enabled := true;
end;
procedure TForm2.Image11MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Rect.Left > -1 then
Rect.TopLeft := Point(X,Y);
z := x;
c := y;
if hola then
Image11.Canvas.LineTo(x,y);
end;
procedure TForm2.Image11MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
Rect.Left := -1;
hola := false;
Image11.Canvas.Pen.Color := clWhite;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Image11.Canvas.Pen.Color := clWhite;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Image11.Canvas.Pen.Color := clBlack;
Timer1.Enabled := false;
end;
procedure TForm2.Image11DblClick(Sender: TObject);
begin
hola := False;
end;
end.