Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-02-2013
CarlosAlberto CarlosAlberto is offline
Miembro
 
Registrado: ago 2010
Posts: 78
Poder: 14
CarlosAlberto Va por buen camino
Se borran la lineas dibujadas

Estimados amigos del Club
Ten el siguiente problema: al abrir una ventana cualquiera de otra aplicación se me borran las lineas dibujadas con la funciones "Moveto y lineto" del formulario que tengo abierto, ¿como puedo hacer para que esto no suceda?.
Muchas gracias y saludos.
Carlos Alberto
Responder Con Cita
  #2  
Antiguo 15-02-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Es demasiado corto tu mensaje para comprender a fondo lo que estás haciendo, usando qué y por qué. Sin embargo, quizá debas dibujar esas líneas en el evento OnPaint del formulario.

De la ayuda de Delphi:
Cita:
OnPaint event (TCustomForm)

Delphi syntax:

property OnPaint: TNotifyEvent;

Description

Use OnPaint to perform special processing when the form is redrawn. Any special painting on the form should be done in this event. OnPaint occurs before any controls on the form are painted.

To determine which portions of the form’s canvas need to be repainted, use the ClipRect property of the canvas.

If you use the form’s Canvas property outside the OnPaint event, it will be erased and drawn-over by the next OnPaint event.
Responder Con Cita
  #3  
Antiguo 16-02-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
CarlosAlberto,

Cita:
Empezado por CarlosAlberto
al abrir una ventana cualquiera de otra aplicación se me borran las lineas dibujadas con la funciones "Moveto y lineto" del formulario que tengo abierto, ¿como puedo hacer para que esto no suceda?
En el evento OnActivate del formulario en cuestión coloca el siguiente código:
Código Delphi [-]
procedure TFormX.FormActivate(Sender: TObject);
begin
   Refresh;
end;
El código anterior refresca el formulario al hacer Click sobre este. Adicionalmente te sugiero verificar en el Setup de tu Sistema si puedes ampliar la memoria asignada a la Tarjeta de Video, lo cual suele ser la causa de este tipo de problemas de refrescamiento.

Cita:
Empezado por Delphi Help:
Call Refresh method to repaint the control immediately. Refresh calls the Repaint method. Use the Refresh and Repaint methods interchangeably.
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 16-02-2013 a las 04:15:01.
Responder Con Cita
  #4  
Antiguo 16-02-2013
CarlosAlberto CarlosAlberto is offline
Miembro
 
Registrado: ago 2010
Posts: 78
Poder: 14
CarlosAlberto Va por buen camino
Se borran las lineas dibujadas

Estimados amigos del club:
Gracias por sus repuestas pero hasta ahora se siguen borrando. En el evento OnActive del Form coloque "form1.Canvas.Refresh" pero no solucionó el problema. Explico con mas detalle: hice una aplicación en donde dibujo lineas horizontales y verticales en el canvas de un formulario, luego de dibujadas abro una aplicación por ejemplo el Word y al volver sobre mi aplicación me encuentro que las lineas dibujadas no están presentes en el formulario.
Saludos.
Carlos Alberto
Responder Con Cita
  #5  
Antiguo 16-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por CarlosAlberto Ver Mensaje
En el evento OnActive
Te han comentado que lo pongas en el onactivate y en el onpaint, ¿has probado los dos?
Responder Con Cita
  #6  
Antiguo 16-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Carlos.

Usando el evento OnPaint, como te sugiere Al, tendría que funcionar correctamente.

Ejemplo:
Código Delphi [-]
...
uses ShellApi;

procedure TForm1.DrawLines;
begin
  with Canvas do
  begin
    Pen.Width:= 3;
    MoveTo(40,100);
    LineTo(300,50);
    MoveTo(60,50);
    LineTo(350,90);
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  DrawLines
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Application.Handle, 'open', 'notepad.exe', nil, nil, SW_SHOWNORMAL);
end;
En el ejemplo, podrás comprobar que desplazando el notepad sobre las líneas del formulario, no se percibe el borrado de las mismas. En cambio si desactivas el llamado a DrawLines en el evento OnPaint (// DrawLines), el notepad se comporta como si fuese una goma de borrar.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 16-02-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
CarlosAlberto,

Cita:
Empezado por CarlosAlberto
...pero hasta ahora se siguen borrando. En el evento OnActive del Form coloque "form1.Canvas.Refresh" pero no solucionó el problema...
Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   i: Integer;
begin
   Canvas.FillRect(self.Canvas.ClipRect);
   Randomize;
   for i := 1 to 100 do
   begin
      Canvas.Pen.Color := RGB(Random(256), Random(256), Random(256));
      Canvas.LineTo(Random(ClientWidth), Random(ClientHeight));
   end;
end;
El código anterior dibuja 100 lineas de forma aleatoria sobre el Canvas de Form1, pero al redimensionar Form1 o superponer otra ventana sobre este, las líneas son Borradas en Runtime. Este código reproduce el problema de Persistencia de la Imagen descrito en tu requerimiento.

Revisa este código:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
   i: Integer;
   Image1 : TImage;
begin
   Image1 := TImage.Create(Self);
   Image1.Parent := Self;
   Image1.Height := ClientHeight;
   Image1.Width := ClientWidth;
   Image1.Canvas.FillRect(self.Canvas.ClipRect);
   for i := 1 to 100 do
   begin
      Image1.Canvas.Pen.Color := RGB(Random(256), Random(256), Random(256));
      Image1.Canvas.LineTo(Random(ClientWidth), Random(ClientHeight));
   end;
end;
El código anterior dibuja 100 lineas de forma aleatoria, pero con la diferencia de que no lo hace sobre el Canvas de Form1, sino sobre el Canvas de un control TImage creado en Runtime con las dimensiones de Form1 el cual resuelve el problema de Persistencia de la Imagen descrito anteriormente al redimensionar Form1 o superponer otra ventana sobre este.

Otra opción es el uso del evento OnPaint del formulario en cuestión descrito en mensajes previos.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 16-02-2013 a las 17:47:57.
Responder Con Cita
  #8  
Antiguo 18-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por CarlosAlberto Ver Mensaje
...En el evento OnActive del Form coloque "form1.Canvas.Refresh" pero no solucionó el problema. Explico con mas detalle: hice una aplicación en donde dibujo lineas horizontales y verticales en el canvas de un formulario, luego de dibujadas abro una aplicación por ejemplo el Word y al volver sobre mi aplicación me encuentro que las lineas dibujadas no están presentes en el formulario.
El problema es que estas líneas no son persistentes.
Si deseas que lo sean debes programar tú esa persistencia. Es decir, deberás redibujar esas líneas cada vez que sea necesario. Creo que ya te han comentado los eventos a utilizar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 01-03-2013
CarlosAlberto CarlosAlberto is offline
Miembro
 
Registrado: ago 2010
Posts: 78
Poder: 14
CarlosAlberto Va por buen camino
Dibjuar lineas y que no se borren

Estimados amigos del club:
Muchas gracias por sus repuestas. Probé la del Sr. usuario Ecfisa "Drawlines" y funcionó.
Saludos.
Carlos Alberto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
se me borran los reportes en fast Report kapcomx Impresión 2 16-02-2012 20:09:18
Se borran los registros al reindexar vicvil Tablas planas 5 12-05-2011 18:22:27
Se borran los elementos de la coleccion jorllazo OOP 5 26-09-2006 21:19:45
Ventanas transparentes mal dibujadas SMTZ Gráficos 1 02-07-2004 22:13:20
Registro que se borran en paradox pdmaltese Tablas planas 3 16-11-2003 10:03:27


La franja horaria es GMT +2. Ahora son las 10:29:59.


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
Copyright 1996-2007 Club Delphi