Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2017年09月20日] [更新 2017年09月20日] 画像・図形の移動リサイズ関係サンプル
画像・図形の移動リサイズ関係サンプル
概要
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro
R000_ResizeControls.zip は全てのサンプルに必要
R000_ResizeControls.zip [1,246 KB] 2017年09月20日版 (gdiplus.zip 同梱)







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


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

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



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


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





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


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



図1
ダウンロードしたファイルの構成
  • Images はサンプルで使用してい画像類
  • R000_Souce には下表のユニットファイル類

ユニット名 説明
plBaseDragResize 描画用の 動動リサイズコントロールの基本クラス
全てのサンプルに必要
このユニット単独でも使用可能
plContainerPanel 描画用コントロールを配置して使用するコンテナ用のコントロール.
複数の描画用コントロールを管理するための機能を実装
使用には plBaseDragResize と plGPResizeLine が必要 
plGPResizeImage 画像描画用のクラスのコントロール
plGPResizeLine 直線描画用クラスのコントロール




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




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


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