喫茶XRAYトップページ

[スレッド全体
]

[3064] リージョンコンポーネントを使われている方は見えませんか?返信 削除
2010/2/11 (木) 15:48:59 KSCHomePage
リージョンコンポーネントを使われている方は見えませんか?

KSCです。

変わった形のメインフォームを作りたくて、フォームをリージョンするコンポーネントを
探しています。

【今までの経過】
 ・サイトでの検索において、
  http://delphiholic.hopeseeds.com/?day=20070826 にて
  「RgnComp」や「formshape」「formrgn」の紹介
  「RgnComp」を試したかったのですが、ソースが見つからず...。
  「formshape」って、tmssoftwareのやつだと思うけどバルーンにしか化けないような...。
  「formrgn」のソースは、見つけたのでインストールを試みる事にしました。
 ・「formrgn」のインストールについて、
  v.04.05.99 → (1)
   http://www.delphikingdom.com/asp/viewitem.asp?catalogid=83
  v.21.06.99 → (2)
   http://torry.net/pages.php?id=94
 ・(1)をDelphi2007へインストールしようとしたら旧バージョン用だったので、
  「DsgnIntf」で、引っかかりました。
    ↓
   http://support.codegear.com/article/37621 を参考にして、
   ☆宣言文のユニット名「DsgnIntf」 を 「DesignIntf」 と 「DesignEditors」に変更。
   ☆「Requires」に「designide.dcp」を追加。
    ↓
   インストール成功!
 ・(1)より(2)の方が日付が新しかったので、Delphi2007へ再インストール。
  (1を削除後に新たに2用のパッケージを作成)
    ↓
   (1)と同様に修正し、インストールは成功したが、
   そのコンポーネントを使った簡単なアプリをコンパイルしようとすると、
   「[DCC エラー] DesignEditors.pas(610): F1026 ファイル 'Proxies.dcu' が見つかりません」
   とエラー表示されてします。

【質問】
・'Proxies.dcu' が見つかりません と言うエラーを回避する方法を知りませんか?
・皆さんはリージョンコンポーネントを使っていますか?
 使っている場合、どのようなものか教えてくれませんか?

長文で申し訳ありません。


[3065] Re:リージョンコンポーネントを使われている方は見えませんか?返信 削除
2010/2/11 (木) 17:11:14 Mr.XRAY
▼ KSCさん,

添付の図のやつですよね.

> ・'Proxies.dcu' が見つかりません と言うエラーを回避する方法を知りませんか?

これ出ます.
理由は,コンポーネントの提供方法にあるんですが.
ちょっと説明が難しいです.調べてみないと分かりません.

Delphi5だか6からかは忘れましたが.プロパティエディタがある
コンポーネント(オブジェクト・インスペクタでクラス型とかを編集可能
にしたもの)は,コンポーネント本体と登録(プロパティエディタ)を別ユニット
にしなければいけなくなったんです.

拙作コンポの例だと
plPrev.pas    コンポーネント本体
plPrevReg.pas プロパティエディタとコンポ登録用ユニット

DesignIntfとDesignEditorsはその登録(プロパティエディタ)のユニットに
ussesしないと'Proxies.dcu' が見つかりませんのエラーがでます.

http://torry.net/pages.php?id=94
はDelphi4までなので分離してないためですね.

どのファイルをインストールしたのでしょう.
それが分かれば多少は,お役に立つかも知れません.


[3066] Re2:リージョンコンポーネントを使われている方は見えませんか?返信 削除
2010/2/11 (木) 17:15:21 Mr.XRAY
> それが分かれば多少は,お役に立つかも知れません.

むむむ.
これ,dfmファイルがありますね.
これはちょっと面倒な感じがします.
これはフォームファイルで,これをIDEで設計時に表示するので,
この部分もプロパティエディタのユニットにコードを移動させる
必要がありますから.

(^^;

[3067] Re3:リージョンコンポーネントを使われている方は見えませんか?返信 削除
2010/2/11 (木) 17:36:53 KSCHomePage
KSCです。

この短時間に多くの情報を頂き、ありがとうございます。
インストールは、添付の図のようにファイル追加しました。

> これ,dfmファイルがありますね.
> これはちょっと面倒な感じがします.
> これはフォームファイルで,これをIDEで設計時に表示するので,
> この部分もプロパティエディタのユニットにコードを移動させる
> 必要がありますから.


フォームファイルがあると、そんなに厄介なのですか?


[3068] Re4:リージョンコンポーネントを使われている方は見えませんか?返信 削除
2010/2/11 (木) 18:19:55 Mr.XRAY
▼ KSCさん

> フォームファイルがあると、そんなに厄介なのですか?

厄介ですね (^^)

>変わった形のメインフォームを作りたくて、フォームをリージョンするコンポーネントを
>探しています。


簡単のでしたら,自分で作成してしまうのも手かも知れません.

// 逆三角形のフォーム
procedure TForm1.FormCreate(Sender: TObject);
  var
    Rgn1  : HRgn;
    pntXY : array [0..3] of TPoint;
  begin
    { 多角形の作成 }
    pntXY[0].x  :=  0;
    pntXY[0].y  :=  0;
    pntXY[1].x  :=  width div 2;
    pntXY[1].y  :=  height;
    pntXY[2].x  :=  width;
    pntXY[2].y  :=  0;
    pntXY[3].x  :=  0;
    pntXY[3].y  :=  0;
    { リージョンの割り当て }
    Rgn1  :=  CreatePolygonRgn(pntXY, 3, Winding);
    SetWindowRgn(Handle, Rgn1, True);
end;


複雑な形のはパスを使うしかないです.

これは文字の輪郭を切り取っています.
http://mrxray.on.coocan.jp/Halbow/VCL01.html#VChap1-7

ウィンドウを四角以外の形にする
http://www.geocities.jp/asumaroyuumaro/program/tips/setwindowrgn.html

Bitmapから画像の形のリージョンを得る
http://www.geocities.jp/asumaroyuumaro/program/tips/createregionfrombitmap.html


丸いフォームとか...

unit SetWindowRegionU;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
  end;

var
  Form1: TForm1;
  OriginX, OriginY: Integer;    // holds the center coordinates of the window

implementation

uses Math;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  NewShape: HRGN;    // holds the region
begin
  {create a circular region}
  NewShape := CreateEllipticRgn(GetSystemMetrics(SM_CXBORDER)+3,
                                GetSystemMetrics(SM_CYCAPTION)+3,
                                GetSystemMetrics(SM_CXBORDER)+103,
                                GetSystemMetrics(SM_CYCAPTION)+103);

  {determine the center of the circle. this is used when drawing the numbers
   of the clock}
  OriginX := (GetSystemMetrics(SM_CXBORDER)+90) div 2;
  OriginY := ((GetSystemMetrics(SM_CXBORDER)+90) div 2)-3;

  {set the window region to the circular region. this will create
   a round window}
  SetWindowRgn(Handle, NewShape, TRUE);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  iCount: Integer;                      // a general loop control variable
  Hour, Minute, Second, MilSec: Word;   // used to decode the time
begin
  {set the background mode to transparent for drawing text}
  SetBkMode(Canvas.Handle, TRANSPARENT);

  {draw a highlighted bevel}
  Canvas.Pen.Color := clWhite;
  Canvas.Pen.Width := 2;
  Arc(Canvas.Handle, 1, 1, 98, 98, 98, 1, 1, 98);

  {draw a shadowed bevel}
  Canvas.Pen.Color := clBtnShadow;
  Arc(Canvas.Handle, 1, 1, 98, 98, 1, 98, 98, 1);

  {for every hour of the day...}
  for iCount := 1 to 12 do
  begin
    {...draw an hour measurement in a circular form around the window}
    Canvas.TextOut(Trunc(Sin(((360/12)*iCount)*(PI/180))*40)+OriginX,
                   Trunc(-Cos(-((360/12)*iCount)*(PI/180))*40)+OriginY,
                   IntToStr(iCount));
  end;

  {retrieve the current time in a useable format}
  DecodeTime(Now, Hour, Minute, Second, MilSec);

  {translate military hours to civilian hours}
  if Hour>12 then Hour := Hour-12;

  {draw the hour hand}
  Canvas.Pen.Color := clBlack;
  Canvas.MoveTo(50, 50);
  Canvas.LineTo(Trunc(Sin(((360/12)*Hour)*(PI/180))*30)+50,
                Trunc(-Cos(-((360/12)*Hour)*(PI/180))*30)+50);

  {draw the minutes hand}
  Canvas.MoveTo(50, 50);
  Canvas.LineTo(Trunc(Sin(((360/60)*Minute)*(PI/180))*40)+50,
                Trunc(-Cos(-((360/60)*Minute)*(PI/180))*40)+50);

  {draw the seconds hand}
  Canvas.Pen.Color := clRed;
  Canvas.MoveTo(50, 50);
  Canvas.LineTo(Trunc(Sin(((360/60)*Second)*(PI/180))*40)+50,
                Trunc(-Cos(-((360/60)*Second)*(PI/180))*40)+50);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  {repaint the form once per second}
  Repaint;
end;

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  {this allows the user to drag the window by clicking anywhere on the form}
  inherited;
  Msg.Result := HTCAPTION;
end;

end.


[3069] 画像関係といえばJunkiさん返信 削除
2010/2/11 (木) 18:35:49 Mr.XRAY
> 簡単のでしたら,自分で作成してしまうのも手かも知れません.

忘れていました.
画像処理といえばJunkiさんでした.

http://blog.livedoor.jp/junki560/archives/30287059.html
の ・非矩形なフォーム(1)〜(6)と
3分で出来る非矩形フォーム ですね.


[3075] Re:画像関係といえばJunkiさん返信 削除
2010/2/11 (木) 19:37:41 TS
▼KSCさん

いつも面白い情報ありがとうございます。

▼ Mr.XRAYさん

このコンポーネントは既に分離されていますので、
簡単にDelphi2010にインストールされました。

unit FormRgn;

  uses Windows,Messages,SysUtils,Classes,Graphics,
  Controls,Forms,Dialogs,{DsgnIntf,}Menus,
  {RgnEdit,}ExtCtrls,Math;
 
procedure Register;
  begin
    RegisterComponents('My Controls',[TFormRegion,TCaptionRegion,TTextExtRgn,TPictExtRgn,TMenuHotSpot,TSystemButton,TCaptionText,TFRManager]);
    //TS
    //RegisterPropertyEditor(TypeInfo(string),TRegionComp,'Region',TRegionProperty)
  end;

unit RgnEdit;

 procedure Register;
 implementation

 procedure Register;
  begin
   RegisterPropertyEditor(TypeInfo(string),TRegionComp,'Region',TRegionProperty)
  end;

以上です。


[3080] Re2:画像関係といえばJunkiさん返信 削除
2010/2/12 (金) 09:51:45 KSCHomePage
TSさん、お世話になっています。
KSCです。

> いつも面白い情報ありがとうございます。

いつも質問ばかりで大変、恐縮です!!

> このコンポーネントは既に分離されていますので、
> 簡単にDelphi2010にインストールされました。


修正箇所を試しました。
無事にインストールでき、そのコンポを使ったアプリも
「Proxies.dcuが見つかりません」と言うエラーも出ずに実行できました。

テストアプリの実行イメージを添付しておきます。

ですが、「formrgn」のサンプル(私はカエルのサンプルが好きです。)のように
きれいにマスクできないので、もうちょっと調整してみようと思います。
(ブルーカラーがきれいに隠せていない!)

カエルのサンプルは、v.04.05.99のソース内で、v.21.06.99には付いていなかったような...
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=83


[3082] Re3:画像関係といえばJunkiさん返信 削除
2010/2/12 (金) 14:40:55 Mr.XRAY
> いつも質問ばかりで大変、恐縮です!!

私も結構楽しんでいます.(失礼!!)


[3083] Re4:画像関係といえばJunkiさん返信 削除
2010/2/12 (金) 15:59:04 TS
Cartoon のHorAlign,VertAlignのプロパティを
raSourceに変更するといいみたいです。

[3084] Re5:コンポーネントのバージョン返信 削除
2010/2/12 (金) 19:51:36 TS
この記事を見られてコンコンポーネントをインストールしょうと
される方がおられましたら。

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=83

からの物をダウンロードされたら、Units567のフォルダーがあります。
これが一番新しいものです、ご注意下さい。

KSCさんの最初の説明でこれはダウンロードしなかったので
分かりませんでした、こちらは既にDelphi4以降Delphi2007まで
RgnEdit.pasで通常のインストールができると思います。

Delphi2009,Delphi2010では少し修正が必要です。
例のStringをAnsiStringへ、CharをAnsiCharへ
あとエラーが出るところを適宜修正です。


[3085] 持ってけ!! 泥棒!!返信 削除
2010/2/13 (土) 19:49:04 Mr.XRAY
▼ TSさん

> この記事を見られてコンコンポーネントをインストールしょうと
> される方がおられましたら。


いいですねぇ.
参考になりますよね.
尻切れトンボではなく,こうした情報があれば,必ず参考になる方が
いるものです.

「持ってけ!! 泥棒!!」
じゃないけど.情報はどんどん持っていってもらいたいものです.
また,提供もして欲しいですけど...


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