Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Centrar ellipse en TImage

Buenas noches foro

Estoy tratando de colocar un circulo a traves de una ellipse en un TImage pero por mas que lo intento no logro que me quede completamente centrado

El TImage tiene estas dimensiones

Código Delphi [-]
  FormMain.Wheel.Top := 10;
  FormMain.Wheel.left:= 250;
  FormMain.Wheel.Height:= 650;
  FormMain.Wheel.Width:= 1000;


En cuanto al circulo, lo estoy realizando con estas dimensiones

Código Delphi [-]
Ellipse( 17, 17, 674, 674 );

Segun he leido, los 2 ultimos valores son el alto y largo del circulo pero con los 2 primeros trato de posicionarlo en el centro del TImage pero no funciona. So estos valores como una coordenada?

Cual es la manera correcta de posicionarlo?

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 26-02-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
La única vez que hice algo parecido los parámetros indicaban otra cosa: las coordenadas del rectángulo en el que está inscrita la elipse, vértice superior izquierdo, vértice inferior derecho.
Código Delphi [-]
Ellipse(0, 0, dibujo.Width, dibujo.Height);
Supongo que ese procedimiento estará sobrecargado, asegúrate de estar usando la versión que te interesa o prueba otra a ver si se ajusta más a lo que necesitas.
Responder Con Cita
  #3  
Antiguo 26-02-2020
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.331
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
En estos casos el refrán de, "Una imagen vale más que 1000 palabras", vendría muy bien.

También me queda la duda de si el procedimiento que estás utilizando es el de TCanvas.
__________________
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
  #4  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
En estos casos el refrán de, "Una imagen vale más que 1000 palabras", vendría muy bien.

También me queda la duda de si el procedimiento que estás utilizando es el de TCanvas.
Si, utilizo TCanvas

En un instante subo la imagen
Responder Con Cita
  #5  
Antiguo 26-02-2020
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.331
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
Si usas el camvas de la imagen, puedes usar algo como esto:


Código Delphi [-]
  Wheel.Canvas.Pen.Color := clRed;
  Ellipse(Wheel.Canvas.Handle, 0, 0, Wheel.Width, Wheel.Height);


Si usas el del formulario, tendrás que ajustar esas coordenadas.
__________________
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
  #6  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Aca la imagen

Responder Con Cita
  #7  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Si usas el camvas de la imagen, puedes usar algo como esto:


Código Delphi [-]
  Wheel.Canvas.Pen.Color := clRed;
  Ellipse(Wheel.Canvas.Handle, 0, 0, Wheel.Width, Wheel.Height);


Si usas el del formulario, tendrás que ajustar esas coordenadas.

Con este codigo aun no logra centrar el circulo
Responder Con Cita
  #8  
Antiguo 26-02-2020
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.331
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
A mi me sale centrado.
En negrio el original, en rojo el que te he puesto.


__________________
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 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Ok,

Agregandolo asi me dice "too many actual parameters"

Código Delphi [-]
    FormMain.Wheel.Canvas.Pen.Color := clRed;
    Ellipse(formmain.Wheel.Canvas.Handle, 0, 0, formmain.Wheel.Width, formmain.Wheel.Height);
Responder Con Cita
  #10  
Antiguo 26-02-2020
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.331
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
¿Puedes poner un poco más de código?
Es que no se dónde estás poniendo esas líneas. ¿Dentro del formulario FormMain? ¿En otra Unit? ¿Estás usando eso dentro de un With?

Te adjunto el ejemplo.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo_elipse.zip (1,1 KB, 3 visitas)
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 26-02-2020 a las 15:13:26.
Responder Con Cita
  #11  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Smile

En otra Unit

La unit donde esta definido el formulario se llama Unit1

El formulario es asi

Código Delphi [-]
var
  FormMain: TFormMain;

El image es asi

Código Delphi [-]
Wheel: TImage;

El codigo para crear la rueda esta en una unit que se llama charts

Y el codigo para tratar de crearla es

Código Delphi [-]
  with FormMain.Wheel.Canvas do
  begin
    FormMain.Wheel.Canvas.Pen.Color := clRed;
    Ellipse(formmain.Wheel.Canvas.Handle, 0, 0, formmain.Wheel.Width, formmain.Wheel.Height);
end;


Espero haberme hecho entender mejor
Responder Con Cita
  #12  
Antiguo 26-02-2020
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.331
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
Elimina el primer parámetro.
Todo el problema lo rienes por meter esas líneas dntro de un with.

Te está cogiendo el Ellipse del Canvas de TImage.


La otra opción es dejar el with y colocar esto:


Código Delphi [-]
    Winapi.Windows.Ellipse(form1.Wheel.Canvas.Handle, 0, 0, form1.Wheel.Width, form1.Wheel.Height);


Con eso te compilará bien.
__________________
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
  #13  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Gracias Neftali

No se si sirva de algo pero estoy utilizando Borland Delphi 7, asi que algunas instrucciones no me estan funcionando adecuadamente
Responder Con Cita
  #14  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Elimina el primer parámetro.
Todo el problema lo rienes por meter esas líneas dntro de un with.

Te está cogiendo el Ellipse del Canvas de TImage.


La otra opción es dejar el with y colocar esto:


Código Delphi [-]
    Winapi.Windows.Ellipse(form1.Wheel.Canvas.Handle, 0, 0, form1.Wheel.Width, form1.Wheel.Height);


Con eso te compilará bien.
Me arroja este error

: Too many actual parameters
Responder Con Cita
  #15  
Antiguo 26-02-2020
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.

Fijate si te sirve de este modo:
Código Delphi [-]
procedure CenterEllipse(Img: TImage; x1,y1,x2,y2: Integer; aColor: TColor);
var
  C,R: TPoint;
begin
  C.X := (Img.Picture.Width) div 2;
  C.Y := (Img.Picture.Height) div 2;
  R.X := (x2-x1) div 2 ;
  R.Y := (y2-y1) div 2;
  if (C.X-R.X < 0) or (C.Y-R.Y < 0) or
     (C.X+R.X > Img.Picture.Width) or (C.Y+R.Y >Img.Picture.Height) then
    raise Exception.Create('Elipse fuera de rango');

  Img.Canvas.Pen.Color := aColor;
  Img.Canvas.Ellipse(C.X - R.X,  C.Y - R.Y, C.X + R.X, C.Y + R.Y);
end;
Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  CenterEllipse(Image1, 17, 17, 528, 528, clBlack);
end;

Salida:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Hola

Me esta dando este error

Responder Con Cita
  #17  
Antiguo 26-02-2020
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.

Cambiá por ShowMessage, v.gr. :
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.LoadFromFile(GetEnvironmentVariable('HOMEPATH')+'\Pictures\Blank.bmp');
end;

procedure CenterEllipse(Img: TImage; x1,y1,x2,y2: Integer; aColor: TColor);
var
  C,R: TPoint;
begin
  C.X := (Img.Picture.Width) div 2;
  C.Y := (Img.Picture.Height) div 2;
  R.X := (x2-x1) div 2 ;
  R.Y := (y2-y1) div 2;
  if (C.X-R.X < 0) or (C.Y-R.Y < 0) or
     (C.X+R.X > Img.Picture.Width) or (C.Y+R.Y >Img.Picture.Height) then
    ShowMessage('Elipse fuera de rango')
  else
  begin
    Img.Canvas.Pen.Color := aColor;
    Img.Canvas.Ellipse(C.X - R.X,  C.Y - R.Y, C.X + R.X, C.Y + R.Y);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CenterEllipse(Image1, 17, 17, 328, 328, clRed);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Gracias,

Ahora solo muestra el mensaje pero no el TImage ni el circulo

Responder Con Cita
  #19  
Antiguo 26-02-2020
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.

Y... ¿ No estará fuera del rango ?

Si no te importa que se corte el ellipse, eliminá las líneas de comprobación de este modo:
Código Delphi [-]
procedure CenterEllipse(Img: TImage; x1,y1,x2,y2: Integer; aColor: TColor);
var
  C,R: TPoint;
begin
  C.X := (Img.Picture.Width) div 2;
  C.Y := (Img.Picture.Height) div 2;
  R.X := (x2-x1) div 2 ;
  R.Y := (y2-y1) div 2;
  Img.Canvas.Pen.Color := aColor;
  Img.Canvas.Ellipse(C.X - R.X,  C.Y - R.Y, C.X + R.X, C.Y + R.Y);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 26-02-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 214
Poder: 14
compuin Va por buen camino
Como le establezo el rango ?
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
centrar timage en una form JXJ Varios 4 05-10-2017 23:51:30
mover ScrollBox para centrar un TImage en pantalla Snaked C++ Builder 7 31-03-2017 18:05:38
Ajustar (Stretch) & Centrar Imagen En TImage Dentro de ScrollBox Beaker_ Gráficos 3 22-05-2012 17:36:57
Como centrar una imagen en un timage con un click The_Duke Gráficos 3 24-11-2008 02:07:03
como combinar 2 Timage en un tercer Timage JefeNet Gráficos 10 02-09-2004 16:51:35


La franja horaria es GMT +2. Ahora son las 13:56:14.


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