PDA

Ver la Versión Completa : Cambiar propiedades cuando quito el mouse


dany2006
12-11-2006, 22:20:41
hola, necesito que se cambien algunas propiedades de los Shapes cuando quito el puntero del mouse, por ejemplo Pen->Whidth. Como me pueden ayudar a resolverlo. gracias.

seoane
12-11-2006, 22:35:35
:confused: ¿Probaste con los eventos OnMouseEnter y OnMouseLeave de TShape?

dany2006
12-11-2006, 22:54:04
En la lista de eventos de TShape no me figuran estos que mencionas. Estoy usando Borland Builder C++ 6

seoane
12-11-2006, 23:21:16
Supongo que la versión que tu utilizas no dispone de ese evento. Pues no queda otro remedio que implementarlo "a mano". Para eso declaramos una variable en la que almacenaremos el ultimo Shape sobre el que se movió el ratón.

Algo así:

TForm1 = class(TForm)
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
OldShape: TShape; // <- La variable de la que hablaba
public
{ Public declarations }
end;


Ahora en el evento OnCreate del formulario nos aseguramos de que la variable toma el valor nil.

procedure TForm1.FormCreate(Sender: TObject);
begin
OldShape:= nil;
end;


Por ultimo solo tenemos que dirigir todos los eventos OnMouseMove de los TShape y el de los objetos que se encuentren por debajo de estos (Normalmente se tratara del formulario, pero puede que sea un panel o algo similar) al mismo procedimiento. Seria algo como esto:

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if OldShape <> Sender then
begin
if OldShape <> nil then
begin
OldShape.Pen.Width:= 1;
end;
if (Sender is TShape) then
begin
OldShape:= TShape(Sender);
OldShape.Pen.Width:= 5;
end else
OldShape:= nil;
end;
end;


En el procedure anterior lo que hacemos es cambiar el pen del shape cada vez que el ratón entra o sale. Espero que te sirva, ya se que esta echo en delphi, pero no sera muy difícil traducirlo ;)

dany2006
14-11-2006, 16:21:39
Muchas Gracias.