Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Sin que se borre (https://www.clubdelphi.com/foros/showthread.php?t=49927)

MAXIUM 03-11-2007 19:41:06

Sin que se borre
 
Hola, mi problema es el siguiente:

cada vez que uso el canvas para dibujar algo ya sea sobre el TForm o un TImage el dibujo se borra cuando superpongo otra ventana, minimizo, etc.

La solución sería colocar la rutina del dibujo en el evento OnPaint, pero lo que yo deseo es que se dibuje al momento de pulsar un TButton o similar.

¿Como lo hago? :confused:

dec 03-11-2007 20:08:35

Hola,

Una posible solución tal vez pase por usar un determinado procedimiento, que sea llamado desde el "botón" y desde el evento "OnPaint" correspondiente. ¿No? :)

MAXIUM 04-11-2007 16:11:57

....no....

Caral 04-11-2007 16:22:09

Hola
Cita:

Empezado por MAXIUM (Mensaje 243319)
....no....

Con estas Respuestas da gusto ayudar, no te parece Dec?.:D;)
Saludos

MAXIUM 04-11-2007 19:43:01

Lo que pasa es que, el que esta preguntando soy yo y en segundo lugar da la impresión que esta tratando de adivinar la solución.

Perdonen si he ofendido a alguien :p

Delphius 04-11-2007 20:02:22

Cita:

Empezado por MAXIUM (Mensaje 243343)
Lo que pasa es que, el que esta preguntando soy yo y en segundo lugar da la impresión que esta tratando de adivinar la solución.

Perdonen si he ofendido a alguien :p

A mi no me afende "demasiado", pero tampoco me agrada que sueltes la frase diciendo que tu eres el que pregunta. Aqui estamos para ayudarnos entre todos y si es necesario preguntar al que que inició el hilo (o reinició) hay que hacerlo.

Si a tu parecer Dec o Caral están adivinando la solución se debe a que tu no explicas en profundidad y correctamente cual es tu problema, duda o inquietud.

No te enojes conmigo, veo que llevas tiempo aqui. Y creo que ya deberías saber que hay maneras de decir las cosas. Por más sutiles que hayan sido tus palabras no creo que a Caral, a Dec y/o a cualquiera que haya sido la persona que te ofrezca ayuda le haya gustado leer tu comentario.

A ver... puede que esté adivinando...
¿Que tan compleja debe ser la imagen a dibujar?
¿Siempre es la misma?
¿Se forma por algún procedimiento en el que intervenga el azar?

Una posible solución es que si el dibujo a obtener es siempre el mismo lo más economico es emplear un TImage con la imagen ya guardada y hacer visible el TImage cuando sea necesario.

Saludos,

seoane 04-11-2007 20:04:50

Cita:

Empezado por MAXIUM (Mensaje 243343)
Lo que pasa es que, el que esta preguntando soy yo y en segundo lugar da la impresión que esta tratando de adivinar la solución.

Caramba :eek: Entonces ¿no se te pueden hacer preguntas?. Pues nada, yo pensaba preguntarse si habías comprobado que eso pasaba con el TImage ( ya que lo que se dibuja sobre el canvas de un TImage te aseguro que no se borra) pero mejor no pregunto nada, no te vaya a parecer mal :(

dec 04-11-2007 20:18:33

Hola,

Bueno. A mí no me importa preguntar ni que me pregunten, así que, aprovechando la coyuntura, Domingo, ¿cómo es que lo que se dibuja en el "TImage" no se borra? ¿Incluso sin guardar la imagen? ¿Por qué razón o razones? Si alguien puede dar aunque sea una pista acerca de esto quedaré agradecido, como en tantas otras ocasiones. :)

ArdiIIa 04-11-2007 20:27:15

Pues yo creo que simplificando y viendo la herencia, todo queda reducido a esto....

Código Delphi [-]
procedure TGraphicControl.WMPaint(var Message: TWMPaint);
begin
  if Message.DC <> 0 then
  begin
    Canvas.Lock;
    try
      Canvas.Handle := Message.DC;
      try
        Paint;
      finally
        Canvas.Handle := 0;
      end;
    finally
      Canvas.Unlock;
    end;
  end;
end;

seoane 04-11-2007 20:30:36

Pues dec, el proceso es el siguiente. Cuando tu dibujas sobre el canvas de un TImage pueden pasar tres cosas, dependiendo de lo que contenga la propiedad Picture del TImage:
  1. Si la propiedad Picture = nil, es decir no hay ninguna imagen cargada, internamente se crea un TBitmap del mismo tamaño que el TImage y se le asigna a la propiedad Picture. Así las operaciones de dibujo se realizan sobre ese bitmap y quedan guardadas en el, encargándose el TImage de mostrarlo correctamente en pantalla.
  2. Si la propiedad Picture es un TBitmap pues se dibuja sobre el, y al igual que en el caso anterior, es el TImage el encargado de mostrarlo en pantalla.
  3. Por ultimo, si la propiedad Picture no es un TBitmap, por ejemplo una imagen Jpeg, cualquier intento de dibujar sobre el canvas del TImage provocara un error.

Si luego quieres guardar la imagen dibujada no te queda mas remedio que usar el SaveToFile como siempre :)

dec 04-11-2007 20:36:20

Hola,

Pues muchas gracias por vuestras explicaciones. O sea, que se dibuja sobre un "TBitmap" y este "persiste" en todo caso, no como cuando dibujas en otro "canvas" cualquiera. Bueno es saberlo, por si acaso fuera menester algún día hacer algo al respecto. Gracias otra vez. :)

Caral 04-11-2007 20:40:45

Hola
Como se aprende en este club, Preguntando y repreguntando.
Tambien aprendi alfo nuevo hoy, Gracias.
Saludos

MAXIUM 05-11-2007 01:18:33

Ya, si perdonen, es que así como les molesto mi respuesta de ese modo me sentí con Dec.

Fue una respuesta de esas que dan en soprote de Microsoft :eek:

Pero bueno, perdonen, me descargue con el pobre Dec. Gracias por las respuestas :p

dec 05-11-2007 01:24:47

Hola,

Pues el caso es que yo no te estaba preguntando nada... y si eso fue lo que entendiste sin duda es porque me expliqué mal. Mi "¿No?" al final es más bien una "coletilla" que suele usarse a veces cuando se termina una frase, como, por ejemplo, "Hoy iremos al cine, ¿no?", así que yo estaba proponiendo una posible solución (según yo), y mi "¿No?" "preguntaba" (y no sólo a ti) qué tal parecía dicha solución.

No iba con segundas, ni con terceras, ni tenía otra intención que la dicha. :)

MAXIUM 13-11-2007 18:40:01

Em compilador me dice uq e TImage no posee la propiedad WMPaint :confused:


La franja horaria es GMT +2. Ahora son las 10:00:42.

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