Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con este problema (https://www.clubdelphi.com/foros/showthread.php?t=78229)

Suriu 30-03-2012 23:17:35

Ayuda con este problema
 
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:

Código Delphi [-]
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.

ecfisa 30-03-2012 23:23:00

Hola Suriu.

Por favor recuerda poner a tus mensajes títulos significativos, "Ayuda con este problema" no dice mucho sobre el mismo. También es importante que ubiques tus mensajes en los foros correspondientes, el mensaje no tiene que ver con el foro: Sistemas operativos > Windows.

Saludos y gracias por tu colaboración. :)

CSIE 02-04-2012 12:58:45

La verdad es que no entiendo cuál es el problema.

Mirando el código puedo ver que el pen lo pones a blanco en el create del form, pero también el el mouseup y lo cambias a negro en el timer (tras 1 segundo) y el timer lo activas cada mousedown. ¿era eso lo que buscabas?

Saludos

ElDioni 02-04-2012 13:46:41

Hola,

¿Porqué utilizas un timer?, si pones el color del pen a black en el onmousedown funciona igual que poniendolo en el timer y empieza a pintar directamente.

Saludos.


La franja horaria es GMT +2. Ahora son las 05:38:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi