¿Alguna forma de asignar rangos de coordenadas?
#1
Posted 22 October 2009 - 06:08 PM
Saludos.
#2
Posted 22 October 2009 - 07:21 PM
function EstaEnRango(Num, R1, R2: Integer): boolean; var Mayor, Menor: Integer; begin Result := False; if R1 > R2 then begin Mayor := R1; Menor := R2; end else begin Mayor := R2; Menor := R1; end; Result := (Num >= Menor) and (Num <= Mayor) end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (EstaEnRango(x,10,100)) and (EstaEnRango(y,20,100)) then showmessage('si') end;
#3
Posted 22 October 2009 - 07:41 PM
[Hint] Unit1.pas(38): Value assigned to 'TForm1.EstaEnRango' never used
procedure TForm1.JvImage1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Pos: TPoint; begin if (EstaEnRango(x,674,285)) and (EstaEnRango(y,682,285)) then JvImage1.Cursor := crHandPoint; end;
#4
Posted 22 October 2009 - 08:03 PM
function EstaEnRango(Num, R1, R2: Integer): boolean; var Mayor, Menor: Integer; begin Result := False; if R1 > R2 then begin Mayor := R1; Menor := R2; end else begin Mayor := R2; Menor := R1; end; Result := (Num >= Menor) and (Num <= Mayor) end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (EstaEnRango(x,10,20))//coloca aqui el rango de x and (EstaEnRango(y,10,20)) then//coloca aqui el rango de y Image1.Cursor:= crHandPoint else Image1.Cursor:= crDefault end;
#5
Posted 22 October 2009 - 08:08 PM
procedure TForm1.JvImage1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (EstaEnRango(x,674,682)) //aqui coordenadas de x, observa que las intercambié and (EstaEnRango(y,285,285))// aqui las de y then JvImage1.Cursor := crHandPoint else JvImage1.Cursor := crDefault; end;
#6
Posted 22 October 2009 - 08:09 PM
600,300 | 700,300
600,600 | 700,600
Me imagino que eso forma un cuadro, ahora, lo que quiero es que si el puntero del mouse se mueve dentro de ese cuadro, o sea, entre esas 4 coordenadas cambie el puntero o cualquier acción que yo quiera. Creo que ahora me expliqué mejor :$
Saludos.
#7
Posted 22 October 2009 - 08:12 PM
En tu ejemplo seria mas o menos asi
delphi
procedure TForm1.JvImage1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (EstaEnRango(x,674,682)) //aqui coordenadas de x, observa que las intercambié and (EstaEnRango(y,285,285))// aqui las de y then JvImage1.Cursor := crHandPoint else JvImage1.Cursor := crDefault; end;
Aún no me furula, siempre me muestra:
[Hint] Unit1.pas(38): Value assigned to 'TForm1.EstaEnRango' never used
#8
Posted 22 October 2009 - 08:15 PM
mientras tanto
#9
Posted 22 October 2009 - 08:42 PM
function EstaEnRango(Num, R1, R2: Integer): boolean; var Mayor, Menor: Integer; begin Result := False; if R1 > R2 then begin Mayor := R1; Menor := R2; end else begin Mayor := R2; Menor := R1; end; Result := (Num >= Menor) and (Num <= Mayor) end; function EstaEnRectangulo(P: TPoint; ARec: TRect): boolean; begin Result := False; Result := (EstaEnRango(P.Y, ARec.Top, ARec.Bottom)) and (EstaEnRango(P.X, ARec.Left, ARec.Right)) end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var R: TRect; P: TPoint; begin P.X := X; P.Y := Y; R.Left := 0; R.Top := 0; R.Right := 10; R.Bottom := 200; if EstaEnRectangulo(P, R) then Image1.Cursor := crHandPoint else Image1.Cursor := crDefault end;
#10
Posted 22 October 2009 - 09:04 PM
uses Types;//.... procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var R: TRect; P: TPoint; begin P.X := X; P.Y := Y; R.TopLeft.X :=20; R.TopLeft.Y := 30; R.BottomRight.X := 40; R.BottomRight.Y := 50; if PtInRect(R, P) then Image1.Cursor := crHandPoint else Image1.Cursor := crDefault end;
#11
Posted 22 October 2009 - 10:20 PM
Salud OS
#12
Posted 23 October 2009 - 07:59 AM
Saludos.
#13
Posted 23 October 2009 - 08:24 AM
Gracias Wilson, así funciona mejor, ¿me podrías explicar el TopRight, TopLeft, BottomRight y BottomLeft, porque hago el cáculo y no me entra :$.
Saludos.
TopRight y BottomLeft no existen.
La manera más fácil de definir un rectángulo es dando las coordenadas de dos de sus vértices (opuestos) que se encuentren en diagonal.
Las otras dos esquinas quedan implícitamente definidas, no se podrían definir de manera arbitraria porque entonces se corre el riesgo de que no sea un rectángulo si nó cualquier otra cosa.
TopLeft.x con TopLeft.y = Coordenada de la esquina superior izquierda de tu rectángulo.
BottomRight.x con BottomRight.y = Coordenada de la esquina inferior derecha de tu rectángulo.
#14
Posted 25 October 2009 - 12:31 PM
procedure MediaButtons(x,y: Integer; Imagen: TJvImage); var Pv, Pn: TPoint; Prev,Next,Pause,Stop,Play: TRect; begin //botón previo Pv.X := x; Pv.Y := y; Prev.TopLeft.X := 446; Prev.TopLeft.Y := 100; Prev.BottomRight.X := 462; Prev.BottomRight.Y := 122; //Botón siguiente Pn.X := x; Pn.Y := y; Next.TopLeft.X := 547; Next.TopLeft.Y := 100; Next.BottomRight.X := 560; Next.BottomRight.Y := 122; if PtInRect(Prev, Pv) then begin Imagen.Cursor := crHandPoint; Imagen.Hint := 'anterior'; Imagen.ShowHint := True; end else begin Imagen.Cursor := crDefault; Imagen.ShowHint := False; end; if PtInRect(Next, Pn) then begin Imagen.Cursor := crHandPoint; Imagen.Hint := 'Siguiente'; Imagen.ShowHint := True; end else begin Imagen.Cursor := crDefault; Imagen.ShowHint := False; end; end;
Quise hacerlo en un sólo procedimiento (Mi mente no está generando), pues bien, el problema es el siguiente, en vez de funcionar ambos rectangulos a la vez en distintos puntos sólo funciona el último, ¿cómo podría hacer que funcione varios a la vez?.
Saludos.
#15
Posted 25 October 2009 - 02:02 PM
if PtInRect(Prev, Pv) then begin Imagen.Cursor := crHandPoint; Imagen.Hint := 'anterior'; Imagen.ShowHint := True; end else if PtInRect(Next, Pn) then begin Imagen.Cursor := crHandPoint; Imagen.Hint := 'Siguiente'; Imagen.ShowHint := True; end else begin Imagen.Cursor := crDefault; Imagen.ShowHint := False; end;