Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Desplazamiento dentro de un PaintBox (https://www.clubdelphi.com/foros/showthread.php?t=87331)

Gonza10 15-12-2014 21:05:37

Desplazamiento dentro de un PaintBox
 
Hola, tengo un problema necesito hacer un desplazamiento dentro de un paintbox con un scrollbar alguien tiene idea si esto es posible? me pidieron que mi programa tenga 120 paginas, yo lo que hice fue hacer un paintbox bastante grande y necesito moverme dentro de el para ir recorriendo las diferentes paginas.:)

Otra pregunta se puede guardar el contenido de un paintbox como por ejemplo un dibujo, yo pude guardar lo que es la parte de texto solo falta guardar los dibujos.

Casimiro Notevi 15-12-2014 21:28:55

¿120 páginas de qué? :confused:

Gonza10 16-12-2014 03:29:44

Cita:

Empezado por Casimiro Notevi (Mensaje 486675)
¿120 páginas de qué? :confused:

claro, son 120 paginas en las que se puedan cargar imágenes dibujar y escribir texto.

ecfisa 16-12-2014 04:57:39

Hola Gonza10.
Cita:

Empezado por Gonza10 (Mensaje 486683)
claro, son 120 paginas en las que se puedan cargar imágenes dibujar y escribir texto.

En realidad, Casimiro sabe perfectamente que se puede graficar en ellas, lo que deseaba saber es de que tipo eran esas páginas.

Con esa respuesta quedamos como entonces... Pero si se trata de un sólo gráfico que has dividido en páginas de tamaño arbitrario, una opción es hacer que el Parent del TPainBox sea un TScrollBox para así usar los TScroolBar de este componente (con el detalle que tendrás que repintar el gráfico en el evento OnPaint del TPainBox).

Un ejemplo de lo que te comento:
Código Delphi [-]
...
implementation

var
  Picture: TPicture;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Picture:= TPicture.Create;
  Picture.LoadFromFile('Las_120_Páginas.JPG');
  PaintBox1.Width := 2000;   // Ancho de la página en píxels (Ej.)
  PaintBox1.Height:= 16000;  // Largo de las páginas en píxeles (Ej.)
  PaintBox1.Canvas.Draw(0,0, Picture.Graphic);
  PaintBox1.Parent:= ScrollBox1;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.Draw(0, 0, Picture.Graphic);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Picture.Free;
end;
Si no es lo que buscas, quedamos a la espera de tu respuesta a la consulta del mensaje #2

Saludos :)

Neftali [Germán.Estévez] 16-12-2014 12:01:39

¿Cómo te mueves por esas páginas?
Tal vez podría servir (dependiendo de lo que tengas que hacer) un array de componentes, de forma que cada página sea un componente TPaintBox.

Esto tendría varias ventajas, aunque, como he dicho, dependiendo de lo que tengas que hacer, este planteamiento tal vez no sea "adecuado".

Ñuño Martínez 16-12-2014 15:16:46

Meter 120 páginas de lo que sea en un PaintBox es un gasto de recursos innecesario, que ralentizará tanto la carga como el visionado. Lo mismo para la solución de Neftali de crear un TPaintBox por página, terminando con 120 componentes en memoria.

Lo lógico es ir manejando las páginas una a una, cargándolas y mostrándolas cuando sea necesario y "borrándolas" cuando ya no se necesiten. Además, así será mucho más sencillo y rápido "desplazarte" hasta una página concreta, sin tener que andar calculando anchos y altos para moverse hasta ella.

Gonza10 16-12-2014 15:21:03

1 Archivos Adjunto(s)
En primera instancia mi idea era esa de hacer un paintbox grande que me abarquen 120 paginas de tamaño 64x16, tal vez habría otra manera de hacerlo con un array pero el problema es que cuando cree una nueva me va a pisar la anterior y me borrara lo que estaba haciendo.

Les dejo lo que hice para que nos entendamos mejor. saludos

Gonza10 16-12-2014 20:49:22

Cita:

Empezado por Gonza10 (Mensaje 486712)
En primera instancia mi idea era esa de hacer un paintbox grande que me abarquen 120 paginas de tamaño 64x16, tal vez habría otra manera de hacerlo con un array pero el problema es que cuando cree una nueva me va a pisar la anterior y me borrara lo que estaba haciendo.

Les dejo lo que hice para que nos entendamos mejor. saludos

Lo subo de nuevo si alguien tiene problemas notifique!

https://mega.co.nz/#!ZV5XWKbL!1_tOXB...TseK8-GocmhttM


La franja horaria es GMT +2. Ahora son las 14:15:26.

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