16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ImageのDrag&Drop"
この発言に対し以下のコメントが寄せられています
#00091 Athena さん RE:ImageのDrag&Drop
■ImageのDrag&Dropを使う超初心者向けパズルサンプルです(^^;
■準備
Form1 に Panel1 Panel2 Panel3 Panel4をおいて、
Panel1 Panel2 Panel3 にそれぞれImage1 Image2 Image3 を乗せておきます。
Image1〜3にはオブジェクトインスペクタで適当にPictureを読み込んでおいて
下さい。(\Images\Buttonsのbmpで結構です)
FormCreate, Panel1DragOver, Panel1DragDrop,Image1StartDrag
のコードを以下のように書きます。
//ここからがミソ(^^;
オブジェクトインスペクタで Panel2,Panel3,Panel4 の OnDragOver,OnDragDrop
各イベントに Panel1DragOver, Panel1DragDrop を選択します。
同じくImage2 Image3 の OnStartDrag に Image1StartDragを選択します。
ImageをDrag&Dropして元通りに並んだら'CLEAR'です。
■コード
//---------------------------------------------------------
unit Unit1;
interface
{省略 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
Panel:Array [0..3]of TPanel; //Panelを配列に
Image:Array [0..2]of TImage; //Imageを配列に
ImageT:Integer;//選択されたImageのTag
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
Panel[0]:=Panel1; //配列に代入
Panel[1]:=Panel2;
Panel[2]:=Panel3;
Panel[3]:=Panel4;
Image[0]:=Image1;
Image[1]:=Image2;
Image[2]:=Image3;
for i := 0 to 3 do
begin
Panel[i].Tag:=i; //Tagの設定
end;
for i := 0 to 2 do
begin
Image[i].DragMode:=dmAutomatic;//Drag出来るように
Image[i].Align:=alClient;//隙間をなくすため
Image[i].Stretch:=True;//これはしなくても可
Image[i].Tag:=i;
end;
end;
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=True;//受け取り
end;
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
var i : Integer;
begin
Image[ImageT].Parent:=Panel[(Sender as TPanel).Tag];//Imageの移動
for i := 0 to 2 do
begin
if Image[i].Parent <> Panel[i] then //判定
Exit; //元通りじゃないときはExit;
end;
ShowMessage('CLEAR!!');
end;
procedure TForm1.Image1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
ImageT:=(Sender as TImage).Tag;//ImageのTagをImageTに代入
end;
end.
//----ここまで-----------------------------------------------
1つのImageをCopyRectで分割してImage1,Image2・・に入れれば、
もっとらしくなるんですが(^^;
_/_/ Athena ( VYH00522 ) _/_/
Original document by Athena 氏 ID:(VYH00522)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|