PDA

Ver la Versión Completa : Una ayudita con TShape


JerS
13-07-2005, 21:07:30
Hola Amigos de la comunidad de Delphi! hoy los molestos para preguntarles sobre los Tshape!, bueno para ser mas espesifico, necesito que me ayuden con esto.. estoy creando graficos en tiempo de ejecucion por medio de Shapes pero necesito saber como hago para que cuando seleccione un shape ese le salga un recuadro para que me indique que esta seleccionado y se diferencie de los demas! si se puede un recuadro asi como el que aparec en tiempo de diseño! para agrandarlo y moverlo

dec
13-07-2005, 22:22:31
Hola,

Tal vez algo como esto te de alguna pista:


procedure TForm1.Shape1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i: integer;
begin
if Button = mbLeft then
begin
for i := 0 to ComponentCount-1 do
if Components[i] is TShape then
TShape(Components[i]).Pen.Width := 1;
(Sender as TShape).Pen.Width := 2;
end;
end;

Se trata de que todos los "TShapes" compartan el evento MouseDown. Arriba se puede apreciar cómo estamos pendientes de que el usuario halla hecho clic con el botón izquierdo del ratón en un "TShape".

"Inizializamos" entonces todos los componentes "TShape" dándolos un ancho de lapiz igual a uno. A continuación, al "TShape" que disparó el evento que tratamos le damos un ancho de lapiz un tanto mayor.

De ese modo se puede observar a simple vista el "TShape seleccionado". Si juegas con la propiedad "Style" del lapiz ("Pen") de los "TShape" quizás puedas lograr distintos efectos, y no solamente el que se ha referido aquí.

Actualización: En el archivo que adjunto puedes ver lo dicho "funcionando" .

JerS
14-07-2005, 03:33:51
Muchas Gracias amigo Dec, pero lo que pasa es que yo en tiempo de ejecucion selecciono un shape le cambio el Grozor a la linea del shape (Sender as TShape).canvas.pen.whith:=X
y tambien le cambio el color y el tamaño, entonces necesito algo como que me identifique que en ese momento estoy seleccionando ese Shape! algo como un recuadro que bordee el Shape. como el cuadro de mover un objeto en tiempo de diseño .. Pero Muchas gracias por tu ayuda amigo (y) estamos en contacto!!!

Crandel
14-07-2005, 06:16:00
Puedes detectar el evento OnMOuseDown, para dibujar un rectangulo gris sobre el objeto seleccionado.

Luego lo vas desplazando de acuerdo al movimiento del mouse

En el evento OnMouseUp, desplazas el objeto igual cantidad que el movimiento relativo del mouse

Neftali [Germán.Estévez]
14-07-2005, 10:31:34
A ver si ésta modificación te es más útil...
Es un cambio respecto al ejemplo de dec, básicamente es lo mismo, pero en lugar de modificar el borde se pintan marcas...

Si asignas el evento al resto de controles, como el Form (en el ejemplo está así te servirá para "deseleccionar")

Caro
14-07-2005, 16:16:28
Hola

Aqui te mando un ejemplo, sobre como crear componentes en tiempo de ejecución y al ocurrir un evento saber cual de todos fue seleccionado. En el ejemplo utilizo labels pero con esa idea podrias aplicarlo a los shapes o cualquier componente que crees en tiempo de ejecución y mejorar lo que ya te pasaron.

Espero te sirva

JerS
14-07-2005, 22:39:43
Muchas Gracias Neftali la seleccion por marcas era exactamente lo que estaba buscando :D MUCHISIMAS GRACIAS

JerS
14-07-2005, 22:41:06
Caro Muchas gracias por ayudarme!! pero la seleccion por color no me sirve porque yo tambien le cambio el color a mis objetos en tiempo de ejecución entonces tenderia a confundir!!! Pero igualmente Muchisimas gracias por colaborar (k)

hackcgm
28-04-2010, 04:07:11
Hola Amigos de la comunidad de Delphi! hoy los molestos para preguntarles sobre los Tshape!, bueno para ser mas espesifico, necesito que me ayuden con esto.. estoy creando graficos en tiempo de ejecucion por medio de Shapes pero necesito saber como hago para que cuando seleccione un shape ese le salga un recuadro para que me indique que esta seleccionado y se diferencie de los demas! si se puede un recuadro asi como el que aparec en tiempo de diseño! para agrandarlo y moverlo


yo tengo un problema parecido, no se como implemetar esto:

circulos.OnMouseDown:= circulosMouseDown( 'no se q parametros van a qui' ) ya le intente de varias formas y no me sale,
ojala me puedan orientar con esto