Quiero hacer un juego de colocar letras (TImage) dentro de cuadros (TShape) o de otra imagen en forma de cuadro, con objeto de formar palabras. La imagen se desplaza debajo del TShape y queda oculta. Además no consigo crear un algoritmo para discriminar qué letra puede quedarse en el cuadro. En fin, es para una escuela. Tal vez algún programador más diestro que yo me pueda echar una mano. He hecho este juego usando Drag and Drop sin problemas. Me lo he tomado como una forma de hacerlo más realista. Ya que con el Drag/Drop desaparece la imagen de la letra.
He aquí el código que he hecho hasta ahora:
Código Delphi
[-]
unit MoveImage1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
AImage1: TImage;
BImage2: TImage;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Image3: TImage;
procedure AImage1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure AImage1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure AImage1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
Moving: Boolean;
MouseDownSpot: TPoint;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Moving:=False;
end;
procedure TForm1.AImage1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Moving:=True;
MouseDownSpot.X := x;
MouseDownSpot.Y := Y;
end;
procedure TForm1.AImage1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var
Image: TImage;
begin
if Moving then begin TImage(Sender).Left := TImage(Sender).Left - (MouseDownSpot.x - x);
TImage(Sender).Top := TImage(Sender).Top - (MouseDownSpot.y - y);
TImage(Sender).ShowHint := True;
Image := TImage(Sender);
if (Image.Left < 0) then begin
Image.Left := 0;
end;
if (Image.Top < 0) then
begin Image.Top := 0; end;
if ((Image.Left + Image.Width) >= TImage(Sender).Parent.Width) then
begin
Image.Left := (TImage(Sender).Parent.Width - Image.Width)
end;
if ((Image.Top + Image.Height) >= TImage(Sender).Parent.Height) then
begin
Image.Top := (TImage(Sender).Parent.Height - Image.Height)
end;
end;
end;
procedure TForm1.AImage1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
ImgName:String;
begin if Moving then begin ReleaseCapture;
Moving := false;
TImage(Sender).Left := TImage(Sender).Left - (MouseDownSpot.x - x);
TImage(Sender).Top := TImage(Sender).Top - (MouseDownSpot.y - y);
TImage(Sender).Cursor:=crDefault;
end; if (Sender is TImage) then
begin ImgName:= (Sender as TImage).Name;
ImgName:= COPY(ImgName,1,1);
ShowMessage(ImgName+' ' + IntToStr(X) +' ' + IntToStr(Y) );
if ((ImgName ='A' ) AND (( (X>38) and(X<65)) AND ((Y>46) and (y<58)))) then
BEGIN (Sender as TImage).Visible:=False;
END; end; end; end.
Gracias.
Bulc