喫茶XRAYトップページ

[▲前のスレッド]

[6448] 年賀状返信 削除
2012/10/19 (金) 17:36:50 snail3
年賀状の予約が始まっていますね。
ところでDelphiで作った年賀状の裏面が作成できるソフトってありませんか。

きっと無いですよね。
以前マスターの 「100_コントロールのドラッグ 1 」を見て、
「これを応用すれば作れる」と喜んだのもつかの間、結局挫折しました。


[6449] Re:年賀状返信 削除
2012/10/19 (金) 18:55:45 Sara
▼ snail3さん

こんばんは、Saraです。

> ところでDelphiで作った年賀状の裏面が作成できるソフトってありませんか。
>
> きっと無いですよね。
> 以前マスターの 「100_コントロールのドラッグ 1 」を見て、
> 「これを応用すれば作れる」と喜んだのもつかの間、結局挫折しました。


そのものズバリではありませんが、

Drawing Objects (Angus Johnson氏 作)というコンポーネントが
あります・・・が・・・あれ?

http://www.angusj.com/delphi/

ここにあったはずですが・・・非公開になったのかな?

まぁ、Drawing Objectsで検索するとダウンロードできる場所は
あるようですが・・・

いろいろなことができて面白いですが、最低限の機能ですので、
それ以上は自分で組み込みをしてください的なスタンスです。

私の自作のPGにも組み込んで遊んでいます。

[6450] Re2:年賀状返信 削除
2012/10/19 (金) 20:43:31 Mr.XRAY
> 以前マスターの 「100_コントロールのドラッグ 1 」を見て、
> 「これを応用すれば作れる」と喜んだのもつかの間、結局挫折しました。


ハハハッ.ご利用いただけるのは嬉しいですが,
実際にアプリに組み込んで,というのは結構面倒ですね.
市販の,いまでもあるのかな,筆なんとかを使うとか.

> Drawing Objects (Angus Johnson氏 作)というコンポーネントが
> あります・・・が・・・あれ?


確かにないですね.
昔ダウンロードしていじったことがありますが.もうないだろうな.
感想ですが,あれだけの機能を実現するのは,結構大変ですね.
これも,実際にアプリで組み込んで,というは,結構面倒かも.

そうか,う〜ん,
移動リサイズのコンポをアップしたついでに,
ちょっと応用的なサンプルでも作ってみようかな.


[6452] Re3:年賀状返信 削除
2012/10/19 (金) 22:54:14 snail3
Saraさんありがとうございます。

>Drawing Objects (Angus Johnson氏 作)というコンポーネントが
>あります・・・が・・・あれ?


http://www.torry.net/quicksearchd.php?String=Draw+Objects&Title=Yes

から落とせるみたいです。ちょっとみてみます。


▼ Mr.XRAYさん

> 実際にアプリに組み込んで,というのは結構面倒ですね.

です。COBOL屋の私にはデータの持ち方を考えるだけで頭が痛い。

でもマスターなら、頭の体操にちょうど良いのではないでしょうか。

>市販の,いまでもあるのかな,筆なんとかを使うとか.

筆自慢は販売元のメッツが手を引きました。
筆まめは年賀状だけ作るなら便利なんですが、裏面に相手の名前を
入れたりできないんで困っています。

> そうか,う〜ん,
> 移動リサイズのコンポをアップしたついでに,
> ちょっと応用的なサンプルでも作ってみようかな.


そのお言葉お待ちしていました。



[6458] 移動リサイズコントロール返信 削除
2012/10/21 (日) 01:08:37 Mr.XRAY
▼ snail3さん

ちょっと作り始めたのですが,少し挫折です.
少し前に,某掲示板で,領域内の実際の画像部分以外では掴めない
ような仕様の話がありました.
これを実現するとなると,結構面倒です.

TGraphicControlから派生すると,このTGraphicControlのCanvasというのは
親コントロールのCanavasに描画するので,
コントロールが重なって表示されている時,各々を区別する直接の手段が
ありません.

やっぱり,無駄でも,TImageからの派生かな?
大量に扱うのでなければ OK のような気がします.


[6462] Re:移動リサイズコントロール返信 削除
2012/10/21 (日) 14:56:50 snail3
▼ Mr.XRAYさん

> やっぱり,無駄でも,TImageからの派生かな?
> 大量に扱うのでなければ OK のような気がします.


難しくて何とも返答できませんが、年賀状程度のものであれば
どんなに凝って作成しても3桁はいきませんね。

オブジェクトの個数より、取り込むイメージが大きいと大変ですね。




[6464] Re2:移動リサイズコントロール返信 削除
2012/10/21 (日) 17:16:42 Sara
▼ snail3さん
 ▼ Mr.XRAYさん
 
> > やっぱり,無駄でも,TImageからの派生かな?
> > 大量に扱うのでなければ OK のような気がします.
>
> 難しくて何とも返答できませんが、年賀状程度のものであれば
> どんなに凝って作成しても3桁はいきませんね。
>
> オブジェクトの個数より、取り込むイメージが大きいと大変ですね。
>


Drawing Objects は、その辺もちゃんと実装されていますね・・・
回転をすると、選択範囲も画像の回転に合わせて回転されます。

って あれ? 改めてDownloadしたDrawing Objectsのサンプルでは
できませんね・・・(^^;

いろいろ いじりましたが、その部分はいじっていないと思うんですが・・・
あとで、調べてみます・・・

[6465] Re3:移動リサイズコントロール返信 削除
2012/10/21 (日) 18:49:02 Mr.XRAY
▼ Saraさん

> って あれ? 改めてDownloadしたDrawing Objectsのサンプルでは
> できませんね・・・(^^;


で,Drawing Objects でググッてダウンロードしてみました.
http://www.torry.net/authorsmore.php?id=822

例のところにあったのは,
Torry's Delphi PagesにあるDrawing Objects v.3.1.1
と同じだと思うのですが.
回転できますね.
ルートフォルダ直下のサンプルにはないようですが,
[Demo]フォルダのが,回転できました.
下の図が[Demo]フォルダ内のデモです.

添付されている EXE を Windows 7 U64(SP1)で実行してみた結果です.


[6466] Re4:移動リサイズコントロール返信 削除
2012/10/21 (日) 18:52:34 Mr.XRAY
失礼しました.

> http://www.torry.net/authorsmore.php?id=822

すでに snail3 さんがリンク貼っていましたね.


[6467] Re4:移動リサイズコントロール返信 削除
2012/10/21 (日) 19:08:33 Mr.XRAY
> 回転できますね.

うん ?! 回転の意味がちょっと違うか ?


[6468] Re5:移動リサイズコントロール返信 削除
2012/10/21 (日) 22:55:48 Sara
▼ Mr.XRAYさん

> > 回転できますね.
>
> うん ?! 回転の意味がちょっと違うか ?


そうですね・・・(^^;

私のところで動作しているのは、こんな感じです。

画像も当然回転しますが、選択範囲も画像に沿って回転しています。

[6469] Re6:移動リサイズコントロール返信 削除
2012/10/21 (日) 23:10:00 Sara
▼ Mr.XRAYさん
▼ snail3さん

> > > 回転できますね.
> >
> > うん ?! 回転の意味がちょっと違うか ?
>
> そうですね・・・(^^;
>
> 私のところで動作しているのは、こんな感じです。
>
> 画像も当然回転しますが、選択範囲も画像に沿って回転しています。


> http://www.torry.net/authorsmore.php?id=822
上記LINKにある

GR32_Lines GR32_Text and GR32_Objects v.3.9

こっちですね。この中のGR32ObjectsSample.zipデモがあります。

GR32と連携して高速に動作するようになったバージョンですね。

おっと、本家にもありました・・・
http://www.angusj.com/delphi/gr32_lines.php
内の
Previous version (compiles with Graphics32 ver 1.91): GR32_Lines Version 3.92
の中にありますね。でもGR32_Lines Ver4の中には含まれていません。
スクリーンショットもなくなったところを見ると、非公開になるんでしょうか・・・
もしくは、新バージョン公開目前とか?



[6470] Re7:移動リサイズコントロール返信 削除
2012/10/22 (月) 00:00:27 Mr.XRAY
> こっちですね。この中のGR32ObjectsSample.zipデモがあります。

あっ,ありました.
で,早速やってみました.

まっ,拙作の移動リサイズコンポは,今のコードでは回転は無理です.
ラバーバンドに TShapeを使っていますので.
直線で逐次描画するコードにしないと,つまり,角度をつけての直線が
必要ですから.
四角なラバーバンド内で,回転した画像を表示するなら OK ですが(笑)

ところで,デモの画面の左上に,虫(バグ)が動き回っていますね.
あちらの方は,こういう,ジョークのようなのが好きなようですね.(^^;


[6471] Re8:移動リサイズコントロール返信 削除
2012/10/22 (月) 00:11:18 Sara
▼ Mr.XRAYさん

> ところで,デモの画面の左上に,虫(バグ)が動き回っていますね.
> あちらの方は,こういう,ジョークのようなのが好きなようですね.(^^;


そうですね。(^^)

でも、個人的には・・・
虫よりもリサイズ用のつまみを四隅に付けてほしかった・・・(爆)

いろいろ いじったけど、実現できなかった・・・orz

どなたか、挑戦してみませんか?(主にマスターとか、マスターとか、マスターとか)


[6472] Re9:移動リサイズコントロール返信 削除
2012/10/22 (月) 00:28:53 Mr.XRAY
> どなたか、挑戦してみませんか?(主にマスターとか、マスターとか、マスターとか)

グラブハンドルの実装は結構面倒な気がします.
そういう話と,家族,職場のこと等,個人情報的な話にはのらないことにして
います.
何と言っても,ミスター X (エックス)という,未知数の X が付く名前
ですから.ハハハッ.


[6473] 移動リサイズコンポーネント返信 削除
2012/10/23 (火) 10:52:10 Mr.XRAY
> 移動リサイズのコンポをアップしたついでに,
> ちょっと応用的なサンプルでも作ってみようかな.


こんな動作をするのを作ってみました.
目的の用途に使えるかどうかは別として,反応があれば,
サンプルプログラム集か,移動リサイズコンポの方に記事を掲載する予定です.
まだ整備できていないので,EXE だけUPします.

http://mrxray.on.coocan.jp/Delphi/zipothers/DragResizeDemos.zip

コンセプトがDrawing Objectsとは違いますので,

(1) TplDragResizeコンポのTargetプロパティに相当する図形等のコードは
    利用者が用意する
    つまり,クラス(コンポーネント)を作成する
(2) 回転などの機能はない
(3) 保存,読み出しのコードは利用者が考える
(4) 移動対象のコントロールは,全て実行時に自動生成する
(5) 複数のコントロールを選択するには,[Ctrl]キーを押したまま選択
(6) 矢印キーで1ドットづつ移動.[Shift]キーを押しておくとリサイズ
(7) 親のパネルを左クリックすると,選択を全て解除

といったところでしょうか.


[6475] Re:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 19:22:31 snail3
▼ Mr.XRAYさん

> こんな動作をするのを作ってみました.
> 目的の用途に使えるかどうかは別として,反応があれば,


今触ってみました。いい感じですね。
1つ不具合。私な環境では「文字列」の列の右側が欠けてしまいます。

> コンセプトがDrawing Objectsとは違いますので,
>
> (1) TplDragResizeコンポのTargetプロパティに相当する図形等のコードは
>     利用者が用意する
>     つまり,クラス(コンポーネント)を作成する


意味がよく理解できないのですが、規則にそったコンポーネントを
作成すれば、線や○を追加できるということでしょうか。
よくつかいそうな図形は誰かがアップすれば、みんなが利用可能?

> (2) 回転などの機能はない
回転は欲しいです

以下の内容はなんとかなりそう、
でもわからないときはきっと親切な人が助言してくれる気がします。
そして、頭が悪い質問者に変わってコードがアップされる予感。

> (3) 保存,読み出しのコードは利用者が考える
> (4) 移動対象のコントロールは,全て実行時に自動生成する
> (5) 複数のコントロールを選択するには,[Ctrl]キーを押したまま選択
> (6) 矢印キーで1ドットづつ移動.[Shift]キーを押しておくとリサイズ
> (7) 親のパネルを左クリックすると,選択を全て解除



[6476] Re2:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 19:25:01 snail3
図形がアップされなかったのでもう一度

[6477] Re3:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 20:30:25 Mr.XRAY
確かに「列」の左が少し欠けていますね.
これ,多分フォントの問題のようですね.

http://mrxray.on.coocan.jp/Delphi/plSamples/172_MetaFile_BasicTest.htm#fig3

当方も Windows XP(SP3) ですが発生していなようですので,
Windows のアップデートの内容によるのかも知れません.

>> (2) 回転などの機能はない
>回転は欲しいです


これは,移動リサイズコンポとは別に作成しなければならないので
パスですね (^^; スんません.

>意味がよく理解できないのですが、規則にそったコンポーネントを
>作成すれば、線や○を追加できるということでしょうか。


です.例えば角が丸い四角形は以下のようになっています.
変数類の説明は省略します.
DrawRoutine というメソッドをオーバーライドした描画コードを作成する
ことになります.

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  plDragResize, Menus, Math;

type
  TplResizeRoundRect = class(TplResizeBaseControl)
  private
    FRoundSize : Integer;
  public
    constructor Create(AOwner: TComponent); override;
    procedure DrawRoutine(ACanvas: TCanvas; OffSetX: Integer=0;
      OffSetY: Integer=0); override;
  published
    property RoundSize : Integer read FRoundSize write FRoundSize;
  end;

{ TplResizeRoundRect }

//-----------------------------------------------------------------------------
//  Create処理
//  角の丸部分のサイズの初期値を設定
//-----------------------------------------------------------------------------
constructor TplResizeRoundRect.Create(AOwner: TComponent);
begin
  inherited;
  FRoundSize := 35;
end;

//-----------------------------------------------------------------------------
//  実際の描画処理を実行するDrawRoutineメソッド
//  Signの使用には,usesにMathが必要
//-----------------------------------------------------------------------------
procedure TplResizeRoundRect.DrawRoutine(ACanvas: TCanvas; OffSetX: Integer=0;
  OffSetY: Integer=0);
var
  ARect   : TRect;
  ALeft   : Integer;
  ATop    : Integer;
  AWidth  : Integer;
  AHeight : Integer;
begin
  inherited;

  OffSetX := Sign(Width)  * OffSetX;
  OffSetY := Sign(Height) * OffSetY;

  ARect := ClientRect;
  OffsetRect(ARect, OffSetX, OffSetY);

  ACanvas.Pen   := Pen;
  ACanvas.Brush := Brush;

  ALeft   := Pen.Width div 2 + OffSetX;
  ATop    := Pen.Width div 2 + OffSetY;
  AWidth  := Width  - Pen.Width + 1;
  AHeight := Height - Pen.Width + 1;
  if Pen.Width = 0 then begin
    Dec(AWidth);
    Dec(AHeight);
  end;
  ACanvas.RoundRect(ALeft, ATop, ALeft + AWidth, ATop + AHeight,
                    FRoundSize, FRoundSize);
end;

end.




[6478] Re4:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 21:03:22 snail3
▼ Mr.XRAYさん

>確かに「列」の左が少し欠けていますね.
>これ,多分フォントの問題のようですね.


よくわかっていませんが幅の計算が違うように思います。


> >> (2) 回転などの機能はない
> >回転は欲しいです
>
> これは,移動リサイズコンポとは別に作成しなければならないので
> パスですね (^^; スんません.


アップしてあるGDI+サンプルの矢印は回転できますが、
同じようにはできないということですか。




[6479] Re5:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 21:16:20 Mr.XRAY
▼ snail3さん

> よくわかっていませんが幅の計算が違うように思います。

そうなんです.これは直せます.

> アップしてあるGDI+サンプルの矢印は回転できますが、
> 同じようにはできないということですか。


矢印は回転ではなく,ある点からある点までの描画なので
文字の場合は,よくある回転の描画をすることになるんですが.
ラバーバンドとグラブハンドルも制御しないとダメなんですよねー.

機能的には実装したいですが,コンポを作り直す気力ないてす.
キッパリ(笑)


[6481] 文字列の回転返信 削除
2012/10/23 (火) 21:27:11 Mr.XRAY
参考までに,

[フォントの横倍と方向]
http://mrxray.on.coocan.jp/Halbow/Notes/N003.html

[Delphi] GDI+ Text Rotation (1)]
http://blog.livedoor.jp/junki560/archives/24342422.html


[6482] Re6:移動リサイズコンポーネント返信 削除
2012/10/24 (水) 00:39:18 snail3
▼ Mr.XRAYさん
>
> 機能的には実装したいですが,コンポを作り直す気力ないてす.


私には知力がありません。(T_T)



[6485] Re7:移動リサイズコンポーネント返信 削除
2012/10/24 (水) 10:48:20 Mr.XRAY
▼ snail3さん

> 私には知力がありません。(T_T)

私にも「知力」はないのですが,「痴力」はあるかも?

またちょっと作り直おそうと思っています.
Delphi 2009 以降専用のコードになっていたので...
でも,もう Delphi 2009 より古いバージョン使っている人いなかも
知れないからいいかも... (^^)


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82