Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2017年09月20日] [更新 2025年04月12日] 画像・図形の移動リサイズ関係サンプル
画像・図形の移動リサイズ関係サンプル
概要
動作確認等 -
R000_ResizeControls.zip [1,3 KB] 2025年04月12日版 (gdiplus.zip 同梱)
他のページのサンプルに必要な描画用クラスのソースコード類







画像・図形の移動リサイズ関係サンプル


画像等を描画して移動リサイズするコントロールと,それらを配置するコンテナとなる TPanel を使用するサンプルプログラム集です.

ネット上で入手可能な,この種のコンポーネントやアプリケーションには,あらかじめいろいろな図形が用意されているものがありますが,そのようなものは提供していません.全て自作することになります.そのための参考コードとなっています.



[備考 1]
この [画像・図形の移動リサイズ関係サンプル] は 2017年09月に大幅に更新しました.
従来は拙作の [[コントロール移動リサイズコンポーネント] を使用する方法でしたが,専用のクラスを作成しました.サンプルも GDI+ を使用するコードに変更しています.
以前提供していたサンプルとの互換性はありません.


[備考 2]
2025年3月に,基本クラス TplBaseDragResize を更新しました.
TplBaseDragResize を継承する描画用クラスを作成しやすくするために,プロパティやメソッドを追加しました.この更新に伴い,一部のサンプルプログラムも変更しています.


[備考 3]
当サイトの記事では,ビットマップ形式 (ラスタ形式) の画像を「画像」,ベクタ形式の画像を「図形」としています.また,ビットマップ画像は,TBitmap で扱う形式のビットマップ形式の画像の意味で使用しています.



この [画像・図形の移動リサイズ関係サンプル ] は,Delphi の TButton, TEdit, TPanel, TShape 等のコントロールを移動リサイズすることはできません.






添付ファイルの構成と利用方法


本ページで提供しているファイルは下図の構成になっています.
[Images] フォルダには各サンプルで使用している画像類があります.[R000_Souce] フォルダに下表のファイルを収めてまいす.筆者はこのフォルダにライブラリのパスを通して,このフォルダに必要なファイルを置いています.これらのファイルがライブラリのパスが通った場所にあれば,このフォルダを使用する必然性はありません.



図1
ダウンロードしたファイルの構成
  • Images はサンプルで使用してい画像類
  • R000_Souce には下表のユニットファイル類
  • これらがライブラリパスが通った場所に必要

ユニット名 説明
plBaseDragResize 描画用の 動動リサイズコントロールの基本クラス
全てのサンプルに必要
plContainerPanel 描画用コントロールを配置して使用するコンテナ用のコントロール.
複数の描画用コントロールを管理するための機能を実装
plGPResizeImage 画像描画用のクラス
描画に GDI+ を使用.拡張描画領域は使用しない
plGPResizeLine 直線描画用のクラス
描画に GDI+ を使用.拡張描画領域を使用
plResizeEllipse 楕円描画用のクラス
描画に VCL を使用.拡張描画領域は使用しない
plResizeEllipseEx 楕円描画用のクラス
描画に VCL を使用.拡張描画領域を使用
plGPResizeEllipse 楕円描画用のクラス
描画に GDI+ を使用.拡張描画領域は使用しない
plGPResizeEllipseEx 楕円描画用のクラス
描画に GDI+ を使用.拡張描画領域を使用




GDI+ ライブラリ ( gdiplus.zip ) が必要


描画用のクラスでは GDI+ を使用しています.GDI+ を使用するには GDI+ の API を使用するためのライブラリが必要です,以下の記事で確認してください.
以下の記事と記事内の参考リンクには,描画の参考記事やサンプルを掲載しています.






画像や図形類の移動リサイズ手法


描画用コントロールの移動リサイズを構成する方法はアプリケーションによって様々です.
この [画像・図形の移動リサイズ関係サンプル] で提供しているサンプルや CAD のようなアプリでは異なる手法となると思われます.

同じような図形を扱うのであれば,プロパティの指定で対応したり,描画の手順を記した内容をコードに書いておくとか,ファイルに保存し,描画の際にその手順にしたがって表示する方法も実際のアプリケーションで使用されています.多くの CAD 関係のデータもそうです.

描画手順の内容は,例えば,MoveTo,LineTo とか,Circle等のメソッド名とか,座標値,色や線の太さ等の情報となるでしょう.例えば Visio の描画データは以下のようになっています.


リスト1
Visio の描画データの例
"UIT-SymbolFile"
"VersionInfo",1.00
"Name",K282
"Layer",-1
"Scaling",1.0000000000
"StartingPoint",0.0000000000,0.0000000000
"Line",1170.0002441406,-386.0598754882,1170.0002441406,0.0000000000,0,0
"Line",397.8804321289,-386.0598754882,397.8804321289,0.0000000000,0,0
"Line",0.0000000000,-386.0598754882,0.0000000000,0.00000000000,0,0
"Arc",1170.0002441406,0.0000000000,386.0599060058,3.1415925025,4.7123889923,0,0
"Arc",397.8804321289,0.0000000000,386.0599060058,4.7123885154,6.2831850058,0,0
"Arc",0.0000000000,0.0000000000,386.0599060058,4.7123885154,6.2831850051,0,0




サンプルプログラムのダウンロード方法とブロックの解除


各ページの上の方,最初の方に,下図のような画像があります.これをクリックしてください.サンプル単位ではなく,そのページのサンプルの一括ダウンロードとなっています.
各サンプルの個別ダウンロードの要望がありましたが,対応の予定はありません.
ダウンロードしたら [ブロックの解除] をしてください.