Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2006
JMGR JMGR is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santa Cruz de Tenerife
Posts: 46
Poder: 0
JMGR Va por buen camino
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...

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
Responder Con Cita
  #2  
Antiguo 12-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
En este este hilo puse un ejemplo de como seleccionar un rectangulo de una imagen. Echale un vistazo.
Responder Con Cita
  #3  
Antiguo 12-06-2006
JMGR JMGR is offline
Miembro
 
Registrado: jun 2003
Ubicación: Santa Cruz de Tenerife
Posts: 46
Poder: 0
JMGR Va por buen camino
!!!!Joder que rapidez....!!!!!

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

Voy a echarle una visual a ver si me aclaro de una vez...
Gracias y un saludo.
JM
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
Consola cualquier zona yusnerqui Varios 5 08-09-2006 18:01:45
Ayuda para hacer zoom cbello Gráficos 2 24-05-2006 21:04:47
Zona horaria Genner Varios 1 17-04-2006 14:22:20
Servidor FTP gráfico para Linux [Gunman] Internet 18 08-12-2005 23:39:44
cmo hacer un formulario para seleccionar datos ercrizeporta Varios 4 14-07-2005 14:11:47


La franja horaria es GMT +2. Ahora son las 00:05:33.


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