¿Alguna forma de asignar rangos de coordenadas?
#1
Escrito 22 octubre 2009 - 06:08
Saludos.
#2
Escrito 22 octubre 2009 - 07:21
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
Escrito 22 octubre 2009 - 07:41
[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
Escrito 22 octubre 2009 - 08:03
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
Escrito 22 octubre 2009 - 08:08
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
Escrito 22 octubre 2009 - 08:09
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
Escrito 22 octubre 2009 - 08:12
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
Escrito 22 octubre 2009 - 08:15
mientras tanto
#9
Escrito 22 octubre 2009 - 08:42
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
Escrito 22 octubre 2009 - 09:04
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
Escrito 22 octubre 2009 - 10:20
Salud OS
#12
Escrito 23 octubre 2009 - 07:59
Saludos.
#13
Escrito 23 octubre 2009 - 08:24
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
Escrito 25 octubre 2009 - 12:31
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
Escrito 25 octubre 2009 - 02:02
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;