いつもお世話になっています。
お遊びでカードゲームを作っています。
複数のImageコンポーネントを動的に生成し、
カードに見立てます。
ここまでは良いのですが、
これをドラックドロップで自由に移動できるようにしたのです。
しかし、名前を動的に命名している為、
動かすコンポーネントの名前を取得し、
移動させる方法が判りません。
どなたかお知恵を拝借いただけないでしょうか?
以下コードです。
コンポーネント生成
var
Form1: TForm1;
Imagel:TImage;
procedure TForm1.Button2Click(Sender: TObject);
var
i,i1,i2:integer;
s:string;
begin
i := 0;
while 6 > i do begin
Imagel := TImage.Create(self);
with Imagel do begin
i1 := 10; i2 := 10 + i * 80;
parent := ScrollBox1; //親コンポーネントを設定
setBounds(i1,i2,50,70); //位置と大きさを設定
s := listbox3.Items[i];
listbox3.Items.Delete(i);
if s[1] = 'h' then begin
Imagel.Canvas.Brush.Color := clWhite;
Imagel.canvas.Pen.Mode := pmcopy;
Imagel.canvas.Rectangle(0,0,50,70);
Imagel.canvas.Font.Color := clblack;
Imagel.canvas.Font.Size := 14;
Imagel.canvas.TextOut(20,25, s[2]);
end else begin
Imagel.Canvas.Brush.Color := clblack;
Imagel.canvas.Pen.Mode := pmcopy;
Imagel.canvas.Rectangle(0,0,50,70);
Imagel.canvas.Font.Color := clWhite;
Imagel.canvas.Font.Size := 14;
Imagel.canvas.TextOut(20,25, s[2]);
end;
name := 'card' + s;
end;
i := i + 1;
end;
end;
コンポーネントドラックドロップ移動
(方法が判らず、サンプルの状態から全く手をつけていません)
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image1.BeginDrag(False);
end;
procedure TForm1.ScrollBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
P: TPoint;
begin
GetCursorPos(P);
Image1.Left := P.x - left - Image1.Width -5;
Image1.Top := P.y - top - Image1.Height -5;
end;
名前ミスりました;;
Imageの生成時にイベントを設定
Imagel.OnMouseDown := Image1MouseDown;
OnMouseDown の中は
(Sender As TImage).BeginDraw(False);
ScrollBoxのDragOverイベントはドラッグされてるのがImageなら受け入れるように処理
if Source is TImage then
Accept := True;
後は、ScrollBoxのDragDropイベントでドロップ処理をする
(Source as TImage).Left := X;
(Source as TImage).Top := Y;
超手抜きだとこんな感じでドラッグドロップの移動は出来ると思います。
ドラッグ中にイメージを表示するとかは、TDragObjectを継承してなんかしたら出来るんじゃ無いかと思いますが良く知りません。
auさんありがとうございます、
動きました^^!!
それではありがとうございましたm(__)m。
ツイート | ![]() |