Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Seleccionar zona de grafico para zoom (https://www.clubdelphi.com/foros/showthread.php?t=32633)

JMGR 11-06-2006 23:32:45

Seleccionar zona de grafico para zoom
 
Buenas...

Primero que nada decir que me he dejado las pestañas usando la búsqueda en los foros para ver si había algo que me sirviera pero no he encontrado nada, si se me pasó algo pido perdon por adelantado...:D

Mi problema es el siguiente, estoy haciendo una aplicación para hacer representaciones gráficas de funciones, utilizando para ello el canvas de un Paintbox. Ya he conseguido dibujar los ejes, hacer la gráfica y desplazarme por los ejes mediante el ratón, así como leer coordenadas relativas a los ejes. ..Ahora lo que me falta es poder ampliar una sección de la gráfica, por ejemplo, en las cercanías de un máximo, para poder leer con mayor precisión el valor del mismo. El tema de hacer el zoom lo tengo solucionado, el problema es hacer la selección de la zona mediante el típico rectángulo tipo Paint.

Consigo dibujar el rectángulo mediante los eventos OnMouseDown, donde guardo la posición del cursor al hacer click, y OnMouseMove, donde creo el rectángulo desde la posicion anterior hasta la actual. Algo asi:

Código Delphi [-]
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if modo=mZoom then
 begin
  Rect.Left:=x;
  Rect.Top:=y;
  Rect.BottomRight:=Rect.TopLeft;
 end;
distX:=X-Xcen;
distY:=Y-Ycen;
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if ssleft in shift then
 begin
  if modo=mmover then
   begin
   MueveEjes(x-distx,y-disty);
   end;
  if modo=mZoom then
   begin
     PaintBox1.Canvas.Fillrect(Canvas.ClipRect);
     pintaejes(round(abs(Xmin)*unidadX),round(Ymax*unidadY));
     Dibujagrafica;
     Rect.Right:=x;
     Rect.Bottom:=y;
     paintbox1.Canvas.Pen.Style:=psDash;
     paintbox1.Canvas.Brush.Style:=bsclear;
     paintbox1.Canvas.Rectangle(REct);
   end;
  end;
lblX.Caption:=FormatFloat('0.000',(x-Xcen)/unidadX);
lblY.caption:=formatfloat('0.000',((Ycen-y)/unidady));

end;

Pero con este codigo el resultado son infinitos rectángulos dentro del primero según se mueve el ratón...:(

¿Alguien ha hecho algo parecido?
¿Alguna sugerencia?

Además, después de estar rebuscando por los foros me entran dudas...igual esta no es la mejor manera de hacer una aplicación de este tipo...hilo

El objetivo final es hacer un simulador digital de técnicas electroquímicas, que básicamente consiste en representar varias funciones tipo I(t) vs E(t), E(t) vs t, etc...donde los valores de I y E se calculan mediante unas ecuaciones que contienen unos parametros que son característicos del sistema que se quiere simular, es decir, no se trata de representar cualquier función desconocida, ni de superponer funciones o seleccionar y mover figuras o algo así, "simplemente" representar una funcion y poder leer datos a partir de ella...Agradezco cualquier sugerencia.

Muchas gracias y un saludo.
JM

seoane 12-06-2006 00:20:53

En este este hilo puse un ejemplo de como seleccionar un rectangulo de una imagen. Echale un vistazo.

JMGR 12-06-2006 00:35:28

!!!!Joder que rapidez....!!!!!

Ok! muchas gracias por la respuesta, despues de todo se me paso algún hilillo por lo que parece....:rolleyes:

Voy a echarle una visual a ver si me aclaro de una vez...
Gracias y un saludo.
JM


La franja horaria es GMT +2. Ahora son las 07:03:06.

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