Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2017年09月20日] [更新 2025年04月12日] 画像・図形の移動リサイズ関係サンプル
画像・図形の移動リサイズ関係サンプル
概要
動作確認等 -
R000_ResizeControls.zip [1,3 KB] 2025年04月16日版 (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




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


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