Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2012年10月18日] [更新 2012年10月18日] コントロール移動リサイズコンポーネント
コントロール移動リサイズコンポーネント
テストプログラム 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.