Ver Mensaje Individual
  #4  
Antiguo 12-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
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í:
Código Delphi [-]
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.
Código Delphi [-]
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:
Código Delphi [-]
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
Responder Con Cita