実行時に図形を自由にサイズ変更するには?

解決


Kenji  2002-01-28 07:22:06  No: 500  IP: [192.*.*.*]

帳簿作成ソフトみたいなものを作っているのですが、
VC(MFC)のCRectTrackerのような、描画したものを自由にドラッグしたりサイズ変更
できるようなコントロールorクラスはDelphiにはありますか?

↓このようなものです

■  ■  ■

■      ■

■  ■  ■

編集    削除
にしの  2002-01-28 09:27:33  No: 501  IP: [192.*.*.*]

Delphi IDEのリサイズ用の黒い四角みたいなものですよね。
コンポーネントとしてはないです。
僕の場合は、Panelを置いて作りました。
OnMouseDownイベントでマウスをSetCaptureして、OnMouseUpイベントでReleaseCapture、OnMouseMoveイベントで移動、というようにします。
SetCapture, ReleaseCaptureに関しては、Win32APIのヘルプを参照してください。
使い方は簡単です。

編集    削除
Kenji  2002-01-29 08:13:32  No: 502  IP: [192.*.*.*]

にしのさん、始めまして。
色々考えたんですが、やっぱりLineToなどの関数を使って四角を描きたい
です。というのも、単体で使用するのではなくてたくさん(10〜100個ほど)
を同時に使うと思うので、それぞれに四角を8個ずつPanelを作るとリソース
が足りなくなりそうなのです。
VCに付いてきたSPYを使って、他アプリの黒い四角い部分を調査するとどう
やらウインドウではないようです。
TImageを使おうとも思ったのですが、こちらもDCを浪費するような気がしま
す。

クラスがないのなら、仕方ないので作ってみようと思います。
誰か似たようなものを作った方はいませんか〜〜〜!!

編集    削除
にしの  2002-01-29 08:35:47  No: 503  IP: [192.*.*.*]

Delphiでは黒い四角はウィンドウですよ。GrabWindowだったか、GrapPanelだったか。
ほかのソフトでどうかは知りませんが。

100個っていうのは、リサイズ可能な図形の数ですよね。
それらすべてにリサイズ用の黒い四角は必要ないと思います。場合にもよりますが、100個の図形を並べていたときに、800個の黒い四角は邪魔じゃないですか?
それならば、それぞれの図形にフォーカス(のようなもの)が当てられたときにだけ、黒い四角をその位置に表示させれば、8個の■だけですみます。
もちろん、黒い四角以外の図形はLineToやRectangleで描画したものです。
つまり、フォームやメニュー、ボタンなどの基本的なウィンドウを除けば、
Image1: TImage(複数の図形を表示するため)
GrabPanel1〜8: TPanel(リサイズのため)
の、9つのウィンドウが必要になります。

前に作ったんですが、手元にはないです。
そのときは、図形のリサイズではなく、動的に配置したコントロールのリサイズでした。
面倒ですが、GrabPanel1〜8を、
123
4  5
678
として、Tagに値を入れておいて、case ofを2回に分けて、左右移動、上下移動をチェックすれば結構簡単になります。
Tagが、1,2,3だったら上辺が、縦方向に移動可能。6,7,8だったら下辺が縦方向に移動可能。
1,4,6だったら左辺が、横方向に移動可能。3,5,8だったら右辺が、横方向に移動可能。
これならば、1〜8のリサイズ用パネルすべてのイベントを一括に、簡単に実装できます。

編集    削除
Kenji  2002-01-31 07:09:48  No: 504  IP: [192.*.*.*]

>それらすべてにリサイズ用の黒い四角は必要ないと思います。
たしかにそうですね。複数選択時はまとめて一つとすればいいんですね。
色々試してみます。
どうもありがとうございました!

編集    削除