PDA

Ver la Versión Completa : Sin que se borre


MAXIUM
03-11-2007, 19:41:06
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
....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
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
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....


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:


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.
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.
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: