16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:図形の移動(続き)"
この発言は #00784 TORA さんの図形の移動 に対するコメントです
この発言に対し以下のコメントが寄せられています
#00795 TORA さん RE^2:図形の移動(続き)
前の発言の続きです。
-------------------------------------------------------------
// 初期設定
procedure TForm1.FormCreate(Sender: TObject);
begin
ShapeList := TList.Create; // 空の図形リストを作成
SentakuZukei := nil;
DragFlag := false;
end;
// オブジェクトの破棄
procedure TForm1.FormDestroy(Sender: TObject);
var
I : integer;
begin
if ShapeList <> nil then // 図形リストの解放
begin
for I := 0 to ShapeList.Count - 1 do
if ShapeList[I] <> nil then
TCyokusen(ShapeList[I]).Free;
ShapeList.Free;
end;
end;
// 直線を定義して描画
procedure TForm1.Button1Click(Sender: TObject);
var
Zu : TCyokusen;
begin
Zu := TCyokusen.Create;
with Zu do
begin
Pen.Color := random($FFFFFF);
Pen.Style := psSolid;
pen.Width := 1;
SX := random(400);
SY := random(400);
EX := random(400);
EY := random(400);
draw(pmCopy ,Canvas);
end;
ShapeList.Add(Zu); // 描画した線を図形リストへ追加
end;
// 長方形を定義して描画
procedure TForm1.Button2Click(Sender: TObject);
Var
Zu : TSikaku;
begin
Zu := TSikaku.Create;
with Zu do
begin
Pen.Color := random($FFFFFF);
Pen.Style := psSolid;
pen.Width := 1;
Brush.Color := random($FFFFFF);
Brush.Style := TBrushStyle(Round(Random));
SX := random(400);
SY := random(400);
EX := random(400);
EY := random(400);
draw(pmCopy ,Canvas);
end;
ShapeList.Add(Zu); // 描画した長方形を図形リストへ追加
end;
// MouseDounイベント
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
I : integer;
begin
DragFlag := false;
SentakuZukei := nil;
// 描画した逆の順序でループ
for I := ShapeList.Count - 1 downto 0 do
begin
if ShapeList[I] <> nil then
begin
// X,Yが図形上か判断
if TToraShape(ShapeList[I]).isOnShape(X ,Y) then
begin
// 図形上のとき
SentakuZukei := ShapeList[I];
prevPoint.x := X;
prevPoint.y := Y;
DragFlag := true;
exit;
end;
end; //if ShapeList
end;//for i
end;
// MouseMoveイベント
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if DragFlag then // ドラグ中だったら仮の図形を移動
begin
Sentakuzukei.move(Canvas ,X - prevPoint.x ,Y - prevPoint.y);
prevPoint.x := X;
prevPoint.y := Y;
end;
end;
// MouseUpイベント
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
I : integer;
begin
DragFlag := false;
// フォームを初期化
invalidate;
application.processmessages;
// 全部の図形を再描画
for I := 0 to ShapeList.Count - 1 do
if ShapeList[I] <> nil then
TToraShape(ShapeList[I]).Draw(pmCopy ,Canvas);
end;
end.
-------------------------------------------------------------
ここまで
99/01/04 (月) 15:00 TORA(HHD00760)
Original document by TORA 氏 ID:(HHD00760)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|