Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Canvas (ventana minimizada) (https://www.clubdelphi.com/foros/showthread.php?t=45818)

ganegri 14-07-2007 04:08:56

Canvas (ventana minimizada)
 
Buenas a todos.
Estoy tratando de trabajar con el canvas de un form minimizado, o no visible. Esto es posible?
Si es asi agradecería alguna referencia u orientación para investigar, pues no encuentro mucho.

Saludos, Gabriel.-

cHackAll 14-07-2007 04:17:20

De poder trabajar claro que se puede trabajar, pues cuando creas una ventana cualfuese, tambien a esta el Güindos le asigna un Canvas... ahora el problema depende de lo que quieras hacer con dicho canvas, por ejemplo si quieres imprimir (muy común), y haces tu el código de impresion es posible que los componentes de tu formulario como estan Visible = False no se refresquen.

Pero en todo caso puede que haya una alternativa un poco más adecuada por ejemplo usar un TBitmap que normalmente se conoce Buffer doble.

Talvez si nos comentas mas concretamente lo que quieres te colemos un código más "ilustrativo"

ganegri 14-07-2007 04:29:13

Canvas - Review
 
Que tal cHackAll?
Tengo un proceso que actualiza el canvas de un tpanel, dependiendo de algunos parametros. Luego de actualizado lo guardo como imagen.
Cuando la ventana esta activa, no tengo problemas, pero lo que quisieraseria que este proceso tambien se pueda ejecutar con la ventana minimizada o invisible, o detras de otra.
Lo que pasa ahora es que al enviar al fondo la ventana que contiene el tpanel, me "cambia" el canvas que tomaba del rectangulo del tpanel a lo que se ve al cambiar/minimizar la ventana.

Saludos, espero haberme explicado algo mejor.
Cualquier sugerencia es bienvenida.
Gabriel.-

cHackAll 17-07-2007 02:59:34

Cita:

Empezado por ganegri
...Tengo un proceso que actualiza el canvas de un tpanel...

Vaya, no se por qué no se me ocurrió un poco antes el motivo: el objeto TPanel tiene asociado un objeto TCanvas como privado, NO es público, así que no tenemos forma de acceder a él a pesar de que heredemos la clase en un nueva clase de panel con TCanvas... por lo que nos cuentas para poder "pintar" en él, lo que haces es obtener el manejador desde la GDI verdad??? pues bueno la API GetDC y GetWindowDC no son lo apropiado para realizar lo que estas haciendo, y muy probablemente tampoco el TPanel.

Utiliza un TPaintBox en ves del TPanel... con éste puedes usar el evento OnPaint como veas más apropiado si no quieres dejar de usar el borde que te deja un panel, en el evento citado utiliza:

Código Delphi [-]
var Rect: TRect;
begin
...
 Rect := PaintBox1.ClientRect;
 Frame3D(PaintBox1.Canvas, Rect, clBtnHighlight, clBtnShadow, 1);
...

Si tu Bevel está en bvLowered
Código Delphi [-]
Frame3D(PaintBox1.Canvas, Rect, clBtnShadow, clBtnHighlight, 1);

el resto seguramente será copia de lo que ya tienes.

Saludos!

roman 17-07-2007 18:24:25

Cita:

Empezado por cHackAll
el objeto TPanel tiene asociado un objeto TCanvas como privado, NO es público, así que no tenemos forma de acceder a él a pesar de que heredemos la clase en un nueva clase de panel con TCanvas

La propiedad Canvas está declarada en TCustomControl como protegida, no como privada, por lo que sí puede accederse a él en una clase derivada.

// Saludos

cHackAll 17-07-2007 22:45:40

Código Delphi [-]
StringReplace('...el objeto TPanel tiene asociado un objeto TCanvas como privado, NO es público, así que no tenemos forma de acceder a él a pesar de que heredemos la clase...', 'privado', 'protegido', [rfIgnoreCase]);


Gracias amigo roman... allí tienes ganegri un pequeño BUG en la teoría!

Saludos!




La franja horaria es GMT +2. Ahora son las 12:57:14.

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