コントロール移動リサイズコンポーネント
テストプログラム ResizeRect_Event |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro |
ResizeRect プロパティと OnMouseMove イベント |
Ver. 9.02 で追加した ResizeRect プロパティの使用例です.
このプロパティには,移動リサイズに伴って,Target プロパティのコントロールの位置とサイズの値が格納される TRect レコード型の変数です.
Ver. 9.02 では,上下左右の端を越えてのリサイズを可能にしました.例えば,左端からリサイズして右端の X 座標値を超えると左右の座標が反転します.ResizeRect にはこの反転した結果の座標値が格納されます.
この TRect の値を使用して,画像を反転表示するテストです.コンポーネントの OnMouseMove イベント内で画像を再描画します.画像の種類や構造によっては,この反転表示しないことがあります. |
|
図1
設計時画面
- 配置コントロールは以下の通り
TplDragResize
TImage
- 実行時に TImage の Canvas に画像を描画する,
|
|
図2
実行開始画面 |
|
図3
反転表示
|
リスト1
ResizeRect プロパティと OnMouseMove イベント |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, plDragResize, StdCtrls;
type
TForm1 = class(TForm)
plDragResize1: TplDragResize;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure plDragResize1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormDestroy(Sender: TObject);
private
{ Private 宣言 }
ABitmap : TBitmap;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
//=============================================================================
// フォームのCreate処理
// コンポのイベントとResizeRec(TRect)プロパティの使用例
//
// (1) ビットマップを生成
// (2) そこに画像を読み込む
// (3) TplDragResziコンポのTargetプロパティをImage1とする
// (4) そのImage1にビットマップ画像を描画する
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
Caption := 'OnMouseMove と ResizeRect プロパティ';
ABitmap := TBitmap.Create;
ABitmap.LoadFromFile('501.bmp');
plDragResize1.Target := Image1;
Image1.Canvas.StretchDraw(plDragResize1.ResizeRect, ABitmap);
end;
//=============================================================================
// フォームが破棄される時の処理
//=============================================================================
procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(ABitmap) then FreeAndNil(ABitmap);
end;
//=============================================================================
// TplDragResizeコンポのOnMouseMoveイベント処理
//=============================================================================
procedure TForm1.plDragResize1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//リサイズの時のみ,Image1にビットマップを再描画する
if plDragResize1.DragState = dsResize then begin
Image1.Picture.Assign(nil);
Image1.Canvas.StretchDraw(plDragResize1.ResizeRect, ABitmap);
end;
end;
end.
|